Name: series-workflowsbzhz Phase: Failed StartedAt: 2026-07-29 07:29:34 +0000 UTC FinishedAt: 2026-07-29 07:57:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsbzhz[0] Phase: Succeeded StartedAt: 2026-07-29 07:29:34 +0000 UTC FinishedAt: 2026-07-29 07:57:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsbzhz[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 07:29:34 +0000 UTC FinishedAt: 2026-07-29 07:57:39 +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+CgkJCTx0ZD4yMDI2LzA3LzI5IDA3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIHN1cHBvcnQgdG8gdGhlIE5YUCBORVRDIHN3aXRjaCBkcml2ZXIgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWdnZXIuIFRoZSBORVRDIHN3aXRjaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGRldmljZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gU2luY2UgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIHJlcXVpcmVkIHRvIHByb2JlIHRoZSBkcml2ZXIgYW5kIGluc3RhbnRpYXRlIHRoZSBEU0Egc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbiBib3RoIHRoZSBkcml2ZXIgYW5kIHRoZSB0YWdnZXIgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZDkzMjNmNjM4NjYwYjkyMjRkOTdkMmY5MDNhMTQzNGJjMmRkN2FjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDc6NTU6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWdcbmluZGV4IDc5M2Y3NjkxYTI0ZjMuLjU1YjFmMTMzOGE4NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnXG5AQCAtNCw2ICYjNDM7NCw3IEBAIGNvbmZpZyBORVRfRFNBX05FVENfU1dJVENIXG4gXHRkZXBlbmRzIG9uIEFSTTY0IHx8IENPTVBJTEVfVEVTVFxuIFx0ZGVwZW5kcyBvbiBORVRfRFNBIFx1MDAyNlx1MDAyNiBQQ0lcbiBcdGRlcGVuZHMgb24gTkVUX1ZFTkRPUl9GUkVFU0NBTEVcbiYjNDM7XHRkZXBlbmRzIG9uIFBUUF9ORVRDX1Y0X1RJTUVSIHx8IFBUUF9ORVRDX1Y0X1RJTUVSPW5cbiBcdHNlbGVjdCBORVRfRFNBX1RBR19ORVRDXG4gXHRzZWxlY3QgRlNMX0VORVRDX01ESU9cbiBcdHNlbGVjdCBOWFBfTlRNUFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvTWFrZWZpbGVcbmluZGV4IGY0MGIxM2M3MDJlMDcuLjU3MmI4MzNhZDgwZmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL25ldGMvTWFrZWZpbGVcbkBAIC0xLDMgJiM0MzsxLDQgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiBvYmotJChDT05GSUdfTkVUX0RTQV9ORVRDX1NXSVRDSCkgJiM0Mzs9IG54cC1uZXRjLXN3aXRjaC5vXG4tbnhwLW5ldGMtc3dpdGNoLW9ianMgOj0gbmV0Y19tYWluLm8gbmV0Y19wbGF0Zm9ybS5vIG5ldGNfZXRodG9vbC5vXG4mIzQzO254cC1uZXRjLXN3aXRjaC1vYmpzIDo9IG5ldGNfbWFpbi5vIG5ldGNfcGxhdGZvcm0ubyBuZXRjX2V0aHRvb2wubyBcXFxuJiM0MztcdFx0XHRuZXRjX3B0cC5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uY1xuaW5kZXggNzcwNzczNTJjMWE1Ny4uOTg1NWUwMmI0NzI2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uY1xuQEAgLTY1LDYgJiM0Mzs2NSwyMSBAQCBuZXRjX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdHJldHVybiBEU0FfVEFHX1BST1RPX05FVEM7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG5ldGNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuJiM0MztcdFx0XHRcdCAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEgKnRhZ2dlcl9kYXRhO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvdG8gIT0gRFNBX1RBR19QUk9UT19ORVRDKVxuJiM0MztcdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4mIzQzO1xuJiM0MztcdHRhZ2dlcl9kYXRhID0gZHMtXHUwMDNldGFnZ2VyX2RhdGE7XG4mIzQzO1x0dGFnZ2VyX2RhdGEtXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIgPSBuZXRjX29uZXN0ZXBfc3luY19oYW5kbGVyO1xuJiM0MztcdHRhZ2dlcl9kYXRhLVx1MDAzZXR3b3N0ZXBfdHN0YW1wX2hhbmRsZXIgPSBuZXRjX3R3b3N0ZXBfdHN0YW1wX2hhbmRsZXI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9ybXcoc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsXG4gXHRcdFx0ICB1MzIgbWFzaywgdTMyIHZhbClcbiB7XG5AQCAtODAsNyAmIzQzOzk1LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3JtdyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIHJlZyxcbiBcdG5ldGNfcG9ydF93cihucCwgcmVnLCBuZXcpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZXRjX21hY19wb3J0X3dyKHN0cnVjdCBuZXRjX3BvcnQgKm5wLCB1MzIgcmVnLCB1MzIgdmFsKVxuJiM0Mzt2b2lkIG5ldGNfbWFjX3BvcnRfd3Ioc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsIHUzMiB2YWwpXG4ge1xuIFx0aWYgKGlzX25ldGNfcHNldWRvX3BvcnQobnApKVxuIFx0XHRyZXR1cm47XG5AQCAtMjM4LDYgJiM0MzsyNTMsMTUgQEAgc3RhdGljIHZvaWQgbmV0Y19nZXRfc3dpdGNoX2NhcGFiaWxpdGllcyhzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpXG4gXHRwcml2LVx1MDAzZW51bV9icCA9IEZJRUxEX0dFVChCUENBUFJfTlVNX0JQLCB2YWwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbmV0Y19wb3J0X2luaXRfcHRwX2lwZnRfZWlkKHN0cnVjdCBuZXRjX3BvcnQgKm5wKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIEluaXRpYWxpemUgdG8gaW52YWxpZCBlbnRyeSBJRHMgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBORVRDX1BUUF9NQVg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bnAtXHUwMDNlcHRwX2lwZnRfZWlkW2ldID0gTlRNUF9OVUxMX0VOVFJZX0lEO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbmV0Y19pbml0X2FsbF9wb3J0cyhzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gcHJpdi1cdTAwM2VkZXY7XG5AQCAtMjg2LDYgJiM0MzszMTAsMTcgQEAgc3RhdGljIGludCBuZXRjX2luaXRfYWxsX3BvcnRzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbiBcdFx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gY3JlYXRlIE1ESU8gYnVzXFxuXCYjMzQ7KTtcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0LyogVGhlIGlwZnRfaGZfZWlkIGlzIGluaXRpYWxpemVkIHRvIGFuIGludmFsaWQgZW50cnlcbiYjNDM7XHRcdFx0ICogSUQgYmVjYXVzZSB0aGUgaG9zdCBmbG9vZCBydWxlIChJUEZUIGVudHJ5KSBoYXMgbm90XG4mIzQzO1x0XHRcdCAqIGJlZW4gY3JlYXRlZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG5wLVx1MDAzZWlwZnRfaGZfZWlkID0gTlRNUF9OVUxMX0VOVFJZX0lEO1xuJiM0MztcdFx0XHRuZXRjX3BvcnRfaW5pdF9wdHBfaXBmdF9laWQobnApO1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4mIzQzO1x0XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZucC1cdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUpO1xuJiM0MztcdFx0XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bnAtXHUwMDNlc2tiX29uZXN0ZXBfcXVldWUpO1xuJiM0MztcdFx0XHRJTklUX1dPUksoXHUwMDI2bnAtXHUwMDNlb25lc3RlcF93b3JrLCBuZXRjX3BvcnRfb25lc3RlcF93b3JrKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTU0OSw2ICYjNDM7NTg0LDEyIEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9maXhlZF9jb25maWcoc3RydWN0IG5ldGNfcG9ydCAqbnApXG4gXHRuZXRjX3BvcnRfcm13KG5wLCBORVRDX1BDUiwgUENSX0wyRE9TRSB8IFBDUl9MM0RPU0UsXG4gXHRcdCAgICAgIFBDUl9MMkRPU0UgfCBQQ1JfTDNET1NFKTtcbiBcbiYjNDM7XHQvKiBFbmFibGUgaW5ncmVzcyBwb3J0IGZpbHRlciB0YWJsZSBsb29rdXAsIGlmIG5vIG1hdGNoIGlzIGZvdW5kLFxuJiM0MztcdCAqIHRoZSBmcmFtZSBpcyBhbGxvd2VkIGFuZCBwYXNzZWQgdG8gdGhlIG5leHQgZnJhbWUgcHJvY2Vzc2luZ1xuJiM0MztcdCAqIGZ1bmN0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIFBJUEZDUl9FTik7XG4mIzQzO1xuIFx0LyogU2V0IHRoZSBxdWFudGEgdmFsdWUgb2YgVFggUEFVU0UgZnJhbWUgKi9cbiBcdG5ldGNfbWFjX3BvcnRfd3IobnAsIE5FVENfUE1fUEFVU0VfUVVBTlRBKDApLCBORVRDX1BBVVNFX1FVQU5UQSk7XG4gXG5AQCAtODY5LDYgJiM0Mzs5MTAsMTUgQEAgc3RhdGljIGludCBuZXRjX3N3aXRjaF9icHRfZGVmYXVsdF9jb25maWcoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kZXYgKm5ldGNfZ2V0X3B0cF90aW1lcihzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VwZGV2LVx1MDAzZWJ1cztcbiYjNDM7XHR1MzIgZGV2Zm4gPSBwcml2LVx1MDAzZWluZm8tXHUwMDNldG1yX2RldmZuO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGNpX2dldF9kb21haW5fYnVzX2FuZF9zbG90KHBjaV9kb21haW5fbnIoYnVzKSxcbiYjNDM7XHRcdFx0XHRcdCAgIGJ1cy1cdTAwM2VudW1iZXIsIGRldmZuKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG5ldGNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG5AQCAtODg5LDYgJiM0Mzs5MzksMTYgQEAgc3RhdGljIGludCBuZXRjX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0LyogVGhlIFBUUCB0aW1lciBzaXRzIG9uIHRoZSBzYW1lIFBDSSBidXMgYXMgdGhlIHN3aXRjaC4gUENJIGNyZWF0ZXNcbiYjNDM7XHQgKiBldmVyeSBmdW5jdGlvbiYjMzk7cyBwY2lfZGV2IGR1cmluZyBidXMgZW51bWVyYXRpb24sIGJlZm9yZSBhbnkgZHJpdmVyXG4mIzQzO1x0ICogcHJvYmVzLCBzbyB3ZSBjYW4gZ3JhYiB0aGUgdGltZXImIzM5O3MgcGNpX2RldiBoZXJlIGV2ZW4gaWYgdGhlIHRpbWVyXG4mIzQzO1x0ICogZHJpdmVyIGhhcyBub3QgcHJvYmVkIHlldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwcml2LVx1MDAzZXRtcl9kZXYgPSBuZXRjX2dldF9wdHBfdGltZXIocHJpdik7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZXRtcl9kZXYpXG4mIzQzO1x0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0IFwmIzM0O1BUUCB0aW1lciBQQ0kgZGV2aWNlIG5vdCBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1xuIFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNnByaXYtXHUwMDNlZmRiX2xpc3QpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWZkYnRfbG9jayk7XG4gXHRwcml2LVx1MDAzZWZkYnRfYWdlaW5nX2RlbGF5ID0gTkVUQ19GREJUX0FHRUlOR19ERUxBWTtcbkBAIC05MjUsNiAmIzQzOzk4NSw3IEBAIHN0YXRpYyBpbnQgbmV0Y19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHQgKi9cbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2VmZGJ0X2xvY2spO1xuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZXZmdF9sb2NrKTtcbiYjNDM7XHRwY2lfZGV2X3B1dChwcml2LVx1MDAzZXRtcl9kZXYpO1xuIFx0bmV0Y19mcmVlX250bXBfdXNlcihwcml2KTtcbiBcbiBcdHJldHVybiBlcnI7XG5AQCAtOTM4LDIwICYjNDM7OTk5LDIzIEBAIHN0YXRpYyB2b2lkIG5ldGNfZGVzdHJveV9hbGxfbGlzdHMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZXZmdF9sb2NrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbmV0Y19mcmVlX2hvc3RfZmxvb2RfcnVsZXMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxuJiM0MztzdGF0aWMgdm9pZCBuZXRjX2ZyZWVfcG9ydHNfcmVzb3VyY2VzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuIFxuLVx0ZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIHByaXYtXHUwMDNlZHMpIHtcbiYjNDM7XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2F2YWlsYWJsZV9wb3J0KGRwLCBwcml2LVx1MDAzZWRzKSB7XG4gXHRcdHN0cnVjdCBuZXRjX3BvcnQgKm5wID0gcHJpdi1cdTAwM2Vwb3J0c1tkcC1cdTAwM2VpbmRleF07XG4gXG4tXHRcdC8qIE5vIG5lZWQgdG8gY2xlYXIgdGhlIGhhcmR3YXJlIElQRlQgZW50cnkuIEJlY2F1c2UgUENJZVxuLVx0XHQgKiBGTFIgd2lsbCBiZSBwZXJmb3JtZWQgd2hlbiB0aGUgc3dpdGNoIGlzIHJlLXJlZ2lzdGVyZWQsXG4tXHRcdCAqIGl0IHdpbGwgcmVzZXQgaGFyZHdhcmUgc3RhdGUuIFNvIG9ubHkgbmVlZCB0byBmcmVlIHRoZVxuLVx0XHQgKiBtZW1vcnkgdG8gYXZvaWQgbWVtb3J5IGxlYWsuXG4mIzQzO1x0XHRpZiAoIWRzYV9wb3J0X2lzX3VzZXIoZHApKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBObyBuZXcgU0tCcyBjYW4gYmUgZW5xdWV1ZWQgZHVyaW5nIHRlYXJkb3duLiBQdXJnZSB3aXRob3V0XG4mIzQzO1x0XHQgKiB0aGUgc3BpbmxvY2sgdG8gYXZvaWQgY2FsbGluZyBrZnJlZV9za2IoKSB3aXRoIGEgZGVzdHJ1Y3RvclxuJiM0MztcdFx0ICogKHNvY2tfZWZyZWUpIHdoaWxlIGhvbGRpbmcgYSBzcGlubG9jay5cbiBcdFx0ICovXG4tXHRcdGtmcmVlKG5wLVx1MDAzZWhvc3RfZmxvb2QpO1xuLVx0XHRucC1cdTAwM2Vob3N0X2Zsb29kID0gTlVMTDtcbiYjNDM7XHRcdF9fc2tiX3F1ZXVlX3B1cmdlKFx1MDAyNm5wLVx1MDAzZXNrYl90eHRzdGFtcF9xdWV1ZSk7XG4mIzQzO1x0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5wLVx1MDAzZW9uZXN0ZXBfd29yayk7XG4mIzQzO1x0XHRfX3NrYl9xdWV1ZV9wdXJnZShcdTAwMjZucC1cdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSk7XG4gXHR9XG4gfVxuIFxuQEAgLTk2MSw4ICYjNDM7MTAyNSw5IEBAIHN0YXRpYyB2b2lkIG5ldGNfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFxuIFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZWZkYnRfYWdlaW5nX3dvcmspO1xuIFx0bmV0Y19kZXN0cm95X2FsbF9saXN0cyhwcml2KTtcbi1cdG5ldGNfZnJlZV9ob3N0X2Zsb29kX3J1bGVzKHByaXYpO1xuJiM0MztcdHBjaV9kZXZfcHV0KHByaXYtXHUwMDNldG1yX2Rldik7XG4gXHRuZXRjX2ZyZWVfbnRtcF91c2VyKHByaXYpO1xuJiM0MztcdG5ldGNfZnJlZV9wb3J0c19yZXNvdXJjZXMocHJpdik7XG4gfVxuIFxuIHN0YXRpYyBib29sIG5ldGNfcG9ydF9pc19lbWRpb19jb25zdW1lcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG5AQCAtMTcyMCw4ICYjNDM7MTc4NSw2IEBAIHN0YXRpYyBpbnQgbmV0Y19wb3J0X2FkZF9ob3N0X2Zsb29kX3J1bGUoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCF1YyBcdTAwMjZcdTAwMjYgIW1jKSB7XG4tXHRcdC8qIERpc2FibGUgaW5ncmVzcyBwb3J0IGZpbHRlciB0YWJsZSBsb29rdXAgKi9cbi1cdFx0bmV0Y19wb3J0X3dyKG5wLCBORVRDX1BJUEZDUiwgMCk7XG4gXHRcdG5wLVx1MDAzZXVjID0gZmFsc2U7XG4gXHRcdG5wLVx1MDAzZW1jID0gZmFsc2U7XG4gXG5AQCAtMTc1OSw0MCAmIzQzOzE4MjIsMzYgQEAgc3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2hvc3RfZmxvb2RfcnVsZShzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcbiBcdGNmZ2UtXHUwMDNlY2ZnID0gY3B1X3RvX2xlMzIoY2ZnKTtcbiBcbiBcdGVyciA9IG50bXBfaXBmdF9hZGRfZW50cnkoXHUwMDI2cHJpdi1cdTAwM2VudG1wLCBob3N0X2Zsb29kKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0a2ZyZWUoaG9zdF9mbG9vZCk7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZnJlZV9ob3N0X2Zsb29kO1xuIFxuIFx0bnAtXHUwMDNldWMgPSB1YztcbiBcdG5wLVx1MDAzZW1jID0gbWM7XG4tXHRucC1cdTAwM2Vob3N0X2Zsb29kID0gaG9zdF9mbG9vZDtcbi1cdC8qIEVuYWJsZSBpbmdyZXNzIHBvcnQgZmlsdGVyIHRhYmxlIGxvb2t1cCAqL1xuLVx0bmV0Y19wb3J0X3dyKG5wLCBORVRDX1BJUEZDUiwgUElQRkNSX0VOKTtcbiYjNDM7XHRucC1cdTAwM2VpcGZ0X2hmX2VpZCA9IGhvc3RfZmxvb2QtXHUwMDNlZW50cnlfaWQ7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7ZnJlZV9ob3N0X2Zsb29kOlxuJiM0MztcdGtmcmVlKGhvc3RfZmxvb2QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2Qoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4tXHRcdFx0XHRcdHN0cnVjdCBpcGZ0X2VudHJ5X2RhdGEgKmhvc3RfZmxvb2QpXG4mIzQzO3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIGVudHJ5X2lkKVxuIHtcbiBcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IG5wLVx1MDAzZXN3aXRjaF9wcml2O1xuIFx0Ym9vbCBkaXNhYmxlX2hvc3RfZmxvb2QgPSBmYWxzZTtcbiBcbi1cdGlmICghaG9zdF9mbG9vZClcbiYjNDM7XHRpZiAoZW50cnlfaWQgPT0gTlRNUF9OVUxMX0VOVFJZX0lEKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAobnAtXHUwMDNlaG9zdF9mbG9vZCA9PSBob3N0X2Zsb29kKVxuJiM0MztcdGlmIChucC1cdTAwM2VpcGZ0X2hmX2VpZCA9PSBlbnRyeV9pZClcbiBcdFx0ZGlzYWJsZV9ob3N0X2Zsb29kID0gdHJ1ZTtcbiBcbi1cdG50bXBfaXBmdF9kZWxldGVfZW50cnkoXHUwMDI2cHJpdi1cdTAwM2VudG1wLCBob3N0X2Zsb29kLVx1MDAzZWVudHJ5X2lkKTtcbi1cdGtmcmVlKGhvc3RfZmxvb2QpO1xuJiM0MztcdG50bXBfaXBmdF9kZWxldGVfZW50cnkoXHUwMDI2cHJpdi1cdTAwM2VudG1wLCBlbnRyeV9pZCk7XG4gXG4gXHRpZiAoZGlzYWJsZV9ob3N0X2Zsb29kKSB7XG4tXHRcdG5wLVx1MDAzZWhvc3RfZmxvb2QgPSBOVUxMO1xuJiM0MztcdFx0bnAtXHUwMDNlaXBmdF9oZl9laWQgPSBOVE1QX05VTExfRU5UUllfSUQ7XG4gXHRcdG5wLVx1MDAzZXVjID0gZmFsc2U7XG4gXHRcdG5wLVx1MDAzZW1jID0gZmFsc2U7XG4tXHRcdG5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIDApO1xuIFx0fVxuIH1cbiBcbkBAIC0xODAwLDcgJiM0MzsxODU5LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3NldF9ob3N0X2Zsb29kKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0XHQgICAgIGJvb2wgdWMsIGJvb2wgbWMpXG4ge1xuIFx0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBORVRDX1BPUlQoZHMsIHBvcnQpO1xuLVx0c3RydWN0IGlwZnRfZW50cnlfZGF0YSAqb2xkX2hvc3RfZmxvb2Q7XG4mIzQzO1x0dTMyIG9sZF9lbnRyeV9pZDtcbiBcbiBcdC8qIERvIG5vdCBhZGQgaG9zdCBmbG9vZCBydWxlIHRvIGluZ3Jlc3MgcG9ydCBmaWx0ZXIgdGFibGUgd2hlblxuIFx0ICogdGhlIHBvcnQgaGFzIGpvaW5lZCBhIGJyaWRnZS4gT3RoZXJ3aXNlLCB0aGUgaW5ncmVzcyBmcmFtZXNcbkBAIC0xODA4LDcgJiM0MzsxODY3LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3NldF9ob3N0X2Zsb29kKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHQgKiB3aWxsIGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHkgdG8gdGhlIENQVSBwb3J0LlxuIFx0ICovXG4gXHRpZiAoZHNhX3BvcnRfYnJpZGdlX2Rldl9nZXQobnAtXHUwMDNlZHApKSB7XG4tXHRcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgbnAtXHUwMDNlaG9zdF9mbG9vZCk7XG4mIzQzO1x0XHRuZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2QobnAsIG5wLVx1MDAzZWlwZnRfaGZfZWlkKTtcbiBcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTE4MTgsMjAgJiM0MzsxODc3LDE4IEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9zZXRfaG9zdF9mbG9vZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFxuIFx0LyogSVBGVCBkb2VzIG5vdCBzdXBwb3J0IGluLXBsYWNlIHVwZGF0ZXMgdG8gdGhlIEtFWUUgZWxlbWVudCxcbiBcdCAqIHdlIG5lZWQgdG8gYWRkIGEgbmV3IGVudHJ5IGFuZCB0aGVuIGRlbGV0ZSB0aGUgb2xkIG9uZS4gU29cbi1cdCAqIHNhdmUgdGhlIG9sZCBlbnRyeSBmaXJzdC5cbiYjNDM7XHQgKiBzYXZlIHRoZSBvbGQgZW50cnkgSUQgZmlyc3QuXG4gXHQgKi9cbi1cdG9sZF9ob3N0X2Zsb29kID0gbnAtXHUwMDNlaG9zdF9mbG9vZDtcbi1cdG5wLVx1MDAzZWhvc3RfZmxvb2QgPSBOVUxMO1xuJiM0MztcdG9sZF9lbnRyeV9pZCA9IG5wLVx1MDAzZWlwZnRfaGZfZWlkO1xuIFxuIFx0aWYgKG5ldGNfcG9ydF9hZGRfaG9zdF9mbG9vZF9ydWxlKG5wLCB1YywgbWMpKSB7XG4tXHRcdG5wLVx1MDAzZWhvc3RfZmxvb2QgPSBvbGRfaG9zdF9mbG9vZDtcbiBcdFx0ZGV2X2Vycihkcy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBhZGQgaG9zdCBmbG9vZCBydWxlIG9uIHBvcnQgJWRcXG5cJiMzNDssXG4gXHRcdFx0cG9ydCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdC8qIFJlbW92ZSB0aGUgb2xkIGhvc3QgZmxvb2QgZW50cnkgKi9cbi1cdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgb2xkX2hvc3RfZmxvb2QpO1xuJiM0MztcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgb2xkX2VudHJ5X2lkKTtcbiB9XG4gXG4gc3RhdGljIGludCBuZXRjX3NpbmdsZV92bGFuX2F3YXJlX2JyaWRnZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5AQCAtMjAyMCw3ICYjNDM7MjA3Nyw3IEBAIHN0YXRpYyBpbnQgbmV0Y19wb3J0X2JyaWRnZV9qb2luKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRuZXRjX3BvcnRfc2V0X3B2aWQobnAsIHZsYW5fdW5hd2FyZV9wdmlkKTtcbiBcbiBvdXQ6XG4tXHRuZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2QobnAsIG5wLVx1MDAzZWhvc3RfZmxvb2QpO1xuJiM0MztcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgbnAtXHUwMDNlaXBmdF9oZl9laWQpO1xuIFxuIFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNnByaXYtXHUwMDNlYnJfY250KSA9PSAxKVxuIFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cHJpdi1cdTAwM2VmZGJ0X2FnZWluZ193b3JrLFxuQEAgLTI0MDIsNiAmIzQzOzI0NTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBuZXRjX3BoeWxpbmtfbWFjX29wcyA9IHtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG5ldGNfc3dpdGNoX29wcyA9IHtcbiBcdC5nZXRfdGFnX3Byb3RvY29sXHRcdD0gbmV0Y19nZXRfdGFnX3Byb3RvY29sLFxuJiM0MztcdC5jb25uZWN0X3RhZ19wcm90b2NvbFx0XHQ9IG5ldGNfY29ubmVjdF90YWdfcHJvdG9jb2wsXG4gXHQuc2V0dXBcdFx0XHRcdD0gbmV0Y19zZXR1cCxcbiBcdC50ZWFyZG93blx0XHRcdD0gbmV0Y190ZWFyZG93bixcbiBcdC5waHlsaW5rX2dldF9jYXBzXHRcdD0gbmV0Y19waHlsaW5rX2dldF9jYXBzLFxuQEAgLTI0MzAsNiAmIzQzOzI0ODgsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBuZXRjX3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3NzZXRfY291bnRcdFx0XHQ9IG5ldGNfcG9ydF9nZXRfc3NldF9jb3VudCxcbiBcdC5nZXRfc3RyaW5nc1x0XHRcdD0gbmV0Y19wb3J0X2dldF9zdHJpbmdzLFxuIFx0LmdldF9ldGh0b29sX3N0YXRzXHRcdD0gbmV0Y19wb3J0X2dldF9ldGh0b29sX3N0YXRzLFxuJiM0MztcdC5nZXRfdHNfaW5mb1x0XHRcdD0gbmV0Y19nZXRfdHNfaW5mbyxcbiYjNDM7XHQucG9ydF9od3RzdGFtcF9zZXRcdFx0PSBuZXRjX3BvcnRfaHd0c3RhbXBfc2V0LFxuJiM0MztcdC5wb3J0X2h3dHN0YW1wX2dldFx0XHQ9IG5ldGNfcG9ydF9od3RzdGFtcF9nZXQsXG4mIzQzO1x0LnBvcnRfcnh0c3RhbXBcdFx0XHQ9IG5ldGNfcG9ydF9yeHRzdGFtcCxcbiYjNDM7XHQucG9ydF90eHRzdGFtcFx0XHRcdD0gbmV0Y19wb3J0X3R4dHN0YW1wLFxuIH07XG4gXG4gc3RhdGljIGludCBuZXRjX3N3aXRjaF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3BsYXRmb3JtLmMgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3BsYXRmb3JtLmNcbmluZGV4IDM0YWViNmZjZWIzY2IuLjRmZDBjZTY3NzBjMzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3BsYXRmb3JtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcGxhdGZvcm0uY1xuQEAgLTUwLDYgJiM0Mzs1MCw3IEBAIHN0YXRpYyB2b2lkIGlteDk0X3N3aXRjaF9waHlsaW5rX2dldF9jYXBzKGludCBwb3J0LFxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0Y19zd2l0Y2hfaW5mbyBpbXg5NF9pbmZvID0ge1xuIFx0Lm51bV9wb3J0cyA9IDQsXG4mIzQzO1x0LnRtcl9kZXZmbiA9IFBDSV9ERVZGTigwLCAxKSxcbiBcdC5waHlsaW5rX2dldF9jYXBzID0gaW14OTRfc3dpdGNoX3BoeWxpbmtfZ2V0X2NhcHMsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3B0cC5jIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wdHAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZmN2Q4ZTVlNjhkMjNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcHRwLmNcbkBAIC0wLDAgJiM0MzsxLDY2MyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAmIzQzOyBPUiBCU0QtMy1DbGF1c2UpXG4mIzQzOy8qXG4mIzQzOyAqIE5YUCBORVRDIHN3aXRjaCBkcml2ZXJcbiYjNDM7ICogQ29weXJpZ2h0IDIwMjUtMjAyNiBOWFBcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xhc3NpZnkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O25ldGNfc3dpdGNoLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTkVUQ19UU19SRVFfSURfTlVNXHRcdChORVRDX1RBR19UU19SRVFfSUQgJiM0MzsgMSlcbiYjNDM7I2RlZmluZSBORVRDX1BUUF9UWF9UU1RBTVBfVElNRU9VVFx0KDUgKiBIWilcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmV0Y19nZXRfcGhjX2luZGV4KHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2V0bXJfZGV2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwdHBfY2xvY2tfaW5kZXhfYnlfZGV2KFx1MDAyNnByaXYtXHUwMDNldG1yX2Rldi1cdTAwM2VkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbmV0Y19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0ICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nID0gU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSB8XG4mIzQzO1x0XHRcdFx0U09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSB8XG4mIzQzO1x0XHRcdFx0U09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRTtcbiYjNDM7XG4mIzQzO1x0aW5mby1cdTAwM2VwaGNfaW5kZXggPSBuZXRjX2dldF9waGNfaW5kZXgocHJpdik7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcGhjX2luZGV4IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxuJiM0MztcdFx0XHRcdCBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFIHxcbiYjNDM7XHRcdFx0XHQgU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkU7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNldHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT0ZGKSB8IEJJVChIV1RTVEFNUF9UWF9PTikgfFxuJiM0MztcdFx0XHQgQklUKEhXVFNUQU1QX1RYX09ORVNURVBfU1lOQyk7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNlcnhfZmlsdGVycyA9IEJJVChIV1RTVEFNUF9GSUxURVJfTk9ORSkgfFxuJiM0MztcdFx0XHQgICBCSVQoSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVCkgfFxuJiM0MztcdFx0XHQgICBCSVQoSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVCkgfFxuJiM0MztcdFx0XHQgICBCSVQoSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBucC1cdTAwM2Vzd2l0Y2hfcHJpdjtcbiYjNDM7XHR1MzIgZW50cnlfaWQ7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5FVENfUFRQX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVudHJ5X2lkID0gbnAtXHUwMDNlcHRwX2lwZnRfZWlkW2ldO1xuJiM0MztcdFx0aWYgKGVudHJ5X2lkICE9IE5UTVBfTlVMTF9FTlRSWV9JRCkge1xuJiM0MztcdFx0XHRudG1wX2lwZnRfZGVsZXRlX2VudHJ5KFx1MDAyNnByaXYtXHUwMDNlbnRtcCwgZW50cnlfaWQpO1xuJiM0MztcdFx0XHRucC1cdTAwM2VwdHBfaXBmdF9laWRbaV0gPSBOVE1QX05VTExfRU5UUllfSUQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5ldGNfYnVpbGRfcHRwX2lwZnRfa2V5ZShzdHJ1Y3QgaXBmdF9rZXllX2RhdGEgKmtleWUsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICBlbnVtIG5ldGNfcHRwX3R5cGUgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHUxNiBzcmNfcG9ydCwgZnJtX2F0dHJfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGtleWUtXHUwMDNlcHJlY2VkZW5jZSA9IGNwdV90b19sZTE2KDB4ZjAwMCk7XG4mIzQzO1x0c3JjX3BvcnQgPSBGSUVMRF9QUkVQKElQRlRfU1JDX1BPUlQsIHBvcnQpO1xuJiM0MztcdHNyY19wb3J0IHw9IElQRlRfU1JDX1BPUlRfTUFTSztcbiYjNDM7XHRrZXllLVx1MDAzZXNyY19wb3J0ID0gY3B1X3RvX2xlMTYoc3JjX3BvcnQpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIE5FVENfUFRQX0wyOlxuJiM0MztcdFx0a2V5ZS1cdTAwM2VldGhlcnR5cGUgPSBodG9ucyhFVEhfUF8xNTg4KTtcbiYjNDM7XHRcdGtleWUtXHUwMDNlZXRoZXJ0eXBlX21hc2sgPSBodG9ucygweGZmZmYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORVRDX1BUUF9MNF9JUFY0X0VWRU5UOlxuJiM0MztcdGNhc2UgTkVUQ19QVFBfTDRfSVBWNF9HRU5FUkFMOlxuJiM0MztcdGNhc2UgTkVUQ19QVFBfTDRfSVBWNl9FVkVOVDpcbiYjNDM7XHRjYXNlIE5FVENfUFRQX0w0X0lQVjZfR0VORVJBTDpcbiYjNDM7XHRcdGZybV9hdHRyX2ZsYWdzID0gSVBGVF9GQUZfSVBfSERSIHwgRklFTERfUFJFUChJUEZUX0ZBRl9MNF9DT0RFLFxuJiM0MztcdFx0XHRcdCBJUEZUX0ZBRl9VRFBfSERSKTtcbiYjNDM7XHRcdGlmICh0eXBlID09IE5FVENfUFRQX0w0X0lQVjZfRVZFTlQgfHxcbiYjNDM7XHRcdCAgICB0eXBlID09IE5FVENfUFRQX0w0X0lQVjZfR0VORVJBTClcbiYjNDM7XHRcdFx0ZnJtX2F0dHJfZmxhZ3MgfD0gSVBGVF9GQUZfSVBfVkVSNjtcbiYjNDM7XG4mIzQzO1x0XHRrZXllLVx1MDAzZWZybV9hdHRyX2ZsYWdzID0gY3B1X3RvX2xlMTYoZnJtX2F0dHJfZmxhZ3MpO1xuJiM0MztcdFx0a2V5ZS1cdTAwM2Vmcm1fYXR0cl9mbGFnc19tYXNrID0ga2V5ZS1cdTAwM2Vmcm1fYXR0cl9mbGFncztcbiYjNDM7XHRcdGtleWUtXHUwMDNlaXBfcHJvdG9jb2wgPSBJUFBST1RPX1VEUDtcbiYjNDM7XHRcdGtleWUtXHUwMDNlaXBfcHJvdG9jb2xfbWFzayA9IDB4ZmY7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHR5cGUgPT0gTkVUQ19QVFBfTDRfSVBWNF9FVkVOVCB8fFxuJiM0MztcdFx0ICAgIHR5cGUgPT0gTkVUQ19QVFBfTDRfSVBWNl9FVkVOVClcbiYjNDM7XHRcdFx0a2V5ZS1cdTAwM2VsNF9kc3RfcG9ydCA9IGh0b25zKFBUUF9FVl9QT1JUKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0a2V5ZS1cdTAwM2VsNF9kc3RfcG9ydCA9IGh0b25zKFBUUF9HRU5fUE9SVCk7XG4mIzQzO1xuJiM0MztcdFx0a2V5ZS1cdTAwM2VsNF9kc3RfcG9ydF9tYXNrID0gaHRvbnMoMHhmZmZmKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4mIzQzO1x0XHRcdFx0XHRlbnVtIG5ldGNfcHRwX3R5cGUgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IG5wLVx1MDAzZXN3aXRjaF9wcml2O1xuJiM0MztcdHN0cnVjdCBpcGZ0X2VudHJ5X2RhdGEgKmVudHJ5O1xuJiM0MztcdHN0cnVjdCBpcGZ0X2tleWVfZGF0YSAqa2V5ZTtcbiYjNDM7XHR1MzIgY2ZnO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVudHJ5ID0ga3phbGxvY19vYmooKmVudHJ5KTtcbiYjNDM7XHRpZiAoIWVudHJ5KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGtleWUgPSBcdTAwMjZlbnRyeS1cdTAwM2VrZXllO1xuJiM0MztcdGVyciA9IG5ldGNfYnVpbGRfcHRwX2lwZnRfa2V5ZShrZXllLCBucC1cdTAwM2VkcC1cdTAwM2VpbmRleCwgdHlwZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZnJlZV9lbnRyeTtcbiYjNDM7XG4mIzQzO1x0Y2ZnID0gRklFTERfUFJFUChJUEZUX0ZMVEZBLCBJUEZUX0ZMVEZBX1JFRElSRUNUKTtcbiYjNDM7XHRjZmcgfD0gRklFTERfUFJFUChJUEZUX0hSLCBORVRDX0hSX1BUUF9UUkFQKTtcbiYjNDM7XHRjZmcgfD0gSVBGVF9USU1FQ0FQRSB8IElQRlRfUlJUO1xuJiM0MztcdGVudHJ5LVx1MDAzZWNmZ2UuY2ZnID0gY3B1X3RvX2xlMzIoY2ZnKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbnRtcF9pcGZ0X2FkZF9lbnRyeShcdTAwMjZwcml2LVx1MDAzZW50bXAsIGVudHJ5KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBmcmVlX2VudHJ5O1xuJiM0MztcbiYjNDM7XHRucC1cdTAwM2VwdHBfaXBmdF9laWRbdHlwZV0gPSBlbnRyeS1cdTAwM2VlbnRyeV9pZDtcbiYjNDM7XG4mIzQzO2ZyZWVfZW50cnk6XG4mIzQzO1x0a2ZyZWUoZW50cnkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfbDJfcHRwX2ZpbHRlcihzdHJ1Y3QgbmV0Y19wb3J0ICpucClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBuZXRjX3BvcnRfYWRkX2lwZnRfcHRwX2VudHJ5KG5wLCBORVRDX1BUUF9MMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmV0Y19wb3J0X2FkZF9sNF9wdHBfZmlsdGVyKHN0cnVjdCBuZXRjX3BvcnQgKm5wKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbmV0Y19wb3J0X2FkZF9pcGZ0X3B0cF9lbnRyeShucCwgTkVUQ19QVFBfTDRfSVBWNF9FVkVOVCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjRfR0VORVJBTCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZGVsX3B0cF9maWx0ZXI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjZfRVZFTlQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGRlbF9wdHBfZmlsdGVyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBuZXRjX3BvcnRfYWRkX2lwZnRfcHRwX2VudHJ5KG5wLCBORVRDX1BUUF9MNF9JUFY2X0dFTkVSQUwpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGRlbF9wdHBfZmlsdGVyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2RlbF9wdHBfZmlsdGVyOlxuJiM0MztcdG5ldGNfcG9ydF9kZWxfcHRwX2ZpbHRlcihucCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmV0Y19wb3J0X2FkZF9sMl9sNF9wdHBfZmlsdGVyKHN0cnVjdCBuZXRjX3BvcnQgKm5wKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbmV0Y19wb3J0X2FkZF9sMl9wdHBfZmlsdGVyKG5wKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbmV0Y19wb3J0X2FkZF9sNF9wdHBfZmlsdGVyKG5wKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBkZWxfcHRwX2ZpbHRlcjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztkZWxfcHRwX2ZpbHRlcjpcbiYjNDM7XHRuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIobnApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5ldGNfcG9ydF9zZXRfcHRwX2ZpbHRlcihzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgaW50IHJ4X2ZpbHRlcilcbiYjNDM7e1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAobnAtXHUwMDNlcHRwX3J4X2ZpbHRlciA9PSByeF9maWx0ZXIpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG5wLVx1MDAzZXB0cF9yeF9maWx0ZXIgIT0gSFdUU1RBTVBfRklMVEVSX05PTkUgfHxcbiYjNDM7XHQgICAgcnhfZmlsdGVyID09IEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB7XG4mIzQzO1x0XHRuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIobnApO1xuJiM0MztcdFx0bnAtXHUwMDNlcHRwX3J4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9OT05FO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChyeF9maWx0ZXIpIHtcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9OT05FOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UOlxuJiM0MztcdFx0ZXJyID0gbmV0Y19wb3J0X2FkZF9sMl9wdHBfZmlsdGVyKG5wKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDpcbiYjNDM7XHRcdGVyciA9IG5ldGNfcG9ydF9hZGRfbDRfcHRwX2ZpbHRlcihucCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6XG4mIzQzO1x0XHRlcnIgPSBuZXRjX3BvcnRfYWRkX2wyX2w0X3B0cF9maWx0ZXIobnApO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGVyciA9IC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0bnAtXHUwMDNlcHRwX3J4X2ZpbHRlciA9IHJ4X2ZpbHRlcjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBuZXRjX3BvcnRfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRjX3BvcnQgKm5wID0gTkVUQ19QT1JUKGRzLCBwb3J0KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByeF9maWx0ZXIsIGVycjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjb25maWctXHUwMDNldHhfdHlwZSkge1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfVFhfT046XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XG4mIzQzO1x0XHRucC1cdTAwM2VwdHBfdHhfdHlwZSA9IGNvbmZpZy1cdTAwM2V0eF90eXBlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9UWF9PTkVTVEVQX1NZTkM6XG4mIzQzO1x0XHRpZiAoIXByaXYtXHUwMDNldG1yX2RldilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1xuJiM0MztcdFx0bnAtXHUwMDNlcHRwX3R4X3R5cGUgPSBjb25maWctXHUwMDNldHhfdHlwZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoY29uZmlnLVx1MDAzZXJ4X2ZpbHRlcikge1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6XG4mIzQzO1x0XHRyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfTk9ORTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfU1lOQzpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVROlxuJiM0MztcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfU1lOQzpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfREVMQVlfUkVROlxuJiM0MztcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfU1lOQzpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVROlxuJiM0MztcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IG5ldGNfcG9ydF9zZXRfcHRwX2ZpbHRlcihucCwgcnhfZmlsdGVyKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gc2V0IFBUUCBmaWx0ZXJcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VyeF9maWx0ZXIgPSByeF9maWx0ZXI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbmV0Y19wb3J0X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHQgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBORVRDX1BPUlQoZHMsIHBvcnQpO1xuJiM0MztcbiYjNDM7XHRjb25maWctXHUwMDNldHhfdHlwZSA9IG5wLVx1MDAzZXB0cF90eF90eXBlO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VyeF9maWx0ZXIgPSBucC1cdTAwM2VwdHBfcnhfZmlsdGVyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBuZXRjX3BvcnRfdHh0c3RhbXBfdHdvc3RlcChzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmUpXG4mIzQzO3tcbiYjNDM7XHRERUNMQVJFX0JJVE1BUCh0c19yZXFfaWRfYml0bWFwLCBORVRDX1RTX1JFUV9JRF9OVU0pO1xuJiM0MztcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IG5wLVx1MDAzZXN3aXRjaF9wcml2O1xuJiM0MztcdHN0cnVjdCBza19idWZmX2hlYWQgZnJlZV9saXN0O1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IsICpza2JfdG1wO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdHNfcmVxX2lkO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRiaXRtYXBfemVybyh0c19yZXFfaWRfYml0bWFwLCBORVRDX1RTX1JFUV9JRF9OVU0pO1xuJiM0MztcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmVlX2xpc3QpO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4mIzQzO1xuJiM0MztcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXHUwMDI2bnAtXHUwMDNlc2tiX3R4dHN0YW1wX3F1ZXVlLCBza2IsIHNrYl90bXApIHtcbiYjNDM7XHRcdGlmICh0aW1lX2JlZm9yZShORVRDX1NLQl9DQihza2IpLVx1MDAzZXB0cF90eF90aW1lICYjNDM7XG4mIzQzO1x0XHRcdFx0TkVUQ19QVFBfVFhfVFNUQU1QX1RJTUVPVVQsIGppZmZpZXMpKSB7XG4mIzQzO1x0XHRcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgXCYjMzQ7UG9ydCAlZCB0c19yZXFfaWQgJXUgd2hpY2ggc2VlbXMgbG9zdFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICBucC1cdTAwM2VkcC1cdTAwM2VpbmRleCwgTkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2V0c19yZXFfaWQpO1xuJiM0MztcbiYjNDM7XHRcdFx0X19za2JfdW5saW5rKHNrYiwgXHUwMDI2bnAtXHUwMDNlc2tiX3R4dHN0YW1wX3F1ZXVlKTtcbiYjNDM7XHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZmcmVlX2xpc3QsIHNrYik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRfX3NldF9iaXQoTkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2V0c19yZXFfaWQsIHRzX3JlcV9pZF9iaXRtYXApO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHNfcmVxX2lkID0gZmluZF9maXJzdF96ZXJvX2JpdCh0c19yZXFfaWRfYml0bWFwLCBORVRDX1RTX1JFUV9JRF9OVU0pO1xuJiM0MztcdGlmICh0c19yZXFfaWQgPT0gTkVUQ19UU19SRVFfSURfTlVNKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUJVU1k7XG4mIzQzO1x0XHRnb3RvIHVubG9ja19wdHA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRORVRDX1NLQl9DQihjbG9uZSktXHUwMDNldHNfcmVxX2lkID0gdHNfcmVxX2lkO1xuJiM0MztcdE5FVENfU0tCX0NCKGNsb25lKS1cdTAwM2VwdHBfdHhfdGltZSA9IGppZmZpZXM7XG4mIzQzO1x0c2tiX3NoaW5mbyhjbG9uZSktXHUwMDNldHhfZmxhZ3MgfD0gU0tCVFhfSU5fUFJPR1JFU1M7XG4mIzQzO1x0X19za2JfcXVldWVfdGFpbChcdTAwMjZucC1cdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUsIGNsb25lKTtcbiYjNDM7XG4mIzQzO3VubG9ja19wdHA6XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBGcmVlIHRpbWVkLW91dCBTS0JzIG91dHNpZGUgdGhlIHNwaW5sb2NrIHRvIGF2b2lkIGNhbGxpbmdcbiYjNDM7XHQgKiBrZnJlZV9za2IoKSB3aXRoIGEgZGVzdHJ1Y3RvciAoc29ja19lZnJlZSkgdW5kZXIgYSBzcGlubG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRfX3NrYl9xdWV1ZV9wdXJnZShcdTAwMjZmcmVlX2xpc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG5ldGNfdHdvc3RlcF90c3RhbXBfaGFuZGxlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCB1OCB0c19yZXFfaWQsIHU2NCB0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IsICpza2JfdG1wLCAqc2tiX21hdGNoID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XG4mIzQzO1x0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIGh3dHN0YW1wcztcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuJiM0MztcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXHUwMDI2bnAtXHUwMDNlc2tiX3R4dHN0YW1wX3F1ZXVlLCBza2IsIHNrYl90bXApIHtcbiYjNDM7XHRcdGlmIChORVRDX1NLQl9DQihza2IpLVx1MDAzZXRzX3JlcV9pZCAhPSB0c19yZXFfaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdF9fc2tiX3VubGluayhza2IsIFx1MDAyNm5wLVx1MDAzZXNrYl90eHRzdGFtcF9xdWV1ZSk7XG4mIzQzO1x0XHRza2JfbWF0Y2ggPSBza2I7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoIXNrYl9tYXRjaCkge1xuJiM0MztcdFx0ZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7UG9ydCAlZCByZWNlaXZlZCBhbiBleHBpcmVkIFR4IHRpbWVzdGFtcCByZXNwb25zZSAodHNfcmVxX2lkICV1KVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgcG9ydCwgdHNfcmVxX2lkKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGh3dHN0YW1wcy5od3RzdGFtcCA9IG5zX3RvX2t0aW1lKHRzKTtcbiYjNDM7XHRza2JfY29tcGxldGVfdHhfdGltZXN0YW1wKHNrYl9tYXRjaCwgXHUwMDI2aHd0c3RhbXBzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBuZXRjX3BvcnRfcnh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHN0YW1wcyA9IHNrYl9od3RzdGFtcHMoc2tiKTtcbiYjNDM7XHR1NjQgdHMgPSBORVRDX1NLQl9DQihza2IpLVx1MDAzZXRzdGFtcDtcbiYjNDM7XG4mIzQzO1x0aHd0c3RhbXBzLVx1MDAzZWh3dHN0YW1wID0gbnNfdG9fa3RpbWUodHMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9wcmVwYXJlX29uZXN0ZXBfc3luYyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHQgICB1MzIgcHRwX2NsYXNzLCBib29sICp0d29zdGVwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtXHUwMDNlc3dpdGNoX3ByaXY7XG4mIzQzO1x0dTE2IGNvcnJlY3Rpb25fb2Zmc2V0LCB0aW1lc3RhbXBfb2Zmc2V0O1xuJiM0MztcdHN0cnVjdCBwdHBfaGVhZGVyICpwdHBfaGRyO1xuJiM0MztcdHU4IG1zZ190eXBlLCB0d29zdGVwX2ZsYWc7XG4mIzQzO1x0Ym9vbCBpc191ZHAgPSBmYWxzZTtcbiYjNDM7XHR1MzIgcGt0X3R5cGU7XG4mIzQzO1x0dTggKnBrdF9oZHI7XG4mIzQzO1xuJiM0MztcdHB0cF9oZHIgPSBwdHBfcGFyc2VfaGVhZGVyKHNrYiwgcHRwX2NsYXNzKTtcbiYjNDM7XHRpZiAoIXB0cF9oZHIpIHtcbiYjNDM7XHRcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O1BvcnQgJWQgZmFpbGVkIHRvIHBhcnNlIFN5bmMgaGVhZGVyXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBucC1cdTAwM2VkcC1cdTAwM2VpbmRleCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwa3RfaGRyID0gc2tiX21hY19oZWFkZXIoc2tiKTtcbiYjNDM7XHRjb3JyZWN0aW9uX29mZnNldCA9ICh1OCAqKVx1MDAyNnB0cF9oZHItXHUwMDNlY29ycmVjdGlvbiAtIHBrdF9oZHI7XG4mIzQzO1x0dGltZXN0YW1wX29mZnNldCA9ICh1OCAqKXB0cF9oZHIgJiM0Mzsgc2l6ZW9mKCpwdHBfaGRyKSAtIHBrdF9oZHI7XG4mIzQzO1xuJiM0MztcdC8qIEVuc3VyZSB0aGF0IHRoZSBlbnRpcmUgb3JpZ2luVGltZXN0YW1wIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlXG4mIzQzO1x0ICogbGluZWFyIGJ1ZmZlciBvZiB0aGUgc2tiLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwa3RfaGRyICYjNDM7IHRpbWVzdGFtcF9vZmZzZXQgJiM0MzsgMTAgXHUwMDNlIHNrYi1cdTAwM2VkYXRhICYjNDM7IHNrYl9oZWFkbGVuKHNrYikpIHtcbiYjNDM7XHRcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O1BvcnQgJWQgU3luYyBoZWFkZXIgbm90IGluIGxpbmVhciBhcmVhXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBucC1cdTAwM2VkcC1cdTAwM2VpbmRleCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtc2dfdHlwZSA9IHB0cF9nZXRfbXNndHlwZShwdHBfaGRyLCBwdHBfY2xhc3MpO1xuJiM0MztcdHR3b3N0ZXBfZmxhZyA9IHB0cF9oZHItXHUwMDNlZmxhZ19maWVsZFswXSBcdTAwMjYgMHgyO1xuJiM0MztcbiYjNDM7XHQvKiBPbmx5IGEgU3luYyBmcmFtZSB3aXRoIHRoZSB0d29TdGVwRmxhZyBjbGVhcmVkIGNhbiB1c2Ugb25lLXN0ZXBcbiYjNDM7XHQgKiB0aW1lc3RhbXBpbmcuIEEgZnJhbWUgdGhhdCByZXF1ZXN0cyB0d28tc3RlcCAob3IgaXMgbm90IGEgU3luYylcbiYjNDM7XHQgKiBjYXJyaWVzIGRpZmZlcmVudCBvbi13aXJlIGZpZWxkcywgc28gdGhpcyBpcyBhIHJlYWwgY2xhc3NpZmljYXRpb247XG4mIzQzO1x0ICogcmVwb3J0IGl0IHRocm91Z2ggKnR3b3N0ZXAgc28gdGhlIGNhbGxlciBmYWxscyBiYWNrIHRvIHRoZSB0d28tc3RlcFxuJiM0MztcdCAqIHBhdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1zZ190eXBlICE9IFBUUF9NU0dUWVBFX1NZTkMgfHwgdHdvc3RlcF9mbGFnICE9IDApIHtcbiYjNDM7XHRcdCp0d29zdGVwID0gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRoaXMgaXMgYSBnZW51aW5lIG9uZS1zdGVwIFN5bmMgZnJhbWUuIHNrYl9zaGluZm8oKS1cdTAwM2VkZXN0cnVjdG9yX2FyZ1xuJiM0MztcdCAqIGlzIGxhdGVyIHVzZWQgdG8gcGFzcyB0aGUgbmV0Y19wb3J0IHBvaW50ZXIgdG9cbiYjNDM7XHQgKiBuZXRjX29uZXN0ZXBfc2tiX2Rlc3RydWN0b3IoKSBmb3IgVFggY29tcGxldGlvbiBub3RpZmljYXRpb24uXG4mIzQzO1x0ICogTVNHX1pFUk9DT1BZIGFsc28gdXNlcyBkZXN0cnVjdG9yX2FyZyAodmlhIHNrYl96Y29weV9pbml0KCkpIHRvXG4mIzQzO1x0ICogdHJhY2sgdXNlci1zcGFjZSBwYWdlIHJlZmVyZW5jZXMuIE92ZXJ3cml0aW5nIGl0IGluIHRoYXQgY2FzZSB3b3VsZFxuJiM0MztcdCAqIGxlYWsgdGhlIHVidWZfaW5mbyByZWZlcmVuY2UgYW5kIHByZXZlbnQgdXNlciBwYWdlcyBmcm9tIGJlaW5nXG4mIzQzO1x0ICogcmVsZWFzZWQuIFBUUCBhcHBsaWNhdGlvbnMgZG8gbm90IHVzZSBNU0dfWkVST0NPUFksIGJ1dCBndWFyZFxuJiM0MztcdCAqIGFnYWluc3QgaXQgZGVmZW5zaXZlbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNrYl96Y29weShza2IpKSB7XG4mIzQzO1x0XHRkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtQb3J0ICVkIG9uZS1zdGVwIFN5bmMgbm90IHN1cHBvcnRlZCBvbiB6ZXJvY29weSBza2JcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIG5wLVx1MDAzZWRwLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBrdF90eXBlID0gcHRwX2NsYXNzIFx1MDAyNiBQVFBfQ0xBU1NfUE1BU0s7XG4mIzQzO1x0aWYgKHBrdF90eXBlID09IFBUUF9DTEFTU19JUFY0IHx8IHBrdF90eXBlID09IFBUUF9DTEFTU19JUFY2KVxuJiM0MztcdFx0aXNfdWRwID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0LyogQ2FjaGUgdGhlIHBhcnNpbmcgcmVzdWx0cyBzbyB0aGUgdGFnZ2VyIHhtaXQgcGF0aCBhbmQgdGhlIGRlZmVycmVkXG4mIzQzO1x0ICogd29yayBkbyBub3QgbmVlZCB0byByZS1wYXJzZSB0aGUgUFRQIGhlYWRlciwgYW5kIHNvIHRoYXRcbiYjNDM7XHQgKiBuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKCkgY2FuIGRlcml2ZSB0aGVzZSBwYXJhbWV0ZXJzIGZyb20gdGhlXG4mIzQzO1x0ICogc2tiLlxuJiM0MztcdCAqL1xuJiM0MztcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlY29ycmVjdGlvbl9vZmZzZXQgPSBjb3JyZWN0aW9uX29mZnNldDtcbiYjNDM7XHRORVRDX1NLQl9DQihza2IpLVx1MDAzZXRpbWVzdGFtcF9vZmZzZXQgPSB0aW1lc3RhbXBfb2Zmc2V0O1xuJiM0MztcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlaXNfdWRwID0gaXNfdWRwO1xuJiM0MztcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlcHRwX2ZsYWcgPSBORVRDX1BUUF9GTEFHX09ORVNURVA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgbmV0Y19wb3J0X3R4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XG4mIzQzO1x0Ym9vbCB0d29zdGVwID0gZmFsc2U7XG4mIzQzO1x0dTMyIHB0cF9jbGFzcztcbiYjNDM7XG4mIzQzO1x0TkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2VwdHBfZmxhZyA9IDA7XG4mIzQzO1x0cHRwX2NsYXNzID0gcHRwX2NsYXNzaWZ5X3Jhdyhza2IpO1xuJiM0MztcdGlmIChwdHBfY2xhc3MgPT0gUFRQX0NMQVNTX05PTkUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChucC1cdTAwM2VwdHBfdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTkVTVEVQX1NZTkMpXG4mIzQzO1x0XHRuZXRjX3BvcnRfcHJlcGFyZV9vbmVzdGVwX3N5bmMobnAsIHNrYiwgcHRwX2NsYXNzLCBcdTAwMjZ0d29zdGVwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5wLVx1MDAzZXB0cF90eF90eXBlID09IEhXVFNUQU1QX1RYX09OIHx8IHR3b3N0ZXApIHtcbiYjNDM7XHRcdHN0cnVjdCBza19idWZmICpjbG9uZSA9IHNrYl9jbG9uZV9zayhza2IpO1xuJiM0MztcbiYjNDM7XHRcdGlmICh1bmxpa2VseSghY2xvbmUpKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5ldGNfcG9ydF90eHRzdGFtcF90d29zdGVwKG5wLCBjbG9uZSkpIHtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKGNsb25lKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlY2xvbmUgPSBjbG9uZTtcbiYjNDM7XHRcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlcHRwX2ZsYWcgPSBORVRDX1BUUF9GTEFHX1RXT1NURVA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZXRjX3BvcnRfc2V0X29uZXN0ZXBfY29udHJvbChzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgYm9vbCB1ZHAsXG4mIzQzO1x0XHRcdFx0XHQgIGludCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBQTV9TSU5HTEVfU1RFUF9FTiB8IEZJRUxEX1BSRVAoUE1fU0lOR0xFX1NURVBfT0ZGU0VULCBvZmZzZXQpO1xuJiM0MztcdGlmICh1ZHApXG4mIzQzO1x0XHR2YWwgfD0gUE1fU0lOR0xFX1NURVBfQ0g7XG4mIzQzO1x0bmV0Y19tYWNfcG9ydF93cihucCwgTkVUQ19QTV9TSU5HTEVfU1RFUCgwKSwgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbmV0Y19vbmVzdGVwX3NrYl9kZXN0cnVjdG9yKHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2VkZXN0cnVjdG9yX2FyZztcbiYjNDM7XG4mIzQzO1x0Lyogc2tiIGhhcyBiZWVuIHRyYW5zbWl0dGVkIGJ5IGhhcmR3YXJlLCBzY2hlZHVsZSB3b3JrIHRvIHNlbmRcbiYjNDM7XHQgKiB0aGUgbmV4dCBxdWV1ZWQgb25lLXN0ZXAgU3luYyBwYWNrZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2NoZWR1bGVfd29yayhcdTAwMjZucC1cdTAwM2VvbmVzdGVwX3dvcmspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKHN0cnVjdCBuZXRjX3BvcnQgKm5wLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgICAgdTY0IHRzdGFtcClcbiYjNDM7e1xuJiM0MztcdHUxNiBjb3JyZWN0aW9uX29mZnNldCA9IE5FVENfU0tCX0NCKHNrYiktXHUwMDNlY29ycmVjdGlvbl9vZmZzZXQ7XG4mIzQzO1x0dTE2IHRpbWVzdGFtcF9vZmZzZXQgPSBORVRDX1NLQl9DQihza2IpLVx1MDAzZXRpbWVzdGFtcF9vZmZzZXQ7XG4mIzQzO1x0Ym9vbCBpc191ZHAgPSBORVRDX1NLQl9DQihza2IpLVx1MDAzZWlzX3VkcDtcbiYjNDM7XHR1OCAqcGt0X2hkciA9IHNrYl9tYWNfaGVhZGVyKHNrYik7XG4mIzQzO1x0dTY0IHNlYztcbiYjNDM7XHR1MzIgbnM7XG4mIzQzO1xuJiM0MztcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNldHN0YW1wID0gdHN0YW1wO1xuJiM0MztcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlcHRwX2ZsYWcgPSBORVRDX1BUUF9GTEFHX09ORVNURVA7XG4mIzQzO1xuJiM0MztcdC8qIFVwZGF0ZSBvcmlnaW5UaW1lc3RhbXAgZmllbGQgb2YgU3luYyBwYWNrZXRcbiYjNDM7XHQgKiAtIDQ4IGJpdHMgc2Vjb25kcyBmaWVsZFxuJiM0MztcdCAqIC0gMzIgYml0cyBuYW5vc2Vjb25kcyBmaWVsZFxuJiM0MztcdCAqL1xuJiM0MztcdHNlYyA9IGRpdl91NjRfcmVtKHRzdGFtcCwgTlNFQ19QRVJfU0VDLCBcdTAwMjZucyk7XG4mIzQzO1x0cHV0X3VuYWxpZ25lZF9iZTE2KChzZWMgXHUwMDNlXHUwMDNlIDMyKSBcdTAwMjYgMHhmZmZmLCBwa3RfaGRyICYjNDM7IHRpbWVzdGFtcF9vZmZzZXQpO1xuJiM0MztcdHB1dF91bmFsaWduZWRfYmUzMihzZWMgXHUwMDI2IDB4ZmZmZmZmZmYsIHBrdF9oZHIgJiM0MzsgdGltZXN0YW1wX29mZnNldCAmIzQzOyAyKTtcbiYjNDM7XHRwdXRfdW5hbGlnbmVkX2JlMzIobnMsIHBrdF9oZHIgJiM0MzsgdGltZXN0YW1wX29mZnNldCAmIzQzOyA2KTtcbiYjNDM7XG4mIzQzO1x0bmV0Y19wb3J0X3NldF9vbmVzdGVwX2NvbnRyb2wobnAsIGlzX3VkcCwgY29ycmVjdGlvbl9vZmZzZXQpO1xuJiM0MztcbiYjNDM7XHQvKiBPcnBoYW4gdGhlIHNrYiB0byByZWxlYXNlIHRoZSBzb2NrZXQgc2VuZCBidWZmZXIgcXVvdGEgaW1tZWRpYXRlbHkuXG4mIzQzO1x0ICogVGhpcyBpcyBzYWZlIGJlY2F1c2Ugc29ja193ZnJlZSgpIG9ubHkgdXBkYXRlcyBza193bWVtX2FsbG9jIGFuZFxuJiM0MztcdCAqIGRvZXMgbm90IHRvdWNoIHNrYi1cdTAwM2VkYXRhLiBBZnRlciBza2Jfb3JwaGFuKCksIHdlIGluc3RhbGwgb3VyIG93blxuJiM0MztcdCAqIGRlc3RydWN0b3Igc28gdGhhdCB3aGVuIHRoZSBjb25kdWl0IGRyaXZlciBmcmVlcyB0aGUgc2tiIGFmdGVyIFRYXG4mIzQzO1x0ICogY29tcGxldGlvbiwgd2UgZ2V0IG5vdGlmaWVkIHRvIHNlbmQgdGhlIG5leHQgcXVldWVkIFN5bmMgcGFja2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHNrYl9vcnBoYW4oc2tiKTtcbiYjNDM7XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGVzdHJ1Y3Rvcl9hcmcgPSBucDtcbiYjNDM7XHRza2ItXHUwMDNlZGVzdHJ1Y3RvciA9IG5ldGNfb25lc3RlcF9za2JfZGVzdHJ1Y3RvcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBuZXRjX3BvcnRfb25lc3RlcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRjX3BvcnQgKm5wID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjX3BvcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgb25lc3RlcF93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBucC1cdTAwM2Vzd2l0Y2hfcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHR1NjQgdHN0YW1wO1xuJiM0MztcbiYjNDM7XHQvKiBEZXF1ZXVlIHRoZSBuZXh0IHBlbmRpbmcgc2tiIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGluLWZsaWdodCBzbG90LFxuJiM0MztcdCAqIHNvIGEgbmV3bHkgYXJyaXZpbmcgb25lLXN0ZXAgU3luYyBjYW5ub3QganVtcCBhaGVhZCBvZiBpdC4gT25seVxuJiM0MztcdCAqIHJlbGVhc2UgdGhlIHNsb3Qgd2hlbiB0aGUgcXVldWUgaXMgZW1wdHkuIFRoaXMga2VlcHMgb3JkZXJpbmcgYW5kXG4mIzQzO1x0ICogY2xvc2VzIHRoZSBlbnF1ZXVlL3dha2V1cCByYWNlLlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4mIzQzO1x0c2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZucC1cdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSk7XG4mIzQzO1x0aWYgKCFza2IpIHtcbiYjNDM7XHRcdF9fY2xlYXJfYml0KE5FVENfRkxBR19PTkVTVEVQX0lOX1BST0dSRVNTLCBcdTAwMjZucC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5wLVx1MDAzZXB0cF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0dHN0YW1wID0gbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHByaXYtXHUwMDNldG1yX2Rldik7XG4mIzQzO1x0aWYgKCF0c3RhbXApIHtcbiYjNDM7XHRcdC8qIFRoZSBQVFAgdGltZXIgaXMgbm90IGF2YWlsYWJsZSwgc28gdGhlcmUgaXMgbm8gY29ycmVjdFxuJiM0MztcdFx0ICogdGltZXN0YW1wIHRvIHByb2dyYW0uIERyb3AgdGhpcyBmcmFtZSBhbmQgcmUta2ljayB0b1xuJiM0MztcdFx0ICogcHJvY2VzcyB0aGUgcmVtYWluaW5nIHF1ZXVlZCBmcmFtZXMgKG9yIHJlbGVhc2UgdGhlIHNsb3QpLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIG5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAoKSBoYXMgbm90IHJ1biBmb3IgdGhpcyBza2IgeWV0LCBzb1xuJiM0MztcdFx0ICogbmV0Y19vbmVzdGVwX3NrYl9kZXN0cnVjdG9yKCkgaXMgbm90IGluc3RhbGxlZCBvbiBpdC4gRnJlZWluZ1xuJiM0MztcdFx0ICogaXQgdGhlcmVmb3JlIGRvZXMgbm90IHJlc2NoZWR1bGUgb25lc3RlcF93b3JrLCBzbyB0aGUgd29ya1xuJiM0MztcdFx0ICogbXVzdCBiZSByZXNjaGVkdWxlZCBleHBsaWNpdGx5IHRvIGtlZXAgZHJhaW5pbmcgdGhlIHF1ZXVlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtQb3J0ICVkIFBUUCB0aW1lciB1bmF2YWlsYWJsZSwgZHJvcCBTeW5jXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBucC1cdTAwM2VkcC1cdTAwM2VpbmRleCk7XG4mIzQzO1x0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bnAtXHUwMDNlb25lc3RlcF93b3JrKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFJldXNlIHRoZSBvZmZzZXRzIGNhY2hlZCBhdCBlbnF1ZXVlIHRpbWU7IG9ubHkgdGhlIHRpbWVzdGFtcCBpc1xuJiM0MztcdCAqIHJlYWQgZnJlc2ggc28gaXQgcmVmbGVjdHMgdGhlIGFjdHVhbCBUWCBtb21lbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0Y19wb3J0X3Byb2dyYW1fb25lc3RlcChucCwgc2tiLCB0c3RhbXApO1xuJiM0MztcbiYjNDM7XHQvKiBUYWcgYW5kIGhhbmQgdGhlIGZyYW1lIGRpcmVjdGx5IHRvIHRoZSBjb25kdWl0IHZpYSB0aGUgdGFnZ2VyLFxuJiM0MztcdCAqIGJ5cGFzc2luZyBkc2FfdXNlcl94bWl0KCkgc28gdGhlIFRYIHN0YXRzIGFyZSBub3QgY291bnRlZCB0d2ljZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR0YWdnZXJfZGF0YSA9IHByaXYtXHUwMDNlZHMtXHUwMDNldGFnZ2VyX2RhdGE7XG4mIzQzO1x0dGFnZ2VyX2RhdGEtXHUwMDNlb25lc3RlcF9zeW5jX3htaXQoc2tiLCBucC1cdTAwM2VkcC1cdTAwM2V1c2VyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IHNrX2J1ZmYgKm5ldGNfb25lc3RlcF9zeW5jX2hhbmRsZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRjX3BvcnQgKm5wID0gTkVUQ19QT1JUKGRzLCBwb3J0KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHU2NCB0c3RhbXA7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmlhbGl6ZSBvbmUtc3RlcCBTeW5jIHBhY2tldHM6IG9ubHkgb25lIGNhbiBiZSBpbi1mbGlnaHQgYXQgYVxuJiM0MztcdCAqIHRpbWUgYmVjYXVzZSB0aGUgU0lOR0xFX1NURVAgcmVnaXN0ZXIgaXMgc2hhcmVkIGFuZCBtdXN0IG1hdGNoIHRoZVxuJiM0MztcdCAqIHBhY2tldCBjdXJyZW50bHkgYmVpbmcgdHJhbnNtaXR0ZWQuIENsYWltIHRoZSBpbi1mbGlnaHQgc2xvdCB1bmRlclxuJiM0MztcdCAqIHB0cF9sb2NrLiBJZiBhbm90aGVyIG9uZS1zdGVwIFN5bmMgaXMgYWxyZWFkeSBpbi1mbGlnaHQsIHF1ZXVlIHRoaXNcbiYjNDM7XHQgKiBza2IgYW5kIHJldHVybiBOVUxMOyBvd25lcnNoaXAgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHF1ZXVlLCBzbyBub1xuJiM0MztcdCAqIGV4dHJhIHJlZmVyZW5jZSBpcyBuZWVkZWQgYW5kIG5ldGNfeG1pdCgpIHN0b3BzIHByb2Nlc3NpbmcgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5wLVx1MDAzZXB0cF9sb2NrKTtcbiYjNDM7XHRpZiAodGVzdF9iaXQoTkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MsIFx1MDAyNm5wLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZucC1cdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSwgc2tiKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5wLVx1MDAzZXB0cF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHRzdGFtcCA9IG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZShwcml2LVx1MDAzZXRtcl9kZXYpO1xuJiM0MztcdGlmICghdHN0YW1wKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhpcyBpcyBhIHZhbGlkIG9uZS1zdGVwIFN5bmMgZnJhbWUsIGJ1dCB0aGUgUFRQIHRpbWVyIGlzXG4mIzQzO1x0XHQgKiBub3QgYXZhaWxhYmxlLCBzbyB0aGVyZSBpcyBubyBjb3JyZWN0IHRpbWVzdGFtcCB0byBwcm9ncmFtLlxuJiM0MztcdFx0ICogRHJvcCB0aGUgZnJhbWUgcmF0aGVyIHRoYW4gdHJhbnNtaXQgYSBTeW5jIHdpdGggYSBib2d1c1xuJiM0MztcdFx0ICogY29ycmVjdGlvbiBmaWVsZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7UG9ydCAlZCBQVFAgdGltZXIgdW5hdmFpbGFibGUsIGRyb3AgU3luY1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgbnAtXHUwMDNlZHAtXHUwMDNlaW5kZXgpO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX3NldF9iaXQoTkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MsIFx1MDAyNm5wLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFdlIG93biB0aGUgaW4tZmxpZ2h0IHNsb3QuIFByb2dyYW0gdGhlIHJlZ2lzdGVyIGFuZCBpbnN0YWxsIHRoZVxuJiM0MztcdCAqIGRlc3RydWN0b3IuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0Y19wb3J0X3Byb2dyYW1fb25lc3RlcChucCwgc2tiLCB0c3RhbXApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2tiO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2guaCBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoLmhcbmluZGV4IDMwNWYyYTkyZTJmOWEuLjI5NmRmMWQ3MjMzM2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaC5oXG5AQCAtNTcsNiAmIzQzOzU3LDcgQEAgc3RydWN0IG5ldGNfc3dpdGNoO1xuIFxuIHN0cnVjdCBuZXRjX3N3aXRjaF9pbmZvIHtcbiBcdHUzMiBudW1fcG9ydHM7XG4mIzQzO1x0dTMyIHRtcl9kZXZmbjtcbiBcdHZvaWQgKCpwaHlsaW5rX2dldF9jYXBzKShpbnQgcG9ydCwgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpO1xuIH07XG4gXG5AQCAtNjYsOSAmIzQzOzY3LDIzIEBAIHN0cnVjdCBuZXRjX3BvcnRfY2FwcyB7XG4gXHR1MzIgcHNldWRvX2xpbms6MTtcbiB9O1xuIFxuJiM0MztlbnVtIG5ldGNfcHRwX3R5cGUge1xuJiM0MztcdE5FVENfUFRQX0wyLFxuJiM0MztcdE5FVENfUFRQX0w0X0lQVjRfRVZFTlQsXG4mIzQzO1x0TkVUQ19QVFBfTDRfSVBWNF9HRU5FUkFMLFxuJiM0MztcdE5FVENfUFRQX0w0X0lQVjZfRVZFTlQsXG4mIzQzO1x0TkVUQ19QVFBfTDRfSVBWNl9HRU5FUkFMLFxuJiM0MztcdE5FVENfUFRQX01BWCxcbiYjNDM7fTtcbiYjNDM7XG4gZW51bSBuZXRjX2hvc3RfcmVhc29uIHtcbiBcdC8qIFNvZnR3YXJlIGRlZmluZWQgaG9zdCByZWFzb25zICovXG4gXHRORVRDX0hSX0hPU1RfRkxPT0QgPSA4LFxuJiM0MztcdE5FVENfSFJfUFRQX1RSQVAgICA9IDksXG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIG5ldGNfcG9ydF9mbGFncyB7XG4mIzQzO1x0TkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MgPSAwLFxuIH07XG4gXG4gc3RydWN0IG5ldGNfcG9ydCB7XG5AQCAtODQsNyAmIzQzOzk5LDE5IEBAIHN0cnVjdCBuZXRjX3BvcnQge1xuIFx0dTE2IHVjOjE7XG4gXHR1MTYgbWM6MTtcbiBcdHUxNiBwdmlkO1xuLVx0c3RydWN0IGlwZnRfZW50cnlfZGF0YSAqaG9zdF9mbG9vZDtcbiYjNDM7XHR1MzIgaXBmdF9oZl9laWQ7XG4mIzQzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0LyogU2VyaWFsaXplIFBUUCBvcGVyYXRpb25zICovXG4mIzQzO1x0c3BpbmxvY2tfdCBwdHBfbG9jaztcbiYjNDM7XHQvKiBza2IgcXVldWUgZm9yIHR3by1zdGVwIHRpbWVzdGFtcCBmcmFtZXMgKi9cbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl90eHRzdGFtcF9xdWV1ZTtcbiYjNDM7XHQvKiBza2IgcXVldWUgZm9yIG9uZS1zdGVwIHN5bmMgZnJhbWVzICovXG4mIzQzO1x0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2Jfb25lc3RlcF9xdWV1ZTtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgb25lc3RlcF93b3JrO1xuJiM0MztcdGludCBwdHBfdHhfdHlwZTtcbiYjNDM7XHRpbnQgcHRwX3J4X2ZpbHRlcjtcbiYjNDM7XHR1MzIgcHRwX2lwZnRfZWlkW05FVENfUFRQX01BWF07XG4gfTtcbiBcbiBzdHJ1Y3QgbmV0Y19zd2l0Y2hfcmVncyB7XG5AQCAtMTM5LDYgJiM0MzsxNjYsNyBAQCBzdHJ1Y3QgbmV0Y19zd2l0Y2gge1xuIFx0dTMyIG51bV9icDtcbiBcbiBcdHN0cnVjdCBicHRfY2ZnZV9kYXRhICpicHRfbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqdG1yX2RldjsgLyogVGhlIFBUUCBUaW1lciBQQ0kgZGV2aWNlICovXG4gfTtcbiBcbiAjZGVmaW5lIE5FVENfUFJJVihkcylcdFx0XHQoKHN0cnVjdCBuZXRjX3N3aXRjaCAqKSgoZHMpLVx1MDAzZXByaXYpKVxuQEAgLTE4Nyw2ICYjNDM7MjE1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG5ldGNfZGVsX3ZsYW5fZW50cnkoc3RydWN0IG5ldGNfdmxhbl9lbnRyeSAqZW50cnkpXG4gfVxuIFxuIGludCBuZXRjX3N3aXRjaF9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpO1xuJiM0Mzt2b2lkIG5ldGNfbWFjX3BvcnRfd3Ioc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsIHUzMiB2YWwpO1xuIFxuIC8qIGV0aHRvb2wgQVBJcyAqL1xuIHZvaWQgbmV0Y19wb3J0X2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuQEAgLTIwMyw0ICYjNDM7MjMyLDIyIEBAIHZvaWQgbmV0Y19wb3J0X2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0ICAgdTMyIHNzZXQsIHU4ICpkYXRhKTtcbiB2b2lkIG5ldGNfcG9ydF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1NjQgKmRhdGEpO1xuIFxuJiM0MzsvKiBQVFAgQVBJcyAqL1xuJiM0MztpbnQgbmV0Y19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0X2lkLFxuJiM0MztcdFx0ICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyk7XG4mIzQzO2ludCBuZXRjX3BvcnRfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnRfaWQsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO2ludCBuZXRjX3BvcnRfaHd0c3RhbXBfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnRfaWQsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpO1xuJiM0Mzt2b2lkIG5ldGNfdHdvc3RlcF90c3RhbXBfaGFuZGxlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCB1OCB0c19yZXFfaWQsIHU2NCB0cyk7XG4mIzQzO2Jvb2wgbmV0Y19wb3J0X3J4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0eXBlKTtcbiYjNDM7dm9pZCBuZXRjX3BvcnRfdHh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydF9pZCxcbiYjNDM7XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzQzO3ZvaWQgbmV0Y19wb3J0X29uZXN0ZXBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuJiM0MztzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19vbmVzdGVwX3N5bmNfaGFuZGxlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2hfaHcuaCBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoX2h3LmhcbmluZGV4IDE0MDRhZTQxYzdiY2IuLjM3ZDFkZDdlYzJjN2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oXG5AQCAtMjAzLDYgJiM0MzsyMDMsMTEgQEAgZW51bSBuZXRjX3N0Z19zdGFnZSB7XG4gI2RlZmluZSAgIFNTUF8xME1cdFx0XHQxXG4gI2RlZmluZSAgIFNTUF8xR1x0XHRcdDJcbiBcbiYjNDM7I2RlZmluZSBORVRDX1BNX1NJTkdMRV9TVEVQKGEpXHRcdCgweDEwYzAgJiM0MzsgKGEpICogMHg0MDApXG4mIzQzOyNkZWZpbmUgIFBNX1NJTkdMRV9TVEVQX0NIXHRcdEJJVCg2KVxuJiM0MzsjZGVmaW5lICBQTV9TSU5HTEVfU1RFUF9PRkZTRVRcdFx0R0VOTUFTSygxNSwgNylcbiYjNDM7I2RlZmluZSAgUE1fU0lOR0xFX1NURVBfRU5cdFx0QklUKDMxKVxuJiM0MztcbiAvKiBQb3J0IE1BQyAwLzEgUmVjZWl2ZSBFdGhlcm5ldCBPY3RldHMgQ291bnRlciAqL1xuICNkZWZpbmUgTkVUQ19QTV9SRU9DVChhKVx0XHQoMHgxMTAwICYjNDM7IChhKSAqIDB4NDAwKVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9uZXRjLmMgYi9kcml2ZXJzL3B0cC9wdHBfbmV0Yy5jXG5pbmRleCA5NGU5NTJlZTY5OTAyLi5mMmI3N2JkNWFmMDE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX25ldGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wdHAvcHRwX25ldGMuY1xuQEAgLTEyNyw2ICYjNDM7MTI3LDE3IEBAIHN0cnVjdCBuZXRjX3RpbWVyIHtcbiBcbiAjZGVmaW5lIG5ldGNfdGltZXJfcmQocCwgbylcdFx0bmV0Y19yZWFkKChwKS1cdTAwM2ViYXNlICYjNDM7IChvKSlcbiAjZGVmaW5lIG5ldGNfdGltZXJfd3IocCwgbywgdilcdFx0bmV0Y193cml0ZSgocCktXHUwMDNlYmFzZSAmIzQzOyAobyksIHYpXG4mIzQzO1xuJiM0MzsvKiBUaGUgNjQtYml0IHRpbWVyIHJlZ2lzdGVycyBjb25zaXN0IG9mIGEgbG93IChMKSBhbmQgaGlnaCAoSCkgcmVnaXN0ZXIgcGFpci5cbiYjNDM7ICogSGFyZHdhcmUgcmVxdWlyZXMgYSBzdHJpY3QgYWNjZXNzIG9yZGVyOiBmb3Igd3JpdGVzLCBUTVJfeHh4X0wgbXVzdCBiZVxuJiM0MzsgKiB3cml0dGVuIGZpcnN0LCB3aGljaCBsYXRjaGVzIHRoZSB2YWx1ZSBpbnRvIGEgc2hhZG93IHJlZ2lzdGVyOyB0aGUgd3JpdGVcbiYjNDM7ICogdG8gVE1SX3h4eF9IIHRoZW4gYXRvbWljYWxseSB0cmFuc2ZlcnMgYm90aCBzaGFkb3cgcmVnaXN0ZXJzIGludG8gdGhlIGxpdmVcbiYjNDM7ICogY291bnRlci4gRm9yIHJlYWRzLCBUTVJfeHh4X0wgbXVzdCBiZSByZWFkIGZpcnN0IHRvIGNhcHR1cmUgYSBjb2hlcmVudFxuJiM0MzsgKiBzbmFwc2hvdC4gaW93cml0ZTY0X2xvX2hpKCkgYW5kIGlvcmVhZDY0X2xvX2hpKCkgZW5mb3JjZSB0aGlzIEwtYmVmb3JlLUhcbiYjNDM7ICogb3JkZXJpbmcuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIG5ldGNfdGltZXJfcmQ2NChwLCBvKVx0XHRpb3JlYWQ2NF9sb19oaSgocCktXHUwMDNlYmFzZSAmIzQzOyAobykpXG4mIzQzOyNkZWZpbmUgbmV0Y190aW1lcl93cjY0KHAsIG8sIHYpXHRpb3dyaXRlNjRfbG9faGkodiwgKHApLVx1MDAzZWJhc2UgJiM0MzsgKG8pKVxuICNkZWZpbmUgcHRwX3RvX25ldGNfdGltZXIocHRwKVx0XHRjb250YWluZXJfb2YoKHB0cCksIHN0cnVjdCBuZXRjX3RpbWVyLCBjYXBzKVxuIFxuIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0aW1lcl9jbGtfc3JjW10gPSB7XG5AQCAtMTM2LDY2ICYjNDM7MTQ3LDQ1IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0aW1lcl9jbGtfc3JjW10gPSB7XG4gXG4gc3RhdGljIHZvaWQgbmV0Y190aW1lcl9jbnRfd3JpdGUoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsIHU2NCBucylcbiB7XG4tXHR1MzIgdG1yX2NudF9oID0gdXBwZXJfMzJfYml0cyhucyk7XG4tXHR1MzIgdG1yX2NudF9sID0gbG93ZXJfMzJfYml0cyhucyk7XG4tXG4tXHQvKiBXcml0ZXMgdG8gdGhlIFRNUl9DTlRfTCByZWdpc3RlciBjb3BpZXMgdGhlIHdyaXR0ZW4gdmFsdWVcbi1cdCAqIGludG8gdGhlIHNoYWRvdyBUTVJfQ05UX0wgcmVnaXN0ZXIuIFdyaXRlcyB0byB0aGUgVE1SX0NOVF9IXG4tXHQgKiByZWdpc3RlciBjb3BpZXMgdGhlIHZhbHVlcyB3cml0dGVuIGludG8gdGhlIHNoYWRvdyBUTVJfQ05UX0hcbi1cdCAqIHJlZ2lzdGVyLiBDb250ZW50cyBvZiB0aGUgc2hhZG93IHJlZ2lzdGVycyBhcmUgY29waWVkIGludG9cbi1cdCAqIHRoZSBUTVJfQ05UX0wgYW5kIFRNUl9DTlRfSCByZWdpc3RlcnMgZm9sbG93aW5nIGEgd3JpdGUgaW50b1xuLVx0ICogdGhlIFRNUl9DTlRfSCByZWdpc3Rlci4gU28gdGhlIHVzZXIgbXVzdCB3cml0ZXMgdG8gVE1SX0NOVF9MXG4tXHQgKiByZWdpc3RlciBmaXJzdC4gT3RoZXIgSC9MIHJlZ2lzdGVycyBzaG91bGQgaGF2ZSB0aGUgc2FtZVxuLVx0ICogYmVoYXZpb3IuXG4tXHQgKi9cbi1cdG5ldGNfdGltZXJfd3IocHJpdiwgTkVUQ19UTVJfQ05UX0wsIHRtcl9jbnRfbCk7XG4tXHRuZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX0NOVF9ILCB0bXJfY250X2gpO1xuJiM0MztcdG5ldGNfdGltZXJfd3I2NChwcml2LCBORVRDX1RNUl9DTlRfTCwgbnMpO1xuIH1cbiBcbiBzdGF0aWMgdTY0IG5ldGNfdGltZXJfb2Zmc2V0X3JlYWQoc3RydWN0IG5ldGNfdGltZXIgKnByaXYpXG4ge1xuLVx0dTMyIHRtcl9vZmZfbCwgdG1yX29mZl9oO1xuLVx0dTY0IG9mZnNldDtcbi1cbi1cdHRtcl9vZmZfbCA9IG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfT0ZGX0wpO1xuLVx0dG1yX29mZl9oID0gbmV0Y190aW1lcl9yZChwcml2LCBORVRDX1RNUl9PRkZfSCk7XG4tXHRvZmZzZXQgPSAoKCh1NjQpdG1yX29mZl9oKSBcdTAwM2NcdTAwM2MgMzIpIHwgdG1yX29mZl9sO1xuLVxuLVx0cmV0dXJuIG9mZnNldDtcbiYjNDM7XHRyZXR1cm4gbmV0Y190aW1lcl9yZDY0KHByaXYsIE5FVENfVE1SX09GRl9MKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmV0Y190aW1lcl9vZmZzZXRfd3JpdGUoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsIHU2NCBvZmZzZXQpXG4ge1xuLVx0dTMyIHRtcl9vZmZfaCA9IHVwcGVyXzMyX2JpdHMob2Zmc2V0KTtcbi1cdHUzMiB0bXJfb2ZmX2wgPSBsb3dlcl8zMl9iaXRzKG9mZnNldCk7XG4tXG4tXHRuZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX09GRl9MLCB0bXJfb2ZmX2wpO1xuLVx0bmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9PRkZfSCwgdG1yX29mZl9oKTtcbiYjNDM7XHRuZXRjX3RpbWVyX3dyNjQocHJpdiwgTkVUQ19UTVJfT0ZGX0wsIG9mZnNldCk7XG4gfVxuIFxuIHN0YXRpYyB1NjQgbmV0Y190aW1lcl9jdXJfdGltZV9yZWFkKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2KVxuIHtcbi1cdHUzMiB0aW1lX2gsIHRpbWVfbDtcbi1cdHU2NCBucztcbiYjNDM7XHRyZXR1cm4gbmV0Y190aW1lcl9yZDY0KHByaXYsIE5FVENfVE1SX0NVUl9USU1FX0wpO1xuJiM0Mzt9XG4gXG4tXHQvKiBUaGUgdXNlciBzaG91bGQgcmVhZCBORVRDX1RNUl9DVVJfVElNRV9MIGZpcnN0IHRvXG4tXHQgKiBnZXQgY29ycmVjdCBjdXJyZW50IHRpbWUuXG4tXHQgKi9cbi1cdHRpbWVfbCA9IG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfQ1VSX1RJTUVfTCk7XG4tXHR0aW1lX2ggPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0NVUl9USU1FX0gpO1xuLVx0bnMgPSAodTY0KXRpbWVfaCBcdTAwM2NcdTAwM2MgMzIgfCB0aW1lX2w7XG4mIzQzO3U2NCBuZXRjX3RpbWVyX2dldF9jdXJyZW50X3RpbWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHU2NCBjdXJfdGltZTtcbiBcbi1cdHJldHVybiBucztcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0Y3VyX3RpbWUgPSBuZXRjX3RpbWVyX2N1cl90aW1lX3JlYWQocHJpdik7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGN1cl90aW1lO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKTtcbiBcbiBzdGF0aWMgdm9pZCBuZXRjX3RpbWVyX2FsYXJtX3dyaXRlKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2LFxuIFx0XHRcdFx0ICAgdTY0IGFsYXJtLCBpbnQgaW5kZXgpXG4ge1xuLVx0dTMyIGFsYXJtX2ggPSB1cHBlcl8zMl9iaXRzKGFsYXJtKTtcbi1cdHUzMiBhbGFybV9sID0gbG93ZXJfMzJfYml0cyhhbGFybSk7XG4tXG4tXHRuZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX0FMQVJNX0woaW5kZXgpLCBhbGFybV9sKTtcbi1cdG5ldGNfdGltZXJfd3IocHJpdiwgTkVUQ19UTVJfQUxBUk1fSChpbmRleCksIGFsYXJtX2gpO1xuJiM0MztcdG5ldGNfdGltZXJfd3I2NChwcml2LCBORVRDX1RNUl9BTEFSTV9MKGluZGV4KSwgYWxhcm0pO1xuIH1cbiBcbiBzdGF0aWMgdTMyIG5ldGNfdGltZXJfZ2V0X2ludGVncmFsX3BlcmlvZChzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdilcbkBAIC00OTcsMjIgJiM0Mzs0ODcsMTkgQEAgc3RhdGljIHZvaWQgbmV0Y190aW1lcl9oYW5kbGVfZXR0c19ldmVudChzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdiwgaW50IGluZGV4LFxuIFx0XHRcdFx0XHQgYm9vbCB1cGRhdGVfZXZlbnQpXG4ge1xuIFx0c3RydWN0IHB0cF9jbG9ja19ldmVudCBldmVudDtcbi1cdHUzMiBldHRzX2wgPSAwLCBldHRzX2ggPSAwO1xuJiM0MztcdHU2NCBldHRzID0gMDtcbiBcbi1cdHdoaWxlIChuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX1NUQVQpIFx1MDAyNiBUTVJfU1RBVF9FVFNfVkxEKGluZGV4KSkge1xuLVx0XHRldHRzX2wgPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0VUVFNfTChpbmRleCkpO1xuLVx0XHRldHRzX2ggPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0VUVFNfSChpbmRleCkpO1xuLVx0fVxuJiM0MztcdHdoaWxlIChuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX1NUQVQpIFx1MDAyNiBUTVJfU1RBVF9FVFNfVkxEKGluZGV4KSlcbiYjNDM7XHRcdGV0dHMgPSBuZXRjX3RpbWVyX3JkNjQocHJpdiwgTkVUQ19UTVJfRVRUU19MKGluZGV4KSk7XG4gXG4gXHQvKiBJbnZhbGlkIHRpbWUgc3RhbXAgKi9cbi1cdGlmICghZXR0c19sIFx1MDAyNlx1MDAyNiAhZXR0c19oKVxuJiM0MztcdGlmICghZXR0cylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHVwZGF0ZV9ldmVudCkge1xuIFx0XHRldmVudC50eXBlID0gUFRQX0NMT0NLX0VYVFRTO1xuIFx0XHRldmVudC5pbmRleCA9IGluZGV4O1xuLVx0XHRldmVudC50aW1lc3RhbXAgPSAodTY0KWV0dHNfaCBcdTAwM2NcdTAwM2MgMzI7XG4tXHRcdGV2ZW50LnRpbWVzdGFtcCB8PSBldHRzX2w7XG4mIzQzO1x0XHRldmVudC50aW1lc3RhbXAgPSBldHRzO1xuIFx0XHRwdHBfY2xvY2tfZXZlbnQocHJpdi1cdTAwM2VjbG9jaywgXHUwMDI2ZXZlbnQpO1xuIFx0fVxuIH1cbkBAIC04MDIsNyAmIzQzOzc4OSw2IEBAIHN0YXRpYyBpbnQgbmV0Y190aW1lcl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cGNpZV9mbHIocGRldik7XG4gXHRlcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7RmFpbGVkIHRvIGVuYWJsZSBkZXZpY2VcXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHNhL3RhZ19uZXRjLmggYi9pbmNsdWRlL2xpbnV4L2RzYS90YWdfbmV0Yy5oXG5pbmRleCBmZTk2NDcyMmU1YjAzLi4yMjljNzBjYjdhOGFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kc2EvdGFnX25ldGMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kc2EvdGFnX25ldGMuaFxuQEAgLTEwLDUgJiM0MzsxMCw0NyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuIFxuICNkZWZpbmUgTkVUQ19UQUdfTUFYX0xFTlx0XHRcdDE0XG4mIzQzOyNkZWZpbmUgTkVUQ19UQUdfVFNfUkVRX0lEXHRcdFx0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIE5FVENfUFRQX0ZMQUdfT05FU1RFUFx0XHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIE5FVENfUFRQX0ZMQUdfVFdPU1RFUFx0XHRcdEJJVCgxKVxuJiM0MztcbiYjNDM7c3RydWN0IG5ldGNfc2tiX2NiIHtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwdHBfdHhfdGltZTtcbiYjNDM7XHR1NjQgdHN0YW1wO1xuJiM0MztcdHU4IHB0cF9mbGFnO1xuJiM0MztcdHU4IHRzX3JlcV9pZDtcbiYjNDM7XHQvKiBPbmUtc3RlcCBTeW5jIHBhcnNpbmcgcmVzdWx0cywgY29tcHV0ZWQgaW4gbmV0Y19wb3J0X3R4dHN0YW1wKClcbiYjNDM7XHQgKiBhbmQgcmV1c2VkIGluIHRoZSB0YWdnZXIgeG1pdCBwYXRoIGFuZCB0aGUgZGVmZXJyZWQgd29yaywgdG8gYXZvaWRcbiYjNDM7XHQgKiByZS1wYXJzaW5nIHRoZSBQVFAgaGVhZGVyLiBWYWxpZCBvbmx5IHdoaWxlXG4mIzQzO1x0ICogcHRwX2ZsYWcgPT0gTkVUQ19QVFBfRkxBR19PTkVTVEVQLlxuJiM0MztcdCAqL1xuJiM0MztcdHUxNiBjb3JyZWN0aW9uX29mZnNldDtcbiYjNDM7XHR1MTYgdGltZXN0YW1wX29mZnNldDtcbiYjNDM7XHRib29sIGlzX3VkcDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTkVUQ19TS0JfQ0Ioc2tiKVx0KChzdHJ1Y3QgbmV0Y19za2JfY2IgKikoKHNrYiktXHUwMDNlY2IpKVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhIC0gTkVUQyB0YWdnZXIvc3dpdGNoLWRyaXZlciBzaGFyZWQgb3BlcmF0aW9uc1xuJiM0MzsgKiBAdHdvc3RlcF90c3RhbXBfaGFuZGxlcjogQ2FsbGVkIGJ5IHRoZSB0YWdnZXIgd2hlbiBhIHR3by1zdGVwIHRyYW5zbWl0XG4mIzQzOyAqXHR0aW1lc3RhbXAgcmVzcG9uc2UgaXMgcmVjZWl2ZWQsIHRvIGRlbGl2ZXIgdGhlIHRpbWVzdGFtcCB0byB0aGVcbiYjNDM7ICpcdHN3aXRjaCBkcml2ZXIuXG4mIzQzOyAqIEBvbmVzdGVwX3N5bmNfaGFuZGxlcjogQ2FsbGVkIGZyb20gdGhlIHRhZ2dlciB4bWl0IHBhdGggZm9yIGEgb25lLXN0ZXAgU3luY1xuJiM0MzsgKlx0ZnJhbWUuIFJldHVybnMgdGhlIHNrYiBpZiBpdCBjYW4gYmUgdHJhbnNtaXR0ZWQgaW1tZWRpYXRlbHkgKHRoZVxuJiM0MzsgKlx0aW4tZmxpZ2h0IHNsb3QgaGFzIGJlZW4gY2xhaW1lZCBhbmQgUE1fU0lOR0xFX1NURVAgcHJvZ3JhbW1lZCksIG9yIE5VTExcbiYjNDM7ICpcdGlmIHRoZSBmcmFtZSBoYXMgYmVlbiBxdWV1ZWQgZm9yIGRlZmVycmVkIHRyYW5zbWlzc2lvbiBvciBkcm9wcGVkLlxuJiM0MzsgKiBAb25lc3RlcF9zeW5jX3htaXQ6IENhbGxlZCBieSB0aGUgc3dpdGNoIGRyaXZlciB0byB0cmFuc21pdCBhIGRlZmVycmVkXG4mIzQzOyAqXHRvbmUtc3RlcCBTeW5jIGZyYW1lIGRpcmVjdGx5IHRvIHRoZSBjb25kdWl0LCBieXBhc3NpbmcgZHNhX3VzZXJfeG1pdCgpLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEge1xuJiM0MztcdHZvaWQgKCp0d29zdGVwX3RzdGFtcF9oYW5kbGVyKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgICB1OCB0c19yZXFfaWQsIHU2NCB0cyk7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKigqb25lc3RlcF9zeW5jX2hhbmRsZXIpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiYjNDM7XHRcdFx0XHRcdFx0aW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IpO1xuJiM0MztcdG5ldGRldl90eF90ICgqb25lc3RlcF9zeW5jX3htaXQpKHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuJiM0Mzt9O1xuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNsL25ldGNfZ2xvYmFsLmggYi9pbmNsdWRlL2xpbnV4L2ZzbC9uZXRjX2dsb2JhbC5oXG5pbmRleCA1YjhmZjUyOGQzNjk5Li45MTQ0MWNiMzViYzI4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc2wvbmV0Y19nbG9iYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mc2wvbmV0Y19nbG9iYWwuaFxuQEAgLTIyLDQgJiM0MzsyMiwxMyBAQCBzdGF0aWMgaW5saW5lIHU2NCBuZXRjX3JlYWQ2NCh2b2lkIF9faW9tZW0gKnJlZylcbiBcdHJldHVybiBpb3JlYWQ2NChyZWcpO1xuIH1cbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1BUUF9ORVRDX1Y0X1RJTUVSKVxuJiM0Mzt1NjQgbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHN0cnVjdCBwY2lfZGV2ICp0aW1lcl9kZXYpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHU2NCBuZXRjX3RpbWVyX2dldF9jdXJyZW50X3RpbWUoc3RydWN0IHBjaV9kZXYgKnRpbWVyX2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19uZXRjLmMgYi9uZXQvZHNhL3RhZ19uZXRjLmNcbmluZGV4IGRmNzJhNjE3OTZhZDUuLjk0Y2NhMjBmZmNkYWQgMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL3RhZ19uZXRjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdGFnX25ldGMuY1xuQEAgLTE2LDYgJiM0MzsxNiwxMCBAQFxuICNkZWZpbmUgTkVUQ19UQUdfVE9fUE9SVFx0XHQxXG4gLyogU3ViVHlwZTA6IE5vIHJlcXVlc3QgdG8gcGVyZm9ybSB0aW1lc3RhbXBpbmcgKi9cbiAjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUwXHRcdDBcbiYjNDM7LyogU3ViVHlwZTE6IFJlcXVlc3QgdG8gcGVyZm9ybSBvbmUtc3RlcCB0aW1lc3RhbXBpbmcgKi9cbiYjNDM7I2RlZmluZSBORVRDX1RBR19UUF9TVUJUWVBFMVx0XHQxXG4mIzQzOy8qIFN1YlR5cGUyOiBSZXF1ZXN0IHRvIHBlcmZvcm0gdHdvLXN0ZXAgdGltZXN0YW1waW5nICovXG4mIzQzOyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTJcdFx0MlxuIFxuIC8qIFRvX0hvc3QgTlhQIHN3aXRjaCB0YWcgKi9cbiAjZGVmaW5lIE5FVENfVEFHX1RPX0hPU1RcdFx0MlxuQEAgLTI5LDYgJiM0MzszMyw4IEBAXG4gLyogTkVUQyBzd2l0Y2ggdGFnIGxlbmd0aHMgKi9cbiAjZGVmaW5lIE5FVENfVEFHX0ZPUldBUkRfTEVOXHRcdDZcbiAjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUwX0xFTlx0NlxuJiM0MzsjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUxX0xFTlx0MTBcbiYjNDM7I2RlZmluZSBORVRDX1RBR19UUF9TVUJUWVBFMl9MRU5cdDZcbiAjZGVmaW5lIE5FVENfVEFHX1RIX1NVQlRZUEUwX0xFTlx0NlxuICNkZWZpbmUgTkVUQ19UQUdfVEhfU1VCVFlQRTFfTEVOXHQxNFxuICNkZWZpbmUgTkVUQ19UQUdfVEhfU1VCVFlQRTJfTEVOXHQxNFxuQEAgLTQwLDYgJiM0Mzs0Niw3IEBAXG4gI2RlZmluZSBORVRDX1RBR19JUFZcdFx0XHRHRU5NQVNLKDQsIDIpXG4gI2RlZmluZSBORVRDX1RBR19TV0lUQ0hcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBORVRDX1RBR19QT1JUXHRcdFx0R0VOTUFTSyg3LCAzKVxuJiM0MzsjZGVmaW5lIE5FVENfVEFHX1RJTUVTVEFNUFx0XHRHRU5NQVNLKDI5LCAwKVxuIFxuIHN0cnVjdCBuZXRjX3RhZ19jbW4ge1xuIFx0X19iZTE2IHRwaWQ7XG5AQCAtNDgsNiAmIzQzOzU1LDI5IEBAIHN0cnVjdCBuZXRjX3RhZ19jbW4ge1xuIFx0dTggc3dpdGNoX3BvcnQ7XG4gfSBfX3BhY2tlZDtcbiBcbiYjNDM7c3RydWN0IG5ldGNfdGFnX3RwX3N1YnR5cGUxIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y190YWdfY21uIGNtbjtcbiYjNDM7XHR1OCByZXN2O1xuJiM0MztcdF9fYmUzMiB0aW1lc3RhbXA7XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbmV0Y190YWdfdHBfc3VidHlwZTIge1xuJiM0MztcdHN0cnVjdCBuZXRjX3RhZ19jbW4gY21uO1xuJiM0MztcdHU4IHRzX3JlcV9pZDtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMSB7XG4mIzQzO1x0c3RydWN0IG5ldGNfdGFnX2NtbiBjbW47XG4mIzQzO1x0dTggaG9zdF9yZWFzb247XG4mIzQzO1x0X19iZTY0IHRpbWVzdGFtcDtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMiB7XG4mIzQzO1x0c3RydWN0IG5ldGNfdGFnX2NtbiBjbW47XG4mIzQzO1x0dTggaHJfdHNyZXFfaWQ7XG4mIzQzO1x0X19iZTY0IHRpbWVzdGFtcDtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4gc3RhdGljIHZvaWQgbmV0Y19maWxsX2NvbW1vbl90YWcoc3RydWN0IG5ldGNfdGFnX2NtbiAqdGFnLCB1OCB0eXBlLFxuIFx0XHRcdFx0IHU4IHN1YnR5cGUsIHU4IHN3X2lkLCB1OCBwb3J0LCB1OCBpcHYpXG4ge1xuQEAgLTk3LDE1ICYjNDM7MTI3LDEyMCBAQCBzdGF0aWMgdm9pZCBuZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRORVRDX1RBR19UUF9TVUJUWVBFMF9MRU4pO1xuIH1cbiBcbi0vKiBDdXJyZW50bHkgb25seSBzdXBwb3J0IFRvX1BvcnQgdGFnLCBzdWJ0eXBlIDAgKi9cbiYjNDM7c3RhdGljIHZvaWQgbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHRzID0gRklFTERfUFJFUChORVRDX1RBR19USU1FU1RBTVAsIE5FVENfU0tCX0NCKHNrYiktXHUwMDNldHN0YW1wKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y190YWdfdHBfc3VidHlwZTEgKnRhZztcbiYjNDM7XG4mIzQzO1x0dGFnID0gbmV0Y19maWxsX2NvbW1vbl90cF90YWcoc2tiLCBuZGV2LCBORVRDX1RBR19UUF9TVUJUWVBFMSxcbiYjNDM7XHRcdFx0XHQgICAgICBORVRDX1RBR19UUF9TVUJUWVBFMV9MRU4pO1xuJiM0MztcdHRhZy1cdTAwM2V0aW1lc3RhbXAgPSBodG9ubCh0cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpjbG9uZSA9IE5FVENfU0tCX0NCKHNrYiktXHUwMDNlY2xvbmU7XG4mIzQzO1x0dTggdHNfcmVxX2lkID0gTkVUQ19TS0JfQ0IoY2xvbmUpLVx1MDAzZXRzX3JlcV9pZDtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y190YWdfdHBfc3VidHlwZTIgKnRhZztcbiYjNDM7XG4mIzQzO1x0dGFnID0gbmV0Y19maWxsX2NvbW1vbl90cF90YWcoc2tiLCBuZGV2LCBORVRDX1RBR19UUF9TVUJUWVBFMixcbiYjNDM7XHRcdFx0XHQgICAgICBORVRDX1RBR19UUF9TVUJUWVBFMl9MRU4pO1xuJiM0MztcdHRhZy1cdTAwM2V0c19yZXFfaWQgPSBGSUVMRF9QUkVQKE5FVENfVEFHX1RTX1JFUV9JRCwgdHNfcmVxX2lkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIG5ldGRldl90eF90IG5ldGNfb25lc3RlcF9zeW5jX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdC8qIFRoaXMgZGVmZXJyZWQgb25lLXN0ZXAgU3luYyBmcmFtZSBhbHJlYWR5IHdlbnQgdGhyb3VnaFxuJiM0MztcdCAqIGRzYV91c2VyX3htaXQoKSYjMzk7cyBza2JfZW5zdXJlX3dyaXRhYmxlX2hlYWRfdGFpbCgpIGFuZCBldGhfc2tiX3BhZCgpXG4mIzQzO1x0ICogYmVmb3JlIGl0IHdhcyBxdWV1ZWQgaW4gbmV0Y194bWl0KCksIGFuZCBub3RoaW5nIGhhcyBjbG9uZWQgaXQgb3JcbiYjNDM7XHQgKiBzaHJ1bmsgaXRzIGhlYWQvdGFpbCByb29tIHNpbmNlLiBTbyB0aGUgaGVhZC90YWlsIHJvb20gaXMgc3RpbGxcbiYjNDM7XHQgKiBndWFyYW50ZWVkIGFuZCB0aGUgc2tiIGlzIHN0aWxsIHdyaXRhYmxlOyBvbmx5IHRoZSB0YWcgbmVlZHMgdG8gYmVcbiYjNDM7XHQgKiBwdXNoZWQgYmVmb3JlIGhhbmRpbmcgaXQgZGlyZWN0bHkgdG8gdGhlIGNvbmR1aXQsIGJ5cGFzc2luZ1xuJiM0MztcdCAqIGRzYV91c2VyX3htaXQoKSBzbyB0aGF0IGRldl9zd19uZXRzdGF0c190eF9hZGQoKSBpcyBub3QgaW52b2tlZCBhXG4mIzQzO1x0ICogc2Vjb25kIHRpbWUgZm9yIHRoZSBzYW1lIGZyYW1lLlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTEoc2tiLCBkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZHNhX2VucXVldWVfc2tiKHNrYiwgZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjX29uZXN0ZXBfc3luY19wcm9jZXNzKHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdXNlcl90b19wb3J0KG5kZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YTtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbiYjNDM7XG4mIzQzO1x0dGFnZ2VyX2RhdGEgPSBkcC1cdTAwM2Vkcy1cdTAwM2V0YWdnZXJfZGF0YTtcbiYjNDM7XHRpZiAodW5saWtlbHkoIXRhZ2dlcl9kYXRhLVx1MDAzZW9uZXN0ZXBfc3luY19oYW5kbGVyKSkge1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIERlY2lkZSwgdW5kZXIgcHRwX2xvY2ssIHdoZXRoZXIgdGhpcyBvbmUtc3RlcCBTeW5jIGNhbiBiZSBzZW50XG4mIzQzO1x0ICogbm93IG9yIG11c3QgYmUgZGVmZXJyZWQuIFJldHVybnMgdGhlIHNrYiAod2l0aCB0aGUgaW4tZmxpZ2h0XG4mIzQzO1x0ICogc2xvdCBjbGFpbWVkIGFuZCBQTV9TSU5HTEVfU1RFUCBhbHJlYWR5IHByb2dyYW1tZWQpIGZvclxuJiM0MztcdCAqIGltbWVkaWF0ZSB0cmFuc21pc3Npb24sIG9yIE5VTEwgaWYgaXQgd2FzIHF1ZXVlZCBmb3IgZGVmZXJyZWRcbiYjNDM7XHQgKiB0cmFuc21pc3Npb24gb3IgZHJvcHBlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuc2tiID0gdGFnZ2VyX2RhdGEtXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIoZHAtXHUwMDNlZHMsIGRwLVx1MDAzZWluZGV4LCBza2IpO1xuJiM0MztcdGlmICh1bmxpa2VseSghbnNrYikpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5za2I7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4tXHRuZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUwKHNrYiwgbmRldik7XG4mIzQzO1x0dTggcHRwX2ZsYWcgPSBORVRDX1NLQl9DQihza2IpLVx1MDAzZXB0cF9mbGFnO1xuJiM0MztcbiYjNDM7XHQvKiBGYXN0IHBhdGg6IHRoZSBvdmVyd2hlbG1pbmcgbWFqb3JpdHkgb2YgZnJhbWVzIGFyZSBub3QgUFRQIGZyYW1lcyAqL1xuJiM0MztcdGlmIChsaWtlbHkoIXB0cF9mbGFnKSkge1xuJiM0MztcdFx0bmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMChza2IsIG5kZXYpO1xuJiM0MztcdFx0cmV0dXJuIHNrYjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwdHBfZmxhZyA9PSBORVRDX1BUUF9GTEFHX09ORVNURVApIHtcbiYjNDM7XHRcdGlmICghbmV0Y19vbmVzdGVwX3N5bmNfcHJvY2Vzcyhza2IsIG5kZXYpKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRuZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUxKHNrYiwgbmRldik7XG4mIzQzO1x0fSBlbHNlIGlmIChwdHBfZmxhZyA9PSBORVRDX1BUUF9GTEFHX1RXT1NURVApIHtcbiYjNDM7XHRcdG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTIoc2tiLCBuZGV2KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbmV0Y19yeF90c3RhbXBfcHJvY2VzcyhzdHJ1Y3QgbmV0Y190YWdfdGhfc3VidHlwZTEgKnRhZyxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHRzID0gZ2V0X3VuYWxpZ25lZF9iZTY0KFx1MDAyNnRhZy1cdTAwM2V0aW1lc3RhbXApO1xuJiM0MztcbiYjNDM7XHRORVRDX1NLQl9DQihza2IpLVx1MDAzZXRzdGFtcCA9IHRzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZXRjX3R3b3N0ZXBfdHN0YW1wX3Byb2Nlc3Moc3RydWN0IG5ldGNfdGFnX3RoX3N1YnR5cGUyICp0YWcsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4mIzQzO3tcbiYjNDM7XHR1OCB0c19yZXFfaWQgPSBGSUVMRF9HRVQoTkVUQ19UQUdfVFNfUkVRX0lELCB0YWctXHUwMDNlaHJfdHNyZXFfaWQpO1xuJiM0MztcdGludCBwb3J0ID0gRklFTERfR0VUKE5FVENfVEFHX1BPUlQsIHRhZy1cdTAwM2VjbW4uc3dpdGNoX3BvcnQpO1xuJiM0MztcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YSA9IGRzLVx1MDAzZXRhZ2dlcl9kYXRhO1xuJiM0MztcdHU2NCB0cyA9IGdldF91bmFsaWduZWRfYmU2NChcdTAwMjZ0YWctXHUwMDNldGltZXN0YW1wKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCF0YWdnZXJfZGF0YS1cdTAwM2V0d29zdGVwX3RzdGFtcF9oYW5kbGVyKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dGFnZ2VyX2RhdGEtXHUwMDNldHdvc3RlcF90c3RhbXBfaGFuZGxlcihkcywgcG9ydCwgdHNfcmVxX2lkLCB0cyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBuZXRjX2dldF9yeF90YWdfbGVuKGludCB0eXBlLCBpbnQgc3VidHlwZSlcbiB7XG4gXHQvKiBPbmx5IE5FVENfVEFHX1RPX0hPU1QgYW5kIE5FVENfVEFHX0ZPUldBUkQgYXJlIGV4cGVjdGVkIGluIFJYLFxuQEAgLTEyNiwxNCAmIzQzOzI2MSwxNyBAQCBzdGF0aWMgaW50IG5ldGNfZ2V0X3J4X3RhZ19sZW4oaW50IHR5cGUsIGludCBzdWJ0eXBlKVxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gbmRldi1cdTAwM2Vkc2FfcHRyO1xuIFx0c3RydWN0IG5ldGNfdGFnX2NtbiAqdGFnX2NtbjtcbiBcdGludCB0YWdfbGVuLCBzd19pZCwgcG9ydDtcbiBcdGludCB0eXBlLCBzdWJ0eXBlO1xuJiM0MztcdHZvaWQgKnRhZztcbiBcbi1cdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIE5FVENfVEFHX01BWF9MRU4pKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBORVRDX1RBR19NQVhfTEVOIC0gMikpKVxuIFx0XHRnb3RvIGVycl9mcmVlX3NrYjtcbiBcbi1cdHRhZ19jbW4gPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc19yeChza2IpO1xuJiM0MztcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7XG4mIzQzO1x0dGFnX2NtbiA9IHRhZztcbiBcdGlmIChudG9ocyh0YWdfY21uLVx1MDAzZXRwaWQpICE9IEVUSF9QX05YUF9ORVRDKSB7XG4gXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKFx1MDAyNm5kZXYtXHUwMDNlZGV2LCBcJiMzNDtVbmtub3duIFRQSUQgMHglMDR4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0ICAgICBudG9ocyh0YWdfY21uLVx1MDAzZXRwaWQpKTtcbkBAIC0xNjEsMTIgJiM0MzsyOTksMjggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHR5cGUgPT0gTkVUQ19UQUdfRk9SV0FSRCkge1xuIFx0XHRkc2FfZGVmYXVsdF9vZmZsb2FkX2Z3ZF9tYXJrKHNrYik7XG4gXHR9IGVsc2UgaWYgKHR5cGUgPT0gTkVUQ19UQUdfVE9fSE9TVCkge1xuLVx0XHQvKiBDdXJyZW50bHkgb25seSBzdWJ0eXBlMCBzdXBwb3J0ZWQgKi9cbi1cdFx0aWYgKHN1YnR5cGUgIT0gTkVUQ19UQUdfVEhfU1VCVFlQRTApXG4mIzQzO1x0XHRzd2l0Y2ggKHN1YnR5cGUpIHtcbiYjNDM7XHRcdGNhc2UgTkVUQ19UQUdfVEhfU1VCVFlQRTA6XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBORVRDX1RBR19USF9TVUJUWVBFMTpcbiYjNDM7XHRcdFx0bmV0Y19yeF90c3RhbXBfcHJvY2Vzcyh0YWcsIHNrYik7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBORVRDX1RBR19USF9TVUJUWVBFMjpcbiYjNDM7XHRcdFx0LyogVGhpcyBza2IgaXMgYSBoYXJkd2FyZS1nZW5lcmF0ZWQgcmVzcG9uc2UgdG8gYVxuJiM0MztcdFx0XHQgKiB0d28tc3RlcCB0cmFuc21pdCB0aW1lc3RhbXAgcmVxdWVzdC4gVGhlIHRhZ1xuJiM0MztcdFx0XHQgKiBkcml2ZXIgbXVzdCBmcmVlIHRoZSBza2IgYWZ0ZXIgcHJvY2Vzc2luZy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG5ldGNfdHdvc3RlcF90c3RhbXBfcHJvY2Vzcyh0YWcsIGRwLVx1MDAzZWRzKTtcbiYjNDM7XHRcdFx0Z290byBlcnJfZnJlZV9za2I7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChcdTAwMjZuZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7VW5zdXBwb3J0ZWQgVG9fSG9zdCBzdWJ0eXBlOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3VidHlwZSk7XG4gXHRcdFx0Z290byBlcnJfZnJlZV9za2I7XG4mIzQzO1x0XHR9XG4gXHR9IGVsc2Uge1xuIFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChcdTAwMjZuZGV2LVx1MDAzZWRldixcbi1cdFx0XHRcdCAgICAgXCYjMzQ7VW5leHBlY3RlZCAgdGFnIHR5cGUgJWRcXG5cJiMzNDssIHR5cGUpO1xuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7VW5leHBlY3RlZCB0YWcgdHlwZSAlZFxcblwmIzM0OywgdHlwZSk7XG4gXHRcdGdvdG8gZXJyX2ZyZWVfc2tiO1xuIFx0fVxuIFxuQEAgLTIwMCw2ICYjNDM7MzU0LDI4IEBAIHN0YXRpYyB2b2lkIG5ldGNfZmxvd19kaXNzZWN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8sXG4gXHQqcHJvdG8gPSAoKF9fYmUxNiAqKXNrYi1cdTAwM2VkYXRhKVsodGFnX2xlbiAvIDIpIC0gMV07XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG5ldGNfY29ubmVjdChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7XG4mIzQzO1xuJiM0MztcdHRhZ2dlcl9kYXRhID0ga3phbGxvY19vYmooKnRhZ2dlcl9kYXRhKTtcbiYjNDM7XHRpZiAoIXRhZ2dlcl9kYXRhKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHRhZ2dlcl9kYXRhLVx1MDAzZW9uZXN0ZXBfc3luY194bWl0ID0gbmV0Y19vbmVzdGVwX3N5bmNfeG1pdDtcbiYjNDM7XHRkcy1cdTAwM2V0YWdnZXJfZGF0YSA9IHRhZ2dlcl9kYXRhO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbmV0Y19kaXNjb25uZWN0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YSA9IGRzLVx1MDAzZXRhZ2dlcl9kYXRhO1xuJiM0MztcbiYjNDM7XHRrZnJlZSh0YWdnZXJfZGF0YSk7XG4mIzQzO1x0ZHMtXHUwMDNldGFnZ2VyX2RhdGEgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgbmV0Y19uZXRkZXZfb3BzID0ge1xuIFx0Lm5hbWVcdFx0XHQ9IE5FVENfTkFNRSxcbiBcdC5wcm90b1x0XHRcdD0gRFNBX1RBR19QUk9UT19ORVRDLFxuQEAgLTIwNyw2ICYjNDM7MzgzLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyBuZXRjX25ldGRldl9vcHMgPSB7XG4gXHQucmN2XHRcdFx0PSBuZXRjX3JjdixcbiBcdC5uZWVkZWRfaGVhZHJvb21cdD0gTkVUQ19UQUdfTUFYX0xFTixcbiBcdC5mbG93X2Rpc3NlY3RcdFx0PSBuZXRjX2Zsb3dfZGlzc2VjdCxcbiYjNDM7XHQuY29ubmVjdFx0XHQ9IG5ldGNfY29ubmVjdCxcbiYjNDM7XHQuZGlzY29ubmVjdFx0XHQ9IG5ldGNfZGlzY29ubmVjdCxcbiB9O1xuIFxuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtEU0EgdGFnIGRyaXZlciBmb3IgTlhQIE5FVEMgc3dpdGNoIGZhbWlseVwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIHN1cHBvcnQgdG8gdGhlIE5YUCBORVRDIHN3aXRjaCBkcml2ZXIgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWdnZXIuIFRoZSBORVRDIHN3aXRjaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGRldmljZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gU2luY2UgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIHJlcXVpcmVkIHRvIHByb2JlIHRoZSBkcml2ZXIgYW5kIGluc3RhbnRpYXRlIHRoZSBEU0Egc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbiBib3RoIHRoZSBkcml2ZXIgYW5kIHRoZSB0YWdnZXIgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZDkzMjNmNjM4NjYwYjkyMjRkOTdkMmY5MDNhMTQzNGJjMmRkN2FjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMDc6NTU6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZwppbmRleCA3OTNmNzY5MWEyNGYzLi41NWIxZjEzMzhhODc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWcKQEAgLTQsNiAmIzQzOzQsNyBAQCBjb25maWcgTkVUX0RTQV9ORVRDX1NXSVRDSAogCWRlcGVuZHMgb24gQVJNNjQgfHwgQ09NUElMRV9URVNUCiAJZGVwZW5kcyBvbiBORVRfRFNBICZhbXA7JmFtcDsgUENJCiAJZGVwZW5kcyBvbiBORVRfVkVORE9SX0ZSRUVTQ0FMRQomIzQzOwlkZXBlbmRzIG9uIFBUUF9ORVRDX1Y0X1RJTUVSIHx8IFBUUF9ORVRDX1Y0X1RJTUVSPW4KIAlzZWxlY3QgTkVUX0RTQV9UQUdfTkVUQwogCXNlbGVjdCBGU0xfRU5FVENfTURJTwogCXNlbGVjdCBOWFBfTlRNUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9NYWtlZmlsZQppbmRleCBmNDBiMTNjNzAyZTA3Li41NzJiODMzYWQ4MGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9NYWtlZmlsZQpAQCAtMSwzICYjNDM7MSw0IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIG9iai0kKENPTkZJR19ORVRfRFNBX05FVENfU1dJVENIKSAmIzQzOz0gbnhwLW5ldGMtc3dpdGNoLm8KLW54cC1uZXRjLXN3aXRjaC1vYmpzIDo9IG5ldGNfbWFpbi5vIG5ldGNfcGxhdGZvcm0ubyBuZXRjX2V0aHRvb2wubwomIzQzO254cC1uZXRjLXN3aXRjaC1vYmpzIDo9IG5ldGNfbWFpbi5vIG5ldGNfcGxhdGZvcm0ubyBuZXRjX2V0aHRvb2wubyBcCiYjNDM7CQkJbmV0Y19wdHAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYwppbmRleCA3NzA3NzM1MmMxYTU3Li45ODU1ZTAyYjQ3MjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYwpAQCAtNjUsNiAmIzQzOzY1LDIxIEBAIG5ldGNfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCXJldHVybiBEU0FfVEFHX1BST1RPX05FVEM7CiB9CiAKJiM0MztzdGF0aWMgaW50IG5ldGNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCQkgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YTsKJiM0MzsKJiM0MzsJaWYgKHByb3RvICE9IERTQV9UQUdfUFJPVE9fTkVUQykKJiM0MzsJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOwomIzQzOwomIzQzOwl0YWdnZXJfZGF0YSA9IGRzLSZndDt0YWdnZXJfZGF0YTsKJiM0MzsJdGFnZ2VyX2RhdGEtJmd0O29uZXN0ZXBfc3luY19oYW5kbGVyID0gbmV0Y19vbmVzdGVwX3N5bmNfaGFuZGxlcjsKJiM0MzsJdGFnZ2VyX2RhdGEtJmd0O3R3b3N0ZXBfdHN0YW1wX2hhbmRsZXIgPSBuZXRjX3R3b3N0ZXBfdHN0YW1wX2hhbmRsZXI7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9ybXcoc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsCiAJCQkgIHUzMiBtYXNrLCB1MzIgdmFsKQogewpAQCAtODAsNyAmIzQzOzk1LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3JtdyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIHJlZywKIAluZXRjX3BvcnRfd3IobnAsIHJlZywgbmV3KTsKIH0KIAotc3RhdGljIHZvaWQgbmV0Y19tYWNfcG9ydF93cihzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIHJlZywgdTMyIHZhbCkKJiM0Mzt2b2lkIG5ldGNfbWFjX3BvcnRfd3Ioc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsIHUzMiB2YWwpCiB7CiAJaWYgKGlzX25ldGNfcHNldWRvX3BvcnQobnApKQogCQlyZXR1cm47CkBAIC0yMzgsNiAmIzQzOzI1MywxNSBAQCBzdGF0aWMgdm9pZCBuZXRjX2dldF9zd2l0Y2hfY2FwYWJpbGl0aWVzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdikKIAlwcml2LSZndDtudW1fYnAgPSBGSUVMRF9HRVQoQlBDQVBSX05VTV9CUCwgdmFsKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9pbml0X3B0cF9pcGZ0X2VpZChzdHJ1Y3QgbmV0Y19wb3J0ICpucCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIHRvIGludmFsaWQgZW50cnkgSURzICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBORVRDX1BUUF9NQVg7IGkmIzQzOyYjNDM7KQomIzQzOwkJbnAtJmd0O3B0cF9pcGZ0X2VpZFtpXSA9IE5UTVBfTlVMTF9FTlRSWV9JRDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG5ldGNfaW5pdF9hbGxfcG9ydHMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtJmd0O2RldjsKQEAgLTI4Niw2ICYjNDM7MzEwLDE3IEBAIHN0YXRpYyBpbnQgbmV0Y19pbml0X2FsbF9wb3J0cyhzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpCiAJCQkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBNRElPIGJ1c1xuJiMzNDspOwogCQkJCXJldHVybiBlcnI7CiAJCQl9CiYjNDM7CiYjNDM7CQkJLyogVGhlIGlwZnRfaGZfZWlkIGlzIGluaXRpYWxpemVkIHRvIGFuIGludmFsaWQgZW50cnkKJiM0MzsJCQkgKiBJRCBiZWNhdXNlIHRoZSBob3N0IGZsb29kIHJ1bGUgKElQRlQgZW50cnkpIGhhcyBub3QKJiM0MzsJCQkgKiBiZWVuIGNyZWF0ZWQuCiYjNDM7CQkJICovCiYjNDM7CQkJbnAtJmd0O2lwZnRfaGZfZWlkID0gTlRNUF9OVUxMX0VOVFJZX0lEOwomIzQzOwkJCW5ldGNfcG9ydF9pbml0X3B0cF9pcGZ0X2VpZChucCk7CiYjNDM7CQkJc3Bpbl9sb2NrX2luaXQoJmFtcDtucC0mZ3Q7cHRwX2xvY2spOwomIzQzOwkJCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO25wLSZndDtza2JfdHh0c3RhbXBfcXVldWUpOwomIzQzOwkJCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO25wLSZndDtza2Jfb25lc3RlcF9xdWV1ZSk7CiYjNDM7CQkJSU5JVF9XT1JLKCZhbXA7bnAtJmd0O29uZXN0ZXBfd29yaywgbmV0Y19wb3J0X29uZXN0ZXBfd29yayk7CiAJCX0KIAl9CiAKQEAgLTU0OSw2ICYjNDM7NTg0LDEyIEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9maXhlZF9jb25maWcoc3RydWN0IG5ldGNfcG9ydCAqbnApCiAJbmV0Y19wb3J0X3JtdyhucCwgTkVUQ19QQ1IsIFBDUl9MMkRPU0UgfCBQQ1JfTDNET1NFLAogCQkgICAgICBQQ1JfTDJET1NFIHwgUENSX0wzRE9TRSk7CiAKJiM0MzsJLyogRW5hYmxlIGluZ3Jlc3MgcG9ydCBmaWx0ZXIgdGFibGUgbG9va3VwLCBpZiBubyBtYXRjaCBpcyBmb3VuZCwKJiM0MzsJICogdGhlIGZyYW1lIGlzIGFsbG93ZWQgYW5kIHBhc3NlZCB0byB0aGUgbmV4dCBmcmFtZSBwcm9jZXNzaW5nCiYjNDM7CSAqIGZ1bmN0aW9uLgomIzQzOwkgKi8KJiM0MzsJbmV0Y19wb3J0X3dyKG5wLCBORVRDX1BJUEZDUiwgUElQRkNSX0VOKTsKJiM0MzsKIAkvKiBTZXQgdGhlIHF1YW50YSB2YWx1ZSBvZiBUWCBQQVVTRSBmcmFtZSAqLwogCW5ldGNfbWFjX3BvcnRfd3IobnAsIE5FVENfUE1fUEFVU0VfUVVBTlRBKDApLCBORVRDX1BBVVNFX1FVQU5UQSk7CiAKQEAgLTg2OSw2ICYjNDM7OTEwLDE1IEBAIHN0YXRpYyBpbnQgbmV0Y19zd2l0Y2hfYnB0X2RlZmF1bHRfY29uZmlnKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbmV0Y19nZXRfcHRwX3RpbWVyKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfYnVzICpidXMgPSBwcml2LSZndDtwZGV2LSZndDtidXM7CiYjNDM7CXUzMiBkZXZmbiA9IHByaXYtJmd0O2luZm8tJmd0O3Rtcl9kZXZmbjsKJiM0MzsKJiM0MzsJcmV0dXJuIHBjaV9nZXRfZG9tYWluX2J1c19hbmRfc2xvdChwY2lfZG9tYWluX25yKGJ1cyksCiYjNDM7CQkJCQkgICBidXMtJmd0O251bWJlciwgZGV2Zm4pOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmV0Y19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJc3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gZHMtJmd0O3ByaXY7CkBAIC04ODksNiAmIzQzOzkzOSwxNiBAQCBzdGF0aWMgaW50IG5ldGNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKJiM0MzsJLyogVGhlIFBUUCB0aW1lciBzaXRzIG9uIHRoZSBzYW1lIFBDSSBidXMgYXMgdGhlIHN3aXRjaC4gUENJIGNyZWF0ZXMKJiM0MzsJICogZXZlcnkgZnVuY3Rpb24mIzM5O3MgcGNpX2RldiBkdXJpbmcgYnVzIGVudW1lcmF0aW9uLCBiZWZvcmUgYW55IGRyaXZlcgomIzQzOwkgKiBwcm9iZXMsIHNvIHdlIGNhbiBncmFiIHRoZSB0aW1lciYjMzk7cyBwY2lfZGV2IGhlcmUgZXZlbiBpZiB0aGUgdGltZXIKJiM0MzsJICogZHJpdmVyIGhhcyBub3QgcHJvYmVkIHlldC4KJiM0MzsJICovCiYjNDM7CXByaXYtJmd0O3Rtcl9kZXYgPSBuZXRjX2dldF9wdHBfdGltZXIocHJpdik7CiYjNDM7CWlmICghcHJpdi0mZ3Q7dG1yX2RldikKJiM0MzsJCWRldl9pbmZvKHByaXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtQVFAgdGltZXIgUENJIGRldmljZSBub3QgZm91bmRcbiYjMzQ7KTsKJiM0MzsKIAlJTklUX0hMSVNUX0hFQUQoJmFtcDtwcml2LSZndDtmZGJfbGlzdCk7CiAJbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O2ZkYnRfbG9jayk7CiAJcHJpdi0mZ3Q7ZmRidF9hZ2VpbmdfZGVsYXkgPSBORVRDX0ZEQlRfQUdFSU5HX0RFTEFZOwpAQCAtOTI1LDYgJiM0Mzs5ODUsNyBAQCBzdGF0aWMgaW50IG5ldGNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCSAqLwogCW11dGV4X2Rlc3Ryb3koJmFtcDtwcml2LSZndDtmZGJ0X2xvY2spOwogCW11dGV4X2Rlc3Ryb3koJmFtcDtwcml2LSZndDt2ZnRfbG9jayk7CiYjNDM7CXBjaV9kZXZfcHV0KHByaXYtJmd0O3Rtcl9kZXYpOwogCW5ldGNfZnJlZV9udG1wX3VzZXIocHJpdik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtOTM4LDIwICYjNDM7OTk5LDIzIEBAIHN0YXRpYyB2b2lkIG5ldGNfZGVzdHJveV9hbGxfbGlzdHMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KQogCW11dGV4X2Rlc3Ryb3koJmFtcDtwcml2LSZndDt2ZnRfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIG5ldGNfZnJlZV9ob3N0X2Zsb29kX3J1bGVzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdikKJiM0MztzdGF0aWMgdm9pZCBuZXRjX2ZyZWVfcG9ydHNfcmVzb3VyY2VzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdikKIHsKIAlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwogCi0JZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIHByaXYtJmd0O2RzKSB7CiYjNDM7CWRzYV9zd2l0Y2hfZm9yX2VhY2hfYXZhaWxhYmxlX3BvcnQoZHAsIHByaXYtJmd0O2RzKSB7CiAJCXN0cnVjdCBuZXRjX3BvcnQgKm5wID0gcHJpdi0mZ3Q7cG9ydHNbZHAtJmd0O2luZGV4XTsKIAotCQkvKiBObyBuZWVkIHRvIGNsZWFyIHRoZSBoYXJkd2FyZSBJUEZUIGVudHJ5LiBCZWNhdXNlIFBDSWUKLQkJICogRkxSIHdpbGwgYmUgcGVyZm9ybWVkIHdoZW4gdGhlIHN3aXRjaCBpcyByZS1yZWdpc3RlcmVkLAotCQkgKiBpdCB3aWxsIHJlc2V0IGhhcmR3YXJlIHN0YXRlLiBTbyBvbmx5IG5lZWQgdG8gZnJlZSB0aGUKLQkJICogbWVtb3J5IHRvIGF2b2lkIG1lbW9yeSBsZWFrLgomIzQzOwkJaWYgKCFkc2FfcG9ydF9pc191c2VyKGRwKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIE5vIG5ldyBTS0JzIGNhbiBiZSBlbnF1ZXVlZCBkdXJpbmcgdGVhcmRvd24uIFB1cmdlIHdpdGhvdXQKJiM0MzsJCSAqIHRoZSBzcGlubG9jayB0byBhdm9pZCBjYWxsaW5nIGtmcmVlX3NrYigpIHdpdGggYSBkZXN0cnVjdG9yCiYjNDM7CQkgKiAoc29ja19lZnJlZSkgd2hpbGUgaG9sZGluZyBhIHNwaW5sb2NrLgogCQkgKi8KLQkJa2ZyZWUobnAtJmd0O2hvc3RfZmxvb2QpOwotCQlucC0mZ3Q7aG9zdF9mbG9vZCA9IE5VTEw7CiYjNDM7CQlfX3NrYl9xdWV1ZV9wdXJnZSgmYW1wO25wLSZndDtza2JfdHh0c3RhbXBfcXVldWUpOwomIzQzOwkJY2FuY2VsX3dvcmtfc3luYygmYW1wO25wLSZndDtvbmVzdGVwX3dvcmspOwomIzQzOwkJX19za2JfcXVldWVfcHVyZ2UoJmFtcDtucC0mZ3Q7c2tiX29uZXN0ZXBfcXVldWUpOwogCX0KIH0KIApAQCAtOTYxLDggJiM0MzsxMDI1LDkgQEAgc3RhdGljIHZvaWQgbmV0Y190ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAKIAlkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7cHJpdi0mZ3Q7ZmRidF9hZ2Vpbmdfd29yayk7CiAJbmV0Y19kZXN0cm95X2FsbF9saXN0cyhwcml2KTsKLQluZXRjX2ZyZWVfaG9zdF9mbG9vZF9ydWxlcyhwcml2KTsKJiM0MzsJcGNpX2Rldl9wdXQocHJpdi0mZ3Q7dG1yX2Rldik7CiAJbmV0Y19mcmVlX250bXBfdXNlcihwcml2KTsKJiM0MzsJbmV0Y19mcmVlX3BvcnRzX3Jlc291cmNlcyhwcml2KTsKIH0KIAogc3RhdGljIGJvb2wgbmV0Y19wb3J0X2lzX2VtZGlvX2NvbnN1bWVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKQEAgLTE3MjAsOCAmIzQzOzE3ODUsNiBAQCBzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfaG9zdF9mbG9vZF9ydWxlKHN0cnVjdCBuZXRjX3BvcnQgKm5wLAogCWludCBlcnI7CiAKIAlpZiAoIXVjICZhbXA7JmFtcDsgIW1jKSB7Ci0JCS8qIERpc2FibGUgaW5ncmVzcyBwb3J0IGZpbHRlciB0YWJsZSBsb29rdXAgKi8KLQkJbmV0Y19wb3J0X3dyKG5wLCBORVRDX1BJUEZDUiwgMCk7CiAJCW5wLSZndDt1YyA9IGZhbHNlOwogCQlucC0mZ3Q7bWMgPSBmYWxzZTsKIApAQCAtMTc1OSw0MCAmIzQzOzE4MjIsMzYgQEAgc3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2hvc3RfZmxvb2RfcnVsZShzdHJ1Y3QgbmV0Y19wb3J0ICpucCwKIAljZmdlLSZndDtjZmcgPSBjcHVfdG9fbGUzMihjZmcpOwogCiAJZXJyID0gbnRtcF9pcGZ0X2FkZF9lbnRyeSgmYW1wO3ByaXYtJmd0O250bXAsIGhvc3RfZmxvb2QpOwotCWlmIChlcnIpIHsKLQkJa2ZyZWUoaG9zdF9mbG9vZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBmcmVlX2hvc3RfZmxvb2Q7CiAKIAlucC0mZ3Q7dWMgPSB1YzsKIAlucC0mZ3Q7bWMgPSBtYzsKLQlucC0mZ3Q7aG9zdF9mbG9vZCA9IGhvc3RfZmxvb2Q7Ci0JLyogRW5hYmxlIGluZ3Jlc3MgcG9ydCBmaWx0ZXIgdGFibGUgbG9va3VwICovCi0JbmV0Y19wb3J0X3dyKG5wLCBORVRDX1BJUEZDUiwgUElQRkNSX0VOKTsKJiM0MzsJbnAtJmd0O2lwZnRfaGZfZWlkID0gaG9zdF9mbG9vZC0mZ3Q7ZW50cnlfaWQ7CiAKLQlyZXR1cm4gMDsKJiM0MztmcmVlX2hvc3RfZmxvb2Q6CiYjNDM7CWtmcmVlKGhvc3RfZmxvb2QpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBuZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2Qoc3RydWN0IG5ldGNfcG9ydCAqbnAsCi0JCQkJCXN0cnVjdCBpcGZ0X2VudHJ5X2RhdGEgKmhvc3RfZmxvb2QpCiYjNDM7c3RhdGljIHZvaWQgbmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKHN0cnVjdCBuZXRjX3BvcnQgKm5wLCB1MzIgZW50cnlfaWQpCiB7CiAJc3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtJmd0O3N3aXRjaF9wcml2OwogCWJvb2wgZGlzYWJsZV9ob3N0X2Zsb29kID0gZmFsc2U7CiAKLQlpZiAoIWhvc3RfZmxvb2QpCiYjNDM7CWlmIChlbnRyeV9pZCA9PSBOVE1QX05VTExfRU5UUllfSUQpCiAJCXJldHVybjsKIAotCWlmIChucC0mZ3Q7aG9zdF9mbG9vZCA9PSBob3N0X2Zsb29kKQomIzQzOwlpZiAobnAtJmd0O2lwZnRfaGZfZWlkID09IGVudHJ5X2lkKQogCQlkaXNhYmxlX2hvc3RfZmxvb2QgPSB0cnVlOwogCi0JbnRtcF9pcGZ0X2RlbGV0ZV9lbnRyeSgmYW1wO3ByaXYtJmd0O250bXAsIGhvc3RfZmxvb2QtJmd0O2VudHJ5X2lkKTsKLQlrZnJlZShob3N0X2Zsb29kKTsKJiM0MzsJbnRtcF9pcGZ0X2RlbGV0ZV9lbnRyeSgmYW1wO3ByaXYtJmd0O250bXAsIGVudHJ5X2lkKTsKIAogCWlmIChkaXNhYmxlX2hvc3RfZmxvb2QpIHsKLQkJbnAtJmd0O2hvc3RfZmxvb2QgPSBOVUxMOwomIzQzOwkJbnAtJmd0O2lwZnRfaGZfZWlkID0gTlRNUF9OVUxMX0VOVFJZX0lEOwogCQlucC0mZ3Q7dWMgPSBmYWxzZTsKIAkJbnAtJmd0O21jID0gZmFsc2U7Ci0JCW5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIDApOwogCX0KIH0KIApAQCAtMTgwMCw3ICYjNDM7MTg1OSw3IEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9zZXRfaG9zdF9mbG9vZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkJCSAgICAgYm9vbCB1YywgYm9vbCBtYykKIHsKIAlzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7Ci0Jc3RydWN0IGlwZnRfZW50cnlfZGF0YSAqb2xkX2hvc3RfZmxvb2Q7CiYjNDM7CXUzMiBvbGRfZW50cnlfaWQ7CiAKIAkvKiBEbyBub3QgYWRkIGhvc3QgZmxvb2QgcnVsZSB0byBpbmdyZXNzIHBvcnQgZmlsdGVyIHRhYmxlIHdoZW4KIAkgKiB0aGUgcG9ydCBoYXMgam9pbmVkIGEgYnJpZGdlLiBPdGhlcndpc2UsIHRoZSBpbmdyZXNzIGZyYW1lcwpAQCAtMTgwOCw3ICYjNDM7MTg2Nyw3IEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9zZXRfaG9zdF9mbG9vZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCSAqIHdpbGwgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSB0byB0aGUgQ1BVIHBvcnQuCiAJICovCiAJaWYgKGRzYV9wb3J0X2JyaWRnZV9kZXZfZ2V0KG5wLSZndDtkcCkpIHsKLQkJbmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBucC0mZ3Q7aG9zdF9mbG9vZCk7CiYjNDM7CQluZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2QobnAsIG5wLSZndDtpcGZ0X2hmX2VpZCk7CiAKIAkJcmV0dXJuOwogCX0KQEAgLTE4MTgsMjAgJiM0MzsxODc3LDE4IEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9zZXRfaG9zdF9mbG9vZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCiAJLyogSVBGVCBkb2VzIG5vdCBzdXBwb3J0IGluLXBsYWNlIHVwZGF0ZXMgdG8gdGhlIEtFWUUgZWxlbWVudCwKIAkgKiB3ZSBuZWVkIHRvIGFkZCBhIG5ldyBlbnRyeSBhbmQgdGhlbiBkZWxldGUgdGhlIG9sZCBvbmUuIFNvCi0JICogc2F2ZSB0aGUgb2xkIGVudHJ5IGZpcnN0LgomIzQzOwkgKiBzYXZlIHRoZSBvbGQgZW50cnkgSUQgZmlyc3QuCiAJICovCi0Jb2xkX2hvc3RfZmxvb2QgPSBucC0mZ3Q7aG9zdF9mbG9vZDsKLQlucC0mZ3Q7aG9zdF9mbG9vZCA9IE5VTEw7CiYjNDM7CW9sZF9lbnRyeV9pZCA9IG5wLSZndDtpcGZ0X2hmX2VpZDsKIAogCWlmIChuZXRjX3BvcnRfYWRkX2hvc3RfZmxvb2RfcnVsZShucCwgdWMsIG1jKSkgewotCQlucC0mZ3Q7aG9zdF9mbG9vZCA9IG9sZF9ob3N0X2Zsb29kOwogCQlkZXZfZXJyKGRzLSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIGFkZCBob3N0IGZsb29kIHJ1bGUgb24gcG9ydCAlZFxuJiMzNDssCiAJCQlwb3J0KTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIFJlbW92ZSB0aGUgb2xkIGhvc3QgZmxvb2QgZW50cnkgKi8KLQluZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2QobnAsIG9sZF9ob3N0X2Zsb29kKTsKJiM0MzsJbmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBvbGRfZW50cnlfaWQpOwogfQogCiBzdGF0aWMgaW50IG5ldGNfc2luZ2xlX3ZsYW5fYXdhcmVfYnJpZGdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKQEAgLTIwMjAsNyAmIzQzOzIwNzcsNyBAQCBzdGF0aWMgaW50IG5ldGNfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCW5ldGNfcG9ydF9zZXRfcHZpZChucCwgdmxhbl91bmF3YXJlX3B2aWQpOwogCiBvdXQ6Ci0JbmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBucC0mZ3Q7aG9zdF9mbG9vZCk7CiYjNDM7CW5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgbnAtJmd0O2lwZnRfaGZfZWlkKTsKIAogCWlmIChhdG9taWNfaW5jX3JldHVybigmYW1wO3ByaXYtJmd0O2JyX2NudCkgPT0gMSkKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7cHJpdi0mZ3Q7ZmRidF9hZ2Vpbmdfd29yaywKQEAgLTI0MDIsNiAmIzQzOzI0NTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBuZXRjX3BoeWxpbmtfbWFjX29wcyA9IHsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBuZXRjX3N3aXRjaF9vcHMgPSB7CiAJLmdldF90YWdfcHJvdG9jb2wJCT0gbmV0Y19nZXRfdGFnX3Byb3RvY29sLAomIzQzOwkuY29ubmVjdF90YWdfcHJvdG9jb2wJCT0gbmV0Y19jb25uZWN0X3RhZ19wcm90b2NvbCwKIAkuc2V0dXAJCQkJPSBuZXRjX3NldHVwLAogCS50ZWFyZG93bgkJCT0gbmV0Y190ZWFyZG93biwKIAkucGh5bGlua19nZXRfY2FwcwkJPSBuZXRjX3BoeWxpbmtfZ2V0X2NhcHMsCkBAIC0yNDMwLDYgJiM0MzsyNDg4LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbmV0Y19zd2l0Y2hfb3BzID0gewogCS5nZXRfc3NldF9jb3VudAkJCT0gbmV0Y19wb3J0X2dldF9zc2V0X2NvdW50LAogCS5nZXRfc3RyaW5ncwkJCT0gbmV0Y19wb3J0X2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cwkJPSBuZXRjX3BvcnRfZ2V0X2V0aHRvb2xfc3RhdHMsCiYjNDM7CS5nZXRfdHNfaW5mbwkJCT0gbmV0Y19nZXRfdHNfaW5mbywKJiM0MzsJLnBvcnRfaHd0c3RhbXBfc2V0CQk9IG5ldGNfcG9ydF9od3RzdGFtcF9zZXQsCiYjNDM7CS5wb3J0X2h3dHN0YW1wX2dldAkJPSBuZXRjX3BvcnRfaHd0c3RhbXBfZ2V0LAomIzQzOwkucG9ydF9yeHRzdGFtcAkJCT0gbmV0Y19wb3J0X3J4dHN0YW1wLAomIzQzOwkucG9ydF90eHRzdGFtcAkJCT0gbmV0Y19wb3J0X3R4dHN0YW1wLAogfTsKIAogc3RhdGljIGludCBuZXRjX3N3aXRjaF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcGxhdGZvcm0uYyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcGxhdGZvcm0uYwppbmRleCAzNGFlYjZmY2ViM2NiLi40ZmQwY2U2NzcwYzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3BsYXRmb3JtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wbGF0Zm9ybS5jCkBAIC01MCw2ICYjNDM7NTAsNyBAQCBzdGF0aWMgdm9pZCBpbXg5NF9zd2l0Y2hfcGh5bGlua19nZXRfY2FwcyhpbnQgcG9ydCwKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRjX3N3aXRjaF9pbmZvIGlteDk0X2luZm8gPSB7CiAJLm51bV9wb3J0cyA9IDQsCiYjNDM7CS50bXJfZGV2Zm4gPSBQQ0lfREVWRk4oMCwgMSksCiAJLnBoeWxpbmtfZ2V0X2NhcHMgPSBpbXg5NF9zd2l0Y2hfcGh5bGlua19nZXRfY2FwcywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcHRwLmMgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3B0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmZmN2Q4ZTVlNjhkMjMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3B0cC5jCkBAIC0wLDAgJiM0MzsxLDY2MyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCYjNDM7IE9SIEJTRC0zLUNsYXVzZSkKJiM0MzsvKgomIzQzOyAqIE5YUCBORVRDIHN3aXRjaCBkcml2ZXIKJiM0MzsgKiBDb3B5cmlnaHQgMjAyNS0yMDI2IE5YUAomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xhc3NpZnkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0Y19zd2l0Y2guaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBORVRDX1RTX1JFUV9JRF9OVU0JCShORVRDX1RBR19UU19SRVFfSUQgJiM0MzsgMSkKJiM0MzsjZGVmaW5lIE5FVENfUFRQX1RYX1RTVEFNUF9USU1FT1VUCSg1ICogSFopCiYjNDM7CiYjNDM7c3RhdGljIGludCBuZXRjX2dldF9waGNfaW5kZXgoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KQomIzQzO3sKJiM0MzsJaWYgKCFwcml2LSZndDt0bXJfZGV2KQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXJldHVybiBwdHBfY2xvY2tfaW5kZXhfYnlfZGV2KCZhbXA7cHJpdi0mZ3Q7dG1yX2Rldi0mZ3Q7ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG5ldGNfZ2V0X3RzX2luZm8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCSAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaW5mby0mZ3Q7c29fdGltZXN0YW1waW5nID0gU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSB8CiYjNDM7CQkJCVNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgfAomIzQzOwkJCQlTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFOwomIzQzOwomIzQzOwlpbmZvLSZndDtwaGNfaW5kZXggPSBuZXRjX2dldF9waGNfaW5kZXgocHJpdik7CiYjNDM7CWlmIChpbmZvLSZndDtwaGNfaW5kZXggJmx0OyAwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWluZm8tJmd0O3NvX3RpbWVzdGFtcGluZyB8PSBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIHwKJiM0MzsJCQkJIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgfAomIzQzOwkJCQkgU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkU7CiYjNDM7CiYjNDM7CWluZm8tJmd0O3R4X3R5cGVzID0gQklUKEhXVFNUQU1QX1RYX09GRikgfCBCSVQoSFdUU1RBTVBfVFhfT04pIHwKJiM0MzsJCQkgQklUKEhXVFNUQU1QX1RYX09ORVNURVBfU1lOQyk7CiYjNDM7CiYjNDM7CWluZm8tJmd0O3J4X2ZpbHRlcnMgPSBCSVQoSFdUU1RBTVBfRklMVEVSX05PTkUpIHwKJiM0MzsJCQkgICBCSVQoSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVCkgfAomIzQzOwkJCSAgIEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKSB8CiYjNDM7CQkJICAgQklUKEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfRVZFTlQpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmV0Y19wb3J0X2RlbF9wdHBfZmlsdGVyKHN0cnVjdCBuZXRjX3BvcnQgKm5wKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtJmd0O3N3aXRjaF9wcml2OwomIzQzOwl1MzIgZW50cnlfaWQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTkVUQ19QVFBfTUFYOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZW50cnlfaWQgPSBucC0mZ3Q7cHRwX2lwZnRfZWlkW2ldOwomIzQzOwkJaWYgKGVudHJ5X2lkICE9IE5UTVBfTlVMTF9FTlRSWV9JRCkgewomIzQzOwkJCW50bXBfaXBmdF9kZWxldGVfZW50cnkoJmFtcDtwcml2LSZndDtudG1wLCBlbnRyeV9pZCk7CiYjNDM7CQkJbnAtJmd0O3B0cF9pcGZ0X2VpZFtpXSA9IE5UTVBfTlVMTF9FTlRSWV9JRDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5ldGNfYnVpbGRfcHRwX2lwZnRfa2V5ZShzdHJ1Y3QgaXBmdF9rZXllX2RhdGEgKmtleWUsIGludCBwb3J0LAomIzQzOwkJCQkgICAgZW51bSBuZXRjX3B0cF90eXBlIHR5cGUpCiYjNDM7ewomIzQzOwl1MTYgc3JjX3BvcnQsIGZybV9hdHRyX2ZsYWdzOwomIzQzOwomIzQzOwlrZXllLSZndDtwcmVjZWRlbmNlID0gY3B1X3RvX2xlMTYoMHhmMDAwKTsKJiM0MzsJc3JjX3BvcnQgPSBGSUVMRF9QUkVQKElQRlRfU1JDX1BPUlQsIHBvcnQpOwomIzQzOwlzcmNfcG9ydCB8PSBJUEZUX1NSQ19QT1JUX01BU0s7CiYjNDM7CWtleWUtJmd0O3NyY19wb3J0ID0gY3B1X3RvX2xlMTYoc3JjX3BvcnQpOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBORVRDX1BUUF9MMjoKJiM0MzsJCWtleWUtJmd0O2V0aGVydHlwZSA9IGh0b25zKEVUSF9QXzE1ODgpOwomIzQzOwkJa2V5ZS0mZ3Q7ZXRoZXJ0eXBlX21hc2sgPSBodG9ucygweGZmZmYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkVUQ19QVFBfTDRfSVBWNF9FVkVOVDoKJiM0MzsJY2FzZSBORVRDX1BUUF9MNF9JUFY0X0dFTkVSQUw6CiYjNDM7CWNhc2UgTkVUQ19QVFBfTDRfSVBWNl9FVkVOVDoKJiM0MzsJY2FzZSBORVRDX1BUUF9MNF9JUFY2X0dFTkVSQUw6CiYjNDM7CQlmcm1fYXR0cl9mbGFncyA9IElQRlRfRkFGX0lQX0hEUiB8IEZJRUxEX1BSRVAoSVBGVF9GQUZfTDRfQ09ERSwKJiM0MzsJCQkJIElQRlRfRkFGX1VEUF9IRFIpOwomIzQzOwkJaWYgKHR5cGUgPT0gTkVUQ19QVFBfTDRfSVBWNl9FVkVOVCB8fAomIzQzOwkJICAgIHR5cGUgPT0gTkVUQ19QVFBfTDRfSVBWNl9HRU5FUkFMKQomIzQzOwkJCWZybV9hdHRyX2ZsYWdzIHw9IElQRlRfRkFGX0lQX1ZFUjY7CiYjNDM7CiYjNDM7CQlrZXllLSZndDtmcm1fYXR0cl9mbGFncyA9IGNwdV90b19sZTE2KGZybV9hdHRyX2ZsYWdzKTsKJiM0MzsJCWtleWUtJmd0O2ZybV9hdHRyX2ZsYWdzX21hc2sgPSBrZXllLSZndDtmcm1fYXR0cl9mbGFnczsKJiM0MzsJCWtleWUtJmd0O2lwX3Byb3RvY29sID0gSVBQUk9UT19VRFA7CiYjNDM7CQlrZXllLSZndDtpcF9wcm90b2NvbF9tYXNrID0gMHhmZjsKJiM0MzsKJiM0MzsJCWlmICh0eXBlID09IE5FVENfUFRQX0w0X0lQVjRfRVZFTlQgfHwKJiM0MzsJCSAgICB0eXBlID09IE5FVENfUFRQX0w0X0lQVjZfRVZFTlQpCiYjNDM7CQkJa2V5ZS0mZ3Q7bDRfZHN0X3BvcnQgPSBodG9ucyhQVFBfRVZfUE9SVCk7CiYjNDM7CQllbHNlCiYjNDM7CQkJa2V5ZS0mZ3Q7bDRfZHN0X3BvcnQgPSBodG9ucyhQVFBfR0VOX1BPUlQpOwomIzQzOwomIzQzOwkJa2V5ZS0mZ3Q7bDRfZHN0X3BvcnRfbWFzayA9IGh0b25zKDB4ZmZmZik7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkoc3RydWN0IG5ldGNfcG9ydCAqbnAsCiYjNDM7CQkJCQllbnVtIG5ldGNfcHRwX3R5cGUgdHlwZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IG5wLSZndDtzd2l0Y2hfcHJpdjsKJiM0MzsJc3RydWN0IGlwZnRfZW50cnlfZGF0YSAqZW50cnk7CiYjNDM7CXN0cnVjdCBpcGZ0X2tleWVfZGF0YSAqa2V5ZTsKJiM0MzsJdTMyIGNmZzsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZW50cnkgPSBremFsbG9jX29iaigqZW50cnkpOwomIzQzOwlpZiAoIWVudHJ5KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWtleWUgPSAmYW1wO2VudHJ5LSZndDtrZXllOwomIzQzOwllcnIgPSBuZXRjX2J1aWxkX3B0cF9pcGZ0X2tleWUoa2V5ZSwgbnAtJmd0O2RwLSZndDtpbmRleCwgdHlwZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGZyZWVfZW50cnk7CiYjNDM7CiYjNDM7CWNmZyA9IEZJRUxEX1BSRVAoSVBGVF9GTFRGQSwgSVBGVF9GTFRGQV9SRURJUkVDVCk7CiYjNDM7CWNmZyB8PSBGSUVMRF9QUkVQKElQRlRfSFIsIE5FVENfSFJfUFRQX1RSQVApOwomIzQzOwljZmcgfD0gSVBGVF9USU1FQ0FQRSB8IElQRlRfUlJUOwomIzQzOwllbnRyeS0mZ3Q7Y2ZnZS5jZmcgPSBjcHVfdG9fbGUzMihjZmcpOwomIzQzOwomIzQzOwllcnIgPSBudG1wX2lwZnRfYWRkX2VudHJ5KCZhbXA7cHJpdi0mZ3Q7bnRtcCwgZW50cnkpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBmcmVlX2VudHJ5OwomIzQzOwomIzQzOwlucC0mZ3Q7cHRwX2lwZnRfZWlkW3R5cGVdID0gZW50cnktJmd0O2VudHJ5X2lkOwomIzQzOwomIzQzO2ZyZWVfZW50cnk6CiYjNDM7CWtmcmVlKGVudHJ5KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2wyX3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnApCiYjNDM7ewomIzQzOwlyZXR1cm4gbmV0Y19wb3J0X2FkZF9pcGZ0X3B0cF9lbnRyeShucCwgTkVUQ19QVFBfTDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfbDRfcHRwX2ZpbHRlcihzdHJ1Y3QgbmV0Y19wb3J0ICpucCkKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjRfRVZFTlQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gbmV0Y19wb3J0X2FkZF9pcGZ0X3B0cF9lbnRyeShucCwgTkVUQ19QVFBfTDRfSVBWNF9HRU5FUkFMKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZGVsX3B0cF9maWx0ZXI7CiYjNDM7CiYjNDM7CWVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjZfRVZFTlQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBkZWxfcHRwX2ZpbHRlcjsKJiM0MzsKJiM0MzsJZXJyID0gbmV0Y19wb3J0X2FkZF9pcGZ0X3B0cF9lbnRyeShucCwgTkVUQ19QVFBfTDRfSVBWNl9HRU5FUkFMKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZGVsX3B0cF9maWx0ZXI7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2RlbF9wdHBfZmlsdGVyOgomIzQzOwluZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIobnApOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfbDJfbDRfcHRwX2ZpbHRlcihzdHJ1Y3QgbmV0Y19wb3J0ICpucCkKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG5ldGNfcG9ydF9hZGRfbDJfcHRwX2ZpbHRlcihucCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBuZXRjX3BvcnRfYWRkX2w0X3B0cF9maWx0ZXIobnApOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBkZWxfcHRwX2ZpbHRlcjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZGVsX3B0cF9maWx0ZXI6CiYjNDM7CW5ldGNfcG9ydF9kZWxfcHRwX2ZpbHRlcihucCk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbmV0Y19wb3J0X3NldF9wdHBfZmlsdGVyKHN0cnVjdCBuZXRjX3BvcnQgKm5wLCBpbnQgcnhfZmlsdGVyKQomIzQzO3sKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmIChucC0mZ3Q7cHRwX3J4X2ZpbHRlciA9PSByeF9maWx0ZXIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG5wLSZndDtwdHBfcnhfZmlsdGVyICE9IEhXVFNUQU1QX0ZJTFRFUl9OT05FIHx8CiYjNDM7CSAgICByeF9maWx0ZXIgPT0gSFdUU1RBTVBfRklMVEVSX05PTkUpIHsKJiM0MzsJCW5ldGNfcG9ydF9kZWxfcHRwX2ZpbHRlcihucCk7CiYjNDM7CQlucC0mZ3Q7cHRwX3J4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9OT05FOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAocnhfZmlsdGVyKSB7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UOgomIzQzOwkJZXJyID0gbmV0Y19wb3J0X2FkZF9sMl9wdHBfZmlsdGVyKG5wKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfRVZFTlQ6CiYjNDM7CQllcnIgPSBuZXRjX3BvcnRfYWRkX2w0X3B0cF9maWx0ZXIobnApOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDoKJiM0MzsJCWVyciA9IG5ldGNfcG9ydF9hZGRfbDJfbDRfcHRwX2ZpbHRlcihucCk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWVyciA9IC1FUkFOR0U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW5wLSZndDtwdHBfcnhfZmlsdGVyID0gcnhfZmlsdGVyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG5ldGNfcG9ydF9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLAomIzQzOwkJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjX3BvcnQgKm5wID0gTkVUQ19QT1JUKGRzLCBwb3J0KTsKJiM0MzsJc3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CWludCByeF9maWx0ZXIsIGVycjsKJiM0MzsKJiM0MzsJc3dpdGNoIChjb25maWctJmd0O3R4X3R5cGUpIHsKJiM0MzsJY2FzZSBIV1RTVEFNUF9UWF9PTjoKJiM0MzsJY2FzZSBIV1RTVEFNUF9UWF9PRkY6CiYjNDM7CQlucC0mZ3Q7cHRwX3R4X3R5cGUgPSBjb25maWctJmd0O3R4X3R5cGU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBIV1RTVEFNUF9UWF9PTkVTVEVQX1NZTkM6CiYjNDM7CQlpZiAoIXByaXYtJmd0O3Rtcl9kZXYpCiYjNDM7CQkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CQlucC0mZ3Q7cHRwX3R4X3R5cGUgPSBjb25maWctJmd0O3R4X3R5cGU7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAoY29uZmlnLSZndDtyeF9maWx0ZXIpIHsKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORToKJiM0MzsJCXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9OT05FOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X1NZTkM6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9ERUxBWV9SRVE6CiYjNDM7CQlyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX1NZTkM6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9ERUxBWV9SRVE6CiYjNDM7CQlyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkM6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6CiYjNDM7CQlyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBuZXRjX3BvcnRfc2V0X3B0cF9maWx0ZXIobnAsIHJ4X2ZpbHRlcik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIHNldCBQVFAgZmlsdGVyJiMzNDspOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwljb25maWctJmd0O3J4X2ZpbHRlciA9IHJ4X2ZpbHRlcjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBuZXRjX3BvcnRfaHd0c3RhbXBfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjX3BvcnQgKm5wID0gTkVUQ19QT1JUKGRzLCBwb3J0KTsKJiM0MzsKJiM0MzsJY29uZmlnLSZndDt0eF90eXBlID0gbnAtJmd0O3B0cF90eF90eXBlOwomIzQzOwljb25maWctJmd0O3J4X2ZpbHRlciA9IG5wLSZndDtwdHBfcnhfZmlsdGVyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBuZXRjX3BvcnRfdHh0c3RhbXBfdHdvc3RlcChzdHJ1Y3QgbmV0Y19wb3J0ICpucCwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKmNsb25lKQomIzQzO3sKJiM0MzsJREVDTEFSRV9CSVRNQVAodHNfcmVxX2lkX2JpdG1hcCwgTkVUQ19UU19SRVFfSURfTlVNKTsKJiM0MzsJc3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtJmd0O3N3aXRjaF9wcml2OwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyZWVfbGlzdDsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnNrYl90bXA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdHNfcmVxX2lkOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJYml0bWFwX3plcm8odHNfcmVxX2lkX2JpdG1hcCwgTkVUQ19UU19SRVFfSURfTlVNKTsKJiM0MzsJX19za2JfcXVldWVfaGVhZF9pbml0KCZhbXA7ZnJlZV9saXN0KTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bnAtJmd0O3B0cF9sb2NrKTsKJiM0MzsKJiM0MzsJc2tiX3F1ZXVlX3dhbGtfc2FmZSgmYW1wO25wLSZndDtza2JfdHh0c3RhbXBfcXVldWUsIHNrYiwgc2tiX3RtcCkgewomIzQzOwkJaWYgKHRpbWVfYmVmb3JlKE5FVENfU0tCX0NCKHNrYiktJmd0O3B0cF90eF90aW1lICYjNDM7CiYjNDM7CQkJCU5FVENfUFRQX1RYX1RTVEFNUF9USU1FT1VULCBqaWZmaWVzKSkgewomIzQzOwkJCWRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICAgICYjMzQ7UG9ydCAlZCB0c19yZXFfaWQgJXUgd2hpY2ggc2VlbXMgbG9zdFxuJiMzNDssCiYjNDM7CQkJCQkgICAgbnAtJmd0O2RwLSZndDtpbmRleCwgTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7dHNfcmVxX2lkKTsKJiM0MzsKJiM0MzsJCQlfX3NrYl91bmxpbmsoc2tiLCAmYW1wO25wLSZndDtza2JfdHh0c3RhbXBfcXVldWUpOwomIzQzOwkJCV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDtmcmVlX2xpc3QsIHNrYik7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCV9fc2V0X2JpdChORVRDX1NLQl9DQihza2IpLSZndDt0c19yZXFfaWQsIHRzX3JlcV9pZF9iaXRtYXApOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXRzX3JlcV9pZCA9IGZpbmRfZmlyc3RfemVyb19iaXQodHNfcmVxX2lkX2JpdG1hcCwgTkVUQ19UU19SRVFfSURfTlVNKTsKJiM0MzsJaWYgKHRzX3JlcV9pZCA9PSBORVRDX1RTX1JFUV9JRF9OVU0pIHsKJiM0MzsJCWVyciA9IC1FQlVTWTsKJiM0MzsJCWdvdG8gdW5sb2NrX3B0cDsKJiM0MzsJfQomIzQzOwomIzQzOwlORVRDX1NLQl9DQihjbG9uZSktJmd0O3RzX3JlcV9pZCA9IHRzX3JlcV9pZDsKJiM0MzsJTkVUQ19TS0JfQ0IoY2xvbmUpLSZndDtwdHBfdHhfdGltZSA9IGppZmZpZXM7CiYjNDM7CXNrYl9zaGluZm8oY2xvbmUpLSZndDt0eF9mbGFncyB8PSBTS0JUWF9JTl9QUk9HUkVTUzsKJiM0MzsJX19za2JfcXVldWVfdGFpbCgmYW1wO25wLSZndDtza2JfdHh0c3RhbXBfcXVldWUsIGNsb25lKTsKJiM0MzsKJiM0Mzt1bmxvY2tfcHRwOgomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25wLSZndDtwdHBfbG9jayk7CiYjNDM7CiYjNDM7CS8qIEZyZWUgdGltZWQtb3V0IFNLQnMgb3V0c2lkZSB0aGUgc3BpbmxvY2sgdG8gYXZvaWQgY2FsbGluZwomIzQzOwkgKiBrZnJlZV9za2IoKSB3aXRoIGEgZGVzdHJ1Y3RvciAoc29ja19lZnJlZSkgdW5kZXIgYSBzcGlubG9jay4KJiM0MzsJICovCiYjNDM7CV9fc2tiX3F1ZXVlX3B1cmdlKCZhbXA7ZnJlZV9saXN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBuZXRjX3R3b3N0ZXBfdHN0YW1wX2hhbmRsZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkJIHU4IHRzX3JlcV9pZCwgdTY0IHRzKQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnNrYl90bXAsICpza2JfbWF0Y2ggPSBOVUxMOwomIzQzOwlzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7CiYjNDM7CXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBod3RzdGFtcHM7CiYjNDM7CXN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtucC0mZ3Q7cHRwX2xvY2spOwomIzQzOwlza2JfcXVldWVfd2Fsa19zYWZlKCZhbXA7bnAtJmd0O3NrYl90eHRzdGFtcF9xdWV1ZSwgc2tiLCBza2JfdG1wKSB7CiYjNDM7CQlpZiAoTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7dHNfcmVxX2lkICE9IHRzX3JlcV9pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCV9fc2tiX3VubGluayhza2IsICZhbXA7bnAtJmd0O3NrYl90eHRzdGFtcF9xdWV1ZSk7CiYjNDM7CQlza2JfbWF0Y2ggPSBza2I7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25wLSZndDtwdHBfbG9jayk7CiYjNDM7CiYjNDM7CWlmICghc2tiX21hdGNoKSB7CiYjNDM7CQlkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtJmd0O2RldiwKJiM0MzsJCQkJICAgICYjMzQ7UG9ydCAlZCByZWNlaXZlZCBhbiBleHBpcmVkIFR4IHRpbWVzdGFtcCByZXNwb25zZSAodHNfcmVxX2lkICV1KSYjMzQ7LAomIzQzOwkJCQkgICAgcG9ydCwgdHNfcmVxX2lkKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlod3RzdGFtcHMuaHd0c3RhbXAgPSBuc190b19rdGltZSh0cyk7CiYjNDM7CXNrYl9jb21wbGV0ZV90eF90aW1lc3RhbXAoc2tiX21hdGNoLCAmYW1wO2h3dHN0YW1wcyk7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgbmV0Y19wb3J0X3J4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHR5cGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHN0YW1wcyA9IHNrYl9od3RzdGFtcHMoc2tiKTsKJiM0MzsJdTY0IHRzID0gTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7dHN0YW1wOwomIzQzOwomIzQzOwlod3RzdGFtcHMtJmd0O2h3dHN0YW1wID0gbnNfdG9fa3RpbWUodHMpOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9wcmVwYXJlX29uZXN0ZXBfc3luYyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCwKJiM0MzsJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQkgICB1MzIgcHRwX2NsYXNzLCBib29sICp0d29zdGVwKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtJmd0O3N3aXRjaF9wcml2OwomIzQzOwl1MTYgY29ycmVjdGlvbl9vZmZzZXQsIHRpbWVzdGFtcF9vZmZzZXQ7CiYjNDM7CXN0cnVjdCBwdHBfaGVhZGVyICpwdHBfaGRyOwomIzQzOwl1OCBtc2dfdHlwZSwgdHdvc3RlcF9mbGFnOwomIzQzOwlib29sIGlzX3VkcCA9IGZhbHNlOwomIzQzOwl1MzIgcGt0X3R5cGU7CiYjNDM7CXU4ICpwa3RfaGRyOwomIzQzOwomIzQzOwlwdHBfaGRyID0gcHRwX3BhcnNlX2hlYWRlcihza2IsIHB0cF9jbGFzcyk7CiYjNDM7CWlmICghcHRwX2hkcikgewomIzQzOwkJZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LSZndDtkZXYsCiYjNDM7CQkJCSAgICAmIzM0O1BvcnQgJWQgZmFpbGVkIHRvIHBhcnNlIFN5bmMgaGVhZGVyXG4mIzM0OywKJiM0MzsJCQkJICAgIG5wLSZndDtkcC0mZ3Q7aW5kZXgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBrdF9oZHIgPSBza2JfbWFjX2hlYWRlcihza2IpOwomIzQzOwljb3JyZWN0aW9uX29mZnNldCA9ICh1OCAqKSZhbXA7cHRwX2hkci0mZ3Q7Y29ycmVjdGlvbiAtIHBrdF9oZHI7CiYjNDM7CXRpbWVzdGFtcF9vZmZzZXQgPSAodTggKilwdHBfaGRyICYjNDM7IHNpemVvZigqcHRwX2hkcikgLSBwa3RfaGRyOwomIzQzOwomIzQzOwkvKiBFbnN1cmUgdGhhdCB0aGUgZW50aXJlIG9yaWdpblRpbWVzdGFtcCBmaWVsZCBpcyBwcmVzZW50IGluIHRoZQomIzQzOwkgKiBsaW5lYXIgYnVmZmVyIG9mIHRoZSBza2IuCiYjNDM7CSAqLwomIzQzOwlpZiAocGt0X2hkciAmIzQzOyB0aW1lc3RhbXBfb2Zmc2V0ICYjNDM7IDEwICZndDsgc2tiLSZndDtkYXRhICYjNDM7IHNrYl9oZWFkbGVuKHNrYikpIHsKJiM0MzsJCWRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtQb3J0ICVkIFN5bmMgaGVhZGVyIG5vdCBpbiBsaW5lYXIgYXJlYVxuJiMzNDssCiYjNDM7CQkJCSAgICBucC0mZ3Q7ZHAtJmd0O2luZGV4KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwltc2dfdHlwZSA9IHB0cF9nZXRfbXNndHlwZShwdHBfaGRyLCBwdHBfY2xhc3MpOwomIzQzOwl0d29zdGVwX2ZsYWcgPSBwdHBfaGRyLSZndDtmbGFnX2ZpZWxkWzBdICZhbXA7IDB4MjsKJiM0MzsKJiM0MzsJLyogT25seSBhIFN5bmMgZnJhbWUgd2l0aCB0aGUgdHdvU3RlcEZsYWcgY2xlYXJlZCBjYW4gdXNlIG9uZS1zdGVwCiYjNDM7CSAqIHRpbWVzdGFtcGluZy4gQSBmcmFtZSB0aGF0IHJlcXVlc3RzIHR3by1zdGVwIChvciBpcyBub3QgYSBTeW5jKQomIzQzOwkgKiBjYXJyaWVzIGRpZmZlcmVudCBvbi13aXJlIGZpZWxkcywgc28gdGhpcyBpcyBhIHJlYWwgY2xhc3NpZmljYXRpb247CiYjNDM7CSAqIHJlcG9ydCBpdCB0aHJvdWdoICp0d29zdGVwIHNvIHRoZSBjYWxsZXIgZmFsbHMgYmFjayB0byB0aGUgdHdvLXN0ZXAKJiM0MzsJICogcGF0aC4KJiM0MzsJICovCiYjNDM7CWlmIChtc2dfdHlwZSAhPSBQVFBfTVNHVFlQRV9TWU5DIHx8IHR3b3N0ZXBfZmxhZyAhPSAwKSB7CiYjNDM7CQkqdHdvc3RlcCA9IHRydWU7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVGhpcyBpcyBhIGdlbnVpbmUgb25lLXN0ZXAgU3luYyBmcmFtZS4gc2tiX3NoaW5mbygpLSZndDtkZXN0cnVjdG9yX2FyZwomIzQzOwkgKiBpcyBsYXRlciB1c2VkIHRvIHBhc3MgdGhlIG5ldGNfcG9ydCBwb2ludGVyIHRvCiYjNDM7CSAqIG5ldGNfb25lc3RlcF9za2JfZGVzdHJ1Y3RvcigpIGZvciBUWCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbi4KJiM0MzsJICogTVNHX1pFUk9DT1BZIGFsc28gdXNlcyBkZXN0cnVjdG9yX2FyZyAodmlhIHNrYl96Y29weV9pbml0KCkpIHRvCiYjNDM7CSAqIHRyYWNrIHVzZXItc3BhY2UgcGFnZSByZWZlcmVuY2VzLiBPdmVyd3JpdGluZyBpdCBpbiB0aGF0IGNhc2Ugd291bGQKJiM0MzsJICogbGVhayB0aGUgdWJ1Zl9pbmZvIHJlZmVyZW5jZSBhbmQgcHJldmVudCB1c2VyIHBhZ2VzIGZyb20gYmVpbmcKJiM0MzsJICogcmVsZWFzZWQuIFBUUCBhcHBsaWNhdGlvbnMgZG8gbm90IHVzZSBNU0dfWkVST0NPUFksIGJ1dCBndWFyZAomIzQzOwkgKiBhZ2FpbnN0IGl0IGRlZmVuc2l2ZWx5LgomIzQzOwkgKi8KJiM0MzsJaWYgKHNrYl96Y29weShza2IpKSB7CiYjNDM7CQlkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtJmd0O2RldiwKJiM0MzsJCQkJICAgICYjMzQ7UG9ydCAlZCBvbmUtc3RlcCBTeW5jIG5vdCBzdXBwb3J0ZWQgb24gemVyb2NvcHkgc2tiXG4mIzM0OywKJiM0MzsJCQkJICAgIG5wLSZndDtkcC0mZ3Q7aW5kZXgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBrdF90eXBlID0gcHRwX2NsYXNzICZhbXA7IFBUUF9DTEFTU19QTUFTSzsKJiM0MzsJaWYgKHBrdF90eXBlID09IFBUUF9DTEFTU19JUFY0IHx8IHBrdF90eXBlID09IFBUUF9DTEFTU19JUFY2KQomIzQzOwkJaXNfdWRwID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogQ2FjaGUgdGhlIHBhcnNpbmcgcmVzdWx0cyBzbyB0aGUgdGFnZ2VyIHhtaXQgcGF0aCBhbmQgdGhlIGRlZmVycmVkCiYjNDM7CSAqIHdvcmsgZG8gbm90IG5lZWQgdG8gcmUtcGFyc2UgdGhlIFBUUCBoZWFkZXIsIGFuZCBzbyB0aGF0CiYjNDM7CSAqIG5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAoKSBjYW4gZGVyaXZlIHRoZXNlIHBhcmFtZXRlcnMgZnJvbSB0aGUKJiM0MzsJICogc2tiLgomIzQzOwkgKi8KJiM0MzsJTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7Y29ycmVjdGlvbl9vZmZzZXQgPSBjb3JyZWN0aW9uX29mZnNldDsKJiM0MzsJTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7dGltZXN0YW1wX29mZnNldCA9IHRpbWVzdGFtcF9vZmZzZXQ7CiYjNDM7CU5FVENfU0tCX0NCKHNrYiktJmd0O2lzX3VkcCA9IGlzX3VkcDsKJiM0MzsJTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7cHRwX2ZsYWcgPSBORVRDX1BUUF9GTEFHX09ORVNURVA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbmV0Y19wb3J0X3R4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7CiYjNDM7CWJvb2wgdHdvc3RlcCA9IGZhbHNlOwomIzQzOwl1MzIgcHRwX2NsYXNzOwomIzQzOwomIzQzOwlORVRDX1NLQl9DQihza2IpLSZndDtwdHBfZmxhZyA9IDA7CiYjNDM7CXB0cF9jbGFzcyA9IHB0cF9jbGFzc2lmeV9yYXcoc2tiKTsKJiM0MzsJaWYgKHB0cF9jbGFzcyA9PSBQVFBfQ0xBU1NfTk9ORSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKG5wLSZndDtwdHBfdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTkVTVEVQX1NZTkMpCiYjNDM7CQluZXRjX3BvcnRfcHJlcGFyZV9vbmVzdGVwX3N5bmMobnAsIHNrYiwgcHRwX2NsYXNzLCAmYW1wO3R3b3N0ZXApOwomIzQzOwomIzQzOwlpZiAobnAtJmd0O3B0cF90eF90eXBlID09IEhXVFNUQU1QX1RYX09OIHx8IHR3b3N0ZXApIHsKJiM0MzsJCXN0cnVjdCBza19idWZmICpjbG9uZSA9IHNrYl9jbG9uZV9zayhza2IpOwomIzQzOwomIzQzOwkJaWYgKHVubGlrZWx5KCFjbG9uZSkpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwomIzQzOwkJaWYgKG5ldGNfcG9ydF90eHRzdGFtcF90d29zdGVwKG5wLCBjbG9uZSkpIHsKJiM0MzsJCQlrZnJlZV9za2IoY2xvbmUpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCU5FVENfU0tCX0NCKHNrYiktJmd0O2Nsb25lID0gY2xvbmU7CiYjNDM7CQlORVRDX1NLQl9DQihza2IpLSZndDtwdHBfZmxhZyA9IE5FVENfUFRQX0ZMQUdfVFdPU1RFUDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBuZXRjX3BvcnRfc2V0X29uZXN0ZXBfY29udHJvbChzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgYm9vbCB1ZHAsCiYjNDM7CQkJCQkgIGludCBvZmZzZXQpCiYjNDM7ewomIzQzOwl1MzIgdmFsOwomIzQzOwomIzQzOwl2YWwgPSBQTV9TSU5HTEVfU1RFUF9FTiB8IEZJRUxEX1BSRVAoUE1fU0lOR0xFX1NURVBfT0ZGU0VULCBvZmZzZXQpOwomIzQzOwlpZiAodWRwKQomIzQzOwkJdmFsIHw9IFBNX1NJTkdMRV9TVEVQX0NIOwomIzQzOwluZXRjX21hY19wb3J0X3dyKG5wLCBORVRDX1BNX1NJTkdMRV9TVEVQKDApLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBuZXRjX29uZXN0ZXBfc2tiX2Rlc3RydWN0b3Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjX3BvcnQgKm5wID0gc2tiX3NoaW5mbyhza2IpLSZndDtkZXN0cnVjdG9yX2FyZzsKJiM0MzsKJiM0MzsJLyogc2tiIGhhcyBiZWVuIHRyYW5zbWl0dGVkIGJ5IGhhcmR3YXJlLCBzY2hlZHVsZSB3b3JrIHRvIHNlbmQKJiM0MzsJICogdGhlIG5leHQgcXVldWVkIG9uZS1zdGVwIFN5bmMgcGFja2V0LgomIzQzOwkgKi8KJiM0MzsJc2NoZWR1bGVfd29yaygmYW1wO25wLSZndDtvbmVzdGVwX3dvcmspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKHN0cnVjdCBuZXRjX3BvcnQgKm5wLAomIzQzOwkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICAgICB1NjQgdHN0YW1wKQomIzQzO3sKJiM0MzsJdTE2IGNvcnJlY3Rpb25fb2Zmc2V0ID0gTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7Y29ycmVjdGlvbl9vZmZzZXQ7CiYjNDM7CXUxNiB0aW1lc3RhbXBfb2Zmc2V0ID0gTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7dGltZXN0YW1wX29mZnNldDsKJiM0MzsJYm9vbCBpc191ZHAgPSBORVRDX1NLQl9DQihza2IpLSZndDtpc191ZHA7CiYjNDM7CXU4ICpwa3RfaGRyID0gc2tiX21hY19oZWFkZXIoc2tiKTsKJiM0MzsJdTY0IHNlYzsKJiM0MzsJdTMyIG5zOwomIzQzOwomIzQzOwlORVRDX1NLQl9DQihza2IpLSZndDt0c3RhbXAgPSB0c3RhbXA7CiYjNDM7CU5FVENfU0tCX0NCKHNrYiktJmd0O3B0cF9mbGFnID0gTkVUQ19QVFBfRkxBR19PTkVTVEVQOwomIzQzOwomIzQzOwkvKiBVcGRhdGUgb3JpZ2luVGltZXN0YW1wIGZpZWxkIG9mIFN5bmMgcGFja2V0CiYjNDM7CSAqIC0gNDggYml0cyBzZWNvbmRzIGZpZWxkCiYjNDM7CSAqIC0gMzIgYml0cyBuYW5vc2Vjb25kcyBmaWVsZAomIzQzOwkgKi8KJiM0MzsJc2VjID0gZGl2X3U2NF9yZW0odHN0YW1wLCBOU0VDX1BFUl9TRUMsICZhbXA7bnMpOwomIzQzOwlwdXRfdW5hbGlnbmVkX2JlMTYoKHNlYyAmZ3Q7Jmd0OyAzMikgJmFtcDsgMHhmZmZmLCBwa3RfaGRyICYjNDM7IHRpbWVzdGFtcF9vZmZzZXQpOwomIzQzOwlwdXRfdW5hbGlnbmVkX2JlMzIoc2VjICZhbXA7IDB4ZmZmZmZmZmYsIHBrdF9oZHIgJiM0MzsgdGltZXN0YW1wX29mZnNldCAmIzQzOyAyKTsKJiM0MzsJcHV0X3VuYWxpZ25lZF9iZTMyKG5zLCBwa3RfaGRyICYjNDM7IHRpbWVzdGFtcF9vZmZzZXQgJiM0MzsgNik7CiYjNDM7CiYjNDM7CW5ldGNfcG9ydF9zZXRfb25lc3RlcF9jb250cm9sKG5wLCBpc191ZHAsIGNvcnJlY3Rpb25fb2Zmc2V0KTsKJiM0MzsKJiM0MzsJLyogT3JwaGFuIHRoZSBza2IgdG8gcmVsZWFzZSB0aGUgc29ja2V0IHNlbmQgYnVmZmVyIHF1b3RhIGltbWVkaWF0ZWx5LgomIzQzOwkgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBzb2NrX3dmcmVlKCkgb25seSB1cGRhdGVzIHNrX3dtZW1fYWxsb2MgYW5kCiYjNDM7CSAqIGRvZXMgbm90IHRvdWNoIHNrYi0mZ3Q7ZGF0YS4gQWZ0ZXIgc2tiX29ycGhhbigpLCB3ZSBpbnN0YWxsIG91ciBvd24KJiM0MzsJICogZGVzdHJ1Y3RvciBzbyB0aGF0IHdoZW4gdGhlIGNvbmR1aXQgZHJpdmVyIGZyZWVzIHRoZSBza2IgYWZ0ZXIgVFgKJiM0MzsJICogY29tcGxldGlvbiwgd2UgZ2V0IG5vdGlmaWVkIHRvIHNlbmQgdGhlIG5leHQgcXVldWVkIFN5bmMgcGFja2V0LgomIzQzOwkgKi8KJiM0MzsJc2tiX29ycGhhbihza2IpOwomIzQzOwlza2Jfc2hpbmZvKHNrYiktJmd0O2Rlc3RydWN0b3JfYXJnID0gbnA7CiYjNDM7CXNrYi0mZ3Q7ZGVzdHJ1Y3RvciA9IG5ldGNfb25lc3RlcF9za2JfZGVzdHJ1Y3RvcjsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBuZXRjX3BvcnRfb25lc3RlcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjX3BvcnQgKm5wID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjX3BvcnQsCiYjNDM7CQkJCQkgICAgb25lc3RlcF93b3JrKTsKJiM0MzsJc3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtJmd0O3N3aXRjaF9wcml2OwomIzQzOwlzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXU2NCB0c3RhbXA7CiYjNDM7CiYjNDM7CS8qIERlcXVldWUgdGhlIG5leHQgcGVuZGluZyBza2Igd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgaW4tZmxpZ2h0IHNsb3QsCiYjNDM7CSAqIHNvIGEgbmV3bHkgYXJyaXZpbmcgb25lLXN0ZXAgU3luYyBjYW5ub3QganVtcCBhaGVhZCBvZiBpdC4gT25seQomIzQzOwkgKiByZWxlYXNlIHRoZSBzbG90IHdoZW4gdGhlIHF1ZXVlIGlzIGVtcHR5LiBUaGlzIGtlZXBzIG9yZGVyaW5nIGFuZAomIzQzOwkgKiBjbG9zZXMgdGhlIGVucXVldWUvd2FrZXVwIHJhY2UuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtucC0mZ3Q7cHRwX2xvY2spOwomIzQzOwlza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7bnAtJmd0O3NrYl9vbmVzdGVwX3F1ZXVlKTsKJiM0MzsJaWYgKCFza2IpIHsKJiM0MzsJCV9fY2xlYXJfYml0KE5FVENfRkxBR19PTkVTVEVQX0lOX1BST0dSRVNTLCAmYW1wO25wLSZndDtmbGFncyk7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO25wLSZndDtwdHBfbG9jayk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtucC0mZ3Q7cHRwX2xvY2spOwomIzQzOwomIzQzOwl0c3RhbXAgPSBuZXRjX3RpbWVyX2dldF9jdXJyZW50X3RpbWUocHJpdi0mZ3Q7dG1yX2Rldik7CiYjNDM7CWlmICghdHN0YW1wKSB7CiYjNDM7CQkvKiBUaGUgUFRQIHRpbWVyIGlzIG5vdCBhdmFpbGFibGUsIHNvIHRoZXJlIGlzIG5vIGNvcnJlY3QKJiM0MzsJCSAqIHRpbWVzdGFtcCB0byBwcm9ncmFtLiBEcm9wIHRoaXMgZnJhbWUgYW5kIHJlLWtpY2sgdG8KJiM0MzsJCSAqIHByb2Nlc3MgdGhlIHJlbWFpbmluZyBxdWV1ZWQgZnJhbWVzIChvciByZWxlYXNlIHRoZSBzbG90KS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKCkgaGFzIG5vdCBydW4gZm9yIHRoaXMgc2tiIHlldCwgc28KJiM0MzsJCSAqIG5ldGNfb25lc3RlcF9za2JfZGVzdHJ1Y3RvcigpIGlzIG5vdCBpbnN0YWxsZWQgb24gaXQuIEZyZWVpbmcKJiM0MzsJCSAqIGl0IHRoZXJlZm9yZSBkb2VzIG5vdCByZXNjaGVkdWxlIG9uZXN0ZXBfd29yaywgc28gdGhlIHdvcmsKJiM0MzsJCSAqIG11c3QgYmUgcmVzY2hlZHVsZWQgZXhwbGljaXRseSB0byBrZWVwIGRyYWluaW5nIHRoZSBxdWV1ZS4KJiM0MzsJCSAqLwomIzQzOwkJZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LSZndDtkZXYsCiYjNDM7CQkJCSAgICAmIzM0O1BvcnQgJWQgUFRQIHRpbWVyIHVuYXZhaWxhYmxlLCBkcm9wIFN5bmNcbiYjMzQ7LAomIzQzOwkJCQkgICAgbnAtJmd0O2RwLSZndDtpbmRleCk7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXNjaGVkdWxlX3dvcmsoJmFtcDtucC0mZ3Q7b25lc3RlcF93b3JrKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBSZXVzZSB0aGUgb2Zmc2V0cyBjYWNoZWQgYXQgZW5xdWV1ZSB0aW1lOyBvbmx5IHRoZSB0aW1lc3RhbXAgaXMKJiM0MzsJICogcmVhZCBmcmVzaCBzbyBpdCByZWZsZWN0cyB0aGUgYWN0dWFsIFRYIG1vbWVudC4KJiM0MzsJICovCiYjNDM7CW5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAobnAsIHNrYiwgdHN0YW1wKTsKJiM0MzsKJiM0MzsJLyogVGFnIGFuZCBoYW5kIHRoZSBmcmFtZSBkaXJlY3RseSB0byB0aGUgY29uZHVpdCB2aWEgdGhlIHRhZ2dlciwKJiM0MzsJICogYnlwYXNzaW5nIGRzYV91c2VyX3htaXQoKSBzbyB0aGUgVFggc3RhdHMgYXJlIG5vdCBjb3VudGVkIHR3aWNlLgomIzQzOwkgKi8KJiM0MzsJdGFnZ2VyX2RhdGEgPSBwcml2LSZndDtkcy0mZ3Q7dGFnZ2VyX2RhdGE7CiYjNDM7CXRhZ2dlcl9kYXRhLSZndDtvbmVzdGVwX3N5bmNfeG1pdChza2IsIG5wLSZndDtkcC0mZ3Q7dXNlcik7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBza19idWZmICpuZXRjX29uZXN0ZXBfc3luY19oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7CiYjNDM7CXN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwl1NjQgdHN0YW1wOwomIzQzOwomIzQzOwkvKiBTZXJpYWxpemUgb25lLXN0ZXAgU3luYyBwYWNrZXRzOiBvbmx5IG9uZSBjYW4gYmUgaW4tZmxpZ2h0IGF0IGEKJiM0MzsJICogdGltZSBiZWNhdXNlIHRoZSBTSU5HTEVfU1RFUCByZWdpc3RlciBpcyBzaGFyZWQgYW5kIG11c3QgbWF0Y2ggdGhlCiYjNDM7CSAqIHBhY2tldCBjdXJyZW50bHkgYmVpbmcgdHJhbnNtaXR0ZWQuIENsYWltIHRoZSBpbi1mbGlnaHQgc2xvdCB1bmRlcgomIzQzOwkgKiBwdHBfbG9jay4gSWYgYW5vdGhlciBvbmUtc3RlcCBTeW5jIGlzIGFscmVhZHkgaW4tZmxpZ2h0LCBxdWV1ZSB0aGlzCiYjNDM7CSAqIHNrYiBhbmQgcmV0dXJuIE5VTEw7IG93bmVyc2hpcCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcXVldWUsIHNvIG5vCiYjNDM7CSAqIGV4dHJhIHJlZmVyZW5jZSBpcyBuZWVkZWQgYW5kIG5ldGNfeG1pdCgpIHN0b3BzIHByb2Nlc3NpbmcgaXQuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtucC0mZ3Q7cHRwX2xvY2spOwomIzQzOwlpZiAodGVzdF9iaXQoTkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MsICZhbXA7bnAtJmd0O2ZsYWdzKSkgewomIzQzOwkJX19za2JfcXVldWVfdGFpbCgmYW1wO25wLSZndDtza2Jfb25lc3RlcF9xdWV1ZSwgc2tiKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bnAtJmd0O3B0cF9sb2NrKTsKJiM0MzsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXRzdGFtcCA9IG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZShwcml2LSZndDt0bXJfZGV2KTsKJiM0MzsJaWYgKCF0c3RhbXApIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bnAtJmd0O3B0cF9sb2NrKTsKJiM0MzsKJiM0MzsJCS8qIFRoaXMgaXMgYSB2YWxpZCBvbmUtc3RlcCBTeW5jIGZyYW1lLCBidXQgdGhlIFBUUCB0aW1lciBpcwomIzQzOwkJICogbm90IGF2YWlsYWJsZSwgc28gdGhlcmUgaXMgbm8gY29ycmVjdCB0aW1lc3RhbXAgdG8gcHJvZ3JhbS4KJiM0MzsJCSAqIERyb3AgdGhlIGZyYW1lIHJhdGhlciB0aGFuIHRyYW5zbWl0IGEgU3luYyB3aXRoIGEgYm9ndXMKJiM0MzsJCSAqIGNvcnJlY3Rpb24gZmllbGQuCiYjNDM7CQkgKi8KJiM0MzsJCWRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtQb3J0ICVkIFBUUCB0aW1lciB1bmF2YWlsYWJsZSwgZHJvcCBTeW5jXG4mIzM0OywKJiM0MzsJCQkJICAgIG5wLSZndDtkcC0mZ3Q7aW5kZXgpOwomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlfX3NldF9iaXQoTkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MsICZhbXA7bnAtJmd0O2ZsYWdzKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtucC0mZ3Q7cHRwX2xvY2spOwomIzQzOwomIzQzOwkvKiBXZSBvd24gdGhlIGluLWZsaWdodCBzbG90LiBQcm9ncmFtIHRoZSByZWdpc3RlciBhbmQgaW5zdGFsbCB0aGUKJiM0MzsJICogZGVzdHJ1Y3Rvci4KJiM0MzsJICovCiYjNDM7CW5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAobnAsIHNrYiwgdHN0YW1wKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNrYjsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaC5oIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2guaAppbmRleCAzMDVmMmE5MmUyZjlhLi4yOTZkZjFkNzIzMzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoLmgKQEAgLTU3LDYgJiM0Mzs1Nyw3IEBAIHN0cnVjdCBuZXRjX3N3aXRjaDsKIAogc3RydWN0IG5ldGNfc3dpdGNoX2luZm8gewogCXUzMiBudW1fcG9ydHM7CiYjNDM7CXUzMiB0bXJfZGV2Zm47CiAJdm9pZCAoKnBoeWxpbmtfZ2V0X2NhcHMpKGludCBwb3J0LCBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyk7CiB9OwogCkBAIC02Niw5ICYjNDM7NjcsMjMgQEAgc3RydWN0IG5ldGNfcG9ydF9jYXBzIHsKIAl1MzIgcHNldWRvX2xpbms6MTsKIH07CiAKJiM0MztlbnVtIG5ldGNfcHRwX3R5cGUgewomIzQzOwlORVRDX1BUUF9MMiwKJiM0MzsJTkVUQ19QVFBfTDRfSVBWNF9FVkVOVCwKJiM0MzsJTkVUQ19QVFBfTDRfSVBWNF9HRU5FUkFMLAomIzQzOwlORVRDX1BUUF9MNF9JUFY2X0VWRU5ULAomIzQzOwlORVRDX1BUUF9MNF9JUFY2X0dFTkVSQUwsCiYjNDM7CU5FVENfUFRQX01BWCwKJiM0Mzt9OwomIzQzOwogZW51bSBuZXRjX2hvc3RfcmVhc29uIHsKIAkvKiBTb2Z0d2FyZSBkZWZpbmVkIGhvc3QgcmVhc29ucyAqLwogCU5FVENfSFJfSE9TVF9GTE9PRCA9IDgsCiYjNDM7CU5FVENfSFJfUFRQX1RSQVAgICA9IDksCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIG5ldGNfcG9ydF9mbGFncyB7CiYjNDM7CU5FVENfRkxBR19PTkVTVEVQX0lOX1BST0dSRVNTID0gMCwKIH07CiAKIHN0cnVjdCBuZXRjX3BvcnQgewpAQCAtODQsNyAmIzQzOzk5LDE5IEBAIHN0cnVjdCBuZXRjX3BvcnQgewogCXUxNiB1YzoxOwogCXUxNiBtYzoxOwogCXUxNiBwdmlkOwotCXN0cnVjdCBpcGZ0X2VudHJ5X2RhdGEgKmhvc3RfZmxvb2Q7CiYjNDM7CXUzMiBpcGZ0X2hmX2VpZDsKJiM0MzsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJLyogU2VyaWFsaXplIFBUUCBvcGVyYXRpb25zICovCiYjNDM7CXNwaW5sb2NrX3QgcHRwX2xvY2s7CiYjNDM7CS8qIHNrYiBxdWV1ZSBmb3IgdHdvLXN0ZXAgdGltZXN0YW1wIGZyYW1lcyAqLwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl90eHRzdGFtcF9xdWV1ZTsKJiM0MzsJLyogc2tiIHF1ZXVlIGZvciBvbmUtc3RlcCBzeW5jIGZyYW1lcyAqLwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9vbmVzdGVwX3F1ZXVlOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgb25lc3RlcF93b3JrOwomIzQzOwlpbnQgcHRwX3R4X3R5cGU7CiYjNDM7CWludCBwdHBfcnhfZmlsdGVyOwomIzQzOwl1MzIgcHRwX2lwZnRfZWlkW05FVENfUFRQX01BWF07CiB9OwogCiBzdHJ1Y3QgbmV0Y19zd2l0Y2hfcmVncyB7CkBAIC0xMzksNiAmIzQzOzE2Niw3IEBAIHN0cnVjdCBuZXRjX3N3aXRjaCB7CiAJdTMyIG51bV9icDsKIAogCXN0cnVjdCBicHRfY2ZnZV9kYXRhICpicHRfbGlzdDsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnRtcl9kZXY7IC8qIFRoZSBQVFAgVGltZXIgUENJIGRldmljZSAqLwogfTsKIAogI2RlZmluZSBORVRDX1BSSVYoZHMpCQkJKChzdHJ1Y3QgbmV0Y19zd2l0Y2ggKikoKGRzKS0mZ3Q7cHJpdikpCkBAIC0xODcsNiAmIzQzOzIxNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRjX2RlbF92bGFuX2VudHJ5KHN0cnVjdCBuZXRjX3ZsYW5fZW50cnkgKmVudHJ5KQogfQogCiBpbnQgbmV0Y19zd2l0Y2hfcGxhdGZvcm1fcHJvYmUoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KTsKJiM0Mzt2b2lkIG5ldGNfbWFjX3BvcnRfd3Ioc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsIHUzMiB2YWwpOwogCiAvKiBldGh0b29sIEFQSXMgKi8KIHZvaWQgbmV0Y19wb3J0X2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LApAQCAtMjAzLDQgJiM0MzsyMzIsMjIgQEAgdm9pZCBuZXRjX3BvcnRfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJCSAgIHUzMiBzc2V0LCB1OCAqZGF0YSk7CiB2b2lkIG5ldGNfcG9ydF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1NjQgKmRhdGEpOwogCiYjNDM7LyogUFRQIEFQSXMgKi8KJiM0MztpbnQgbmV0Y19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0X2lkLAomIzQzOwkJICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyk7CiYjNDM7aW50IG5ldGNfcG9ydF9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydF9pZCwKJiM0MzsJCQkgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLAomIzQzOwkJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiYjNDM7aW50IG5ldGNfcG9ydF9od3RzdGFtcF9nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydF9pZCwKJiM0MzsJCQkgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnKTsKJiM0Mzt2b2lkIG5ldGNfdHdvc3RlcF90c3RhbXBfaGFuZGxlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCQkgdTggdHNfcmVxX2lkLCB1NjQgdHMpOwomIzQzO2Jvb2wgbmV0Y19wb3J0X3J4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHR5cGUpOwomIzQzO3ZvaWQgbmV0Y19wb3J0X3R4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnRfaWQsCiYjNDM7CQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7dm9pZCBuZXRjX3BvcnRfb25lc3RlcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7c3RydWN0IHNrX2J1ZmYgKm5ldGNfb25lc3RlcF9zeW5jX2hhbmRsZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoX2h3LmggYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oCmluZGV4IDE0MDRhZTQxYzdiY2IuLjM3ZDFkZDdlYzJjN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoX2h3LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2hfaHcuaApAQCAtMjAzLDYgJiM0MzsyMDMsMTEgQEAgZW51bSBuZXRjX3N0Z19zdGFnZSB7CiAjZGVmaW5lICAgU1NQXzEwTQkJCTEKICNkZWZpbmUgICBTU1BfMUcJCQkyCiAKJiM0MzsjZGVmaW5lIE5FVENfUE1fU0lOR0xFX1NURVAoYSkJCSgweDEwYzAgJiM0MzsgKGEpICogMHg0MDApCiYjNDM7I2RlZmluZSAgUE1fU0lOR0xFX1NURVBfQ0gJCUJJVCg2KQomIzQzOyNkZWZpbmUgIFBNX1NJTkdMRV9TVEVQX09GRlNFVAkJR0VOTUFTSygxNSwgNykKJiM0MzsjZGVmaW5lICBQTV9TSU5HTEVfU1RFUF9FTgkJQklUKDMxKQomIzQzOwogLyogUG9ydCBNQUMgMC8xIFJlY2VpdmUgRXRoZXJuZXQgT2N0ZXRzIENvdW50ZXIgKi8KICNkZWZpbmUgTkVUQ19QTV9SRU9DVChhKQkJKDB4MTEwMCAmIzQzOyAoYSkgKiAweDQwMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX25ldGMuYyBiL2RyaXZlcnMvcHRwL3B0cF9uZXRjLmMKaW5kZXggOTRlOTUyZWU2OTkwMi4uZjJiNzdiZDVhZjAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wdHAvcHRwX25ldGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3B0cC9wdHBfbmV0Yy5jCkBAIC0xMjcsNiAmIzQzOzEyNywxNyBAQCBzdHJ1Y3QgbmV0Y190aW1lciB7CiAKICNkZWZpbmUgbmV0Y190aW1lcl9yZChwLCBvKQkJbmV0Y19yZWFkKChwKS0mZ3Q7YmFzZSAmIzQzOyAobykpCiAjZGVmaW5lIG5ldGNfdGltZXJfd3IocCwgbywgdikJCW5ldGNfd3JpdGUoKHApLSZndDtiYXNlICYjNDM7IChvKSwgdikKJiM0MzsKJiM0MzsvKiBUaGUgNjQtYml0IHRpbWVyIHJlZ2lzdGVycyBjb25zaXN0IG9mIGEgbG93IChMKSBhbmQgaGlnaCAoSCkgcmVnaXN0ZXIgcGFpci4KJiM0MzsgKiBIYXJkd2FyZSByZXF1aXJlcyBhIHN0cmljdCBhY2Nlc3Mgb3JkZXI6IGZvciB3cml0ZXMsIFRNUl94eHhfTCBtdXN0IGJlCiYjNDM7ICogd3JpdHRlbiBmaXJzdCwgd2hpY2ggbGF0Y2hlcyB0aGUgdmFsdWUgaW50byBhIHNoYWRvdyByZWdpc3RlcjsgdGhlIHdyaXRlCiYjNDM7ICogdG8gVE1SX3h4eF9IIHRoZW4gYXRvbWljYWxseSB0cmFuc2ZlcnMgYm90aCBzaGFkb3cgcmVnaXN0ZXJzIGludG8gdGhlIGxpdmUKJiM0MzsgKiBjb3VudGVyLiBGb3IgcmVhZHMsIFRNUl94eHhfTCBtdXN0IGJlIHJlYWQgZmlyc3QgdG8gY2FwdHVyZSBhIGNvaGVyZW50CiYjNDM7ICogc25hcHNob3QuIGlvd3JpdGU2NF9sb19oaSgpIGFuZCBpb3JlYWQ2NF9sb19oaSgpIGVuZm9yY2UgdGhpcyBMLWJlZm9yZS1ICiYjNDM7ICogb3JkZXJpbmcuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBuZXRjX3RpbWVyX3JkNjQocCwgbykJCWlvcmVhZDY0X2xvX2hpKChwKS0mZ3Q7YmFzZSAmIzQzOyAobykpCiYjNDM7I2RlZmluZSBuZXRjX3RpbWVyX3dyNjQocCwgbywgdikJaW93cml0ZTY0X2xvX2hpKHYsIChwKS0mZ3Q7YmFzZSAmIzQzOyAobykpCiAjZGVmaW5lIHB0cF90b19uZXRjX3RpbWVyKHB0cCkJCWNvbnRhaW5lcl9vZigocHRwKSwgc3RydWN0IG5ldGNfdGltZXIsIGNhcHMpCiAKIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0aW1lcl9jbGtfc3JjW10gPSB7CkBAIC0xMzYsNjYgJiM0MzsxNDcsNDUgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHRpbWVyX2Nsa19zcmNbXSA9IHsKIAogc3RhdGljIHZvaWQgbmV0Y190aW1lcl9jbnRfd3JpdGUoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsIHU2NCBucykKIHsKLQl1MzIgdG1yX2NudF9oID0gdXBwZXJfMzJfYml0cyhucyk7Ci0JdTMyIHRtcl9jbnRfbCA9IGxvd2VyXzMyX2JpdHMobnMpOwotCi0JLyogV3JpdGVzIHRvIHRoZSBUTVJfQ05UX0wgcmVnaXN0ZXIgY29waWVzIHRoZSB3cml0dGVuIHZhbHVlCi0JICogaW50byB0aGUgc2hhZG93IFRNUl9DTlRfTCByZWdpc3Rlci4gV3JpdGVzIHRvIHRoZSBUTVJfQ05UX0gKLQkgKiByZWdpc3RlciBjb3BpZXMgdGhlIHZhbHVlcyB3cml0dGVuIGludG8gdGhlIHNoYWRvdyBUTVJfQ05UX0gKLQkgKiByZWdpc3Rlci4gQ29udGVudHMgb2YgdGhlIHNoYWRvdyByZWdpc3RlcnMgYXJlIGNvcGllZCBpbnRvCi0JICogdGhlIFRNUl9DTlRfTCBhbmQgVE1SX0NOVF9IIHJlZ2lzdGVycyBmb2xsb3dpbmcgYSB3cml0ZSBpbnRvCi0JICogdGhlIFRNUl9DTlRfSCByZWdpc3Rlci4gU28gdGhlIHVzZXIgbXVzdCB3cml0ZXMgdG8gVE1SX0NOVF9MCi0JICogcmVnaXN0ZXIgZmlyc3QuIE90aGVyIEgvTCByZWdpc3RlcnMgc2hvdWxkIGhhdmUgdGhlIHNhbWUKLQkgKiBiZWhhdmlvci4KLQkgKi8KLQluZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX0NOVF9MLCB0bXJfY250X2wpOwotCW5ldGNfdGltZXJfd3IocHJpdiwgTkVUQ19UTVJfQ05UX0gsIHRtcl9jbnRfaCk7CiYjNDM7CW5ldGNfdGltZXJfd3I2NChwcml2LCBORVRDX1RNUl9DTlRfTCwgbnMpOwogfQogCiBzdGF0aWMgdTY0IG5ldGNfdGltZXJfb2Zmc2V0X3JlYWQoc3RydWN0IG5ldGNfdGltZXIgKnByaXYpCiB7Ci0JdTMyIHRtcl9vZmZfbCwgdG1yX29mZl9oOwotCXU2NCBvZmZzZXQ7Ci0KLQl0bXJfb2ZmX2wgPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX09GRl9MKTsKLQl0bXJfb2ZmX2ggPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX09GRl9IKTsKLQlvZmZzZXQgPSAoKCh1NjQpdG1yX29mZl9oKSAmbHQ7Jmx0OyAzMikgfCB0bXJfb2ZmX2w7Ci0KLQlyZXR1cm4gb2Zmc2V0OwomIzQzOwlyZXR1cm4gbmV0Y190aW1lcl9yZDY0KHByaXYsIE5FVENfVE1SX09GRl9MKTsKIH0KIAogc3RhdGljIHZvaWQgbmV0Y190aW1lcl9vZmZzZXRfd3JpdGUoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsIHU2NCBvZmZzZXQpCiB7Ci0JdTMyIHRtcl9vZmZfaCA9IHVwcGVyXzMyX2JpdHMob2Zmc2V0KTsKLQl1MzIgdG1yX29mZl9sID0gbG93ZXJfMzJfYml0cyhvZmZzZXQpOwotCi0JbmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9PRkZfTCwgdG1yX29mZl9sKTsKLQluZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX09GRl9ILCB0bXJfb2ZmX2gpOwomIzQzOwluZXRjX3RpbWVyX3dyNjQocHJpdiwgTkVUQ19UTVJfT0ZGX0wsIG9mZnNldCk7CiB9CiAKIHN0YXRpYyB1NjQgbmV0Y190aW1lcl9jdXJfdGltZV9yZWFkKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2KQogewotCXUzMiB0aW1lX2gsIHRpbWVfbDsKLQl1NjQgbnM7CiYjNDM7CXJldHVybiBuZXRjX3RpbWVyX3JkNjQocHJpdiwgTkVUQ19UTVJfQ1VSX1RJTUVfTCk7CiYjNDM7fQogCi0JLyogVGhlIHVzZXIgc2hvdWxkIHJlYWQgTkVUQ19UTVJfQ1VSX1RJTUVfTCBmaXJzdCB0bwotCSAqIGdldCBjb3JyZWN0IGN1cnJlbnQgdGltZS4KLQkgKi8KLQl0aW1lX2wgPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0NVUl9USU1FX0wpOwotCXRpbWVfaCA9IG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfQ1VSX1RJTUVfSCk7Ci0JbnMgPSAodTY0KXRpbWVfaCAmbHQ7Jmx0OyAzMiB8IHRpbWVfbDsKJiM0Mzt1NjQgbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNfdGltZXIgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXU2NCBjdXJfdGltZTsKIAotCXJldHVybiBuczsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cHJpdi0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwljdXJfdGltZSA9IG5ldGNfdGltZXJfY3VyX3RpbWVfcmVhZChwcml2KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGN1cl90aW1lOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZSk7CiAKIHN0YXRpYyB2b2lkIG5ldGNfdGltZXJfYWxhcm1fd3JpdGUoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsCiAJCQkJICAgdTY0IGFsYXJtLCBpbnQgaW5kZXgpCiB7Ci0JdTMyIGFsYXJtX2ggPSB1cHBlcl8zMl9iaXRzKGFsYXJtKTsKLQl1MzIgYWxhcm1fbCA9IGxvd2VyXzMyX2JpdHMoYWxhcm0pOwotCi0JbmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9BTEFSTV9MKGluZGV4KSwgYWxhcm1fbCk7Ci0JbmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9BTEFSTV9IKGluZGV4KSwgYWxhcm1faCk7CiYjNDM7CW5ldGNfdGltZXJfd3I2NChwcml2LCBORVRDX1RNUl9BTEFSTV9MKGluZGV4KSwgYWxhcm0pOwogfQogCiBzdGF0aWMgdTMyIG5ldGNfdGltZXJfZ2V0X2ludGVncmFsX3BlcmlvZChzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdikKQEAgLTQ5NywyMiAmIzQzOzQ4NywxOSBAQCBzdGF0aWMgdm9pZCBuZXRjX3RpbWVyX2hhbmRsZV9ldHRzX2V2ZW50KHN0cnVjdCBuZXRjX3RpbWVyICpwcml2LCBpbnQgaW5kZXgsCiAJCQkJCSBib29sIHVwZGF0ZV9ldmVudCkKIHsKIAlzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50IGV2ZW50OwotCXUzMiBldHRzX2wgPSAwLCBldHRzX2ggPSAwOwomIzQzOwl1NjQgZXR0cyA9IDA7CiAKLQl3aGlsZSAobmV0Y190aW1lcl9yZChwcml2LCBORVRDX1RNUl9TVEFUKSAmYW1wOyBUTVJfU1RBVF9FVFNfVkxEKGluZGV4KSkgewotCQlldHRzX2wgPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0VUVFNfTChpbmRleCkpOwotCQlldHRzX2ggPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0VUVFNfSChpbmRleCkpOwotCX0KJiM0MzsJd2hpbGUgKG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfU1RBVCkgJmFtcDsgVE1SX1NUQVRfRVRTX1ZMRChpbmRleCkpCiYjNDM7CQlldHRzID0gbmV0Y190aW1lcl9yZDY0KHByaXYsIE5FVENfVE1SX0VUVFNfTChpbmRleCkpOwogCiAJLyogSW52YWxpZCB0aW1lIHN0YW1wICovCi0JaWYgKCFldHRzX2wgJmFtcDsmYW1wOyAhZXR0c19oKQomIzQzOwlpZiAoIWV0dHMpCiAJCXJldHVybjsKIAogCWlmICh1cGRhdGVfZXZlbnQpIHsKIAkJZXZlbnQudHlwZSA9IFBUUF9DTE9DS19FWFRUUzsKIAkJZXZlbnQuaW5kZXggPSBpbmRleDsKLQkJZXZlbnQudGltZXN0YW1wID0gKHU2NClldHRzX2ggJmx0OyZsdDsgMzI7Ci0JCWV2ZW50LnRpbWVzdGFtcCB8PSBldHRzX2w7CiYjNDM7CQlldmVudC50aW1lc3RhbXAgPSBldHRzOwogCQlwdHBfY2xvY2tfZXZlbnQocHJpdi0mZ3Q7Y2xvY2ssICZhbXA7ZXZlbnQpOwogCX0KIH0KQEAgLTgwMiw3ICYjNDM7Nzg5LDYgQEAgc3RhdGljIGludCBuZXRjX3RpbWVyX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcGNpZV9mbHIocGRldik7CiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCAmIzM0O0ZhaWxlZCB0byBlbmFibGUgZGV2aWNlXG4mIzM0Oyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RzYS90YWdfbmV0Yy5oIGIvaW5jbHVkZS9saW51eC9kc2EvdGFnX25ldGMuaAppbmRleCBmZTk2NDcyMmU1YjAzLi4yMjljNzBjYjdhOGFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RzYS90YWdfbmV0Yy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZHNhL3RhZ19uZXRjLmgKQEAgLTEwLDUgJiM0MzsxMCw0NyBAQAogI2luY2x1ZGUgJmx0O25ldC9kc2EuaCZndDsKIAogI2RlZmluZSBORVRDX1RBR19NQVhfTEVOCQkJMTQKJiM0MzsjZGVmaW5lIE5FVENfVEFHX1RTX1JFUV9JRAkJCUdFTk1BU0soMywgMCkKJiM0MzsjZGVmaW5lIE5FVENfUFRQX0ZMQUdfT05FU1RFUAkJCUJJVCgwKQomIzQzOyNkZWZpbmUgTkVUQ19QVFBfRkxBR19UV09TVEVQCQkJQklUKDEpCiYjNDM7CiYjNDM7c3RydWN0IG5ldGNfc2tiX2NiIHsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKmNsb25lOwomIzQzOwl1bnNpZ25lZCBsb25nIHB0cF90eF90aW1lOwomIzQzOwl1NjQgdHN0YW1wOwomIzQzOwl1OCBwdHBfZmxhZzsKJiM0MzsJdTggdHNfcmVxX2lkOwomIzQzOwkvKiBPbmUtc3RlcCBTeW5jIHBhcnNpbmcgcmVzdWx0cywgY29tcHV0ZWQgaW4gbmV0Y19wb3J0X3R4dHN0YW1wKCkKJiM0MzsJICogYW5kIHJldXNlZCBpbiB0aGUgdGFnZ2VyIHhtaXQgcGF0aCBhbmQgdGhlIGRlZmVycmVkIHdvcmssIHRvIGF2b2lkCiYjNDM7CSAqIHJlLXBhcnNpbmcgdGhlIFBUUCBoZWFkZXIuIFZhbGlkIG9ubHkgd2hpbGUKJiM0MzsJICogcHRwX2ZsYWcgPT0gTkVUQ19QVFBfRkxBR19PTkVTVEVQLgomIzQzOwkgKi8KJiM0MzsJdTE2IGNvcnJlY3Rpb25fb2Zmc2V0OwomIzQzOwl1MTYgdGltZXN0YW1wX29mZnNldDsKJiM0MzsJYm9vbCBpc191ZHA7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIE5FVENfU0tCX0NCKHNrYikJKChzdHJ1Y3QgbmV0Y19za2JfY2IgKikoKHNrYiktJmd0O2NiKSkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAtIE5FVEMgdGFnZ2VyL3N3aXRjaC1kcml2ZXIgc2hhcmVkIG9wZXJhdGlvbnMKJiM0MzsgKiBAdHdvc3RlcF90c3RhbXBfaGFuZGxlcjogQ2FsbGVkIGJ5IHRoZSB0YWdnZXIgd2hlbiBhIHR3by1zdGVwIHRyYW5zbWl0CiYjNDM7ICoJdGltZXN0YW1wIHJlc3BvbnNlIGlzIHJlY2VpdmVkLCB0byBkZWxpdmVyIHRoZSB0aW1lc3RhbXAgdG8gdGhlCiYjNDM7ICoJc3dpdGNoIGRyaXZlci4KJiM0MzsgKiBAb25lc3RlcF9zeW5jX2hhbmRsZXI6IENhbGxlZCBmcm9tIHRoZSB0YWdnZXIgeG1pdCBwYXRoIGZvciBhIG9uZS1zdGVwIFN5bmMKJiM0MzsgKglmcmFtZS4gUmV0dXJucyB0aGUgc2tiIGlmIGl0IGNhbiBiZSB0cmFuc21pdHRlZCBpbW1lZGlhdGVseSAodGhlCiYjNDM7ICoJaW4tZmxpZ2h0IHNsb3QgaGFzIGJlZW4gY2xhaW1lZCBhbmQgUE1fU0lOR0xFX1NURVAgcHJvZ3JhbW1lZCksIG9yIE5VTEwKJiM0MzsgKglpZiB0aGUgZnJhbWUgaGFzIGJlZW4gcXVldWVkIGZvciBkZWZlcnJlZCB0cmFuc21pc3Npb24gb3IgZHJvcHBlZC4KJiM0MzsgKiBAb25lc3RlcF9zeW5jX3htaXQ6IENhbGxlZCBieSB0aGUgc3dpdGNoIGRyaXZlciB0byB0cmFuc21pdCBhIGRlZmVycmVkCiYjNDM7ICoJb25lLXN0ZXAgU3luYyBmcmFtZSBkaXJlY3RseSB0byB0aGUgY29uZHVpdCwgYnlwYXNzaW5nIGRzYV91c2VyX3htaXQoKS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSB7CiYjNDM7CXZvaWQgKCp0d29zdGVwX3RzdGFtcF9oYW5kbGVyKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgICAgdTggdHNfcmVxX2lkLCB1NjQgdHMpOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqKCpvbmVzdGVwX3N5bmNfaGFuZGxlcikoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCQkJCWludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKJiM0MzsJbmV0ZGV2X3R4X3QgKCpvbmVzdGVwX3N5bmNfeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiYjNDM7fTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzbC9uZXRjX2dsb2JhbC5oIGIvaW5jbHVkZS9saW51eC9mc2wvbmV0Y19nbG9iYWwuaAppbmRleCA1YjhmZjUyOGQzNjk5Li45MTQ0MWNiMzViYzI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzbC9uZXRjX2dsb2JhbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnNsL25ldGNfZ2xvYmFsLmgKQEAgLTIyLDQgJiM0MzsyMiwxMyBAQCBzdGF0aWMgaW5saW5lIHU2NCBuZXRjX3JlYWQ2NCh2b2lkIF9faW9tZW0gKnJlZykKIAlyZXR1cm4gaW9yZWFkNjQocmVnKTsKIH0KIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19QVFBfTkVUQ19WNF9USU1FUikKJiM0Mzt1NjQgbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHN0cnVjdCBwY2lfZGV2ICp0aW1lcl9kZXYpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB1NjQgbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHN0cnVjdCBwY2lfZGV2ICp0aW1lcl9kZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9kc2EvdGFnX25ldGMuYyBiL25ldC9kc2EvdGFnX25ldGMuYwppbmRleCBkZjcyYTYxNzk2YWQ1Li45NGNjYTIwZmZjZGFkIDEwMDY0NAotLS0gYS9uZXQvZHNhL3RhZ19uZXRjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RzYS90YWdfbmV0Yy5jCkBAIC0xNiw2ICYjNDM7MTYsMTAgQEAKICNkZWZpbmUgTkVUQ19UQUdfVE9fUE9SVAkJMQogLyogU3ViVHlwZTA6IE5vIHJlcXVlc3QgdG8gcGVyZm9ybSB0aW1lc3RhbXBpbmcgKi8KICNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTAJCTAKJiM0MzsvKiBTdWJUeXBlMTogUmVxdWVzdCB0byBwZXJmb3JtIG9uZS1zdGVwIHRpbWVzdGFtcGluZyAqLwomIzQzOyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTEJCTEKJiM0MzsvKiBTdWJUeXBlMjogUmVxdWVzdCB0byBwZXJmb3JtIHR3by1zdGVwIHRpbWVzdGFtcGluZyAqLwomIzQzOyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTIJCTIKIAogLyogVG9fSG9zdCBOWFAgc3dpdGNoIHRhZyAqLwogI2RlZmluZSBORVRDX1RBR19UT19IT1NUCQkyCkBAIC0yOSw2ICYjNDM7MzMsOCBAQAogLyogTkVUQyBzd2l0Y2ggdGFnIGxlbmd0aHMgKi8KICNkZWZpbmUgTkVUQ19UQUdfRk9SV0FSRF9MRU4JCTYKICNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTBfTEVOCTYKJiM0MzsjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUxX0xFTgkxMAomIzQzOyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTJfTEVOCTYKICNkZWZpbmUgTkVUQ19UQUdfVEhfU1VCVFlQRTBfTEVOCTYKICNkZWZpbmUgTkVUQ19UQUdfVEhfU1VCVFlQRTFfTEVOCTE0CiAjZGVmaW5lIE5FVENfVEFHX1RIX1NVQlRZUEUyX0xFTgkxNApAQCAtNDAsNiAmIzQzOzQ2LDcgQEAKICNkZWZpbmUgTkVUQ19UQUdfSVBWCQkJR0VOTUFTSyg0LCAyKQogI2RlZmluZSBORVRDX1RBR19TV0lUQ0gJCQlHRU5NQVNLKDIsIDApCiAjZGVmaW5lIE5FVENfVEFHX1BPUlQJCQlHRU5NQVNLKDcsIDMpCiYjNDM7I2RlZmluZSBORVRDX1RBR19USU1FU1RBTVAJCUdFTk1BU0soMjksIDApCiAKIHN0cnVjdCBuZXRjX3RhZ19jbW4gewogCV9fYmUxNiB0cGlkOwpAQCAtNDgsNiAmIzQzOzU1LDI5IEBAIHN0cnVjdCBuZXRjX3RhZ19jbW4gewogCXU4IHN3aXRjaF9wb3J0OwogfSBfX3BhY2tlZDsKIAomIzQzO3N0cnVjdCBuZXRjX3RhZ190cF9zdWJ0eXBlMSB7CiYjNDM7CXN0cnVjdCBuZXRjX3RhZ19jbW4gY21uOwomIzQzOwl1OCByZXN2OwomIzQzOwlfX2JlMzIgdGltZXN0YW1wOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7c3RydWN0IG5ldGNfdGFnX3RwX3N1YnR5cGUyIHsKJiM0MzsJc3RydWN0IG5ldGNfdGFnX2NtbiBjbW47CiYjNDM7CXU4IHRzX3JlcV9pZDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzO3N0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMSB7CiYjNDM7CXN0cnVjdCBuZXRjX3RhZ19jbW4gY21uOwomIzQzOwl1OCBob3N0X3JlYXNvbjsKJiM0MzsJX19iZTY0IHRpbWVzdGFtcDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzO3N0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMiB7CiYjNDM7CXN0cnVjdCBuZXRjX3RhZ19jbW4gY21uOwomIzQzOwl1OCBocl90c3JlcV9pZDsKJiM0MzsJX19iZTY0IHRpbWVzdGFtcDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwogc3RhdGljIHZvaWQgbmV0Y19maWxsX2NvbW1vbl90YWcoc3RydWN0IG5ldGNfdGFnX2NtbiAqdGFnLCB1OCB0eXBlLAogCQkJCSB1OCBzdWJ0eXBlLCB1OCBzd19pZCwgdTggcG9ydCwgdTggaXB2KQogewpAQCAtOTcsMTUgJiM0MzsxMjcsMTIwIEBAIHN0YXRpYyB2b2lkIG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlORVRDX1RBR19UUF9TVUJUWVBFMF9MRU4pOwogfQogCi0vKiBDdXJyZW50bHkgb25seSBzdXBwb3J0IFRvX1BvcnQgdGFnLCBzdWJ0eXBlIDAgKi8KJiM0MztzdGF0aWMgdm9pZCBuZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUxKHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJdTMyIHRzID0gRklFTERfUFJFUChORVRDX1RBR19USU1FU1RBTVAsIE5FVENfU0tCX0NCKHNrYiktJmd0O3RzdGFtcCk7CiYjNDM7CXN0cnVjdCBuZXRjX3RhZ190cF9zdWJ0eXBlMSAqdGFnOwomIzQzOwomIzQzOwl0YWcgPSBuZXRjX2ZpbGxfY29tbW9uX3RwX3RhZyhza2IsIG5kZXYsIE5FVENfVEFHX1RQX1NVQlRZUEUxLAomIzQzOwkJCQkgICAgICBORVRDX1RBR19UUF9TVUJUWVBFMV9MRU4pOwomIzQzOwl0YWctJmd0O3RpbWVzdGFtcCA9IGh0b25sKHRzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpjbG9uZSA9IE5FVENfU0tCX0NCKHNrYiktJmd0O2Nsb25lOwomIzQzOwl1OCB0c19yZXFfaWQgPSBORVRDX1NLQl9DQihjbG9uZSktJmd0O3RzX3JlcV9pZDsKJiM0MzsJc3RydWN0IG5ldGNfdGFnX3RwX3N1YnR5cGUyICp0YWc7CiYjNDM7CiYjNDM7CXRhZyA9IG5ldGNfZmlsbF9jb21tb25fdHBfdGFnKHNrYiwgbmRldiwgTkVUQ19UQUdfVFBfU1VCVFlQRTIsCiYjNDM7CQkJCSAgICAgIE5FVENfVEFHX1RQX1NVQlRZUEUyX0xFTik7CiYjNDM7CXRhZy0mZ3Q7dHNfcmVxX2lkID0gRklFTERfUFJFUChORVRDX1RBR19UU19SRVFfSUQsIHRzX3JlcV9pZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBuZXRkZXZfdHhfdCBuZXRjX29uZXN0ZXBfc3luY194bWl0KHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwkvKiBUaGlzIGRlZmVycmVkIG9uZS1zdGVwIFN5bmMgZnJhbWUgYWxyZWFkeSB3ZW50IHRocm91Z2gKJiM0MzsJICogZHNhX3VzZXJfeG1pdCgpJiMzOTtzIHNrYl9lbnN1cmVfd3JpdGFibGVfaGVhZF90YWlsKCkgYW5kIGV0aF9za2JfcGFkKCkKJiM0MzsJICogYmVmb3JlIGl0IHdhcyBxdWV1ZWQgaW4gbmV0Y194bWl0KCksIGFuZCBub3RoaW5nIGhhcyBjbG9uZWQgaXQgb3IKJiM0MzsJICogc2hydW5rIGl0cyBoZWFkL3RhaWwgcm9vbSBzaW5jZS4gU28gdGhlIGhlYWQvdGFpbCByb29tIGlzIHN0aWxsCiYjNDM7CSAqIGd1YXJhbnRlZWQgYW5kIHRoZSBza2IgaXMgc3RpbGwgd3JpdGFibGU7IG9ubHkgdGhlIHRhZyBuZWVkcyB0byBiZQomIzQzOwkgKiBwdXNoZWQgYmVmb3JlIGhhbmRpbmcgaXQgZGlyZWN0bHkgdG8gdGhlIGNvbmR1aXQsIGJ5cGFzc2luZwomIzQzOwkgKiBkc2FfdXNlcl94bWl0KCkgc28gdGhhdCBkZXZfc3dfbmV0c3RhdHNfdHhfYWRkKCkgaXMgbm90IGludm9rZWQgYQomIzQzOwkgKiBzZWNvbmQgdGltZSBmb3IgdGhlIHNhbWUgZnJhbWUuCiYjNDM7CSAqLwomIzQzOwluZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUxKHNrYiwgZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRzYV9lbnF1ZXVlX3NrYihza2IsIGRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19vbmVzdGVwX3N5bmNfcHJvY2VzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdXNlcl90b19wb3J0KG5kZXYpOwomIzQzOwlzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7CiYjNDM7CXN0cnVjdCBza19idWZmICpuc2tiOwomIzQzOwomIzQzOwl0YWdnZXJfZGF0YSA9IGRwLSZndDtkcy0mZ3Q7dGFnZ2VyX2RhdGE7CiYjNDM7CWlmICh1bmxpa2VseSghdGFnZ2VyX2RhdGEtJmd0O29uZXN0ZXBfc3luY19oYW5kbGVyKSkgewomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBEZWNpZGUsIHVuZGVyIHB0cF9sb2NrLCB3aGV0aGVyIHRoaXMgb25lLXN0ZXAgU3luYyBjYW4gYmUgc2VudAomIzQzOwkgKiBub3cgb3IgbXVzdCBiZSBkZWZlcnJlZC4gUmV0dXJucyB0aGUgc2tiICh3aXRoIHRoZSBpbi1mbGlnaHQKJiM0MzsJICogc2xvdCBjbGFpbWVkIGFuZCBQTV9TSU5HTEVfU1RFUCBhbHJlYWR5IHByb2dyYW1tZWQpIGZvcgomIzQzOwkgKiBpbW1lZGlhdGUgdHJhbnNtaXNzaW9uLCBvciBOVUxMIGlmIGl0IHdhcyBxdWV1ZWQgZm9yIGRlZmVycmVkCiYjNDM7CSAqIHRyYW5zbWlzc2lvbiBvciBkcm9wcGVkLgomIzQzOwkgKi8KJiM0MzsJbnNrYiA9IHRhZ2dlcl9kYXRhLSZndDtvbmVzdGVwX3N5bmNfaGFuZGxlcihkcC0mZ3Q7ZHMsIGRwLSZndDtpbmRleCwgc2tiKTsKJiM0MzsJaWYgKHVubGlrZWx5KCFuc2tiKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gbnNrYjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKLQluZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUwKHNrYiwgbmRldik7CiYjNDM7CXU4IHB0cF9mbGFnID0gTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7cHRwX2ZsYWc7CiYjNDM7CiYjNDM7CS8qIEZhc3QgcGF0aDogdGhlIG92ZXJ3aGVsbWluZyBtYWpvcml0eSBvZiBmcmFtZXMgYXJlIG5vdCBQVFAgZnJhbWVzICovCiYjNDM7CWlmIChsaWtlbHkoIXB0cF9mbGFnKSkgewomIzQzOwkJbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMChza2IsIG5kZXYpOwomIzQzOwkJcmV0dXJuIHNrYjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHRwX2ZsYWcgPT0gTkVUQ19QVFBfRkxBR19PTkVTVEVQKSB7CiYjNDM7CQlpZiAoIW5ldGNfb25lc3RlcF9zeW5jX3Byb2Nlc3Moc2tiLCBuZGV2KSkKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJCW5ldGNfZmlsbF90cF90YWdfc3VidHlwZTEoc2tiLCBuZGV2KTsKJiM0MzsJfSBlbHNlIGlmIChwdHBfZmxhZyA9PSBORVRDX1BUUF9GTEFHX1RXT1NURVApIHsKJiM0MzsJCW5ldGNfZmlsbF90cF90YWdfc3VidHlwZTIoc2tiLCBuZGV2KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KIAogCXJldHVybiBza2I7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZXRjX3J4X3RzdGFtcF9wcm9jZXNzKHN0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMSAqdGFnLAomIzQzOwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJdTY0IHRzID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZhbXA7dGFnLSZndDt0aW1lc3RhbXApOwomIzQzOwomIzQzOwlORVRDX1NLQl9DQihza2IpLSZndDt0c3RhbXAgPSB0czsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmV0Y190d29zdGVwX3RzdGFtcF9wcm9jZXNzKHN0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMiAqdGFnLAomIzQzOwkJCQkJc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQomIzQzO3sKJiM0MzsJdTggdHNfcmVxX2lkID0gRklFTERfR0VUKE5FVENfVEFHX1RTX1JFUV9JRCwgdGFnLSZndDtocl90c3JlcV9pZCk7CiYjNDM7CWludCBwb3J0ID0gRklFTERfR0VUKE5FVENfVEFHX1BPUlQsIHRhZy0mZ3Q7Y21uLnN3aXRjaF9wb3J0KTsKJiM0MzsJc3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEgKnRhZ2dlcl9kYXRhID0gZHMtJmd0O3RhZ2dlcl9kYXRhOwomIzQzOwl1NjQgdHMgPSBnZXRfdW5hbGlnbmVkX2JlNjQoJmFtcDt0YWctJmd0O3RpbWVzdGFtcCk7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghdGFnZ2VyX2RhdGEtJmd0O3R3b3N0ZXBfdHN0YW1wX2hhbmRsZXIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0YWdnZXJfZGF0YS0mZ3Q7dHdvc3RlcF90c3RhbXBfaGFuZGxlcihkcywgcG9ydCwgdHNfcmVxX2lkLCB0cyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuZXRjX2dldF9yeF90YWdfbGVuKGludCB0eXBlLCBpbnQgc3VidHlwZSkKIHsKIAkvKiBPbmx5IE5FVENfVEFHX1RPX0hPU1QgYW5kIE5FVENfVEFHX0ZPUldBUkQgYXJlIGV4cGVjdGVkIGluIFJYLApAQCAtMTI2LDE0ICYjNDM7MjYxLDE3IEBAIHN0YXRpYyBpbnQgbmV0Y19nZXRfcnhfdGFnX2xlbihpbnQgdHlwZSwgaW50IHN1YnR5cGUpCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHAgPSBuZGV2LSZndDtkc2FfcHRyOwogCXN0cnVjdCBuZXRjX3RhZ19jbW4gKnRhZ19jbW47CiAJaW50IHRhZ19sZW4sIHN3X2lkLCBwb3J0OwogCWludCB0eXBlLCBzdWJ0eXBlOwomIzQzOwl2b2lkICp0YWc7CiAKLQlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBORVRDX1RBR19NQVhfTEVOKSkpCiYjNDM7CWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIE5FVENfVEFHX01BWF9MRU4gLSAyKSkpCiAJCWdvdG8gZXJyX2ZyZWVfc2tiOwogCi0JdGFnX2NtbiA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7CiYjNDM7CXRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7CiYjNDM7CXRhZ19jbW4gPSB0YWc7CiAJaWYgKG50b2hzKHRhZ19jbW4tJmd0O3RwaWQpICE9IEVUSF9QX05YUF9ORVRDKSB7CiAJCWRldl93YXJuX3JhdGVsaW1pdGVkKCZhbXA7bmRldi0mZ3Q7ZGV2LCAmIzM0O1Vua25vd24gVFBJRCAweCUwNHhcbiYjMzQ7LAogCQkJCSAgICAgbnRvaHModGFnX2Ntbi0mZ3Q7dHBpZCkpOwpAQCAtMTYxLDEyICYjNDM7Mjk5LDI4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAodHlwZSA9PSBORVRDX1RBR19GT1JXQVJEKSB7CiAJCWRzYV9kZWZhdWx0X29mZmxvYWRfZndkX21hcmsoc2tiKTsKIAl9IGVsc2UgaWYgKHR5cGUgPT0gTkVUQ19UQUdfVE9fSE9TVCkgewotCQkvKiBDdXJyZW50bHkgb25seSBzdWJ0eXBlMCBzdXBwb3J0ZWQgKi8KLQkJaWYgKHN1YnR5cGUgIT0gTkVUQ19UQUdfVEhfU1VCVFlQRTApCiYjNDM7CQlzd2l0Y2ggKHN1YnR5cGUpIHsKJiM0MzsJCWNhc2UgTkVUQ19UQUdfVEhfU1VCVFlQRTA6CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIE5FVENfVEFHX1RIX1NVQlRZUEUxOgomIzQzOwkJCW5ldGNfcnhfdHN0YW1wX3Byb2Nlc3ModGFnLCBza2IpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBORVRDX1RBR19USF9TVUJUWVBFMjoKJiM0MzsJCQkvKiBUaGlzIHNrYiBpcyBhIGhhcmR3YXJlLWdlbmVyYXRlZCByZXNwb25zZSB0byBhCiYjNDM7CQkJICogdHdvLXN0ZXAgdHJhbnNtaXQgdGltZXN0YW1wIHJlcXVlc3QuIFRoZSB0YWcKJiM0MzsJCQkgKiBkcml2ZXIgbXVzdCBmcmVlIHRoZSBza2IgYWZ0ZXIgcHJvY2Vzc2luZy4KJiM0MzsJCQkgKi8KJiM0MzsJCQluZXRjX3R3b3N0ZXBfdHN0YW1wX3Byb2Nlc3ModGFnLCBkcC0mZ3Q7ZHMpOwomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfc2tiOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlkZXZfd2Fybl9yYXRlbGltaXRlZCgmYW1wO25kZXYtJmd0O2RldiwKJiM0MzsJCQkJCSAgICAgJiMzNDtVbnN1cHBvcnRlZCBUb19Ib3N0IHN1YnR5cGU6ICVkXG4mIzM0OywKJiM0MzsJCQkJCSAgICAgc3VidHlwZSk7CiAJCQlnb3RvIGVycl9mcmVlX3NrYjsKJiM0MzsJCX0KIAl9IGVsc2UgewogCQlkZXZfd2Fybl9yYXRlbGltaXRlZCgmYW1wO25kZXYtJmd0O2RldiwKLQkJCQkgICAgICYjMzQ7VW5leHBlY3RlZCAgdGFnIHR5cGUgJWRcbiYjMzQ7LCB0eXBlKTsKJiM0MzsJCQkJICAgICAmIzM0O1VuZXhwZWN0ZWQgdGFnIHR5cGUgJWRcbiYjMzQ7LCB0eXBlKTsKIAkJZ290byBlcnJfZnJlZV9za2I7CiAJfQogCkBAIC0yMDAsNiAmIzQzOzM1NCwyOCBAQCBzdGF0aWMgdm9pZCBuZXRjX2Zsb3dfZGlzc2VjdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgKnByb3RvLAogCSpwcm90byA9ICgoX19iZTE2ICopc2tiLSZndDtkYXRhKVsodGFnX2xlbiAvIDIpIC0gMV07CiB9CiAKJiM0MztzdGF0aWMgaW50IG5ldGNfY29ubmVjdChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7CiYjNDM7CiYjNDM7CXRhZ2dlcl9kYXRhID0ga3phbGxvY19vYmooKnRhZ2dlcl9kYXRhKTsKJiM0MzsJaWYgKCF0YWdnZXJfZGF0YSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwl0YWdnZXJfZGF0YS0mZ3Q7b25lc3RlcF9zeW5jX3htaXQgPSBuZXRjX29uZXN0ZXBfc3luY194bWl0OwomIzQzOwlkcy0mZ3Q7dGFnZ2VyX2RhdGEgPSB0YWdnZXJfZGF0YTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG5ldGNfZGlzY29ubmVjdChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGEgPSBkcy0mZ3Q7dGFnZ2VyX2RhdGE7CiYjNDM7CiYjNDM7CWtmcmVlKHRhZ2dlcl9kYXRhKTsKJiM0MzsJZHMtJmd0O3RhZ2dlcl9kYXRhID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIG5ldGNfbmV0ZGV2X29wcyA9IHsKIAkubmFtZQkJCT0gTkVUQ19OQU1FLAogCS5wcm90bwkJCT0gRFNBX1RBR19QUk9UT19ORVRDLApAQCAtMjA3LDYgJiM0MzszODMsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIG5ldGNfbmV0ZGV2X29wcyA9IHsKIAkucmN2CQkJPSBuZXRjX3JjdiwKIAkubmVlZGVkX2hlYWRyb29tCT0gTkVUQ19UQUdfTUFYX0xFTiwKIAkuZmxvd19kaXNzZWN0CQk9IG5ldGNfZmxvd19kaXNzZWN0LAomIzQzOwkuY29ubmVjdAkJPSBuZXRjX2Nvbm5lY3QsCiYjNDM7CS5kaXNjb25uZWN0CQk9IG5ldGNfZGlzY29ubmVjdCwKIH07CiAKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O0RTQSB0YWcgZHJpdmVyIGZvciBOWFAgTkVUQyBzd2l0Y2ggZmFtaWx5JiMzNDspOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI4MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFwcGxpY2FiaWxpdHkgb2YgdGhlIE5YUCBORVRDIFBUUCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgYWRkaW5nIFBUUCBzdXBwb3J0IHRvIHRoZSBOWFAgTkVUQyBzd2l0Y2ggZHJpdmVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IGlmIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzOiBgbmV0Y19wdHAuY2AsIGBuZXRjX21haW4uY2AsIGBuZXRjX3BsYXRmb3JtLmNgLCBzb21lIGhlYWRlciBmaWxlcywgYW5kIGEgZmV3IG90aGVycy4gUHJldHR5IGNvbXByZWhlbnNpdmUuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBjYW4gSSBldmVuICpyZWFjaCogdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IElzIHRoaXMgc29tZXRoaW5nIEkgY2FuIGVmZmVjdGl2ZWx5IGZ1eno/IEkgbmVlZCB0byBjaGVjayBpZiB0aGUgZHJpdmVyLCBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9kc2EvbmV0Yy9gLCBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgdXNlZCBieSBmdXp6ZXJzLiBJdCBkZXBlbmRzIG9uIGBORVRfRFNBX05FVENfU1dJVENIYCwgd2hpY2gsIGluIHR1cm4sIGRlcGVuZHMgb24gYEFSTTY0IHx8IENPTVBJTEVfVEVTVGAsIGBORVRfRFNBICZhbXA7JmFtcDsgUENJYCwgYW5kIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAuIFJpZ2h0LCBpdCBsb29rcyBsaWtlIGEgUENJIGRldmljZS4gQW5kIHRoaW5raW5nIGFib3V0IGl0LCBOWFAgTkVUQyBpcyBwcm9iYWJseSBhIHBoeXNpY2FsIGhhcmR3YXJlIGNvbXBvbmVudCwgaXNuJiMzOTt0IGl0PyBOZXR3b3JrIEVkZ2UgVGltZS1TZW5zaXRpdmUgTmV0d29ya2luZyBDb250cm9sbGVyLCB5ZXAsIFBDSSBtYWtlcyBzZW5zZS4KClNvLCB0aGUgbmV4dCBxdWVzdGlvbjogaXMgdGhpcyBoYXJkd2FyZSBlbXVsYXRlZCBpbiBRRU1VPyBUaGF0JiMzOTtzIHRoZSByZWFsIGJsb2NrZXIuIEkmIzM5O2QgdHlwaWNhbGx5IHNlYXJjaCB0aGUgUUVNVSBzb3VyY2UgZm9yICYjMzQ7TkVUQyYjMzQ7LCBidXQgSSBkb24mIzM5O3QgaGF2ZSBhY2Nlc3MgdG8gdGhhdCBoZXJlLiBUaGUgcHJvbXB0IGRvZXMgZ2l2ZSBhIGNsdWUsIG1lbnRpb25pbmcgdGhhdCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggZHJpdmVycywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBjYXJkcyBhcmVuJiMzOTt0IHVzdWFsbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhpbmdzIGxpa2UgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUsIHRoYXQgc29ydCBvZiB0aGluZy4gR2l2ZW4gdGhhdCB0aGlzIGlzIGFuIE5YUC1zcGVjaWZpYyBjb21wb25lbnQsIEkgc3VzcGVjdCBpdCYjMzk7cyB0aGUgc2FtZSBzaXR1YXRpb24uIFVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIG1hY2hpbmUgbW9kZWwgZm9yIGFuIGkuTVggYm9hcmQsIHRoZW4gTlhQIHNwZWNpZmljIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZC4KCkFscmlnaHQsIHRoZSBkcml2ZXIgcHJvYmUgZnVuY3Rpb24sIGBuZXRjX3N3aXRjaF9wcm9iZWAsIGNvbmZpcm1zIHRoaXMgaXMgYSBQQ0kgZHJpdmVyIGJlY2F1c2UgaXQgdGFrZXMgYSBgcGNpX2RldmAgYXJndW1lbnQuIEl0IGxvb2tzIGxpa2UgbXkgYXNzdW1wdGlvbiBvZiBwaHlzaWNhbCBoYXJkd2FyZSBpcyBjb3JyZWN0LiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uY2AgdG8gaWRlbnRpZnkgdGhlIFBDSSBJRHMuIElmIGl04oCZcyBub3QgZW11bGF0ZWQsIHRoZW4gZnV6emluZyBpcyBnb2luZyB0byBiZSBzaWduaWZpY2FudGx5IG1vcmUgZGlmZmljdWx0LCBpZiBub3QgaW1wb3NzaWJsZSwgd2l0aG91dCBhIGN1c3RvbSBRRU1VIHNldHVwIG9yIGFjY2VzcyB0byB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RldmljZV9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9uZXRjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0yNDk4PXN0YXRpYyBpbnQgbmV0Y19zd2l0Y2hfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoyNDk5Olx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMjUwMC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9MjU2MD1zdGF0aWMgdm9pZCBuZXRjX3N3aXRjaF9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0yNTcwLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6MjU3MTpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmV0Y19zd2l0Y2hfaWRzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0yNTcyLVx0eyBQQ0lfREVWSUNFKE5FVENfU1dJVENIX1ZFTkRPUl9JRCwgTkVUQ19TV0lUQ0hfREVWSUNFX0lEKSB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjEwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU3dpdGNoIElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25zdGFudHMsIGBORVRDX1NXSVRDSF9WRU5ET1JfSURgIGFuZCBgTkVUQ19TV0lUQ0hfREVWSUNFX0lEYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB3aGF0IHRoZXkgYWN0dWFsbHkgcmVwcmVzZW50LiBXZSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBleGFjdCB2ZW5kb3IgYW5kIGRldmljZSB0aGVzZSBjb25zdGFudHMgYXJlIG1lYW50IHRvIHBpbnBvaW50LiBJJiMzOTttIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gaG93IHRoZSBzeXN0ZW0gaWRlbnRpZmllcyBzcGVjaWZpYyBuZXR3b3JrIHN3aXRjaGVzIHdpdGhpbiBpdHMgcHVydmlldywgbGlrZWx5IHRocm91Z2ggc29tZSBraW5kIG9mIGhhcmR3YXJlIG9yIGZpcm13YXJlIGlkZW50aWZpY2F0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzb3VyY2Ugb2YgdGhlc2UgY29uc3RhbnRzLiBBcmUgdGhleSBkZWZpbmVkIGluIGEgZHJpdmVyLCBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgcGVyaGFwcyBkZXJpdmVkIGZyb20gc29tZSBraW5kIG9mIG5ldHdvcmsgZGlzY292ZXJ5IHByb3RvY29sPyBVbmRlcnN0YW5kaW5nIHRoZSBvcmlnaW4gd2lsbCBkaWN0YXRlIGhvdyBJJiMzOTtsbCBhcHByb2FjaCB0aGlzIGludmVzdGlnYXRpb24uIEtub3dpbmcgdGhlIGNvbnRleHQgd2lsbCBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGhhcmR3YXJlIHJlZ2lzdGVycyB3aGVyZSB0aGlzIGluZm9ybWF0aW9uIGlzIGJlaW5nIGZldGNoZWQuIFRoZSBnb2FsLCBjbGVhcmx5LCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRpZmZlcmVudGlhdGVzIGJldHdlZW4gdmFyaW91cyBzd2l0Y2ggbW9kZWxzIG9yIG1hbnVmYWN0dXJlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUQ19TV0lUQ0hfVkVORE9SX0lEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL25ldGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jPTI1NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5ldGNfc3dpdGNoX2lkc1tdID0ge1xuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6MjU3MjpcdHsgUENJX0RFVklDRShORVRDX1NXSVRDSF9WRU5ET1JfSUQsIE5FVENfU1dJVENIX0RFVklDRV9JRCkgfSxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTI1NzMtXHR7IH1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oLTEwLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2hfaHcuaDoxMTojZGVmaW5lIE5FVENfU1dJVENIX1ZFTkRPUl9JRFx0XHQweDExMzFcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoX2h3LmgtMTItI2RlZmluZSBORVRDX1NXSVRDSF9ERVZJQ0VfSURcdFx0MHhlZWYyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxMTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgVGhpcyBDb2RlKioKCk9rYXksIHNvIFZlbmRvciBJRCBgMHgxMTMxYCBpcyBOWFAsIGZvcm1lcmx5IFBoaWxpcHMgU2VtaWNvbmR1Y3RvcnMuIFRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciB0aGlzIFBDSSBkZXZpY2UsIHRoZSBOWFAgTkVUQyBzd2l0Y2gsIGlzIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIE15IGluaXRpYWwgYXNzZXNzbWVudCwgYmFzZWQgb24gZXhwZXJpZW5jZSwgaXMgbm8uIFN0YW5kYXJkIFFFTVUgc3RpY2tzIHRvIGVtdWxhdGluZyBnZW5lcmljIG5ldHdvcmsgZGV2aWNlcyBsaWtlIGUxMDAwLCB2aXJ0aW8tbmV0LCBvciBydGw4MTM5LiBWZW5kb3Itc3BlY2lmaWMgZGV2aWNlcywgc3VjaCBhcyB0aGUgTkVUQyBzd2l0Y2gsIGFyZSB0eXBpY2FsbHkgKm5vdCogZW11bGF0ZWQuCgpUaGVyZWZvcmUsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcsIHRoZSBjb2RlIHBhdGhzIGluIHRoaXMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgTkVUQyBzd2l0Y2gsIHNob3VsZCBiZSBlbnRpcmVseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGluc3RydWN0cyBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIHRhcmdldHMgb25seSB2ZW5kb3Itc3BlY2lmaWMgUENJIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHN1Y2ggYXMgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuIFRoaXMgc2VlbXMgdG8gYXBwbHkgZGlyZWN0bHkuCgpIb2xkIG9uLCBJIG5lZWQgdG8gY29uc2lkZXIgYSBwb3RlbnRpYWwgbG9vcGhvbGU6IHRoZSBEU0EgdGFnZ2VyIGNvbXBvbmVudCwgYG5ldC9kc2EvdGFnX25ldGMuY2AuIENhbiAqdGhhdCogYmUgcmVhY2hlZCB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgYmVjYXVzZSBEU0EgdGFnZ2VycyBhcmUgdHlwaWNhbGx5IGludm9sdmVkIGluIGhhbmRsaW5nIHBhY2tldHMgYmVpbmcgc2VudCBvciByZWNlaXZlZCBvbiBhIERTQSBtYXN0ZXIgbmV0d29yayBkZXZpY2U/IElmIHRoZSBzd2l0Y2ggaXNuJiMzOTt0IHByZXNlbnQsIHRoZSB0YWdnZXIgdHlwaWNhbGx5IGlzbiYjMzk7dCB1c2VkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBpc24mIzM5O3QsIGJ1dCBzeXprYWxsZXIgY2FuIHNvbWV0aW1lcyBjcmVhdGUgRFNBIHRyZWVzIHVzaW5nIGR1bW15IGRldmljZXMgb3Igd29ya2Fyb3VuZHMgaWYgaXQgY2FuIGJ5cGFzcyB0aGUgaGFyZHdhcmUgcHJvYmUuIEhvd2V2ZXIsIHRoYXQgdXN1YWxseSByZWxpZXMgb24gdGhlIHN3aXRjaCBkcml2ZXIgcHJvYmluZyBzdWNjZXNzZnVsbHkuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrLiBTeXprYWxsZXIgKmRvZXMqIGhhdmUgc29tZSBzdXBwb3J0IGZvciBpbmplY3RpbmcgcGFja2V0cyBpbnRvIERTQSBpbnRlcmZhY2VzLCBidXQgaXQgc3RpbGwgaGluZ2VzIG9uIHRoZSBEU0Egc3dpdGNoIGJlaW5nIHJlZ2lzdGVyZWQuIElmIHRoZSBtYWluIHN3aXRjaCBkcml2ZXIsIGBuZXRjX21haW4uY2AsIGNhbiYjMzk7dCBwcm9iZSB0aGUgUENJIGRldmljZSwgYmVjYXVzZSBpdCYjMzk7cyBtaXNzaW5nLCB0aGUgRFNBIHN3aXRjaCB3b24mIzM5O3QgYmUgcmVnaXN0ZXJlZCwgYW5kIGNvbnNlcXVlbnRseSwgdGhlIHRhZ2dlciBjb2RlIHdvbiYjMzk7dCBiZSBleGVjdXRlZC4KClNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gYmVjb21lczogSXMgdGhlcmUgKmFueSogcG9zc2libGUgd2F5IHRvIGluc3RhbnRpYXRlIG9yIHJlZ2lzdGVyIHRoZSBORVRDIERTQSBzd2l0Y2ggd2l0aG91dCB0aGUgcHJlc2VuY2Ugb2YgdGhlIFBDSSBoYXJkd2FyZT8gSSBuZWVkIHRvIGRldGVybWluZSBpZiBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9yIGFsdGVybmF0aXZlIGRyaXZlciBwYXRoIGV4aXN0cywgb3IgaWYgaXQmIzM5O3Mgc3RyaWN0bHkgZGVwZW5kZW50IG9uIHRoZSBQQ0kgZGV2aWNlLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbmV0Yy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9MjU3Nz1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmV0Y19zd2l0Y2hfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTI1ODMtfTtcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jOjI1ODQ6bW9kdWxlX3BjaV9kcml2ZXIobmV0Y19zd2l0Y2hfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTI1ODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxNjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0llIERyaXZlciBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIFBDSSBkcml2ZXIsIG5vdGhpbmcgbW9yZS4gQW5kIGJlY2F1c2UgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgdGhlIE5YUCBORVRDLCBpdCYjMzk7cyB0aWVkIGRpcmVjdGx5IHRvIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4gU3RhbmRhcmQgUUVNVSBqdXN0IGlzbiYjMzk7dCBnb2luZyB0byBjdXQgaXQ7IG5vIGVtdWxhdGlvbiBoZXJlLiBTbywgZnV6emluZyBpdCBpc24mIzM5O3QgZ29pbmcgdG8gYmUgd29ydGh3aGlsZTsgaXQmIzM5O3MgZ29pbmcgdG8gYmUgYSBkZWFkIGVuZC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgd2hldGhlciB0aGUgY29kZSBpbiBgdGFnX25ldGMuY2AgaXMgZXZlbiByZWFjaGFibGUuIExldCBtZSBjaGVjayB0aGUgRFNBIHRhZ2dlciByZWdpc3RyYXRpb247IGl0IGxvb2tzIGxpa2UgdGhhdCB1c2VzIGBtb2R1bGVfZHNhX3RhZ19kcml2ZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfZHNhX3RhZ19kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHNhL3RhZ19uZXRjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2RzYS90YWdfbmV0Yy5jPTM5Mz1NT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19ORVRDLCBORVRDX05BTUUpO1xubmV0L2RzYS90YWdfbmV0Yy5jOjM5NDptb2R1bGVfZHNhX3RhZ19kcml2ZXIobmV0Y19uZXRkZXZfb3BzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBUcmFpbiBvZiBUaG91Z2h0KioKCk9rYXksIHNvIHRoZSB0YWdnZXIgYmVpbmcgcmVnaXN0ZXJlZCBpc24mIzM5O3QgZW5vdWdoOyBpdCAqYWxzbyogbmVlZHMgYSBEU0Egc3dpdGNoIGNvbmZpZ3VyZWQgdG8gYWN0dWFsbHkgYmUgdXRpbGl6ZWQuIFRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgYSBxdWVzdGlvbiBwb3BzIGludG8gbXkgaGVhZDogY2FuIGEgdXNlciwgaW4gdGhlb3J5LCBqdXN0IHNldCB1cCBhIGR1bW15IERTQSBzd2l0Y2gsIGV2ZW4gb25lIHRoYXQmIzM5O3Mgbm90IGFjdHVhbGx5IGNvbm5lY3RlZCB0byBhbnl0aGluZywganVzdCB0byAqZW5hYmxlKiBhIHBhcnRpY3VsYXIgdGFnZ2VyLCBwZXJoYXBzIHNwZWNpZmljYWxseSB1c2luZyBgRFNBX1RBR19QUk9UT19ORVRDYD8gSW50ZXJlc3RpbmcgYW5nbGUuCgpUaGUgbmV4dCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgU3l6a2FsbGVyLiBJIHdvbmRlciwgY2FuIGl0IGJlIGxldmVyYWdlZCB0byB0ZXN0IHRoZXNlIHRhZ2dlcnM/IFNwZWNpZmljYWxseSwgY2FuIGl0IG1ha2UgdXNlIG9mIGBkc2FfbG9vcGAgb3IgYSBzaW1pbGFyIGNvbnN0cnVjdCBmb3IgdGhpcyBwdXJwb3NlPyBJdCBtYWtlcyBzZW5zZSB0aGF0IFN5emthbGxlciBpcyB0aGUgcmlnaHQgdG9vbC4gTGV0JiMzOTtzIHNlZSBpZiBgZHNhX2xvb3BgIHdvdWxkIGFsbG93IHVzIHRvIHRlc3QgYXJiaXRyYXJ5IHRhZ2dlcnMuCgpIb2xkIG9uLCBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCBgZHNhX2xvb3BgICpnZW5lcmFsbHkqIHJlbGllcyBvbiBgRFNBX1RBR19QUk9UT19OT05FYCBvciB3aGF0ZXZlciB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgcHJvdG9jb2wgaXMuIE9rYXksIHdhaXQgYSBtaW51dGUsIEkgdGhpbmsgSSYjMzk7bSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZi4gU3l6a2FsbGVyICpkb2VzKiBoYXZlIHRoZSBhYmlsaXR5IHRvIHRlc3QgRFNBIHRhZ2dlcnMsIGVpdGhlciBieSBpbmplY3RpbmcgcGFja2V0cyBkaXJlY3RseSwgb3IgYnkgdXNpbmcgYGRzYV9sb29wYCBvciBzb21lIHJlbGF0ZWQgbWVjaGFuaXNtLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLiBMZXQmIzM5O3MganVzdCBjb25maXJtLCBmb3IgbXkgb3duIHBlYWNlIG9mIG1pbmQsIHRoYXQgU3l6a2FsbGVyICpzcGVjaWZpY2FsbHkqIHRlc3RzIGB0YWdfbmV0Yy5jYC4gVGhhdCB3b3VsZCBnaXZlIG1lIHRoZSBjb25maXJtYXRpb24gSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YWdfbmV0YyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvTWFrZWZpbGU9MzI9b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01YTF9HU1cxWFgpICYjNDM7PSB0YWdfbXhsLWdzdzF4eC5vXG5uZXQvZHNhL01ha2VmaWxlOjMzOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19ORVRDKSAmIzQzOz0gdGFnX25ldGMub1xubmV0L2RzYS9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTk9ORSkgJiM0Mzs9IHRhZ19ub25lLm9cbi0tXG5uZXQvZHNhL3RhZ19uZXRjLmMtNS1cbm5ldC9kc2EvdGFnX25ldGMuYzo2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2RzYS90YWdfbmV0Yy5oXHUwMDNlXG5uZXQvZHNhL3RhZ19uZXRjLmMtNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxODQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBTeXprYWxsZXImIzM5O3MgRFNBIFRhZ2dlciBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBjb21wcmVoZW5zaXZlbHkgU3l6a2FsbGVyIGNvdmVycyBEU0EgdGFnZ2VyIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGVyZSBtaWdodCBiZSBhIGRlZGljYXRlZCBgc3l6X2RzYV9zZXR1cGAgY2FsbCBvciBhIHNpbWlsYXIgY29uc3RydWN0LCBzcGVjaWZpY2FsbHkgZm9yIGNvbmZpZ3VyaW5nIGFuZCB0ZXN0aW5nIHRoZXNlIHRhZ2dlcnMuIEJ1dCwgb24gZnVydGhlciByZWZsZWN0aW9uLCBJIGRvbiYjMzk7dCB0aGluayB0aGF0JiMzOTtzIHF1aXRlIHJpZ2h0LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgU3l6a2FsbGVyIGFwcHJvYWNoZXMgRFNBIHRlc3RpbmcgdGhyb3VnaCB2ZXRoIHBhaXJzLCB3aGljaCBpdCB0aGVuIGNvbm5lY3RzIHNvbWVob3cgdG8gYSBEU0Egc3dpdGNoLiBCdXQgd2FpdC4uLiBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQgaXQgZG9lc24mIzM5O3QgaGF2ZSBhIHRydWx5IGdlbmVyaWMgd2F5IHRvIGluc3RhbnRpYXRlIGFueSBhbmQgYWxsIERTQSB0YWdnZXJzLCBhdCBsZWFzdCB1bmxlc3MgdGhlcmUmIzM5O3MgYSB2aXJ0dWFsIGRyaXZlciBwcmVzZW50LiBJIG1lYW4sIHdpdGhvdXQgdGhhdCwgaXQgd291bGQgYmUgZGlmZmljdWx0IHRvIHRlc3QuCgpBaCwgdGhhdCYjMzk7cyBpdCEgVGhlIGBkc2FfbG9vcGAgZHJpdmVyLiBSaWdodC4gKlRoYXQmIzM5O3MqIHRoZSB2aXJ0dWFsIERTQSBzd2l0Y2ggZHJpdmVyIHVzZWQgc3BlY2lmaWNhbGx5IGZvciB0ZXN0aW5nIERTQSBmdW5jdGlvbmFsaXR5LiBUaGF0IGdpdmVzIGl0IHRoZSBwb3dlciB0byBjcmVhdGUgdGVzdCBzY2VuYXJpb3MgdGhhdCB3b3VsZCBiZSBkaWZmaWN1bHQgb3RoZXJ3aXNlLiBPa2F5LCBzbyBub3cgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBpZiBgZHNhX2xvb3BgIGNhbiB1dGlsaXplIGBEU0FfVEFHX1BST1RPX05FVENgLiBJZiBpdCBjYW4sIHdlJiMzOTtsbCBzZWUgaWYgdGhlIGNvdmVyYWdlIGltcHJvdmVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEU0FfVEFHX1BST1RPX05FVEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9NjI9bmV0Y19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtNjQte1xuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6NjU6XHRyZXR1cm4gRFNBX1RBR19QUk9UT19ORVRDO1xuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtNjYtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jPTY4PXN0YXRpYyBpbnQgbmV0Y19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtNzItXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzo3MzpcdGlmIChwcm90byAhPSBEU0FfVEFHX1BST1RPX05FVEMpXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy03NC1cdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4tLVxuaW5jbHVkZS9uZXQvZHNhLmg9MjY9c3RydWN0IHRjX2FjdGlvbjtcbi0tXG5pbmNsdWRlL25ldC9kc2EuaC02MC0jZGVmaW5lIERTQV9UQUdfUFJPVE9fTVhMODYyX1ZBTFVFXHRcdDMyXG5pbmNsdWRlL25ldC9kc2EuaDo2MTojZGVmaW5lIERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRVx0XHQzM1xuaW5jbHVkZS9uZXQvZHNhLmgtNjItXG5pbmNsdWRlL25ldC9kc2EuaD02Mz1lbnVtIGRzYV90YWdfcHJvdG9jb2wge1xuLS1cbmluY2x1ZGUvbmV0L2RzYS5oLTk2LVx0RFNBX1RBR19QUk9UT19NWEw4NjJcdFx0PSBEU0FfVEFHX1BST1RPX01YTDg2Ml9WQUxVRSxcbmluY2x1ZGUvbmV0L2RzYS5oOjk3Olx0RFNBX1RBR19QUk9UT19ORVRDXHRcdD0gRFNBX1RBR19QUk9UT19ORVRDX1ZBTFVFLFxuaW5jbHVkZS9uZXQvZHNhLmgtOTgtfTtcbi0tXG5uZXQvZHNhL3RhZ19uZXRjLmM9Mzc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgbmV0Y19uZXRkZXZfb3BzID0ge1xubmV0L2RzYS90YWdfbmV0Yy5jLTM4MC1cdC5uYW1lXHRcdFx0PSBORVRDX05BTUUsXG5uZXQvZHNhL3RhZ19uZXRjLmM6MzgxOlx0LnByb3RvXHRcdFx0PSBEU0FfVEFHX1BST1RPX05FVEMsXG5uZXQvZHNhL3RhZ19uZXRjLmMtMzgyLVx0LnhtaXRcdFx0XHQ9IG5ldGNfeG1pdCxcbi0tXG5uZXQvZHNhL3RhZ19uZXRjLmM9MzkxPU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5uZXQvZHNhL3RhZ19uZXRjLmMtMzkyLVxubmV0L2RzYS90YWdfbmV0Yy5jOjM5MzpNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19ORVRDLCBORVRDX05BTUUpO1xubmV0L2RzYS90YWdfbmV0Yy5jLTM5NC1tb2R1bGVfZHNhX3RhZ19kcml2ZXIobmV0Y19uZXRkZXZfb3BzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyODQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFRhZ2dpbmcgRmxleGliaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIHdheSB0byBpbnRlcmFjdCB3aXRoIGBuZXRjX3htaXRgIG9yIGBuZXRjX3JjdmAgd2l0aGluIGBuZXQvZHNhL3RhZ19uZXRjLmNgIHdpdGhvdXQgYWN0dWFsbHkgbmVlZGluZyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgcHJlc2VudC4gVGhhdCYjMzk7cyB0aGUgY29yZSBxdWVzdGlvbi4gTXkgdGhpbmtpbmcgaXMsIGNhbiBJIHNpbXVsYXRlIG9yIHRlc3QgdGhlc2UgZnVuY3Rpb25zIGluIGEgbW9yZSBjb250cm9sbGVkIGVudmlyb25tZW50PwoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHdvbmRlcmluZyBpZiBhIHVzZXIsIHRocm91Z2ggc3lzZnMgb3IgbmV0bGluaywgY291bGQgKmR5bmFtaWNhbGx5KiBhbHRlciB0aGUgRFNBIHRhZyBwcm90b2NvbCBvZiBhbiBleGlzdGluZyBEU0Egc3dpdGNoLiBGb3IgaW5zdGFuY2UsIGNhbiBJIHRha2UgYSBzZXR1cCB1c2luZyBgZHNhX2xvb3BgIG9yIGV2ZW4gYGRzYV9tb2NrYCBhbmQgc29tZWhvdyByZWNvbmZpZ3VyZSBpdCB0byB1c2UgYERTQV9UQUdfUFJPVE9fTkVUQ2A/IFRoaXMgd291bGQgZ2l2ZSBtZSBhIHZhbHVhYmxlIHdpbmRvdyBpbnRvIGhvdyB0aGUgYE5FVENgIHRhZyBwcm90b2NvbCB3b3VsZCBmdW5jdGlvbiB1bmRlciBkaWZmZXJlbnQgY29uZGl0aW9ucywgYW5kIHBvdGVudGlhbGx5IGZhY2lsaXRhdGUgZWFzaWVyIGRlYnVnZ2luZyBhbmQgZXhwZXJpbWVudGF0aW9uLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyAqd2hldGhlciogRFNBJiMzOTtzIGFyY2hpdGVjdHVyZSBldmVuIHBlcm1pdHMgdGhpcyBraW5kIG9mIG9uLXRoZS1mbHkgdGFnIHByb3RvY29sIHN3aXRjaGluZy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBEU0EgaW50ZXJuYWxzIGFuZCBmaW5kIG91dCBpZiBpdCBpcyBkZXNpZ25lZCB0byBoYW5kbGUgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhbmdlX3RhZ19wcm90b2NvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvZHNhLmM9NTY5PXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9zZXR1cF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbm5ldC9kc2EvZHNhLmMtNTc4LVx0cnRubF9sb2NrKCk7XG5uZXQvZHNhL2RzYS5jOjU3OTpcdGVyciA9IGRzLVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2VfdGFnX3Byb3RvY29sKGRzLCB0YWdfb3BzLVx1MDAzZXByb3RvKTtcbm5ldC9kc2EvZHNhLmMtNTgwLVx0cnRubF91bmxvY2soKTtcbi0tXG5uZXQvZHNhL2RzYS5jPTExNTQ9c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV9jcHUoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4tLVxubmV0L2RzYS9kc2EuYy0xMTc1LVx0aWYgKHVzZXJfcHJvdG9jb2wpIHtcbm5ldC9kc2EvZHNhLmM6MTE3NjpcdFx0aWYgKCFkcy1cdTAwM2VvcHMtXHUwMDNlY2hhbmdlX3RhZ19wcm90b2NvbCkge1xubmV0L2RzYS9kc2EuYy0xMTc3LVx0XHRcdGRldl9lcnIoZHMtXHUwMDNlZGV2LCBcJiMzNDtUYWcgcHJvdG9jb2wgY2Fubm90IGJlIG1vZGlmaWVkXFxuXCYjMzQ7KTtcbi0tXG5uZXQvZHNhL2RzYS5jLTEyMjktXHQgKiBkc2Ffc3dpdGNoX3NldHVwX3RhZ19wcm90b2NvbCBvbmNlIC5zZXR1cCBoYXMgcnVuIGFuZCB0aGVcbm5ldC9kc2EvZHNhLmM6MTIzMDpcdCAqIGRyaXZlciBpcyByZWFkeSB0byBhY2NlcHQgY2FsbHMgdG8gLmNoYW5nZV90YWdfcHJvdG9jb2wuIElmXG5uZXQvZHNhL2RzYS5jLTEyMzEtXHQgKiB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGN1c3RvbSBwcm90b2NvbCBhdCB0aGF0XG4tLVxubmV0L2RzYS9zd2l0Y2guYz04NzM9c3RhdGljIGludCBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbm5ldC9kc2Evc3dpdGNoLmMtODc5LVxubmV0L2RzYS9zd2l0Y2guYzo4ODA6XHRpZiAoIWRzLVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2VfdGFnX3Byb3RvY29sKVxubmV0L2RzYS9zd2l0Y2guYy04ODEtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvZHNhL3N3aXRjaC5jLTg4NC1cbm5ldC9kc2Evc3dpdGNoLmM6ODg1Olx0ZXJyID0gZHMtXHUwMDNlb3BzLVx1MDAzZWNoYW5nZV90YWdfcHJvdG9jb2woZHMsIHRhZ19vcHMtXHUwMDNlcHJvdG8pO1xubmV0L2RzYS9zd2l0Y2guYy04ODYtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTE5MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgcmVmbGVjdGlvbiwgYXMgaWYgSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIGl0IGFzIGFuIGV4cGVydDoKCioqRHluYW1pYyBUYWcgUHJvdG9jb2wgaW4gRFNBOiBWZXJpZmljYXRpb24gUmVxdWlyZWQqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgRFNBIOKAkyB0aGUgRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZS4gVGhlIGRvY3VtZW50YXRpb24gY2xlYXJseSBzdGF0ZXMgdGhhdCB0aGUgYGNoYW5nZV90YWdfcHJvdG9jb2xgIHN3aXRjaCBvcGVyYXRpb24gYWxsb3dzIGZvciBkeW5hbWljYWxseSBtb2RpZnlpbmcgdGhlIHRhZ2dpbmcgcHJvdG9jb2wgaW4gdXNlLiBUaGF0JiMzOTtzIGEga2V5IGZlYXR1cmUsIGFuZCBpdCBvZmZlcnMgYSBsb3Qgb2YgZmxleGliaWxpdHkgaW4gdmFyaW91cyBuZXR3b3JraW5nIHNjZW5hcmlvcy4KCkJ1dCwgaG9sZCBvbiBhIHNlY29uZOKApiBJIG5lZWQgdG8gZHJpbGwgZG93biBoZXJlLiBNeSBleHBlcmllbmNlIGlzIHRoYXQgYSBmZWF0dXJlJiMzOTtzIGF2YWlsYWJpbGl0eSBpcyBvbmx5IHRoZSAqc3RhcnQqIG9mIHRoZSBzdG9yeS4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgZG9lcyB0aGUgKnNwZWNpZmljKiBEU0EgZHJpdmVyIEkmIzM5O20gY29uc2lkZXJpbmcsIHNheSwgdGhlIGBkc2FfbG9vcGAgZHJpdmVyLCBhY3R1YWxseSBzdXBwb3J0IHRoaXMgYGNoYW5nZV90YWdfcHJvdG9jb2xgIGZlYXR1cmU/IEp1c3QgYmVjYXVzZSB0aGUgb3ZlcmFsbCBEU0EgYXJjaGl0ZWN0dXJlICphbGxvd3MqIGl0IGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgbWVhbiBldmVyeSBzaW5nbGUgZHJpdmVyICppbXBsZW1lbnRzKiBpdC4gSSYjMzk7dmUgYmVlbiBjYXVnaHQgb3V0IGJ5IHRoZXNlIHNvcnRzIG9mIGFzc3VtcHRpb25zIGJlZm9yZS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcGFydGljdWxhciBkcml2ZXImIzM5O3MgaW1wbGVtZW50YXRpb24gaXMgdHJ1bHkgY29tcGxpYW50IHdpdGggdGhhdCBhcmNoaXRlY3R1cmFsIGZlYXR1cmUuIEkgbmVlZCB0byBjaGVjayBpdHMgc291cmNlIGNvZGUsIG9yIGRvY3VtZW50YXRpb24sIG9yIHJ1biBzb21lIHRhcmdldGVkIHRlc3RpbmcgdG8gYmUgY2VydGFpbi4gT3RoZXJ3aXNlLCBJIG1pZ2h0IGJlIHNldHRpbmcgbXlzZWxmIHVwIGZvciB0cm91YmxlIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhbmdlX3RhZ19wcm90b2NvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1NTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEFic2VuY2Ugb2YgRnVuY3Rpb25hbGl0eSBhbmQgQ29uc2lkZXJpbmcgQWx0ZXJuYXRpdmVzKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGltcHJlc3Npb24gaXMgYSBuZWdhdGl2ZSBvbmUuIEVzc2VudGlhbGx5LCB3aGF0ZXZlciBzeXN0ZW0gb3IgZnVuY3Rpb24gSSB3YXMgZXhwZWN0aW5nIHRvIGZpbmQgaXMuLi4gbWlzc2luZy4gSXQmIzM5O3MgYSBub24tc3RhcnRlci4gVGhpcyBhYnNlbmNlIGlzIGEga2V5IGRhdGEgcG9pbnQ7IGl0IGhpZ2hsaWdodHMgYSBnYXAsIGVpdGhlciBpbiB0aGUgZGVzaWduLCB0aGUgaW1wbGVtZW50YXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gaW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZS4KCk15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gcG90ZW50aWFsIHdvcmthcm91bmRzIG9yIGFsdGVybmF0aXZlIGFwcHJvYWNoZXMuIExldCYjMzk7cyBzZWUuLi4gd2hhdCBhYm91dCB0aGUgcG9zc2liaWxpdHkgb2YgYSBgZHNhX21vY2tgPyBUaGUgZXhpc3RlbmNlIChvciBub24tZXhpc3RlbmNlKSBvZiBhIG1vY2sgZHJpdmVyIGJlY29tZXMgY3J1Y2lhbCBpbiBkZXRlcm1pbmluZyBob3cgYmVzdCB0byBwcm9jZWVkLiBJZiBvbmUgaXMgYXZhaWxhYmxlLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGdyZWF0bHksIGFsbG93aW5nIG1lIHRvIGlzb2xhdGUgYW5kIHRlc3QgZGlmZmVyZW50IGNvbXBvbmVudHMgd2l0aG91dCByZWx5aW5nIG9uIHRoZSBmdWxsIHN5c3RlbS4gSWYgaXQmIzM5O3MgKm5vdCogYXZhaWxhYmxlLCB0aGVuIHRoYXQgcmFpc2VzIGEgd2hvbGUgaG9zdCBvZiBmdXJ0aGVyIHF1ZXN0aW9ucyBhYm91dCB0ZXN0aW5nIHN0cmF0ZWd5IGFuZCBob3cgdG8gYmVzdCBjcmVhdGUgdGhlIG5lY2Vzc2FyeSB0ZXN0IGVudmlyb25tZW50LiBUaGUgbW9jayBkcml2ZXImIzM5O3MgYWJzZW5jZSBhbHNvIHRlbGxzIG1lIGFib3V0IHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCBsZXZlbCBvZiB0ZXN0YWJpbGl0eSBhbmQgdGhlIGRlZ3JlZSB0byB3aGljaCBpdCBtaWdodCBuZWVkIGZ1cnRoZXIgcmVmaW5lbWVudC4gVGhpcyBhYnNlbmNlIGFsc28gY2F1c2VzIG1lIHRvIHRoaW5rIGFib3V0IHdoZXJlIHN1Y2ggYSBtb2NrIG1pZ2h0IGZpdCwgYW5kIGlmIHN1Y2ggYSBtb2NrIGlzIGV2ZW4gcG9zc2libGUsIGdpdmVuIHRoZSBleGlzdGluZyBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoYW5nZV90YWdfcHJvdG9jb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTY2NDY9c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtdjg4ZTZ4eHhfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNjY1NC1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjY2NTU6c3RhdGljIGludCBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjU2LVx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTcxODc9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdjg4ZTZ4eHhfc3dpdGNoX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTcxODgtXHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBtdjg4ZTZ4eHhfZ2V0X3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjcxODk6XHQuY2hhbmdlX3RhZ19wcm90b2NvbFx0PSBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTcxOTAtXHQuc2V0dXBcdFx0XHQ9IG12ODhlNnh4eF9zZXR1cCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9NzMyPWZlbGl4X3RhZ19wcm90b19zZXR1cF9zaGFyZWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy03NTMtICovXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6NzU0OnN0YXRpYyBpbnQgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtNzU1LVx0XHRcdFx0ICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTE2OTY9c3RhdGljIGludCBmZWxpeF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTE3NTEtXHQgKi9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzoxNzUyOlx0ZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbChkcywgZmVsaXgtXHUwMDNldGFnX3Byb3RvKTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0xNzUzLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz0yMzA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZmVsaXhfc3dpdGNoX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0yMzA3LVx0LmdldF90YWdfcHJvdG9jb2xcdFx0PSBmZWxpeF9nZXRfdGFnX3Byb3RvY29sLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjIzMDg6XHQuY2hhbmdlX3RhZ19wcm90b2NvbFx0XHQ9IGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwOS1cdC5jb25uZWN0X3RhZ19wcm90b2NvbFx0XHQ9IGZlbGl4X2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmM9MjMwMz1zdGF0aWMgaW50IHJ0bDgzNjVtYl9jcHVfY29uZmlnKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0yMzMxLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYzoyMzMyOnN0YXRpYyBpbnQgcnRsODM2NW1iX2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0yMzMzLVx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmM9MjY2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHJ0bDgzNjVtYl9zd2l0Y2hfb3BzID0ge1xuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0yNjY3LVx0LmdldF90YWdfcHJvdG9jb2wgPSBydGw4MzY1bWJfZ2V0X3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmM6MjY2ODpcdC5jaGFuZ2VfdGFnX3Byb3RvY29sID0gcnRsODM2NW1iX2NoYW5nZV90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jLTI2NjktXHQuc2V0dXAgPSBydGw4MzY1bWJfc2V0dXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDAwCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBQcm90b2NvbCBTdXBwb3J0IG9mIFN3aXRjaCBDaGlwcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgc3dpdGNoIGRyaXZlciBsYW5kc2NhcGUgYW5kIHNlZWluZyB3aGVyZSB3ZSBzdGFuZCB3aXRoIFZMQU4gdGFnZ2luZyBwcm90b2NvbHMuIEkga25vdyB0aGF0IGNoaXBzIGxpa2UgdGhlIGBtdjg4ZTZ4eHhgLCBgZmVsaXhgLCBhbmQgYHJ0bDgzNjVtYmAgc2VyaWVzICpkbyogb2ZmZXIgdGhpcyBraW5kIG9mIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSG93ZXZlciwgdGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkgZG9uJiMzOTt0IGhhdmUgYmxhbmtldCBzdXBwb3J0IGZvciBldmVyeSB0YWdnaW5nIHByb3RvY29sIHVuZGVyIHRoZSBzdW4uIEl0JiMzOTtzIGxvb2tpbmcgbGlrZSB0aGVpciBpbXBsZW1lbnRhdGlvbnMgYXJlIHByZXR0eSBzcGVjaWZpYy4KCkZvciBpbnN0YW5jZSwgdGhlIGBmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sYCBmdW5jdGlvbiBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGF0IGl0cyBzdXBwb3J0IGlzIHByb2JhYmx5IGxpbWl0ZWQgdG8sIGxldCYjMzk7cyBzYXksIGBEU0FfVEFHX1BST1RPX09DRUxPVGAgYW5kIGBEU0FfVEFHX1BST1RPX09DRUxPVF84MDIxUWAgcHJvdG9jb2xzLiBJdCBzZWVtcyBsaWtlIHRoZSBwcm90b2NvbCBpcyB2ZXJ5IGNoaXAtZGVwZW5kZW50LgoKVG8gZ2V0IGEgYmV0dGVyIHBpY3R1cmUsIEkgbmVlZCB0byBsb29rIGludG8gYG12ODhlNnh4eF9jaGFuZ2VfdGFnX3Byb3RvY29sYCBub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcHJvdG9jb2xzIGVhY2ggb2YgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFjdHVhbGx5IHN1cHBvcnRzLCBzbyBJIGNhbiBzdGFydCB0byBidWlsZCBhIGNsZWFyZXIsIG1vcmUgY29tcGxldGUgbW9kZWwgb2YgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIHRvIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTY2NDY9c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtdjg4ZTZ4eHhfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNjY1NC1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjY2NTU6c3RhdGljIGludCBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjU2LVx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTcxODc9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdjg4ZTZ4eHhfc3dpdGNoX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTcxODgtXHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBtdjg4ZTZ4eHhfZ2V0X3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjcxODk6XHQuY2hhbmdlX3RhZ19wcm90b2NvbFx0PSBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTcxOTAtXHQuc2V0dXBcdFx0XHQ9IG12ODhlNnh4eF9zZXR1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE3MzkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiBuZXR3b3JraW5nIGFuZCBrZXJuZWwgZGV2ZWxvcG1lbnQ6CgoqKkFuYWx5emluZyB0aGUgYG12ODhlNnh4eF9jaGFuZ2VfdGFnX3Byb3RvY29sYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aGUgbmV4dCB0YXNrIGlzIHRvIGRpdmUgaW50byBgbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2xgLiBTb3VuZHMgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBNYXJ2ZWxsIDg4RTZ4eHggc2VyaWVzIG9mIEV0aGVybmV0IHN3aXRjaGVzIOKAkyBhbmQgc3BlY2lmaWNhbGx5LCBob3cgdGhleSBoYW5kbGUgdGFnZ2VkIEV0aGVybmV0IGZyYW1lcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIHdheSB0aGUgc3dpdGNoIGludGVycHJldHMgb3IgaGFuZGxlcyB0aGUgdGFnZ2luZyBwcm90b2NvbC4KCkltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQga2luZCBvZiB0YWdnaW5nIHByb3RvY29scyBhcmUgd2UgdGFsa2luZyBhYm91dD8gVkxBTiB0YWdzICg4MDIuMVEpPyBQcm92aWRlciBCcmlkZ2UgdGFncyAoODAyLjFhZCk/IE1heWJlIHNvbWUgcHJvcHJpZXRhcnkgTWFydmVsbCBleHRlbnNpb25zPyBUaGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSBzaG91bGQgYmUgcHJldHR5IGNyaXRpY2FsIGluIGEgbG90IG9mIG5ldHdvcmtpbmcgc2NlbmFyaW9zLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGFyZ3VtZW50cy4gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBhc3NlZCBpbj8gQSBkZXZpY2Ugc3RydWN0dXJlIGxpa2VseSwgYW5kIGFsbW9zdCBjZXJ0YWlubHkgYSBwb2ludGVyIHRvIHNvbWUgc29ydCBvZiBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSByZWxhdGVkIHRvIHRoZSBzd2l0Y2gmIzM5O3MgcG9ydCBzZXR0aW5ncy4gSSBleHBlY3QgdG8gc2VlIHJlZ2lzdGVyIHdyaXRlcyBpbnZvbHZlZCwgbGlrZWx5IHRvIHRoZSBzd2l0Y2gmIzM5O3MgaW50ZXJuYWwgcmVnaXN0ZXJzIHRoYXQgY29udHJvbCB0aGUgdGFnZ2luZyBzZXR0aW5ncy4gVGhlIGZ1bmN0aW9uIGNvdWxkIGFsc28gYmUgaGFuZGxpbmcgdGhlIGludGVyYWN0aW9uIHdpdGggYW55IE1JSS9NRElPIGludGVyZmFjZSB0aGF0JiMzOTtzIGludm9sdmVkLgoKSSYjMzk7bGwga2VlcCBhIGNsb3NlIGV5ZSBvdXQgZm9yIGFueSBlcnJvciBoYW5kbGluZy4gSXMgdGhpcyBmdW5jdGlvbiByb2J1c3Q/IERvZXMgaXQgY2hlY2sgZm9yIHZhbGlkIHByb3RvY29sIElEcyBvciBwYXJhbWV0ZXIgcmFuZ2VzPyBBcmUgdGhlcmUgY2hlY2tzIGZvciBoYXJkd2FyZSBsaW1pdGF0aW9ucz8gQSBtaXNjb25maWd1cmF0aW9uIGhlcmUgY291bGQgZWFzaWx5IGNyZWF0ZSBpbnRlcm1pdHRlbnQgY29ubmVjdGl2aXR5IGlzc3Vlcywgb3IgZXZlbiBhIGZ1bGwgbmV0d29yayBvdXRhZ2UuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gcGlucG9pbnQgZXhhY3RseSAqaG93KiB0aGUgdGFnZ2luZyBwcm90b2NvbCBpcyBiZWluZyBjaGFuZ2VkLiBJcyBpdCBqdXN0IHRoZSBhZGRpdGlvbiBvZiBhIG5ldyBWTEFOIElEIG9yIGlzIGl0IGNoYW5naW5nIHRoZSBlbnRpcmUgdGFnZ2luZyBzY2hlbWUgZm9yIHRoZSBwb3J0PyBBZnRlciB0aGF0LCBJIHdpbGwgdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgaW50ZXJhY3Qgd2l0aCB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIHN3aXRjaCBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY2NTU6XHRzdGF0aWMgaW50IG12ODhlNnh4eF9jaGFuZ2VfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbjY2NTY6XHRcdFx0XHRcdFx0IGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcbjY2NTc6XHR7XG42NjU4Olx0XHRzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAgPSBkcy1cdTAwM2Vwcml2O1xuNjY1OTpcdFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIG9sZF9wcm90b2NvbDtcbjY2NjA6XHRcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xuNjY2MTpcdFx0aW50IGVycjtcbjY2NjI6XHRcbjY2NjM6XHRcdHN3aXRjaCAocHJvdG8pIHtcbjY2NjQ6XHRcdGNhc2UgRFNBX1RBR19QUk9UT19FRFNBOlxuNjY2NTpcdFx0XHRzd2l0Y2ggKGNoaXAtXHUwMDNlaW5mby1cdTAwM2VlZHNhX3N1cHBvcnQpIHtcbjY2NjY6XHRcdFx0Y2FzZSBNVjg4RTZYWFhfRURTQV9VTlNVUFBPUlRFRDpcbjY2Njc6XHRcdFx0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbjY2Njg6XHRcdFx0Y2FzZSBNVjg4RTZYWFhfRURTQV9VTkRPQ1VNRU5URUQ6XG42NjY5Olx0XHRcdFx0ZGV2X3dhcm4oY2hpcC1cdTAwM2VkZXYsIFwmIzM0O1JlbHlpbmcgb24gdW5kb2N1bWVudGVkIEVEU0EgdGFnZ2luZyBiZWhhdmlvclxcblwmIzM0Oyk7XG42NjcwOlx0XHRcdFx0ZmFsbHRocm91Z2g7XG42NjcxOlx0XHRcdGNhc2UgTVY4OEU2WFhYX0VEU0FfU1VQUE9SVEVEOlxuNjY3MjpcdFx0XHRcdGJyZWFrO1xuNjY3MzpcdFx0XHR9XG42Njc0Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjUyOAoJCQkJCQkJb3V0cHV0OiAxMTQKCQkJCQkJCXRob3VnaHRzOiA5NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBQYXRoczogTlhQIE5FVEMgRHJpdmVyIGFuZCBUYWdnZXIqKgoKT2theSwgc28gdGhlIGNvZGUgaW4gcXVlc3Rpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBOWFAgTkVUQyBkcml2ZXIgYW5kIGB0YWdfbmV0Yy5jYCwgcmVsaWVzIG9uIHNwZWNpZmljIGhhcmR3YXJlIHByb3RvY29scywgc3BlY2lmaWNhbGx5IHRoZSBOWFAgTkVUQyBQQ0kgaGFyZHdhcmUuIFRoZXJlJiMzOTtzIG5vIHdheSB0byByZWFjaCBgdGFnX25ldGMuY2AgZGlyZWN0bHkgd2l0aG91dCB0aGF0IGhhcmR3YXJlLCBhbmQgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIG5vdCB2aWEgYW55IHN0YW5kYXJkIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgdHJpY2tzIG9yIHBhY2tldCBpbmplY3Rpb24uIFN5emthbGxlciBpcyBvdXQsIGFzIGB0YWdfbmV0Yy5jYCBpcyBsaW5rZWQgdG8gYSBuZXR3b3JrIGludGVyZmFjZSBvbmx5IGlmIHRoZSBEU0Egc3dpdGNoIHVzaW5nIGBuZXRjX21haW4uY2AgaXMgY29uZmlndXJlZCwgd2hpY2ggaW4gdHVybiBkZW1hbmRzIHRoaXMgTlhQIE5FVEMgUENJIGhhcmR3YXJlLgoKSSB3YXMgaG9waW5nIG1heWJlIGEgRFNBIHN3aXRjaCBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgZGlmZmVyZW50bHksIGJ1dCBpdCBsb29rcyBsaWtlIGRyaXZlcnMgY2FsbCBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgdG8gZG8gc28sIGFuZCBgbmV0Y19tYWluLmNgIGlzIHRoZSBzb2xlIGRyaXZlciByZXR1cm5pbmcgYERTQV9UQUdfUFJPVE9fTkVUQ2AuICBUaGlzIGNvbmZpcm1zIGB0YWdfbmV0Yy5jYCBhbmQgYnkgZXh0ZW5zaW9uLCB0aGUgdXBkYXRlZCBjb2RlIGFyZSBkZXBlbmRlbnQgb24gdGhhdCBwaHlzaWNhbCBoYXJkd2FyZS4KCkkgY2hlY2tlZCBmb3Igb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cywgbGlrZSBgZHNhX2xvb3BgIG9yIGBkc2FfbW9ja2AuIGBkc2FfbG9vcGAgaXMgdGhlcmUsIGJ1dCB1c2VzIGBEU0FfVEFHX1BST1RPX05PTkVgLiAgYGRzYV9sb29wX2JkaW5mb2AgcmVnaXN0ZXJzIGBkc2FfbG9vcGAsIGJ1dCB0aGF0JiMzOTtzIG5vdCBoZWxwaW5nLiBCYXNpY2FsbHksIHVubGVzcyB0aGVyZSYjMzk7cyBleHBsaWNpdCB2aXJ0dWFsIGRyaXZlciBzdXBwb3J0IGZvciB0aGlzIHNwZWNpZmljIHRhZ2dlciwgaXQmIzM5O3MgdW5yZWFjaGFibGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuCgpHaXZlbiB0aGUgcHJvbXB0JiMzOTtzIGNyaXRlcmlhOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwmIzM0OyBJIGhhdmUgdG8gY29uY2x1ZGUgdGhhdCB0aGUgTlhQIE5FVEMgc3dpdGNoIGZpdHMgdGhhdCBkZXNjcmlwdGlvbi4gSXQmIzM5O3MgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZS4gVGhlIGRyaXZlciBpdHNlbGYsIHRoZSBQVFAgc3VwcG9ydCBhZGRlZCBpbiB0aGUgcGF0Y2gsIGFuZCB0aGUgYXNzb2NpYXRlZCB0YWdnZXIsIGFyZSBhbGwgdW5yZWFjaGFibGUgd2l0aG91dCB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLgoKSSYjMzk7dmUgdmVyaWZpZWQgdGhhdCBgbmV0Y19tYWluLmNgIHV0aWxpemVzIGBtb2R1bGVfcGNpX2RyaXZlcihuZXRjX3N3aXRjaF9kcml2ZXIpYCwgYW5kIGl0cyB2ZW5kb3IgSUQgKDB4MTEzMSwgTlhQKSBhbmQgZGV2aWNlIElEICgweGVlZjIpIGNvbmZpcm0gaXQmIzM5O3MgYSBwaHlzaWNhbCBoYXJkd2FyZSBjb21wb25lbnQuIFRoZSBQVFAgc3VwcG9ydCwgdGhlcmVmb3JlLCBpcyBlcXVhbGx5IGluYWNjZXNzaWJsZS4gSSB3YXMgY29uc2lkZXJpbmcgb3RoZXIgd2F5cyB0byBwb3NzaWJseSBhY3RpdmF0ZSBgdGFnX25ldGMuY2AgdGhyb3VnaCBEU0Egcm91dGluZyBydWxlcyBvciB0cmFmZmljIGNvbnRyb2wgKHRjKSAvIEJQRiwgYnV0IGB0YWdfbmV0Yy5jYCBpcyB0aWVkIHRvIHRoZSBgZHNhX2RldmljZV9vcHNgIHN0cnVjdCByZWdpc3RlcmVkIHZpYSBgbW9kdWxlX2RzYV90YWdfZHJpdmVyYC4gSXQmIzM5O3Mgc2VsZWN0ZWQgb25seSB3aGVuIHRoZSBEU0Egc3dpdGNoIGlzIHNldHVwLCBhbmQgb25seSBpZiB0aGUgc3dpdGNoLCB0aHJvdWdoIGl0cyBgZ2V0X3RhZ19wcm90b2NvbGAgb3IgYGNoYW5nZV90YWdfcHJvdG9jb2xgIG9wcywgcmVxdWVzdHMgYERTQV9UQUdfUFJPVE9fTkVUQ2AsIHdoaWNoIG5vIHZpcnR1YWwgc3dpdGNoIGRvZXMuCgpUaGVyZWZvcmUsIHRoZSBlbnRpcmUgcGF0Y2gmIzM5O3MgY29kZSBwYXRocyBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4gTXkgcmVhc29uaW5nIGxlYWRzIG1lIHRvIGBzZXQtcmVzdWx0c2Agd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBzdXBwb3J0IHRvIHRoZSBOWFAgTkVUQyBzd2l0Y2ggZHJpdmVyIGFuZCBpdHMgYXNzb2NpYXRlZCBEU0EgdGFnZ2VyLiBUaGUgTkVUQyBzd2l0Y2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBkZXZpY2UgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyByZXF1aXJlZCB0byBwcm9iZSB0aGUgZHJpdmVyIGFuZCBpbnN0YW50aWF0ZSB0aGUgRFNBIHN3aXRjaCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW4gYm90aCB0aGUgZHJpdmVyIGFuZCB0aGUgdGFnZ2VyIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBzdXBwb3J0IHRvIHRoZSBOWFAgTkVUQyBzd2l0Y2ggZHJpdmVyIGFuZCBpdHMgYXNzb2NpYXRlZCBEU0EgdGFnZ2VyLiBUaGUgTkVUQyBzd2l0Y2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBkZXZpY2UgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyByZXF1aXJlZCB0byBwcm9iZSB0aGUgZHJpdmVyIGFuZCBpbnN0YW50aWF0ZSB0aGUgRFNBIHN3aXRjaCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW4gYm90aCB0aGUgZHJpdmVyIGFuZCB0aGUgdGFnZ2VyIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTU6NTcuOTA2ODcyNDMyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcxOTk2NzIxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIHN1cHBvcnQgdG8gdGhlIE5YUCBORVRDIHN3aXRjaCBkcml2ZXIgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWdnZXIuIFRoZSBORVRDIHN3aXRjaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGRldmljZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gU2luY2UgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIHJlcXVpcmVkIHRvIHByb2JlIHRoZSBkcml2ZXIgYW5kIGluc3RhbnRpYXRlIHRoZSBEU0Egc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbiBib3RoIHRoZSBkcml2ZXIgYW5kIHRoZSB0YWdnZXIgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA3OjU1OjU3LjkwNjg5NzAxMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxMDk4OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmQ5MzIzZjYzODY2MGI5MjI0ZDk3ZDJmOTAzYTE0MzRiYzJkZDdhY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyOSAwNzo1NTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZ1xcbmluZGV4IDc5M2Y3NjkxYTI0ZjMuLjU1YjFmMTMzOGE4NzggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWdcXG5AQCAtNCw2ICs0LDcgQEAgY29uZmlnIE5FVF9EU0FfTkVUQ19TV0lUQ0hcXG4gXFx0ZGVwZW5kcyBvbiBBUk02NCB8fCBDT01QSUxFX1RFU1RcXG4gXFx0ZGVwZW5kcyBvbiBORVRfRFNBIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiBcXHRkZXBlbmRzIG9uIE5FVF9WRU5ET1JfRlJFRVNDQUxFXFxuK1xcdGRlcGVuZHMgb24gUFRQX05FVENfVjRfVElNRVIgfHwgUFRQX05FVENfVjRfVElNRVI9blxcbiBcXHRzZWxlY3QgTkVUX0RTQV9UQUdfTkVUQ1xcbiBcXHRzZWxlY3QgRlNMX0VORVRDX01ESU9cXG4gXFx0c2VsZWN0IE5YUF9OVE1QXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvTWFrZWZpbGVcXG5pbmRleCBmNDBiMTNjNzAyZTA3Li41NzJiODMzYWQ4MGZjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvTWFrZWZpbGVcXG5AQCAtMSwzICsxLDQgQEBcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuIG9iai0kKENPTkZJR19ORVRfRFNBX05FVENfU1dJVENIKSArPSBueHAtbmV0Yy1zd2l0Y2gub1xcbi1ueHAtbmV0Yy1zd2l0Y2gtb2JqcyA6PSBuZXRjX21haW4ubyBuZXRjX3BsYXRmb3JtLm8gbmV0Y19ldGh0b29sLm9cXG4rbnhwLW5ldGMtc3dpdGNoLW9ianMgOj0gbmV0Y19tYWluLm8gbmV0Y19wbGF0Zm9ybS5vIG5ldGNfZXRodG9vbC5vIFxcXFxcXG4rXFx0XFx0XFx0bmV0Y19wdHAub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jXFxuaW5kZXggNzcwNzczNTJjMWE1Ny4uOTg1NWUwMmI0NzI2NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jXFxuQEAgLTY1LDYgKzY1LDIxIEBAIG5ldGNfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRyZXR1cm4gRFNBX1RBR19QUk9UT19ORVRDO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG5ldGNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHRcXHQgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7XFxuK1xcbitcXHRpZiAocHJvdG8gIT0gRFNBX1RBR19QUk9UT19ORVRDKVxcbitcXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG4rXFxuK1xcdHRhZ2dlcl9kYXRhID0gZHMtXFx1MDAzZXRhZ2dlcl9kYXRhO1xcbitcXHR0YWdnZXJfZGF0YS1cXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIgPSBuZXRjX29uZXN0ZXBfc3luY19oYW5kbGVyO1xcbitcXHR0YWdnZXJfZGF0YS1cXHUwMDNldHdvc3RlcF90c3RhbXBfaGFuZGxlciA9IG5ldGNfdHdvc3RlcF90c3RhbXBfaGFuZGxlcjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBuZXRjX3BvcnRfcm13KHN0cnVjdCBuZXRjX3BvcnQgKm5wLCB1MzIgcmVnLFxcbiBcXHRcXHRcXHQgIHUzMiBtYXNrLCB1MzIgdmFsKVxcbiB7XFxuQEAgLTgwLDcgKzk1LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3JtdyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIHJlZyxcXG4gXFx0bmV0Y19wb3J0X3dyKG5wLCByZWcsIG5ldyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG5ldGNfbWFjX3BvcnRfd3Ioc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3ZvaWQgbmV0Y19tYWNfcG9ydF93cihzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIHJlZywgdTMyIHZhbClcXG4ge1xcbiBcXHRpZiAoaXNfbmV0Y19wc2V1ZG9fcG9ydChucCkpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjM4LDYgKzI1MywxNSBAQCBzdGF0aWMgdm9pZCBuZXRjX2dldF9zd2l0Y2hfY2FwYWJpbGl0aWVzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcXG4gXFx0cHJpdi1cXHUwMDNlbnVtX2JwID0gRklFTERfR0VUKEJQQ0FQUl9OVU1fQlAsIHZhbCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9pbml0X3B0cF9pcGZ0X2VpZChzdHJ1Y3QgbmV0Y19wb3J0ICpucClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgdG8gaW52YWxpZCBlbnRyeSBJRHMgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5FVENfUFRQX01BWDsgaSsrKVxcbitcXHRcXHRucC1cXHUwMDNlcHRwX2lwZnRfZWlkW2ldID0gTlRNUF9OVUxMX0VOVFJZX0lEO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG5ldGNfaW5pdF9hbGxfcG9ydHMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtXFx1MDAzZWRldjtcXG5AQCAtMjg2LDYgKzMxMCwxNyBAQCBzdGF0aWMgaW50IG5ldGNfaW5pdF9hbGxfcG9ydHMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxcbiBcXHRcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBjcmVhdGUgTURJTyBidXNcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHQvKiBUaGUgaXBmdF9oZl9laWQgaXMgaW5pdGlhbGl6ZWQgdG8gYW4gaW52YWxpZCBlbnRyeVxcbitcXHRcXHRcXHQgKiBJRCBiZWNhdXNlIHRoZSBob3N0IGZsb29kIHJ1bGUgKElQRlQgZW50cnkpIGhhcyBub3RcXG4rXFx0XFx0XFx0ICogYmVlbiBjcmVhdGVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0bnAtXFx1MDAzZWlwZnRfaGZfZWlkID0gTlRNUF9OVUxMX0VOVFJZX0lEO1xcbitcXHRcXHRcXHRuZXRjX3BvcnRfaW5pdF9wdHBfaXBmdF9laWQobnApO1xcbitcXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bnAtXFx1MDAzZXB0cF9sb2NrKTtcXG4rXFx0XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZucC1cXHUwMDNlc2tiX3R4dHN0YW1wX3F1ZXVlKTtcXG4rXFx0XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZucC1cXHUwMDNlc2tiX29uZXN0ZXBfcXVldWUpO1xcbitcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNm5wLVxcdTAwM2VvbmVzdGVwX3dvcmssIG5ldGNfcG9ydF9vbmVzdGVwX3dvcmspO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTU0OSw2ICs1ODQsMTIgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X2ZpeGVkX2NvbmZpZyhzdHJ1Y3QgbmV0Y19wb3J0ICpucClcXG4gXFx0bmV0Y19wb3J0X3JtdyhucCwgTkVUQ19QQ1IsIFBDUl9MMkRPU0UgfCBQQ1JfTDNET1NFLFxcbiBcXHRcXHQgICAgICBQQ1JfTDJET1NFIHwgUENSX0wzRE9TRSk7XFxuIFxcbitcXHQvKiBFbmFibGUgaW5ncmVzcyBwb3J0IGZpbHRlciB0YWJsZSBsb29rdXAsIGlmIG5vIG1hdGNoIGlzIGZvdW5kLFxcbitcXHQgKiB0aGUgZnJhbWUgaXMgYWxsb3dlZCBhbmQgcGFzc2VkIHRvIHRoZSBuZXh0IGZyYW1lIHByb2Nlc3NpbmdcXG4rXFx0ICogZnVuY3Rpb24uXFxuK1xcdCAqL1xcbitcXHRuZXRjX3BvcnRfd3IobnAsIE5FVENfUElQRkNSLCBQSVBGQ1JfRU4pO1xcbitcXG4gXFx0LyogU2V0IHRoZSBxdWFudGEgdmFsdWUgb2YgVFggUEFVU0UgZnJhbWUgKi9cXG4gXFx0bmV0Y19tYWNfcG9ydF93cihucCwgTkVUQ19QTV9QQVVTRV9RVUFOVEEoMCksIE5FVENfUEFVU0VfUVVBTlRBKTtcXG4gXFxuQEAgLTg2OSw2ICs5MTAsMTUgQEAgc3RhdGljIGludCBuZXRjX3N3aXRjaF9icHRfZGVmYXVsdF9jb25maWcoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpuZXRjX2dldF9wdHBfdGltZXIoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfYnVzICpidXMgPSBwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VidXM7XFxuK1xcdHUzMiBkZXZmbiA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXRtcl9kZXZmbjtcXG4rXFxuK1xcdHJldHVybiBwY2lfZ2V0X2RvbWFpbl9idXNfYW5kX3Nsb3QocGNpX2RvbWFpbl9ucihidXMpLFxcbitcXHRcXHRcXHRcXHRcXHQgICBidXMtXFx1MDAzZW51bWJlciwgZGV2Zm4pO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG5ldGNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbkBAIC04ODksNiArOTM5LDE2IEBAIHN0YXRpYyBpbnQgbmV0Y19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbitcXHQvKiBUaGUgUFRQIHRpbWVyIHNpdHMgb24gdGhlIHNhbWUgUENJIGJ1cyBhcyB0aGUgc3dpdGNoLiBQQ0kgY3JlYXRlc1xcbitcXHQgKiBldmVyeSBmdW5jdGlvbidzIHBjaV9kZXYgZHVyaW5nIGJ1cyBlbnVtZXJhdGlvbiwgYmVmb3JlIGFueSBkcml2ZXJcXG4rXFx0ICogcHJvYmVzLCBzbyB3ZSBjYW4gZ3JhYiB0aGUgdGltZXIncyBwY2lfZGV2IGhlcmUgZXZlbiBpZiB0aGUgdGltZXJcXG4rXFx0ICogZHJpdmVyIGhhcyBub3QgcHJvYmVkIHlldC5cXG4rXFx0ICovXFxuK1xcdHByaXYtXFx1MDAzZXRtcl9kZXYgPSBuZXRjX2dldF9wdHBfdGltZXIocHJpdik7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNldG1yX2RldilcXG4rXFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIlBUUCB0aW1lciBQQ0kgZGV2aWNlIG5vdCBmb3VuZFxcXFxuXFxcIik7XFxuK1xcbiBcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNnByaXYtXFx1MDAzZWZkYl9saXN0KTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlZmRidF9sb2NrKTtcXG4gXFx0cHJpdi1cXHUwMDNlZmRidF9hZ2VpbmdfZGVsYXkgPSBORVRDX0ZEQlRfQUdFSU5HX0RFTEFZO1xcbkBAIC05MjUsNiArOTg1LDcgQEAgc3RhdGljIGludCBuZXRjX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0ICovXFxuIFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnByaXYtXFx1MDAzZWZkYnRfbG9jayk7XFxuIFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnByaXYtXFx1MDAzZXZmdF9sb2NrKTtcXG4rXFx0cGNpX2Rldl9wdXQocHJpdi1cXHUwMDNldG1yX2Rldik7XFxuIFxcdG5ldGNfZnJlZV9udG1wX3VzZXIocHJpdik7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC05MzgsMjAgKzk5OSwyMyBAQCBzdGF0aWMgdm9pZCBuZXRjX2Rlc3Ryb3lfYWxsX2xpc3RzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cHJpdi1cXHUwMDNldmZ0X2xvY2spO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBuZXRjX2ZyZWVfaG9zdF9mbG9vZF9ydWxlcyhzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpXFxuK3N0YXRpYyB2b2lkIG5ldGNfZnJlZV9wb3J0c19yZXNvdXJjZXMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxcbiB7XFxuIFxcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuIFxcbi1cXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgcHJpdi1cXHUwMDNlZHMpIHtcXG4rXFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9hdmFpbGFibGVfcG9ydChkcCwgcHJpdi1cXHUwMDNlZHMpIHtcXG4gXFx0XFx0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBwcml2LVxcdTAwM2Vwb3J0c1tkcC1cXHUwMDNlaW5kZXhdO1xcbiBcXG4tXFx0XFx0LyogTm8gbmVlZCB0byBjbGVhciB0aGUgaGFyZHdhcmUgSVBGVCBlbnRyeS4gQmVjYXVzZSBQQ0llXFxuLVxcdFxcdCAqIEZMUiB3aWxsIGJlIHBlcmZvcm1lZCB3aGVuIHRoZSBzd2l0Y2ggaXMgcmUtcmVnaXN0ZXJlZCxcXG4tXFx0XFx0ICogaXQgd2lsbCByZXNldCBoYXJkd2FyZSBzdGF0ZS4gU28gb25seSBuZWVkIHRvIGZyZWUgdGhlXFxuLVxcdFxcdCAqIG1lbW9yeSB0byBhdm9pZCBtZW1vcnkgbGVhay5cXG4rXFx0XFx0aWYgKCFkc2FfcG9ydF9pc191c2VyKGRwKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBObyBuZXcgU0tCcyBjYW4gYmUgZW5xdWV1ZWQgZHVyaW5nIHRlYXJkb3duLiBQdXJnZSB3aXRob3V0XFxuK1xcdFxcdCAqIHRoZSBzcGlubG9jayB0byBhdm9pZCBjYWxsaW5nIGtmcmVlX3NrYigpIHdpdGggYSBkZXN0cnVjdG9yXFxuK1xcdFxcdCAqIChzb2NrX2VmcmVlKSB3aGlsZSBob2xkaW5nIGEgc3BpbmxvY2suXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRrZnJlZShucC1cXHUwMDNlaG9zdF9mbG9vZCk7XFxuLVxcdFxcdG5wLVxcdTAwM2Vob3N0X2Zsb29kID0gTlVMTDtcXG4rXFx0XFx0X19za2JfcXVldWVfcHVyZ2UoXFx1MDAyNm5wLVxcdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUpO1xcbitcXHRcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZucC1cXHUwMDNlb25lc3RlcF93b3JrKTtcXG4rXFx0XFx0X19za2JfcXVldWVfcHVyZ2UoXFx1MDAyNm5wLVxcdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtOTYxLDggKzEwMjUsOSBAQCBzdGF0aWMgdm9pZCBuZXRjX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFxuIFxcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZWZkYnRfYWdlaW5nX3dvcmspO1xcbiBcXHRuZXRjX2Rlc3Ryb3lfYWxsX2xpc3RzKHByaXYpO1xcbi1cXHRuZXRjX2ZyZWVfaG9zdF9mbG9vZF9ydWxlcyhwcml2KTtcXG4rXFx0cGNpX2Rldl9wdXQocHJpdi1cXHUwMDNldG1yX2Rldik7XFxuIFxcdG5ldGNfZnJlZV9udG1wX3VzZXIocHJpdik7XFxuK1xcdG5ldGNfZnJlZV9wb3J0c19yZXNvdXJjZXMocHJpdik7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG5ldGNfcG9ydF9pc19lbWRpb19jb25zdW1lcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuQEAgLTE3MjAsOCArMTc4NSw2IEBAIHN0YXRpYyBpbnQgbmV0Y19wb3J0X2FkZF9ob3N0X2Zsb29kX3J1bGUoc3RydWN0IG5ldGNfcG9ydCAqbnAsXFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRpZiAoIXVjIFxcdTAwMjZcXHUwMDI2ICFtYykge1xcbi1cXHRcXHQvKiBEaXNhYmxlIGluZ3Jlc3MgcG9ydCBmaWx0ZXIgdGFibGUgbG9va3VwICovXFxuLVxcdFxcdG5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIDApO1xcbiBcXHRcXHRucC1cXHUwMDNldWMgPSBmYWxzZTtcXG4gXFx0XFx0bnAtXFx1MDAzZW1jID0gZmFsc2U7XFxuIFxcbkBAIC0xNzU5LDQwICsxODIyLDM2IEBAIHN0YXRpYyBpbnQgbmV0Y19wb3J0X2FkZF9ob3N0X2Zsb29kX3J1bGUoc3RydWN0IG5ldGNfcG9ydCAqbnAsXFxuIFxcdGNmZ2UtXFx1MDAzZWNmZyA9IGNwdV90b19sZTMyKGNmZyk7XFxuIFxcbiBcXHRlcnIgPSBudG1wX2lwZnRfYWRkX2VudHJ5KFxcdTAwMjZwcml2LVxcdTAwM2VudG1wLCBob3N0X2Zsb29kKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRrZnJlZShob3N0X2Zsb29kKTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGZyZWVfaG9zdF9mbG9vZDtcXG4gXFxuIFxcdG5wLVxcdTAwM2V1YyA9IHVjO1xcbiBcXHRucC1cXHUwMDNlbWMgPSBtYztcXG4tXFx0bnAtXFx1MDAzZWhvc3RfZmxvb2QgPSBob3N0X2Zsb29kO1xcbi1cXHQvKiBFbmFibGUgaW5ncmVzcyBwb3J0IGZpbHRlciB0YWJsZSBsb29rdXAgKi9cXG4tXFx0bmV0Y19wb3J0X3dyKG5wLCBORVRDX1BJUEZDUiwgUElQRkNSX0VOKTtcXG4rXFx0bnAtXFx1MDAzZWlwZnRfaGZfZWlkID0gaG9zdF9mbG9vZC1cXHUwMDNlZW50cnlfaWQ7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rZnJlZV9ob3N0X2Zsb29kOlxcbitcXHRrZnJlZShob3N0X2Zsb29kKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlwZnRfZW50cnlfZGF0YSAqaG9zdF9mbG9vZClcXG4rc3RhdGljIHZvaWQgbmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKHN0cnVjdCBuZXRjX3BvcnQgKm5wLCB1MzIgZW50cnlfaWQpXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtXFx1MDAzZXN3aXRjaF9wcml2O1xcbiBcXHRib29sIGRpc2FibGVfaG9zdF9mbG9vZCA9IGZhbHNlO1xcbiBcXG4tXFx0aWYgKCFob3N0X2Zsb29kKVxcbitcXHRpZiAoZW50cnlfaWQgPT0gTlRNUF9OVUxMX0VOVFJZX0lEKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZiAobnAtXFx1MDAzZWhvc3RfZmxvb2QgPT0gaG9zdF9mbG9vZClcXG4rXFx0aWYgKG5wLVxcdTAwM2VpcGZ0X2hmX2VpZCA9PSBlbnRyeV9pZClcXG4gXFx0XFx0ZGlzYWJsZV9ob3N0X2Zsb29kID0gdHJ1ZTtcXG4gXFxuLVxcdG50bXBfaXBmdF9kZWxldGVfZW50cnkoXFx1MDAyNnByaXYtXFx1MDAzZW50bXAsIGhvc3RfZmxvb2QtXFx1MDAzZWVudHJ5X2lkKTtcXG4tXFx0a2ZyZWUoaG9zdF9mbG9vZCk7XFxuK1xcdG50bXBfaXBmdF9kZWxldGVfZW50cnkoXFx1MDAyNnByaXYtXFx1MDAzZW50bXAsIGVudHJ5X2lkKTtcXG4gXFxuIFxcdGlmIChkaXNhYmxlX2hvc3RfZmxvb2QpIHtcXG4tXFx0XFx0bnAtXFx1MDAzZWhvc3RfZmxvb2QgPSBOVUxMO1xcbitcXHRcXHRucC1cXHUwMDNlaXBmdF9oZl9laWQgPSBOVE1QX05VTExfRU5UUllfSUQ7XFxuIFxcdFxcdG5wLVxcdTAwM2V1YyA9IGZhbHNlO1xcbiBcXHRcXHRucC1cXHUwMDNlbWMgPSBmYWxzZTtcXG4tXFx0XFx0bmV0Y19wb3J0X3dyKG5wLCBORVRDX1BJUEZDUiwgMCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMTgwMCw3ICsxODU5LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3NldF9ob3N0X2Zsb29kKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdFxcdFxcdCAgICAgYm9vbCB1YywgYm9vbCBtYylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XFxuLVxcdHN0cnVjdCBpcGZ0X2VudHJ5X2RhdGEgKm9sZF9ob3N0X2Zsb29kO1xcbitcXHR1MzIgb2xkX2VudHJ5X2lkO1xcbiBcXG4gXFx0LyogRG8gbm90IGFkZCBob3N0IGZsb29kIHJ1bGUgdG8gaW5ncmVzcyBwb3J0IGZpbHRlciB0YWJsZSB3aGVuXFxuIFxcdCAqIHRoZSBwb3J0IGhhcyBqb2luZWQgYSBicmlkZ2UuIE90aGVyd2lzZSwgdGhlIGluZ3Jlc3MgZnJhbWVzXFxuQEAgLTE4MDgsNyArMTg2Nyw3IEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9zZXRfaG9zdF9mbG9vZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHQgKiB3aWxsIGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHkgdG8gdGhlIENQVSBwb3J0LlxcbiBcXHQgKi9cXG4gXFx0aWYgKGRzYV9wb3J0X2JyaWRnZV9kZXZfZ2V0KG5wLVxcdTAwM2VkcCkpIHtcXG4tXFx0XFx0bmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBucC1cXHUwMDNlaG9zdF9mbG9vZCk7XFxuK1xcdFxcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgbnAtXFx1MDAzZWlwZnRfaGZfZWlkKTtcXG4gXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbkBAIC0xODE4LDIwICsxODc3LDE4IEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9zZXRfaG9zdF9mbG9vZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXG4gXFx0LyogSVBGVCBkb2VzIG5vdCBzdXBwb3J0IGluLXBsYWNlIHVwZGF0ZXMgdG8gdGhlIEtFWUUgZWxlbWVudCxcXG4gXFx0ICogd2UgbmVlZCB0byBhZGQgYSBuZXcgZW50cnkgYW5kIHRoZW4gZGVsZXRlIHRoZSBvbGQgb25lLiBTb1xcbi1cXHQgKiBzYXZlIHRoZSBvbGQgZW50cnkgZmlyc3QuXFxuK1xcdCAqIHNhdmUgdGhlIG9sZCBlbnRyeSBJRCBmaXJzdC5cXG4gXFx0ICovXFxuLVxcdG9sZF9ob3N0X2Zsb29kID0gbnAtXFx1MDAzZWhvc3RfZmxvb2Q7XFxuLVxcdG5wLVxcdTAwM2Vob3N0X2Zsb29kID0gTlVMTDtcXG4rXFx0b2xkX2VudHJ5X2lkID0gbnAtXFx1MDAzZWlwZnRfaGZfZWlkO1xcbiBcXG4gXFx0aWYgKG5ldGNfcG9ydF9hZGRfaG9zdF9mbG9vZF9ydWxlKG5wLCB1YywgbWMpKSB7XFxuLVxcdFxcdG5wLVxcdTAwM2Vob3N0X2Zsb29kID0gb2xkX2hvc3RfZmxvb2Q7XFxuIFxcdFxcdGRldl9lcnIoZHMtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byBhZGQgaG9zdCBmbG9vZCBydWxlIG9uIHBvcnQgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHBvcnQpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFJlbW92ZSB0aGUgb2xkIGhvc3QgZmxvb2QgZW50cnkgKi9cXG4tXFx0bmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBvbGRfaG9zdF9mbG9vZCk7XFxuK1xcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgb2xkX2VudHJ5X2lkKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZXRjX3NpbmdsZV92bGFuX2F3YXJlX2JyaWRnZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuQEAgLTIwMjAsNyArMjA3Nyw3IEBAIHN0YXRpYyBpbnQgbmV0Y19wb3J0X2JyaWRnZV9qb2luKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdG5ldGNfcG9ydF9zZXRfcHZpZChucCwgdmxhbl91bmF3YXJlX3B2aWQpO1xcbiBcXG4gb3V0Olxcbi1cXHRuZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2QobnAsIG5wLVxcdTAwM2Vob3N0X2Zsb29kKTtcXG4rXFx0bmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBucC1cXHUwMDNlaXBmdF9oZl9laWQpO1xcbiBcXG4gXFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZwcml2LVxcdTAwM2Vicl9jbnQpID09IDEpXFxuIFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cHJpdi1cXHUwMDNlZmRidF9hZ2Vpbmdfd29yayxcXG5AQCAtMjQwMiw2ICsyNDU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgbmV0Y19waHlsaW5rX21hY19vcHMgPSB7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG5ldGNfc3dpdGNoX29wcyA9IHtcXG4gXFx0LmdldF90YWdfcHJvdG9jb2xcXHRcXHQ9IG5ldGNfZ2V0X3RhZ19wcm90b2NvbCxcXG4rXFx0LmNvbm5lY3RfdGFnX3Byb3RvY29sXFx0XFx0PSBuZXRjX2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxcbiBcXHQuc2V0dXBcXHRcXHRcXHRcXHQ9IG5ldGNfc2V0dXAsXFxuIFxcdC50ZWFyZG93blxcdFxcdFxcdD0gbmV0Y190ZWFyZG93bixcXG4gXFx0LnBoeWxpbmtfZ2V0X2NhcHNcXHRcXHQ9IG5ldGNfcGh5bGlua19nZXRfY2FwcyxcXG5AQCAtMjQzMCw2ICsyNDg4LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbmV0Y19zd2l0Y2hfb3BzID0ge1xcbiBcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHRcXHQ9IG5ldGNfcG9ydF9nZXRfc3NldF9jb3VudCxcXG4gXFx0LmdldF9zdHJpbmdzXFx0XFx0XFx0PSBuZXRjX3BvcnRfZ2V0X3N0cmluZ3MsXFxuIFxcdC5nZXRfZXRodG9vbF9zdGF0c1xcdFxcdD0gbmV0Y19wb3J0X2dldF9ldGh0b29sX3N0YXRzLFxcbitcXHQuZ2V0X3RzX2luZm9cXHRcXHRcXHQ9IG5ldGNfZ2V0X3RzX2luZm8sXFxuK1xcdC5wb3J0X2h3dHN0YW1wX3NldFxcdFxcdD0gbmV0Y19wb3J0X2h3dHN0YW1wX3NldCxcXG4rXFx0LnBvcnRfaHd0c3RhbXBfZ2V0XFx0XFx0PSBuZXRjX3BvcnRfaHd0c3RhbXBfZ2V0LFxcbitcXHQucG9ydF9yeHRzdGFtcFxcdFxcdFxcdD0gbmV0Y19wb3J0X3J4dHN0YW1wLFxcbitcXHQucG9ydF90eHRzdGFtcFxcdFxcdFxcdD0gbmV0Y19wb3J0X3R4dHN0YW1wLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBuZXRjX3N3aXRjaF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wbGF0Zm9ybS5jIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wbGF0Zm9ybS5jXFxuaW5kZXggMzRhZWI2ZmNlYjNjYi4uNGZkMGNlNjc3MGMzMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3BsYXRmb3JtLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3BsYXRmb3JtLmNcXG5AQCAtNTAsNiArNTAsNyBAQCBzdGF0aWMgdm9pZCBpbXg5NF9zd2l0Y2hfcGh5bGlua19nZXRfY2FwcyhpbnQgcG9ydCxcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0Y19zd2l0Y2hfaW5mbyBpbXg5NF9pbmZvID0ge1xcbiBcXHQubnVtX3BvcnRzID0gNCxcXG4rXFx0LnRtcl9kZXZmbiA9IFBDSV9ERVZGTigwLCAxKSxcXG4gXFx0LnBoeWxpbmtfZ2V0X2NhcHMgPSBpbXg5NF9zd2l0Y2hfcGh5bGlua19nZXRfY2FwcyxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcHRwLmMgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3B0cC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mZjdkOGU1ZTY4ZDIzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcHRwLmNcXG5AQCAtMCwwICsxLDY2MyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIEJTRC0zLUNsYXVzZSlcXG4rLypcXG4rICogTlhQIE5FVEMgc3dpdGNoIGRyaXZlclxcbisgKiBDb3B5cmlnaHQgMjAyNS0yMDI2IE5YUFxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xhc3NpZnkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJuZXRjX3N3aXRjaC5oXFxcIlxcbitcXG4rI2RlZmluZSBORVRDX1RTX1JFUV9JRF9OVU1cXHRcXHQoTkVUQ19UQUdfVFNfUkVRX0lEICsgMSlcXG4rI2RlZmluZSBORVRDX1BUUF9UWF9UU1RBTVBfVElNRU9VVFxcdCg1ICogSFopXFxuK1xcbitzdGF0aWMgaW50IG5ldGNfZ2V0X3BoY19pbmRleChzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpXFxuK3tcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2V0bXJfZGV2KVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHJldHVybiBwdHBfY2xvY2tfaW5kZXhfYnlfZGV2KFxcdTAwMjZwcml2LVxcdTAwM2V0bXJfZGV2LVxcdTAwM2VkZXYpO1xcbit9XFxuK1xcbitpbnQgbmV0Y19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHQgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aW5mby1cXHUwMDNlc29fdGltZXN0YW1waW5nID0gU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSB8XFxuK1xcdFxcdFxcdFxcdFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgfFxcbitcXHRcXHRcXHRcXHRTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFO1xcbitcXG4rXFx0aW5mby1cXHUwMDNlcGhjX2luZGV4ID0gbmV0Y19nZXRfcGhjX2luZGV4KHByaXYpO1xcbitcXHRpZiAoaW5mby1cXHUwMDNlcGhjX2luZGV4IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpbmZvLVxcdTAwM2Vzb190aW1lc3RhbXBpbmcgfD0gU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSB8XFxuK1xcdFxcdFxcdFxcdCBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFIHxcXG4rXFx0XFx0XFx0XFx0IFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFO1xcbitcXG4rXFx0aW5mby1cXHUwMDNldHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT0ZGKSB8IEJJVChIV1RTVEFNUF9UWF9PTikgfFxcbitcXHRcXHRcXHQgQklUKEhXVFNUQU1QX1RYX09ORVNURVBfU1lOQyk7XFxuK1xcbitcXHRpbmZvLVxcdTAwM2VyeF9maWx0ZXJzID0gQklUKEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8XFxuK1xcdFxcdFxcdCAgIEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UKSB8XFxuK1xcdFxcdFxcdCAgIEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKSB8XFxuK1xcdFxcdFxcdCAgIEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnApXFxuK3tcXG4rXFx0c3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtXFx1MDAzZXN3aXRjaF9wcml2O1xcbitcXHR1MzIgZW50cnlfaWQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5FVENfUFRQX01BWDsgaSsrKSB7XFxuK1xcdFxcdGVudHJ5X2lkID0gbnAtXFx1MDAzZXB0cF9pcGZ0X2VpZFtpXTtcXG4rXFx0XFx0aWYgKGVudHJ5X2lkICE9IE5UTVBfTlVMTF9FTlRSWV9JRCkge1xcbitcXHRcXHRcXHRudG1wX2lwZnRfZGVsZXRlX2VudHJ5KFxcdTAwMjZwcml2LVxcdTAwM2VudG1wLCBlbnRyeV9pZCk7XFxuK1xcdFxcdFxcdG5wLVxcdTAwM2VwdHBfaXBmdF9laWRbaV0gPSBOVE1QX05VTExfRU5UUllfSUQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IG5ldGNfYnVpbGRfcHRwX2lwZnRfa2V5ZShzdHJ1Y3QgaXBmdF9rZXllX2RhdGEgKmtleWUsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgZW51bSBuZXRjX3B0cF90eXBlIHR5cGUpXFxuK3tcXG4rXFx0dTE2IHNyY19wb3J0LCBmcm1fYXR0cl9mbGFncztcXG4rXFxuK1xcdGtleWUtXFx1MDAzZXByZWNlZGVuY2UgPSBjcHVfdG9fbGUxNigweGYwMDApO1xcbitcXHRzcmNfcG9ydCA9IEZJRUxEX1BSRVAoSVBGVF9TUkNfUE9SVCwgcG9ydCk7XFxuK1xcdHNyY19wb3J0IHw9IElQRlRfU1JDX1BPUlRfTUFTSztcXG4rXFx0a2V5ZS1cXHUwMDNlc3JjX3BvcnQgPSBjcHVfdG9fbGUxNihzcmNfcG9ydCk7XFxuK1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBORVRDX1BUUF9MMjpcXG4rXFx0XFx0a2V5ZS1cXHUwMDNlZXRoZXJ0eXBlID0gaHRvbnMoRVRIX1BfMTU4OCk7XFxuK1xcdFxcdGtleWUtXFx1MDAzZWV0aGVydHlwZV9tYXNrID0gaHRvbnMoMHhmZmZmKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTkVUQ19QVFBfTDRfSVBWNF9FVkVOVDpcXG4rXFx0Y2FzZSBORVRDX1BUUF9MNF9JUFY0X0dFTkVSQUw6XFxuK1xcdGNhc2UgTkVUQ19QVFBfTDRfSVBWNl9FVkVOVDpcXG4rXFx0Y2FzZSBORVRDX1BUUF9MNF9JUFY2X0dFTkVSQUw6XFxuK1xcdFxcdGZybV9hdHRyX2ZsYWdzID0gSVBGVF9GQUZfSVBfSERSIHwgRklFTERfUFJFUChJUEZUX0ZBRl9MNF9DT0RFLFxcbitcXHRcXHRcXHRcXHQgSVBGVF9GQUZfVURQX0hEUik7XFxuK1xcdFxcdGlmICh0eXBlID09IE5FVENfUFRQX0w0X0lQVjZfRVZFTlQgfHxcXG4rXFx0XFx0ICAgIHR5cGUgPT0gTkVUQ19QVFBfTDRfSVBWNl9HRU5FUkFMKVxcbitcXHRcXHRcXHRmcm1fYXR0cl9mbGFncyB8PSBJUEZUX0ZBRl9JUF9WRVI2O1xcbitcXG4rXFx0XFx0a2V5ZS1cXHUwMDNlZnJtX2F0dHJfZmxhZ3MgPSBjcHVfdG9fbGUxNihmcm1fYXR0cl9mbGFncyk7XFxuK1xcdFxcdGtleWUtXFx1MDAzZWZybV9hdHRyX2ZsYWdzX21hc2sgPSBrZXllLVxcdTAwM2Vmcm1fYXR0cl9mbGFncztcXG4rXFx0XFx0a2V5ZS1cXHUwMDNlaXBfcHJvdG9jb2wgPSBJUFBST1RPX1VEUDtcXG4rXFx0XFx0a2V5ZS1cXHUwMDNlaXBfcHJvdG9jb2xfbWFzayA9IDB4ZmY7XFxuK1xcbitcXHRcXHRpZiAodHlwZSA9PSBORVRDX1BUUF9MNF9JUFY0X0VWRU5UIHx8XFxuK1xcdFxcdCAgICB0eXBlID09IE5FVENfUFRQX0w0X0lQVjZfRVZFTlQpXFxuK1xcdFxcdFxcdGtleWUtXFx1MDAzZWw0X2RzdF9wb3J0ID0gaHRvbnMoUFRQX0VWX1BPUlQpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGtleWUtXFx1MDAzZWw0X2RzdF9wb3J0ID0gaHRvbnMoUFRQX0dFTl9QT1JUKTtcXG4rXFxuK1xcdFxcdGtleWUtXFx1MDAzZWw0X2RzdF9wb3J0X21hc2sgPSBodG9ucygweGZmZmYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkoc3RydWN0IG5ldGNfcG9ydCAqbnAsXFxuK1xcdFxcdFxcdFxcdFxcdGVudW0gbmV0Y19wdHBfdHlwZSB0eXBlKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IG5wLVxcdTAwM2Vzd2l0Y2hfcHJpdjtcXG4rXFx0c3RydWN0IGlwZnRfZW50cnlfZGF0YSAqZW50cnk7XFxuK1xcdHN0cnVjdCBpcGZ0X2tleWVfZGF0YSAqa2V5ZTtcXG4rXFx0dTMyIGNmZztcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVudHJ5ID0ga3phbGxvY19vYmooKmVudHJ5KTtcXG4rXFx0aWYgKCFlbnRyeSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRrZXllID0gXFx1MDAyNmVudHJ5LVxcdTAwM2VrZXllO1xcbitcXHRlcnIgPSBuZXRjX2J1aWxkX3B0cF9pcGZ0X2tleWUoa2V5ZSwgbnAtXFx1MDAzZWRwLVxcdTAwM2VpbmRleCwgdHlwZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZnJlZV9lbnRyeTtcXG4rXFxuK1xcdGNmZyA9IEZJRUxEX1BSRVAoSVBGVF9GTFRGQSwgSVBGVF9GTFRGQV9SRURJUkVDVCk7XFxuK1xcdGNmZyB8PSBGSUVMRF9QUkVQKElQRlRfSFIsIE5FVENfSFJfUFRQX1RSQVApO1xcbitcXHRjZmcgfD0gSVBGVF9USU1FQ0FQRSB8IElQRlRfUlJUO1xcbitcXHRlbnRyeS1cXHUwMDNlY2ZnZS5jZmcgPSBjcHVfdG9fbGUzMihjZmcpO1xcbitcXG4rXFx0ZXJyID0gbnRtcF9pcGZ0X2FkZF9lbnRyeShcXHUwMDI2cHJpdi1cXHUwMDNlbnRtcCwgZW50cnkpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGZyZWVfZW50cnk7XFxuK1xcbitcXHRucC1cXHUwMDNlcHRwX2lwZnRfZWlkW3R5cGVdID0gZW50cnktXFx1MDAzZWVudHJ5X2lkO1xcbitcXG4rZnJlZV9lbnRyeTpcXG4rXFx0a2ZyZWUoZW50cnkpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2wyX3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnApXFxuK3tcXG4rXFx0cmV0dXJuIG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0wyKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2w0X3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnApXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjRfRVZFTlQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gbmV0Y19wb3J0X2FkZF9pcGZ0X3B0cF9lbnRyeShucCwgTkVUQ19QVFBfTDRfSVBWNF9HRU5FUkFMKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBkZWxfcHRwX2ZpbHRlcjtcXG4rXFxuK1xcdGVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjZfRVZFTlQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGRlbF9wdHBfZmlsdGVyO1xcbitcXG4rXFx0ZXJyID0gbmV0Y19wb3J0X2FkZF9pcGZ0X3B0cF9lbnRyeShucCwgTkVUQ19QVFBfTDRfSVBWNl9HRU5FUkFMKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBkZWxfcHRwX2ZpbHRlcjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZGVsX3B0cF9maWx0ZXI6XFxuK1xcdG5ldGNfcG9ydF9kZWxfcHRwX2ZpbHRlcihucCk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfbDJfbDRfcHRwX2ZpbHRlcihzdHJ1Y3QgbmV0Y19wb3J0ICpucClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gbmV0Y19wb3J0X2FkZF9sMl9wdHBfZmlsdGVyKG5wKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVyciA9IG5ldGNfcG9ydF9hZGRfbDRfcHRwX2ZpbHRlcihucCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZGVsX3B0cF9maWx0ZXI7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2RlbF9wdHBfZmlsdGVyOlxcbitcXHRuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIobnApO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBuZXRjX3BvcnRfc2V0X3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnAsIGludCByeF9maWx0ZXIpXFxuK3tcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAobnAtXFx1MDAzZXB0cF9yeF9maWx0ZXIgPT0gcnhfZmlsdGVyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChucC1cXHUwMDNlcHRwX3J4X2ZpbHRlciAhPSBIV1RTVEFNUF9GSUxURVJfTk9ORSB8fFxcbitcXHQgICAgcnhfZmlsdGVyID09IEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB7XFxuK1xcdFxcdG5ldGNfcG9ydF9kZWxfcHRwX2ZpbHRlcihucCk7XFxuK1xcdFxcdG5wLVxcdTAwM2VwdHBfcnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAocnhfZmlsdGVyKSB7XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ6XFxuK1xcdFxcdGVyciA9IG5ldGNfcG9ydF9hZGRfbDJfcHRwX2ZpbHRlcihucCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfRVZFTlQ6XFxuK1xcdFxcdGVyciA9IG5ldGNfcG9ydF9hZGRfbDRfcHRwX2ZpbHRlcihucCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6XFxuK1xcdFxcdGVyciA9IG5ldGNfcG9ydF9hZGRfbDJfbDRfcHRwX2ZpbHRlcihucCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRlcnIgPSAtRVJBTkdFO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0bnAtXFx1MDAzZXB0cF9yeF9maWx0ZXIgPSByeF9maWx0ZXI7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IG5ldGNfcG9ydF9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRjX3BvcnQgKm5wID0gTkVUQ19QT1JUKGRzLCBwb3J0KTtcXG4rXFx0c3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdGludCByeF9maWx0ZXIsIGVycjtcXG4rXFxuK1xcdHN3aXRjaCAoY29uZmlnLVxcdTAwM2V0eF90eXBlKSB7XFxuK1xcdGNhc2UgSFdUU1RBTVBfVFhfT046XFxuK1xcdGNhc2UgSFdUU1RBTVBfVFhfT0ZGOlxcbitcXHRcXHRucC1cXHUwMDNlcHRwX3R4X3R5cGUgPSBjb25maWctXFx1MDAzZXR4X3R5cGU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhXVFNUQU1QX1RYX09ORVNURVBfU1lOQzpcXG4rXFx0XFx0aWYgKCFwcml2LVxcdTAwM2V0bXJfZGV2KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdFxcdG5wLVxcdTAwM2VwdHBfdHhfdHlwZSA9IGNvbmZpZy1cXHUwMDNldHhfdHlwZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXHR9XFxuK1xcbitcXHRzd2l0Y2ggKGNvbmZpZy1cXHUwMDNlcnhfZmlsdGVyKSB7XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6XFxuK1xcdFxcdHJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9OT05FO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfU1lOQzpcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0RFTEFZX1JFUTpcXG4rXFx0XFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDpcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX1NZTkM6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9ERUxBWV9SRVE6XFxuK1xcdFxcdHJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9TWU5DOlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVROlxcbitcXHRcXHRyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG5ldGNfcG9ydF9zZXRfcHRwX2ZpbHRlcihucCwgcnhfZmlsdGVyKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIHNldCBQVFAgZmlsdGVyXFxcIik7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGNvbmZpZy1cXHUwMDNlcnhfZmlsdGVyID0gcnhfZmlsdGVyO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCBuZXRjX3BvcnRfaHd0c3RhbXBfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBORVRDX1BPUlQoZHMsIHBvcnQpO1xcbitcXG4rXFx0Y29uZmlnLVxcdTAwM2V0eF90eXBlID0gbnAtXFx1MDAzZXB0cF90eF90eXBlO1xcbitcXHRjb25maWctXFx1MDAzZXJ4X2ZpbHRlciA9IG5wLVxcdTAwM2VwdHBfcnhfZmlsdGVyO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbmV0Y19wb3J0X3R4dHN0YW1wX3R3b3N0ZXAoc3RydWN0IG5ldGNfcG9ydCAqbnAsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpjbG9uZSlcXG4re1xcbitcXHRERUNMQVJFX0JJVE1BUCh0c19yZXFfaWRfYml0bWFwLCBORVRDX1RTX1JFUV9JRF9OVU0pO1xcbitcXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBucC1cXHUwMDNlc3dpdGNoX3ByaXY7XFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWQgZnJlZV9saXN0O1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqc2tiX3RtcDtcXG4rXFx0dW5zaWduZWQgbG9uZyB0c19yZXFfaWQ7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0Yml0bWFwX3plcm8odHNfcmVxX2lkX2JpdG1hcCwgTkVUQ19UU19SRVFfSURfTlVNKTtcXG4rXFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZmcmVlX2xpc3QpO1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5wLVxcdTAwM2VwdHBfbG9jayk7XFxuK1xcbitcXHRza2JfcXVldWVfd2Fsa19zYWZlKFxcdTAwMjZucC1cXHUwMDNlc2tiX3R4dHN0YW1wX3F1ZXVlLCBza2IsIHNrYl90bXApIHtcXG4rXFx0XFx0aWYgKHRpbWVfYmVmb3JlKE5FVENfU0tCX0NCKHNrYiktXFx1MDAzZXB0cF90eF90aW1lICtcXG4rXFx0XFx0XFx0XFx0TkVUQ19QVFBfVFhfVFNUQU1QX1RJTUVPVVQsIGppZmZpZXMpKSB7XFxuK1xcdFxcdFxcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFxcIlBvcnQgJWQgdHNfcmVxX2lkICV1IHdoaWNoIHNlZW1zIGxvc3RcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBucC1cXHUwMDNlZHAtXFx1MDAzZWluZGV4LCBORVRDX1NLQl9DQihza2IpLVxcdTAwM2V0c19yZXFfaWQpO1xcbitcXG4rXFx0XFx0XFx0X19za2JfdW5saW5rKHNrYiwgXFx1MDAyNm5wLVxcdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUpO1xcbitcXHRcXHRcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZmcmVlX2xpc3QsIHNrYik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdF9fc2V0X2JpdChORVRDX1NLQl9DQihza2IpLVxcdTAwM2V0c19yZXFfaWQsIHRzX3JlcV9pZF9iaXRtYXApO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHRzX3JlcV9pZCA9IGZpbmRfZmlyc3RfemVyb19iaXQodHNfcmVxX2lkX2JpdG1hcCwgTkVUQ19UU19SRVFfSURfTlVNKTtcXG4rXFx0aWYgKHRzX3JlcV9pZCA9PSBORVRDX1RTX1JFUV9JRF9OVU0pIHtcXG4rXFx0XFx0ZXJyID0gLUVCVVNZO1xcbitcXHRcXHRnb3RvIHVubG9ja19wdHA7XFxuK1xcdH1cXG4rXFxuK1xcdE5FVENfU0tCX0NCKGNsb25lKS1cXHUwMDNldHNfcmVxX2lkID0gdHNfcmVxX2lkO1xcbitcXHRORVRDX1NLQl9DQihjbG9uZSktXFx1MDAzZXB0cF90eF90aW1lID0gamlmZmllcztcXG4rXFx0c2tiX3NoaW5mbyhjbG9uZSktXFx1MDAzZXR4X2ZsYWdzIHw9IFNLQlRYX0lOX1BST0dSRVNTO1xcbitcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZucC1cXHUwMDNlc2tiX3R4dHN0YW1wX3F1ZXVlLCBjbG9uZSk7XFxuK1xcbit1bmxvY2tfcHRwOlxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnAtXFx1MDAzZXB0cF9sb2NrKTtcXG4rXFxuK1xcdC8qIEZyZWUgdGltZWQtb3V0IFNLQnMgb3V0c2lkZSB0aGUgc3BpbmxvY2sgdG8gYXZvaWQgY2FsbGluZ1xcbitcXHQgKiBrZnJlZV9za2IoKSB3aXRoIGEgZGVzdHJ1Y3RvciAoc29ja19lZnJlZSkgdW5kZXIgYSBzcGlubG9jay5cXG4rXFx0ICovXFxuK1xcdF9fc2tiX3F1ZXVlX3B1cmdlKFxcdTAwMjZmcmVlX2xpc3QpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rdm9pZCBuZXRjX3R3b3N0ZXBfdHN0YW1wX2hhbmRsZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0IHU4IHRzX3JlcV9pZCwgdTY0IHRzKVxcbit7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2IsICpza2JfdG1wLCAqc2tiX21hdGNoID0gTlVMTDtcXG4rXFx0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBORVRDX1BPUlQoZHMsIHBvcnQpO1xcbitcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgaHd0c3RhbXBzO1xcbitcXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2bnAtXFx1MDAzZXB0cF9sb2NrKTtcXG4rXFx0c2tiX3F1ZXVlX3dhbGtfc2FmZShcXHUwMDI2bnAtXFx1MDAzZXNrYl90eHRzdGFtcF9xdWV1ZSwgc2tiLCBza2JfdG1wKSB7XFxuK1xcdFxcdGlmIChORVRDX1NLQl9DQihza2IpLVxcdTAwM2V0c19yZXFfaWQgIT0gdHNfcmVxX2lkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdF9fc2tiX3VubGluayhza2IsIFxcdTAwMjZucC1cXHUwMDNlc2tiX3R4dHN0YW1wX3F1ZXVlKTtcXG4rXFx0XFx0c2tiX21hdGNoID0gc2tiO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnAtXFx1MDAzZXB0cF9sb2NrKTtcXG4rXFxuK1xcdGlmICghc2tiX21hdGNoKSB7XFxuK1xcdFxcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIlBvcnQgJWQgcmVjZWl2ZWQgYW4gZXhwaXJlZCBUeCB0aW1lc3RhbXAgcmVzcG9uc2UgKHRzX3JlcV9pZCAldSlcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgcG9ydCwgdHNfcmVxX2lkKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRod3RzdGFtcHMuaHd0c3RhbXAgPSBuc190b19rdGltZSh0cyk7XFxuK1xcdHNrYl9jb21wbGV0ZV90eF90aW1lc3RhbXAoc2tiX21hdGNoLCBcXHUwMDI2aHd0c3RhbXBzKTtcXG4rfVxcbitcXG4rYm9vbCBuZXRjX3BvcnRfcnh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHR5cGUpXFxuK3tcXG4rXFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMgPSBza2JfaHd0c3RhbXBzKHNrYik7XFxuK1xcdHU2NCB0cyA9IE5FVENfU0tCX0NCKHNrYiktXFx1MDAzZXRzdGFtcDtcXG4rXFxuK1xcdGh3dHN0YW1wcy1cXHUwMDNlaHd0c3RhbXAgPSBuc190b19rdGltZSh0cyk7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9wcmVwYXJlX29uZXN0ZXBfc3luYyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdTMyIHB0cF9jbGFzcywgYm9vbCAqdHdvc3RlcClcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBucC1cXHUwMDNlc3dpdGNoX3ByaXY7XFxuK1xcdHUxNiBjb3JyZWN0aW9uX29mZnNldCwgdGltZXN0YW1wX29mZnNldDtcXG4rXFx0c3RydWN0IHB0cF9oZWFkZXIgKnB0cF9oZHI7XFxuK1xcdHU4IG1zZ190eXBlLCB0d29zdGVwX2ZsYWc7XFxuK1xcdGJvb2wgaXNfdWRwID0gZmFsc2U7XFxuK1xcdHUzMiBwa3RfdHlwZTtcXG4rXFx0dTggKnBrdF9oZHI7XFxuK1xcbitcXHRwdHBfaGRyID0gcHRwX3BhcnNlX2hlYWRlcihza2IsIHB0cF9jbGFzcyk7XFxuK1xcdGlmICghcHRwX2hkcikge1xcbitcXHRcXHRkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJQb3J0ICVkIGZhaWxlZCB0byBwYXJzZSBTeW5jIGhlYWRlclxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIG5wLVxcdTAwM2VkcC1cXHUwMDNlaW5kZXgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHBrdF9oZHIgPSBza2JfbWFjX2hlYWRlcihza2IpO1xcbitcXHRjb3JyZWN0aW9uX29mZnNldCA9ICh1OCAqKVxcdTAwMjZwdHBfaGRyLVxcdTAwM2Vjb3JyZWN0aW9uIC0gcGt0X2hkcjtcXG4rXFx0dGltZXN0YW1wX29mZnNldCA9ICh1OCAqKXB0cF9oZHIgKyBzaXplb2YoKnB0cF9oZHIpIC0gcGt0X2hkcjtcXG4rXFxuK1xcdC8qIEVuc3VyZSB0aGF0IHRoZSBlbnRpcmUgb3JpZ2luVGltZXN0YW1wIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlXFxuK1xcdCAqIGxpbmVhciBidWZmZXIgb2YgdGhlIHNrYi5cXG4rXFx0ICovXFxuK1xcdGlmIChwa3RfaGRyICsgdGltZXN0YW1wX29mZnNldCArIDEwIFxcdTAwM2Ugc2tiLVxcdTAwM2VkYXRhICsgc2tiX2hlYWRsZW4oc2tiKSkge1xcbitcXHRcXHRkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJQb3J0ICVkIFN5bmMgaGVhZGVyIG5vdCBpbiBsaW5lYXIgYXJlYVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIG5wLVxcdTAwM2VkcC1cXHUwMDNlaW5kZXgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdG1zZ190eXBlID0gcHRwX2dldF9tc2d0eXBlKHB0cF9oZHIsIHB0cF9jbGFzcyk7XFxuK1xcdHR3b3N0ZXBfZmxhZyA9IHB0cF9oZHItXFx1MDAzZWZsYWdfZmllbGRbMF0gXFx1MDAyNiAweDI7XFxuK1xcbitcXHQvKiBPbmx5IGEgU3luYyBmcmFtZSB3aXRoIHRoZSB0d29TdGVwRmxhZyBjbGVhcmVkIGNhbiB1c2Ugb25lLXN0ZXBcXG4rXFx0ICogdGltZXN0YW1waW5nLiBBIGZyYW1lIHRoYXQgcmVxdWVzdHMgdHdvLXN0ZXAgKG9yIGlzIG5vdCBhIFN5bmMpXFxuK1xcdCAqIGNhcnJpZXMgZGlmZmVyZW50IG9uLXdpcmUgZmllbGRzLCBzbyB0aGlzIGlzIGEgcmVhbCBjbGFzc2lmaWNhdGlvbjtcXG4rXFx0ICogcmVwb3J0IGl0IHRocm91Z2ggKnR3b3N0ZXAgc28gdGhlIGNhbGxlciBmYWxscyBiYWNrIHRvIHRoZSB0d28tc3RlcFxcbitcXHQgKiBwYXRoLlxcbitcXHQgKi9cXG4rXFx0aWYgKG1zZ190eXBlICE9IFBUUF9NU0dUWVBFX1NZTkMgfHwgdHdvc3RlcF9mbGFnICE9IDApIHtcXG4rXFx0XFx0KnR3b3N0ZXAgPSB0cnVlO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoaXMgaXMgYSBnZW51aW5lIG9uZS1zdGVwIFN5bmMgZnJhbWUuIHNrYl9zaGluZm8oKS1cXHUwMDNlZGVzdHJ1Y3Rvcl9hcmdcXG4rXFx0ICogaXMgbGF0ZXIgdXNlZCB0byBwYXNzIHRoZSBuZXRjX3BvcnQgcG9pbnRlciB0b1xcbitcXHQgKiBuZXRjX29uZXN0ZXBfc2tiX2Rlc3RydWN0b3IoKSBmb3IgVFggY29tcGxldGlvbiBub3RpZmljYXRpb24uXFxuK1xcdCAqIE1TR19aRVJPQ09QWSBhbHNvIHVzZXMgZGVzdHJ1Y3Rvcl9hcmcgKHZpYSBza2JfemNvcHlfaW5pdCgpKSB0b1xcbitcXHQgKiB0cmFjayB1c2VyLXNwYWNlIHBhZ2UgcmVmZXJlbmNlcy4gT3ZlcndyaXRpbmcgaXQgaW4gdGhhdCBjYXNlIHdvdWxkXFxuK1xcdCAqIGxlYWsgdGhlIHVidWZfaW5mbyByZWZlcmVuY2UgYW5kIHByZXZlbnQgdXNlciBwYWdlcyBmcm9tIGJlaW5nXFxuK1xcdCAqIHJlbGVhc2VkLiBQVFAgYXBwbGljYXRpb25zIGRvIG5vdCB1c2UgTVNHX1pFUk9DT1BZLCBidXQgZ3VhcmRcXG4rXFx0ICogYWdhaW5zdCBpdCBkZWZlbnNpdmVseS5cXG4rXFx0ICovXFxuK1xcdGlmIChza2JfemNvcHkoc2tiKSkge1xcbitcXHRcXHRkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJQb3J0ICVkIG9uZS1zdGVwIFN5bmMgbm90IHN1cHBvcnRlZCBvbiB6ZXJvY29weSBza2JcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBucC1cXHUwMDNlZHAtXFx1MDAzZWluZGV4KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRwa3RfdHlwZSA9IHB0cF9jbGFzcyBcXHUwMDI2IFBUUF9DTEFTU19QTUFTSztcXG4rXFx0aWYgKHBrdF90eXBlID09IFBUUF9DTEFTU19JUFY0IHx8IHBrdF90eXBlID09IFBUUF9DTEFTU19JUFY2KVxcbitcXHRcXHRpc191ZHAgPSB0cnVlO1xcbitcXG4rXFx0LyogQ2FjaGUgdGhlIHBhcnNpbmcgcmVzdWx0cyBzbyB0aGUgdGFnZ2VyIHhtaXQgcGF0aCBhbmQgdGhlIGRlZmVycmVkXFxuK1xcdCAqIHdvcmsgZG8gbm90IG5lZWQgdG8gcmUtcGFyc2UgdGhlIFBUUCBoZWFkZXIsIGFuZCBzbyB0aGF0XFxuK1xcdCAqIG5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAoKSBjYW4gZGVyaXZlIHRoZXNlIHBhcmFtZXRlcnMgZnJvbSB0aGVcXG4rXFx0ICogc2tiLlxcbitcXHQgKi9cXG4rXFx0TkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNlY29ycmVjdGlvbl9vZmZzZXQgPSBjb3JyZWN0aW9uX29mZnNldDtcXG4rXFx0TkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNldGltZXN0YW1wX29mZnNldCA9IHRpbWVzdGFtcF9vZmZzZXQ7XFxuK1xcdE5FVENfU0tCX0NCKHNrYiktXFx1MDAzZWlzX3VkcCA9IGlzX3VkcDtcXG4rXFx0TkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNlcHRwX2ZsYWcgPSBORVRDX1BUUF9GTEFHX09ORVNURVA7XFxuK31cXG4rXFxuK3ZvaWQgbmV0Y19wb3J0X3R4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBORVRDX1BPUlQoZHMsIHBvcnQpO1xcbitcXHRib29sIHR3b3N0ZXAgPSBmYWxzZTtcXG4rXFx0dTMyIHB0cF9jbGFzcztcXG4rXFxuK1xcdE5FVENfU0tCX0NCKHNrYiktXFx1MDAzZXB0cF9mbGFnID0gMDtcXG4rXFx0cHRwX2NsYXNzID0gcHRwX2NsYXNzaWZ5X3Jhdyhza2IpO1xcbitcXHRpZiAocHRwX2NsYXNzID09IFBUUF9DTEFTU19OT05FKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAobnAtXFx1MDAzZXB0cF90eF90eXBlID09IEhXVFNUQU1QX1RYX09ORVNURVBfU1lOQylcXG4rXFx0XFx0bmV0Y19wb3J0X3ByZXBhcmVfb25lc3RlcF9zeW5jKG5wLCBza2IsIHB0cF9jbGFzcywgXFx1MDAyNnR3b3N0ZXApO1xcbitcXG4rXFx0aWYgKG5wLVxcdTAwM2VwdHBfdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTiB8fCB0d29zdGVwKSB7XFxuK1xcdFxcdHN0cnVjdCBza19idWZmICpjbG9uZSA9IHNrYl9jbG9uZV9zayhza2IpO1xcbitcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFjbG9uZSkpXFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdFxcdGlmIChuZXRjX3BvcnRfdHh0c3RhbXBfdHdvc3RlcChucCwgY2xvbmUpKSB7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYihjbG9uZSk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0TkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNlY2xvbmUgPSBjbG9uZTtcXG4rXFx0XFx0TkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNlcHRwX2ZsYWcgPSBORVRDX1BUUF9GTEFHX1RXT1NURVA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbmV0Y19wb3J0X3NldF9vbmVzdGVwX2NvbnRyb2woc3RydWN0IG5ldGNfcG9ydCAqbnAsIGJvb2wgdWRwLFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCBvZmZzZXQpXFxuK3tcXG4rXFx0dTMyIHZhbDtcXG4rXFxuK1xcdHZhbCA9IFBNX1NJTkdMRV9TVEVQX0VOIHwgRklFTERfUFJFUChQTV9TSU5HTEVfU1RFUF9PRkZTRVQsIG9mZnNldCk7XFxuK1xcdGlmICh1ZHApXFxuK1xcdFxcdHZhbCB8PSBQTV9TSU5HTEVfU1RFUF9DSDtcXG4rXFx0bmV0Y19tYWNfcG9ydF93cihucCwgTkVUQ19QTV9TSU5HTEVfU1RFUCgwKSwgdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbmV0Y19vbmVzdGVwX3NrYl9kZXN0cnVjdG9yKHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnO1xcbitcXG4rXFx0Lyogc2tiIGhhcyBiZWVuIHRyYW5zbWl0dGVkIGJ5IGhhcmR3YXJlLCBzY2hlZHVsZSB3b3JrIHRvIHNlbmRcXG4rXFx0ICogdGhlIG5leHQgcXVldWVkIG9uZS1zdGVwIFN5bmMgcGFja2V0LlxcbitcXHQgKi9cXG4rXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bnAtXFx1MDAzZW9uZXN0ZXBfd29yayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAoc3RydWN0IG5ldGNfcG9ydCAqbnAsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHU2NCB0c3RhbXApXFxuK3tcXG4rXFx0dTE2IGNvcnJlY3Rpb25fb2Zmc2V0ID0gTkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNlY29ycmVjdGlvbl9vZmZzZXQ7XFxuK1xcdHUxNiB0aW1lc3RhbXBfb2Zmc2V0ID0gTkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNldGltZXN0YW1wX29mZnNldDtcXG4rXFx0Ym9vbCBpc191ZHAgPSBORVRDX1NLQl9DQihza2IpLVxcdTAwM2Vpc191ZHA7XFxuK1xcdHU4ICpwa3RfaGRyID0gc2tiX21hY19oZWFkZXIoc2tiKTtcXG4rXFx0dTY0IHNlYztcXG4rXFx0dTMyIG5zO1xcbitcXG4rXFx0TkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNldHN0YW1wID0gdHN0YW1wO1xcbitcXHRORVRDX1NLQl9DQihza2IpLVxcdTAwM2VwdHBfZmxhZyA9IE5FVENfUFRQX0ZMQUdfT05FU1RFUDtcXG4rXFxuK1xcdC8qIFVwZGF0ZSBvcmlnaW5UaW1lc3RhbXAgZmllbGQgb2YgU3luYyBwYWNrZXRcXG4rXFx0ICogLSA0OCBiaXRzIHNlY29uZHMgZmllbGRcXG4rXFx0ICogLSAzMiBiaXRzIG5hbm9zZWNvbmRzIGZpZWxkXFxuK1xcdCAqL1xcbitcXHRzZWMgPSBkaXZfdTY0X3JlbSh0c3RhbXAsIE5TRUNfUEVSX1NFQywgXFx1MDAyNm5zKTtcXG4rXFx0cHV0X3VuYWxpZ25lZF9iZTE2KChzZWMgXFx1MDAzZVxcdTAwM2UgMzIpIFxcdTAwMjYgMHhmZmZmLCBwa3RfaGRyICsgdGltZXN0YW1wX29mZnNldCk7XFxuK1xcdHB1dF91bmFsaWduZWRfYmUzMihzZWMgXFx1MDAyNiAweGZmZmZmZmZmLCBwa3RfaGRyICsgdGltZXN0YW1wX29mZnNldCArIDIpO1xcbitcXHRwdXRfdW5hbGlnbmVkX2JlMzIobnMsIHBrdF9oZHIgKyB0aW1lc3RhbXBfb2Zmc2V0ICsgNik7XFxuK1xcbitcXHRuZXRjX3BvcnRfc2V0X29uZXN0ZXBfY29udHJvbChucCwgaXNfdWRwLCBjb3JyZWN0aW9uX29mZnNldCk7XFxuK1xcbitcXHQvKiBPcnBoYW4gdGhlIHNrYiB0byByZWxlYXNlIHRoZSBzb2NrZXQgc2VuZCBidWZmZXIgcXVvdGEgaW1tZWRpYXRlbHkuXFxuK1xcdCAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIHNvY2tfd2ZyZWUoKSBvbmx5IHVwZGF0ZXMgc2tfd21lbV9hbGxvYyBhbmRcXG4rXFx0ICogZG9lcyBub3QgdG91Y2ggc2tiLVxcdTAwM2VkYXRhLiBBZnRlciBza2Jfb3JwaGFuKCksIHdlIGluc3RhbGwgb3VyIG93blxcbitcXHQgKiBkZXN0cnVjdG9yIHNvIHRoYXQgd2hlbiB0aGUgY29uZHVpdCBkcml2ZXIgZnJlZXMgdGhlIHNrYiBhZnRlciBUWFxcbitcXHQgKiBjb21wbGV0aW9uLCB3ZSBnZXQgbm90aWZpZWQgdG8gc2VuZCB0aGUgbmV4dCBxdWV1ZWQgU3luYyBwYWNrZXQuXFxuK1xcdCAqL1xcbitcXHRza2Jfb3JwaGFuKHNrYik7XFxuK1xcdHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGVzdHJ1Y3Rvcl9hcmcgPSBucDtcXG4rXFx0c2tiLVxcdTAwM2VkZXN0cnVjdG9yID0gbmV0Y19vbmVzdGVwX3NrYl9kZXN0cnVjdG9yO1xcbit9XFxuK1xcbit2b2lkIG5ldGNfcG9ydF9vbmVzdGVwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRjX3BvcnQgKm5wID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjX3BvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBvbmVzdGVwX3dvcmspO1xcbitcXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBucC1cXHUwMDNlc3dpdGNoX3ByaXY7XFxuK1xcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YTtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0dTY0IHRzdGFtcDtcXG4rXFxuK1xcdC8qIERlcXVldWUgdGhlIG5leHQgcGVuZGluZyBza2Igd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgaW4tZmxpZ2h0IHNsb3QsXFxuK1xcdCAqIHNvIGEgbmV3bHkgYXJyaXZpbmcgb25lLXN0ZXAgU3luYyBjYW5ub3QganVtcCBhaGVhZCBvZiBpdC4gT25seVxcbitcXHQgKiByZWxlYXNlIHRoZSBzbG90IHdoZW4gdGhlIHF1ZXVlIGlzIGVtcHR5LiBUaGlzIGtlZXBzIG9yZGVyaW5nIGFuZFxcbitcXHQgKiBjbG9zZXMgdGhlIGVucXVldWUvd2FrZXVwIHJhY2UuXFxuK1xcdCAqL1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5wLVxcdTAwM2VwdHBfbG9jayk7XFxuK1xcdHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNm5wLVxcdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSk7XFxuK1xcdGlmICghc2tiKSB7XFxuK1xcdFxcdF9fY2xlYXJfYml0KE5FVENfRkxBR19PTkVTVEVQX0lOX1BST0dSRVNTLCBcXHUwMDI2bnAtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5wLVxcdTAwM2VwdHBfbG9jayk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnAtXFx1MDAzZXB0cF9sb2NrKTtcXG4rXFxuK1xcdHRzdGFtcCA9IG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZShwcml2LVxcdTAwM2V0bXJfZGV2KTtcXG4rXFx0aWYgKCF0c3RhbXApIHtcXG4rXFx0XFx0LyogVGhlIFBUUCB0aW1lciBpcyBub3QgYXZhaWxhYmxlLCBzbyB0aGVyZSBpcyBubyBjb3JyZWN0XFxuK1xcdFxcdCAqIHRpbWVzdGFtcCB0byBwcm9ncmFtLiBEcm9wIHRoaXMgZnJhbWUgYW5kIHJlLWtpY2sgdG9cXG4rXFx0XFx0ICogcHJvY2VzcyB0aGUgcmVtYWluaW5nIHF1ZXVlZCBmcmFtZXMgKG9yIHJlbGVhc2UgdGhlIHNsb3QpLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKCkgaGFzIG5vdCBydW4gZm9yIHRoaXMgc2tiIHlldCwgc29cXG4rXFx0XFx0ICogbmV0Y19vbmVzdGVwX3NrYl9kZXN0cnVjdG9yKCkgaXMgbm90IGluc3RhbGxlZCBvbiBpdC4gRnJlZWluZ1xcbitcXHRcXHQgKiBpdCB0aGVyZWZvcmUgZG9lcyBub3QgcmVzY2hlZHVsZSBvbmVzdGVwX3dvcmssIHNvIHRoZSB3b3JrXFxuK1xcdFxcdCAqIG11c3QgYmUgcmVzY2hlZHVsZWQgZXhwbGljaXRseSB0byBrZWVwIGRyYWluaW5nIHRoZSBxdWV1ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIlBvcnQgJWQgUFRQIHRpbWVyIHVuYXZhaWxhYmxlLCBkcm9wIFN5bmNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBucC1cXHUwMDNlZHAtXFx1MDAzZWluZGV4KTtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNm5wLVxcdTAwM2VvbmVzdGVwX3dvcmspO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFJldXNlIHRoZSBvZmZzZXRzIGNhY2hlZCBhdCBlbnF1ZXVlIHRpbWU7IG9ubHkgdGhlIHRpbWVzdGFtcCBpc1xcbitcXHQgKiByZWFkIGZyZXNoIHNvIGl0IHJlZmxlY3RzIHRoZSBhY3R1YWwgVFggbW9tZW50LlxcbitcXHQgKi9cXG4rXFx0bmV0Y19wb3J0X3Byb2dyYW1fb25lc3RlcChucCwgc2tiLCB0c3RhbXApO1xcbitcXG4rXFx0LyogVGFnIGFuZCBoYW5kIHRoZSBmcmFtZSBkaXJlY3RseSB0byB0aGUgY29uZHVpdCB2aWEgdGhlIHRhZ2dlcixcXG4rXFx0ICogYnlwYXNzaW5nIGRzYV91c2VyX3htaXQoKSBzbyB0aGUgVFggc3RhdHMgYXJlIG5vdCBjb3VudGVkIHR3aWNlLlxcbitcXHQgKi9cXG4rXFx0dGFnZ2VyX2RhdGEgPSBwcml2LVxcdTAwM2Vkcy1cXHUwMDNldGFnZ2VyX2RhdGE7XFxuK1xcdHRhZ2dlcl9kYXRhLVxcdTAwM2VvbmVzdGVwX3N5bmNfeG1pdChza2IsIG5wLVxcdTAwM2VkcC1cXHUwMDNldXNlcik7XFxuK31cXG4rXFxuK3N0cnVjdCBza19idWZmICpuZXRjX29uZXN0ZXBfc3luY19oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XFxuK1xcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHR1NjQgdHN0YW1wO1xcbitcXG4rXFx0LyogU2VyaWFsaXplIG9uZS1zdGVwIFN5bmMgcGFja2V0czogb25seSBvbmUgY2FuIGJlIGluLWZsaWdodCBhdCBhXFxuK1xcdCAqIHRpbWUgYmVjYXVzZSB0aGUgU0lOR0xFX1NURVAgcmVnaXN0ZXIgaXMgc2hhcmVkIGFuZCBtdXN0IG1hdGNoIHRoZVxcbitcXHQgKiBwYWNrZXQgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkLiBDbGFpbSB0aGUgaW4tZmxpZ2h0IHNsb3QgdW5kZXJcXG4rXFx0ICogcHRwX2xvY2suIElmIGFub3RoZXIgb25lLXN0ZXAgU3luYyBpcyBhbHJlYWR5IGluLWZsaWdodCwgcXVldWUgdGhpc1xcbitcXHQgKiBza2IgYW5kIHJldHVybiBOVUxMOyBvd25lcnNoaXAgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHF1ZXVlLCBzbyBub1xcbitcXHQgKiBleHRyYSByZWZlcmVuY2UgaXMgbmVlZGVkIGFuZCBuZXRjX3htaXQoKSBzdG9wcyBwcm9jZXNzaW5nIGl0LlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZucC1cXHUwMDNlcHRwX2xvY2spO1xcbitcXHRpZiAodGVzdF9iaXQoTkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MsIFxcdTAwMjZucC1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5wLVxcdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSwgc2tiKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5wLVxcdTAwM2VwdHBfbG9jayk7XFxuK1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0dHN0YW1wID0gbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHByaXYtXFx1MDAzZXRtcl9kZXYpO1xcbitcXHRpZiAoIXRzdGFtcCkge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnAtXFx1MDAzZXB0cF9sb2NrKTtcXG4rXFxuK1xcdFxcdC8qIFRoaXMgaXMgYSB2YWxpZCBvbmUtc3RlcCBTeW5jIGZyYW1lLCBidXQgdGhlIFBUUCB0aW1lciBpc1xcbitcXHRcXHQgKiBub3QgYXZhaWxhYmxlLCBzbyB0aGVyZSBpcyBubyBjb3JyZWN0IHRpbWVzdGFtcCB0byBwcm9ncmFtLlxcbitcXHRcXHQgKiBEcm9wIHRoZSBmcmFtZSByYXRoZXIgdGhhbiB0cmFuc21pdCBhIFN5bmMgd2l0aCBhIGJvZ3VzXFxuK1xcdFxcdCAqIGNvcnJlY3Rpb24gZmllbGQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJQb3J0ICVkIFBUUCB0aW1lciB1bmF2YWlsYWJsZSwgZHJvcCBTeW5jXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgbnAtXFx1MDAzZWRwLVxcdTAwM2VpbmRleCk7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdF9fc2V0X2JpdChORVRDX0ZMQUdfT05FU1RFUF9JTl9QUk9HUkVTUywgXFx1MDAyNm5wLVxcdTAwM2VmbGFncyk7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZucC1cXHUwMDNlcHRwX2xvY2spO1xcbitcXG4rXFx0LyogV2Ugb3duIHRoZSBpbi1mbGlnaHQgc2xvdC4gUHJvZ3JhbSB0aGUgcmVnaXN0ZXIgYW5kIGluc3RhbGwgdGhlXFxuK1xcdCAqIGRlc3RydWN0b3IuXFxuK1xcdCAqL1xcbitcXHRuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKG5wLCBza2IsIHRzdGFtcCk7XFxuK1xcbitcXHRyZXR1cm4gc2tiO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoLmggYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaC5oXFxuaW5kZXggMzA1ZjJhOTJlMmY5YS4uMjk2ZGYxZDcyMzMzZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2guaFxcbkBAIC01Nyw2ICs1Nyw3IEBAIHN0cnVjdCBuZXRjX3N3aXRjaDtcXG4gXFxuIHN0cnVjdCBuZXRjX3N3aXRjaF9pbmZvIHtcXG4gXFx0dTMyIG51bV9wb3J0cztcXG4rXFx0dTMyIHRtcl9kZXZmbjtcXG4gXFx0dm9pZCAoKnBoeWxpbmtfZ2V0X2NhcHMpKGludCBwb3J0LCBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyk7XFxuIH07XFxuIFxcbkBAIC02Niw5ICs2NywyMyBAQCBzdHJ1Y3QgbmV0Y19wb3J0X2NhcHMge1xcbiBcXHR1MzIgcHNldWRvX2xpbms6MTtcXG4gfTtcXG4gXFxuK2VudW0gbmV0Y19wdHBfdHlwZSB7XFxuK1xcdE5FVENfUFRQX0wyLFxcbitcXHRORVRDX1BUUF9MNF9JUFY0X0VWRU5ULFxcbitcXHRORVRDX1BUUF9MNF9JUFY0X0dFTkVSQUwsXFxuK1xcdE5FVENfUFRQX0w0X0lQVjZfRVZFTlQsXFxuK1xcdE5FVENfUFRQX0w0X0lQVjZfR0VORVJBTCxcXG4rXFx0TkVUQ19QVFBfTUFYLFxcbit9O1xcbitcXG4gZW51bSBuZXRjX2hvc3RfcmVhc29uIHtcXG4gXFx0LyogU29mdHdhcmUgZGVmaW5lZCBob3N0IHJlYXNvbnMgKi9cXG4gXFx0TkVUQ19IUl9IT1NUX0ZMT09EID0gOCxcXG4rXFx0TkVUQ19IUl9QVFBfVFJBUCAgID0gOSxcXG4rfTtcXG4rXFxuK2VudW0gbmV0Y19wb3J0X2ZsYWdzIHtcXG4rXFx0TkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MgPSAwLFxcbiB9O1xcbiBcXG4gc3RydWN0IG5ldGNfcG9ydCB7XFxuQEAgLTg0LDcgKzk5LDE5IEBAIHN0cnVjdCBuZXRjX3BvcnQge1xcbiBcXHR1MTYgdWM6MTtcXG4gXFx0dTE2IG1jOjE7XFxuIFxcdHUxNiBwdmlkO1xcbi1cXHRzdHJ1Y3QgaXBmdF9lbnRyeV9kYXRhICpob3N0X2Zsb29kO1xcbitcXHR1MzIgaXBmdF9oZl9laWQ7XFxuK1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHQvKiBTZXJpYWxpemUgUFRQIG9wZXJhdGlvbnMgKi9cXG4rXFx0c3BpbmxvY2tfdCBwdHBfbG9jaztcXG4rXFx0Lyogc2tiIHF1ZXVlIGZvciB0d28tc3RlcCB0aW1lc3RhbXAgZnJhbWVzICovXFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWQgc2tiX3R4dHN0YW1wX3F1ZXVlO1xcbitcXHQvKiBza2IgcXVldWUgZm9yIG9uZS1zdGVwIHN5bmMgZnJhbWVzICovXFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWQgc2tiX29uZXN0ZXBfcXVldWU7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdCBvbmVzdGVwX3dvcms7XFxuK1xcdGludCBwdHBfdHhfdHlwZTtcXG4rXFx0aW50IHB0cF9yeF9maWx0ZXI7XFxuK1xcdHUzMiBwdHBfaXBmdF9laWRbTkVUQ19QVFBfTUFYXTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBuZXRjX3N3aXRjaF9yZWdzIHtcXG5AQCAtMTM5LDYgKzE2Niw3IEBAIHN0cnVjdCBuZXRjX3N3aXRjaCB7XFxuIFxcdHUzMiBudW1fYnA7XFxuIFxcbiBcXHRzdHJ1Y3QgYnB0X2NmZ2VfZGF0YSAqYnB0X2xpc3Q7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICp0bXJfZGV2OyAvKiBUaGUgUFRQIFRpbWVyIFBDSSBkZXZpY2UgKi9cXG4gfTtcXG4gXFxuICNkZWZpbmUgTkVUQ19QUklWKGRzKVxcdFxcdFxcdCgoc3RydWN0IG5ldGNfc3dpdGNoICopKChkcyktXFx1MDAzZXByaXYpKVxcbkBAIC0xODcsNiArMjE1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG5ldGNfZGVsX3ZsYW5fZW50cnkoc3RydWN0IG5ldGNfdmxhbl9lbnRyeSAqZW50cnkpXFxuIH1cXG4gXFxuIGludCBuZXRjX3N3aXRjaF9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpO1xcbit2b2lkIG5ldGNfbWFjX3BvcnRfd3Ioc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsIHUzMiB2YWwpO1xcbiBcXG4gLyogZXRodG9vbCBBUElzICovXFxuIHZvaWQgbmV0Y19wb3J0X2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbkBAIC0yMDMsNCArMjMyLDIyIEBAIHZvaWQgbmV0Y19wb3J0X2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdFxcdCAgIHUzMiBzc2V0LCB1OCAqZGF0YSk7XFxuIHZvaWQgbmV0Y19wb3J0X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU2NCAqZGF0YSk7XFxuIFxcbisvKiBQVFAgQVBJcyAqL1xcbitpbnQgbmV0Y19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0X2lkLFxcbitcXHRcXHQgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKTtcXG4raW50IG5ldGNfcG9ydF9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydF9pZCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4raW50IG5ldGNfcG9ydF9od3RzdGFtcF9nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydF9pZCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyk7XFxuK3ZvaWQgbmV0Y190d29zdGVwX3RzdGFtcF9oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCB1OCB0c19yZXFfaWQsIHU2NCB0cyk7XFxuK2Jvb2wgbmV0Y19wb3J0X3J4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0eXBlKTtcXG4rdm9pZCBuZXRjX3BvcnRfdHh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydF9pZCxcXG4rXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK3ZvaWQgbmV0Y19wb3J0X29uZXN0ZXBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbitzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19vbmVzdGVwX3N5bmNfaGFuZGxlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpO1xcbitcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoX2h3LmggYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oXFxuaW5kZXggMTQwNGFlNDFjN2JjYi4uMzdkMWRkN2VjMmM3ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2hfaHcuaFxcbkBAIC0yMDMsNiArMjAzLDExIEBAIGVudW0gbmV0Y19zdGdfc3RhZ2Uge1xcbiAjZGVmaW5lICAgU1NQXzEwTVxcdFxcdFxcdDFcXG4gI2RlZmluZSAgIFNTUF8xR1xcdFxcdFxcdDJcXG4gXFxuKyNkZWZpbmUgTkVUQ19QTV9TSU5HTEVfU1RFUChhKVxcdFxcdCgweDEwYzAgKyAoYSkgKiAweDQwMClcXG4rI2RlZmluZSAgUE1fU0lOR0xFX1NURVBfQ0hcXHRcXHRCSVQoNilcXG4rI2RlZmluZSAgUE1fU0lOR0xFX1NURVBfT0ZGU0VUXFx0XFx0R0VOTUFTSygxNSwgNylcXG4rI2RlZmluZSAgUE1fU0lOR0xFX1NURVBfRU5cXHRcXHRCSVQoMzEpXFxuK1xcbiAvKiBQb3J0IE1BQyAwLzEgUmVjZWl2ZSBFdGhlcm5ldCBPY3RldHMgQ291bnRlciAqL1xcbiAjZGVmaW5lIE5FVENfUE1fUkVPQ1QoYSlcXHRcXHQoMHgxMTAwICsgKGEpICogMHg0MDApXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9wdHBfbmV0Yy5jIGIvZHJpdmVycy9wdHAvcHRwX25ldGMuY1xcbmluZGV4IDk0ZTk1MmVlNjk5MDIuLmYyYjc3YmQ1YWYwMTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX25ldGMuY1xcbisrKyBiL2RyaXZlcnMvcHRwL3B0cF9uZXRjLmNcXG5AQCAtMTI3LDYgKzEyNywxNyBAQCBzdHJ1Y3QgbmV0Y190aW1lciB7XFxuIFxcbiAjZGVmaW5lIG5ldGNfdGltZXJfcmQocCwgbylcXHRcXHRuZXRjX3JlYWQoKHApLVxcdTAwM2ViYXNlICsgKG8pKVxcbiAjZGVmaW5lIG5ldGNfdGltZXJfd3IocCwgbywgdilcXHRcXHRuZXRjX3dyaXRlKChwKS1cXHUwMDNlYmFzZSArIChvKSwgdilcXG4rXFxuKy8qIFRoZSA2NC1iaXQgdGltZXIgcmVnaXN0ZXJzIGNvbnNpc3Qgb2YgYSBsb3cgKEwpIGFuZCBoaWdoIChIKSByZWdpc3RlciBwYWlyLlxcbisgKiBIYXJkd2FyZSByZXF1aXJlcyBhIHN0cmljdCBhY2Nlc3Mgb3JkZXI6IGZvciB3cml0ZXMsIFRNUl94eHhfTCBtdXN0IGJlXFxuKyAqIHdyaXR0ZW4gZmlyc3QsIHdoaWNoIGxhdGNoZXMgdGhlIHZhbHVlIGludG8gYSBzaGFkb3cgcmVnaXN0ZXI7IHRoZSB3cml0ZVxcbisgKiB0byBUTVJfeHh4X0ggdGhlbiBhdG9taWNhbGx5IHRyYW5zZmVycyBib3RoIHNoYWRvdyByZWdpc3RlcnMgaW50byB0aGUgbGl2ZVxcbisgKiBjb3VudGVyLiBGb3IgcmVhZHMsIFRNUl94eHhfTCBtdXN0IGJlIHJlYWQgZmlyc3QgdG8gY2FwdHVyZSBhIGNvaGVyZW50XFxuKyAqIHNuYXBzaG90LiBpb3dyaXRlNjRfbG9faGkoKSBhbmQgaW9yZWFkNjRfbG9faGkoKSBlbmZvcmNlIHRoaXMgTC1iZWZvcmUtSFxcbisgKiBvcmRlcmluZy5cXG4rICovXFxuKyNkZWZpbmUgbmV0Y190aW1lcl9yZDY0KHAsIG8pXFx0XFx0aW9yZWFkNjRfbG9faGkoKHApLVxcdTAwM2ViYXNlICsgKG8pKVxcbisjZGVmaW5lIG5ldGNfdGltZXJfd3I2NChwLCBvLCB2KVxcdGlvd3JpdGU2NF9sb19oaSh2LCAocCktXFx1MDAzZWJhc2UgKyAobykpXFxuICNkZWZpbmUgcHRwX3RvX25ldGNfdGltZXIocHRwKVxcdFxcdGNvbnRhaW5lcl9vZigocHRwKSwgc3RydWN0IG5ldGNfdGltZXIsIGNhcHMpXFxuIFxcbiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGltZXJfY2xrX3NyY1tdID0ge1xcbkBAIC0xMzYsNjYgKzE0Nyw0NSBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGltZXJfY2xrX3NyY1tdID0ge1xcbiBcXG4gc3RhdGljIHZvaWQgbmV0Y190aW1lcl9jbnRfd3JpdGUoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsIHU2NCBucylcXG4ge1xcbi1cXHR1MzIgdG1yX2NudF9oID0gdXBwZXJfMzJfYml0cyhucyk7XFxuLVxcdHUzMiB0bXJfY250X2wgPSBsb3dlcl8zMl9iaXRzKG5zKTtcXG4tXFxuLVxcdC8qIFdyaXRlcyB0byB0aGUgVE1SX0NOVF9MIHJlZ2lzdGVyIGNvcGllcyB0aGUgd3JpdHRlbiB2YWx1ZVxcbi1cXHQgKiBpbnRvIHRoZSBzaGFkb3cgVE1SX0NOVF9MIHJlZ2lzdGVyLiBXcml0ZXMgdG8gdGhlIFRNUl9DTlRfSFxcbi1cXHQgKiByZWdpc3RlciBjb3BpZXMgdGhlIHZhbHVlcyB3cml0dGVuIGludG8gdGhlIHNoYWRvdyBUTVJfQ05UX0hcXG4tXFx0ICogcmVnaXN0ZXIuIENvbnRlbnRzIG9mIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIGFyZSBjb3BpZWQgaW50b1xcbi1cXHQgKiB0aGUgVE1SX0NOVF9MIGFuZCBUTVJfQ05UX0ggcmVnaXN0ZXJzIGZvbGxvd2luZyBhIHdyaXRlIGludG9cXG4tXFx0ICogdGhlIFRNUl9DTlRfSCByZWdpc3Rlci4gU28gdGhlIHVzZXIgbXVzdCB3cml0ZXMgdG8gVE1SX0NOVF9MXFxuLVxcdCAqIHJlZ2lzdGVyIGZpcnN0LiBPdGhlciBIL0wgcmVnaXN0ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lXFxuLVxcdCAqIGJlaGF2aW9yLlxcbi1cXHQgKi9cXG4tXFx0bmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9DTlRfTCwgdG1yX2NudF9sKTtcXG4tXFx0bmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9DTlRfSCwgdG1yX2NudF9oKTtcXG4rXFx0bmV0Y190aW1lcl93cjY0KHByaXYsIE5FVENfVE1SX0NOVF9MLCBucyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB1NjQgbmV0Y190aW1lcl9vZmZzZXRfcmVhZChzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdilcXG4ge1xcbi1cXHR1MzIgdG1yX29mZl9sLCB0bXJfb2ZmX2g7XFxuLVxcdHU2NCBvZmZzZXQ7XFxuLVxcbi1cXHR0bXJfb2ZmX2wgPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX09GRl9MKTtcXG4tXFx0dG1yX29mZl9oID0gbmV0Y190aW1lcl9yZChwcml2LCBORVRDX1RNUl9PRkZfSCk7XFxuLVxcdG9mZnNldCA9ICgoKHU2NCl0bXJfb2ZmX2gpIFxcdTAwM2NcXHUwMDNjIDMyKSB8IHRtcl9vZmZfbDtcXG4tXFxuLVxcdHJldHVybiBvZmZzZXQ7XFxuK1xcdHJldHVybiBuZXRjX3RpbWVyX3JkNjQocHJpdiwgTkVUQ19UTVJfT0ZGX0wpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuZXRjX3RpbWVyX29mZnNldF93cml0ZShzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdiwgdTY0IG9mZnNldClcXG4ge1xcbi1cXHR1MzIgdG1yX29mZl9oID0gdXBwZXJfMzJfYml0cyhvZmZzZXQpO1xcbi1cXHR1MzIgdG1yX29mZl9sID0gbG93ZXJfMzJfYml0cyhvZmZzZXQpO1xcbi1cXG4tXFx0bmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9PRkZfTCwgdG1yX29mZl9sKTtcXG4tXFx0bmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9PRkZfSCwgdG1yX29mZl9oKTtcXG4rXFx0bmV0Y190aW1lcl93cjY0KHByaXYsIE5FVENfVE1SX09GRl9MLCBvZmZzZXQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdTY0IG5ldGNfdGltZXJfY3VyX3RpbWVfcmVhZChzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdilcXG4ge1xcbi1cXHR1MzIgdGltZV9oLCB0aW1lX2w7XFxuLVxcdHU2NCBucztcXG4rXFx0cmV0dXJuIG5ldGNfdGltZXJfcmQ2NChwcml2LCBORVRDX1RNUl9DVVJfVElNRV9MKTtcXG4rfVxcbiBcXG4tXFx0LyogVGhlIHVzZXIgc2hvdWxkIHJlYWQgTkVUQ19UTVJfQ1VSX1RJTUVfTCBmaXJzdCB0b1xcbi1cXHQgKiBnZXQgY29ycmVjdCBjdXJyZW50IHRpbWUuXFxuLVxcdCAqL1xcbi1cXHR0aW1lX2wgPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0NVUl9USU1FX0wpO1xcbi1cXHR0aW1lX2ggPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0NVUl9USU1FX0gpO1xcbi1cXHRucyA9ICh1NjQpdGltZV9oIFxcdTAwM2NcXHUwMDNjIDMyIHwgdGltZV9sO1xcbit1NjQgbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBuZXRjX3RpbWVyICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHR1NjQgY3VyX3RpbWU7XFxuIFxcbi1cXHRyZXR1cm4gbnM7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRjdXJfdGltZSA9IG5ldGNfdGltZXJfY3VyX3RpbWVfcmVhZChwcml2KTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIGN1cl90aW1lO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZSk7XFxuIFxcbiBzdGF0aWMgdm9pZCBuZXRjX3RpbWVyX2FsYXJtX3dyaXRlKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2LFxcbiBcXHRcXHRcXHRcXHQgICB1NjQgYWxhcm0sIGludCBpbmRleClcXG4ge1xcbi1cXHR1MzIgYWxhcm1faCA9IHVwcGVyXzMyX2JpdHMoYWxhcm0pO1xcbi1cXHR1MzIgYWxhcm1fbCA9IGxvd2VyXzMyX2JpdHMoYWxhcm0pO1xcbi1cXG4tXFx0bmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9BTEFSTV9MKGluZGV4KSwgYWxhcm1fbCk7XFxuLVxcdG5ldGNfdGltZXJfd3IocHJpdiwgTkVUQ19UTVJfQUxBUk1fSChpbmRleCksIGFsYXJtX2gpO1xcbitcXHRuZXRjX3RpbWVyX3dyNjQocHJpdiwgTkVUQ19UTVJfQUxBUk1fTChpbmRleCksIGFsYXJtKTtcXG4gfVxcbiBcXG4gc3RhdGljIHUzMiBuZXRjX3RpbWVyX2dldF9pbnRlZ3JhbF9wZXJpb2Qoc3RydWN0IG5ldGNfdGltZXIgKnByaXYpXFxuQEAgLTQ5NywyMiArNDg3LDE5IEBAIHN0YXRpYyB2b2lkIG5ldGNfdGltZXJfaGFuZGxlX2V0dHNfZXZlbnQoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsIGludCBpbmRleCxcXG4gXFx0XFx0XFx0XFx0XFx0IGJvb2wgdXBkYXRlX2V2ZW50KVxcbiB7XFxuIFxcdHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgZXZlbnQ7XFxuLVxcdHUzMiBldHRzX2wgPSAwLCBldHRzX2ggPSAwO1xcbitcXHR1NjQgZXR0cyA9IDA7XFxuIFxcbi1cXHR3aGlsZSAobmV0Y190aW1lcl9yZChwcml2LCBORVRDX1RNUl9TVEFUKSBcXHUwMDI2IFRNUl9TVEFUX0VUU19WTEQoaW5kZXgpKSB7XFxuLVxcdFxcdGV0dHNfbCA9IG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfRVRUU19MKGluZGV4KSk7XFxuLVxcdFxcdGV0dHNfaCA9IG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfRVRUU19IKGluZGV4KSk7XFxuLVxcdH1cXG4rXFx0d2hpbGUgKG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfU1RBVCkgXFx1MDAyNiBUTVJfU1RBVF9FVFNfVkxEKGluZGV4KSlcXG4rXFx0XFx0ZXR0cyA9IG5ldGNfdGltZXJfcmQ2NChwcml2LCBORVRDX1RNUl9FVFRTX0woaW5kZXgpKTtcXG4gXFxuIFxcdC8qIEludmFsaWQgdGltZSBzdGFtcCAqL1xcbi1cXHRpZiAoIWV0dHNfbCBcXHUwMDI2XFx1MDAyNiAhZXR0c19oKVxcbitcXHRpZiAoIWV0dHMpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmICh1cGRhdGVfZXZlbnQpIHtcXG4gXFx0XFx0ZXZlbnQudHlwZSA9IFBUUF9DTE9DS19FWFRUUztcXG4gXFx0XFx0ZXZlbnQuaW5kZXggPSBpbmRleDtcXG4tXFx0XFx0ZXZlbnQudGltZXN0YW1wID0gKHU2NClldHRzX2ggXFx1MDAzY1xcdTAwM2MgMzI7XFxuLVxcdFxcdGV2ZW50LnRpbWVzdGFtcCB8PSBldHRzX2w7XFxuK1xcdFxcdGV2ZW50LnRpbWVzdGFtcCA9IGV0dHM7XFxuIFxcdFxcdHB0cF9jbG9ja19ldmVudChwcml2LVxcdTAwM2VjbG9jaywgXFx1MDAyNmV2ZW50KTtcXG4gXFx0fVxcbiB9XFxuQEAgLTgwMiw3ICs3ODksNiBAQCBzdGF0aWMgaW50IG5ldGNfdGltZXJfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRpZiAoIXByaXYpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0cGNpZV9mbHIocGRldik7XFxuIFxcdGVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFxcXCJGYWlsZWQgdG8gZW5hYmxlIGRldmljZVxcXFxuXFxcIik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHNhL3RhZ19uZXRjLmggYi9pbmNsdWRlL2xpbnV4L2RzYS90YWdfbmV0Yy5oXFxuaW5kZXggZmU5NjQ3MjJlNWIwMy4uMjI5YzcwY2I3YThhYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RzYS90YWdfbmV0Yy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9kc2EvdGFnX25ldGMuaFxcbkBAIC0xMCw1ICsxMCw0NyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBORVRDX1RBR19NQVhfTEVOXFx0XFx0XFx0MTRcXG4rI2RlZmluZSBORVRDX1RBR19UU19SRVFfSURcXHRcXHRcXHRHRU5NQVNLKDMsIDApXFxuKyNkZWZpbmUgTkVUQ19QVFBfRkxBR19PTkVTVEVQXFx0XFx0XFx0QklUKDApXFxuKyNkZWZpbmUgTkVUQ19QVFBfRkxBR19UV09TVEVQXFx0XFx0XFx0QklUKDEpXFxuK1xcbitzdHJ1Y3QgbmV0Y19za2JfY2Ige1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcHRwX3R4X3RpbWU7XFxuK1xcdHU2NCB0c3RhbXA7XFxuK1xcdHU4IHB0cF9mbGFnO1xcbitcXHR1OCB0c19yZXFfaWQ7XFxuK1xcdC8qIE9uZS1zdGVwIFN5bmMgcGFyc2luZyByZXN1bHRzLCBjb21wdXRlZCBpbiBuZXRjX3BvcnRfdHh0c3RhbXAoKVxcbitcXHQgKiBhbmQgcmV1c2VkIGluIHRoZSB0YWdnZXIgeG1pdCBwYXRoIGFuZCB0aGUgZGVmZXJyZWQgd29yaywgdG8gYXZvaWRcXG4rXFx0ICogcmUtcGFyc2luZyB0aGUgUFRQIGhlYWRlci4gVmFsaWQgb25seSB3aGlsZVxcbitcXHQgKiBwdHBfZmxhZyA9PSBORVRDX1BUUF9GTEFHX09ORVNURVAuXFxuK1xcdCAqL1xcbitcXHR1MTYgY29ycmVjdGlvbl9vZmZzZXQ7XFxuK1xcdHUxNiB0aW1lc3RhbXBfb2Zmc2V0O1xcbitcXHRib29sIGlzX3VkcDtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgTkVUQ19TS0JfQ0Ioc2tiKVxcdCgoc3RydWN0IG5ldGNfc2tiX2NiICopKChza2IpLVxcdTAwM2VjYikpXFxuK1xcbisvKipcXG4rICogc3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEgLSBORVRDIHRhZ2dlci9zd2l0Y2gtZHJpdmVyIHNoYXJlZCBvcGVyYXRpb25zXFxuKyAqIEB0d29zdGVwX3RzdGFtcF9oYW5kbGVyOiBDYWxsZWQgYnkgdGhlIHRhZ2dlciB3aGVuIGEgdHdvLXN0ZXAgdHJhbnNtaXRcXG4rICpcXHR0aW1lc3RhbXAgcmVzcG9uc2UgaXMgcmVjZWl2ZWQsIHRvIGRlbGl2ZXIgdGhlIHRpbWVzdGFtcCB0byB0aGVcXG4rICpcXHRzd2l0Y2ggZHJpdmVyLlxcbisgKiBAb25lc3RlcF9zeW5jX2hhbmRsZXI6IENhbGxlZCBmcm9tIHRoZSB0YWdnZXIgeG1pdCBwYXRoIGZvciBhIG9uZS1zdGVwIFN5bmNcXG4rICpcXHRmcmFtZS4gUmV0dXJucyB0aGUgc2tiIGlmIGl0IGNhbiBiZSB0cmFuc21pdHRlZCBpbW1lZGlhdGVseSAodGhlXFxuKyAqXFx0aW4tZmxpZ2h0IHNsb3QgaGFzIGJlZW4gY2xhaW1lZCBhbmQgUE1fU0lOR0xFX1NURVAgcHJvZ3JhbW1lZCksIG9yIE5VTExcXG4rICpcXHRpZiB0aGUgZnJhbWUgaGFzIGJlZW4gcXVldWVkIGZvciBkZWZlcnJlZCB0cmFuc21pc3Npb24gb3IgZHJvcHBlZC5cXG4rICogQG9uZXN0ZXBfc3luY194bWl0OiBDYWxsZWQgYnkgdGhlIHN3aXRjaCBkcml2ZXIgdG8gdHJhbnNtaXQgYSBkZWZlcnJlZFxcbisgKlxcdG9uZS1zdGVwIFN5bmMgZnJhbWUgZGlyZWN0bHkgdG8gdGhlIGNvbmR1aXQsIGJ5cGFzc2luZyBkc2FfdXNlcl94bWl0KCkuXFxuKyAqL1xcbitzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSB7XFxuK1xcdHZvaWQgKCp0d29zdGVwX3RzdGFtcF9oYW5kbGVyKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgdTggdHNfcmVxX2lkLCB1NjQgdHMpO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqKCpvbmVzdGVwX3N5bmNfaGFuZGxlcikoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRpbnQgcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK1xcdG5ldGRldl90eF90ICgqb25lc3RlcF9zeW5jX3htaXQpKHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuK307XFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2wvbmV0Y19nbG9iYWwuaCBiL2luY2x1ZGUvbGludXgvZnNsL25ldGNfZ2xvYmFsLmhcXG5pbmRleCA1YjhmZjUyOGQzNjk5Li45MTQ0MWNiMzViYzI4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnNsL25ldGNfZ2xvYmFsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzbC9uZXRjX2dsb2JhbC5oXFxuQEAgLTIyLDQgKzIyLDEzIEBAIHN0YXRpYyBpbmxpbmUgdTY0IG5ldGNfcmVhZDY0KHZvaWQgX19pb21lbSAqcmVnKVxcbiBcXHRyZXR1cm4gaW9yZWFkNjQocmVnKTtcXG4gfVxcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX1BUUF9ORVRDX1Y0X1RJTUVSKVxcbit1NjQgbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHN0cnVjdCBwY2lfZGV2ICp0aW1lcl9kZXYpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHU2NCBuZXRjX3RpbWVyX2dldF9jdXJyZW50X3RpbWUoc3RydWN0IHBjaV9kZXYgKnRpbWVyX2RldilcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19uZXRjLmMgYi9uZXQvZHNhL3RhZ19uZXRjLmNcXG5pbmRleCBkZjcyYTYxNzk2YWQ1Li45NGNjYTIwZmZjZGFkIDEwMDY0NFxcbi0tLSBhL25ldC9kc2EvdGFnX25ldGMuY1xcbisrKyBiL25ldC9kc2EvdGFnX25ldGMuY1xcbkBAIC0xNiw2ICsxNiwxMCBAQFxcbiAjZGVmaW5lIE5FVENfVEFHX1RPX1BPUlRcXHRcXHQxXFxuIC8qIFN1YlR5cGUwOiBObyByZXF1ZXN0IHRvIHBlcmZvcm0gdGltZXN0YW1waW5nICovXFxuICNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTBcXHRcXHQwXFxuKy8qIFN1YlR5cGUxOiBSZXF1ZXN0IHRvIHBlcmZvcm0gb25lLXN0ZXAgdGltZXN0YW1waW5nICovXFxuKyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTFcXHRcXHQxXFxuKy8qIFN1YlR5cGUyOiBSZXF1ZXN0IHRvIHBlcmZvcm0gdHdvLXN0ZXAgdGltZXN0YW1waW5nICovXFxuKyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTJcXHRcXHQyXFxuIFxcbiAvKiBUb19Ib3N0IE5YUCBzd2l0Y2ggdGFnICovXFxuICNkZWZpbmUgTkVUQ19UQUdfVE9fSE9TVFxcdFxcdDJcXG5AQCAtMjksNiArMzMsOCBAQFxcbiAvKiBORVRDIHN3aXRjaCB0YWcgbGVuZ3RocyAqL1xcbiAjZGVmaW5lIE5FVENfVEFHX0ZPUldBUkRfTEVOXFx0XFx0NlxcbiAjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUwX0xFTlxcdDZcXG4rI2RlZmluZSBORVRDX1RBR19UUF9TVUJUWVBFMV9MRU5cXHQxMFxcbisjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUyX0xFTlxcdDZcXG4gI2RlZmluZSBORVRDX1RBR19USF9TVUJUWVBFMF9MRU5cXHQ2XFxuICNkZWZpbmUgTkVUQ19UQUdfVEhfU1VCVFlQRTFfTEVOXFx0MTRcXG4gI2RlZmluZSBORVRDX1RBR19USF9TVUJUWVBFMl9MRU5cXHQxNFxcbkBAIC00MCw2ICs0Niw3IEBAXFxuICNkZWZpbmUgTkVUQ19UQUdfSVBWXFx0XFx0XFx0R0VOTUFTSyg0LCAyKVxcbiAjZGVmaW5lIE5FVENfVEFHX1NXSVRDSFxcdFxcdFxcdEdFTk1BU0soMiwgMClcXG4gI2RlZmluZSBORVRDX1RBR19QT1JUXFx0XFx0XFx0R0VOTUFTSyg3LCAzKVxcbisjZGVmaW5lIE5FVENfVEFHX1RJTUVTVEFNUFxcdFxcdEdFTk1BU0soMjksIDApXFxuIFxcbiBzdHJ1Y3QgbmV0Y190YWdfY21uIHtcXG4gXFx0X19iZTE2IHRwaWQ7XFxuQEAgLTQ4LDYgKzU1LDI5IEBAIHN0cnVjdCBuZXRjX3RhZ19jbW4ge1xcbiBcXHR1OCBzd2l0Y2hfcG9ydDtcXG4gfSBfX3BhY2tlZDtcXG4gXFxuK3N0cnVjdCBuZXRjX3RhZ190cF9zdWJ0eXBlMSB7XFxuK1xcdHN0cnVjdCBuZXRjX3RhZ19jbW4gY21uO1xcbitcXHR1OCByZXN2O1xcbitcXHRfX2JlMzIgdGltZXN0YW1wO1xcbit9IF9fcGFja2VkO1xcbitcXG4rc3RydWN0IG5ldGNfdGFnX3RwX3N1YnR5cGUyIHtcXG4rXFx0c3RydWN0IG5ldGNfdGFnX2NtbiBjbW47XFxuK1xcdHU4IHRzX3JlcV9pZDtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuK3N0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMSB7XFxuK1xcdHN0cnVjdCBuZXRjX3RhZ19jbW4gY21uO1xcbitcXHR1OCBob3N0X3JlYXNvbjtcXG4rXFx0X19iZTY0IHRpbWVzdGFtcDtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuK3N0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMiB7XFxuK1xcdHN0cnVjdCBuZXRjX3RhZ19jbW4gY21uO1xcbitcXHR1OCBocl90c3JlcV9pZDtcXG4rXFx0X19iZTY0IHRpbWVzdGFtcDtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuIHN0YXRpYyB2b2lkIG5ldGNfZmlsbF9jb21tb25fdGFnKHN0cnVjdCBuZXRjX3RhZ19jbW4gKnRhZywgdTggdHlwZSxcXG4gXFx0XFx0XFx0XFx0IHU4IHN1YnR5cGUsIHU4IHN3X2lkLCB1OCBwb3J0LCB1OCBpcHYpXFxuIHtcXG5AQCAtOTcsMTUgKzEyNywxMjAgQEAgc3RhdGljIHZvaWQgbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHRORVRDX1RBR19UUF9TVUJUWVBFMF9MRU4pO1xcbiB9XFxuIFxcbi0vKiBDdXJyZW50bHkgb25seSBzdXBwb3J0IFRvX1BvcnQgdGFnLCBzdWJ0eXBlIDAgKi9cXG4rc3RhdGljIHZvaWQgbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHR1MzIgdHMgPSBGSUVMRF9QUkVQKE5FVENfVEFHX1RJTUVTVEFNUCwgTkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNldHN0YW1wKTtcXG4rXFx0c3RydWN0IG5ldGNfdGFnX3RwX3N1YnR5cGUxICp0YWc7XFxuK1xcbitcXHR0YWcgPSBuZXRjX2ZpbGxfY29tbW9uX3RwX3RhZyhza2IsIG5kZXYsIE5FVENfVEFHX1RQX1NVQlRZUEUxLFxcbitcXHRcXHRcXHRcXHQgICAgICBORVRDX1RBR19UUF9TVUJUWVBFMV9MRU4pO1xcbitcXHR0YWctXFx1MDAzZXRpbWVzdGFtcCA9IGh0b25sKHRzKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmUgPSBORVRDX1NLQl9DQihza2IpLVxcdTAwM2VjbG9uZTtcXG4rXFx0dTggdHNfcmVxX2lkID0gTkVUQ19TS0JfQ0IoY2xvbmUpLVxcdTAwM2V0c19yZXFfaWQ7XFxuK1xcdHN0cnVjdCBuZXRjX3RhZ190cF9zdWJ0eXBlMiAqdGFnO1xcbitcXG4rXFx0dGFnID0gbmV0Y19maWxsX2NvbW1vbl90cF90YWcoc2tiLCBuZGV2LCBORVRDX1RBR19UUF9TVUJUWVBFMixcXG4rXFx0XFx0XFx0XFx0ICAgICAgTkVUQ19UQUdfVFBfU1VCVFlQRTJfTEVOKTtcXG4rXFx0dGFnLVxcdTAwM2V0c19yZXFfaWQgPSBGSUVMRF9QUkVQKE5FVENfVEFHX1RTX1JFUV9JRCwgdHNfcmVxX2lkKTtcXG4rfVxcbitcXG4rc3RhdGljIG5ldGRldl90eF90IG5ldGNfb25lc3RlcF9zeW5jX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdC8qIFRoaXMgZGVmZXJyZWQgb25lLXN0ZXAgU3luYyBmcmFtZSBhbHJlYWR5IHdlbnQgdGhyb3VnaFxcbitcXHQgKiBkc2FfdXNlcl94bWl0KCkncyBza2JfZW5zdXJlX3dyaXRhYmxlX2hlYWRfdGFpbCgpIGFuZCBldGhfc2tiX3BhZCgpXFxuK1xcdCAqIGJlZm9yZSBpdCB3YXMgcXVldWVkIGluIG5ldGNfeG1pdCgpLCBhbmQgbm90aGluZyBoYXMgY2xvbmVkIGl0IG9yXFxuK1xcdCAqIHNocnVuayBpdHMgaGVhZC90YWlsIHJvb20gc2luY2UuIFNvIHRoZSBoZWFkL3RhaWwgcm9vbSBpcyBzdGlsbFxcbitcXHQgKiBndWFyYW50ZWVkIGFuZCB0aGUgc2tiIGlzIHN0aWxsIHdyaXRhYmxlOyBvbmx5IHRoZSB0YWcgbmVlZHMgdG8gYmVcXG4rXFx0ICogcHVzaGVkIGJlZm9yZSBoYW5kaW5nIGl0IGRpcmVjdGx5IHRvIHRoZSBjb25kdWl0LCBieXBhc3NpbmdcXG4rXFx0ICogZHNhX3VzZXJfeG1pdCgpIHNvIHRoYXQgZGV2X3N3X25ldHN0YXRzX3R4X2FkZCgpIGlzIG5vdCBpbnZva2VkIGFcXG4rXFx0ICogc2Vjb25kIHRpbWUgZm9yIHRoZSBzYW1lIGZyYW1lLlxcbitcXHQgKi9cXG4rXFx0bmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMShza2IsIGRldik7XFxuK1xcbitcXHRyZXR1cm4gZHNhX2VucXVldWVfc2tiKHNrYiwgZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjX29uZXN0ZXBfc3luY19wcm9jZXNzKHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChuZGV2KTtcXG4rXFx0c3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEgKnRhZ2dlcl9kYXRhO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcXG4rXFxuK1xcdHRhZ2dlcl9kYXRhID0gZHAtXFx1MDAzZWRzLVxcdTAwM2V0YWdnZXJfZGF0YTtcXG4rXFx0aWYgKHVubGlrZWx5KCF0YWdnZXJfZGF0YS1cXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIpKSB7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogRGVjaWRlLCB1bmRlciBwdHBfbG9jaywgd2hldGhlciB0aGlzIG9uZS1zdGVwIFN5bmMgY2FuIGJlIHNlbnRcXG4rXFx0ICogbm93IG9yIG11c3QgYmUgZGVmZXJyZWQuIFJldHVybnMgdGhlIHNrYiAod2l0aCB0aGUgaW4tZmxpZ2h0XFxuK1xcdCAqIHNsb3QgY2xhaW1lZCBhbmQgUE1fU0lOR0xFX1NURVAgYWxyZWFkeSBwcm9ncmFtbWVkKSBmb3JcXG4rXFx0ICogaW1tZWRpYXRlIHRyYW5zbWlzc2lvbiwgb3IgTlVMTCBpZiBpdCB3YXMgcXVldWVkIGZvciBkZWZlcnJlZFxcbitcXHQgKiB0cmFuc21pc3Npb24gb3IgZHJvcHBlZC5cXG4rXFx0ICovXFxuK1xcdG5za2IgPSB0YWdnZXJfZGF0YS1cXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIoZHAtXFx1MDAzZWRzLCBkcC1cXHUwMDNlaW5kZXgsIHNrYik7XFxuK1xcdGlmICh1bmxpa2VseSghbnNrYikpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIG5za2I7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y194bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbi1cXHRuZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUwKHNrYiwgbmRldik7XFxuK1xcdHU4IHB0cF9mbGFnID0gTkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNlcHRwX2ZsYWc7XFxuK1xcbitcXHQvKiBGYXN0IHBhdGg6IHRoZSBvdmVyd2hlbG1pbmcgbWFqb3JpdHkgb2YgZnJhbWVzIGFyZSBub3QgUFRQIGZyYW1lcyAqL1xcbitcXHRpZiAobGlrZWx5KCFwdHBfZmxhZykpIHtcXG4rXFx0XFx0bmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMChza2IsIG5kZXYpO1xcbitcXHRcXHRyZXR1cm4gc2tiO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHRwX2ZsYWcgPT0gTkVUQ19QVFBfRkxBR19PTkVTVEVQKSB7XFxuK1xcdFxcdGlmICghbmV0Y19vbmVzdGVwX3N5bmNfcHJvY2Vzcyhza2IsIG5kZXYpKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdFxcdG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTEoc2tiLCBuZGV2KTtcXG4rXFx0fSBlbHNlIGlmIChwdHBfZmxhZyA9PSBORVRDX1BUUF9GTEFHX1RXT1NURVApIHtcXG4rXFx0XFx0bmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMihza2IsIG5kZXYpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiBza2I7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5ldGNfcnhfdHN0YW1wX3Byb2Nlc3Moc3RydWN0IG5ldGNfdGFnX3RoX3N1YnR5cGUxICp0YWcsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0dTY0IHRzID0gZ2V0X3VuYWxpZ25lZF9iZTY0KFxcdTAwMjZ0YWctXFx1MDAzZXRpbWVzdGFtcCk7XFxuK1xcbitcXHRORVRDX1NLQl9DQihza2IpLVxcdTAwM2V0c3RhbXAgPSB0cztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbmV0Y190d29zdGVwX3RzdGFtcF9wcm9jZXNzKHN0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMiAqdGFnLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuK3tcXG4rXFx0dTggdHNfcmVxX2lkID0gRklFTERfR0VUKE5FVENfVEFHX1RTX1JFUV9JRCwgdGFnLVxcdTAwM2Vocl90c3JlcV9pZCk7XFxuK1xcdGludCBwb3J0ID0gRklFTERfR0VUKE5FVENfVEFHX1BPUlQsIHRhZy1cXHUwMDNlY21uLnN3aXRjaF9wb3J0KTtcXG4rXFx0c3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEgKnRhZ2dlcl9kYXRhID0gZHMtXFx1MDAzZXRhZ2dlcl9kYXRhO1xcbitcXHR1NjQgdHMgPSBnZXRfdW5hbGlnbmVkX2JlNjQoXFx1MDAyNnRhZy1cXHUwMDNldGltZXN0YW1wKTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghdGFnZ2VyX2RhdGEtXFx1MDAzZXR3b3N0ZXBfdHN0YW1wX2hhbmRsZXIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0YWdnZXJfZGF0YS1cXHUwMDNldHdvc3RlcF90c3RhbXBfaGFuZGxlcihkcywgcG9ydCwgdHNfcmVxX2lkLCB0cyk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbmV0Y19nZXRfcnhfdGFnX2xlbihpbnQgdHlwZSwgaW50IHN1YnR5cGUpXFxuIHtcXG4gXFx0LyogT25seSBORVRDX1RBR19UT19IT1NUIGFuZCBORVRDX1RBR19GT1JXQVJEIGFyZSBleHBlY3RlZCBpbiBSWCxcXG5AQCAtMTI2LDE0ICsyNjEsMTcgQEAgc3RhdGljIGludCBuZXRjX2dldF9yeF90YWdfbGVuKGludCB0eXBlLCBpbnQgc3VidHlwZSlcXG4gc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gbmRldi1cXHUwMDNlZHNhX3B0cjtcXG4gXFx0c3RydWN0IG5ldGNfdGFnX2NtbiAqdGFnX2NtbjtcXG4gXFx0aW50IHRhZ19sZW4sIHN3X2lkLCBwb3J0O1xcbiBcXHRpbnQgdHlwZSwgc3VidHlwZTtcXG4rXFx0dm9pZCAqdGFnO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgTkVUQ19UQUdfTUFYX0xFTikpKVxcbitcXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBORVRDX1RBR19NQVhfTEVOIC0gMikpKVxcbiBcXHRcXHRnb3RvIGVycl9mcmVlX3NrYjtcXG4gXFxuLVxcdHRhZ19jbW4gPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc19yeChza2IpO1xcbitcXHR0YWcgPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc19yeChza2IpO1xcbitcXHR0YWdfY21uID0gdGFnO1xcbiBcXHRpZiAobnRvaHModGFnX2Ntbi1cXHUwMDNldHBpZCkgIT0gRVRIX1BfTlhQX05FVEMpIHtcXG4gXFx0XFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoXFx1MDAyNm5kZXYtXFx1MDAzZWRldiwgXFxcIlVua25vd24gVFBJRCAweCUwNHhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCAgICAgbnRvaHModGFnX2Ntbi1cXHUwMDNldHBpZCkpO1xcbkBAIC0xNjEsMTIgKzI5OSwyOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmICh0eXBlID09IE5FVENfVEFHX0ZPUldBUkQpIHtcXG4gXFx0XFx0ZHNhX2RlZmF1bHRfb2ZmbG9hZF9md2RfbWFyayhza2IpO1xcbiBcXHR9IGVsc2UgaWYgKHR5cGUgPT0gTkVUQ19UQUdfVE9fSE9TVCkge1xcbi1cXHRcXHQvKiBDdXJyZW50bHkgb25seSBzdWJ0eXBlMCBzdXBwb3J0ZWQgKi9cXG4tXFx0XFx0aWYgKHN1YnR5cGUgIT0gTkVUQ19UQUdfVEhfU1VCVFlQRTApXFxuK1xcdFxcdHN3aXRjaCAoc3VidHlwZSkge1xcbitcXHRcXHRjYXNlIE5FVENfVEFHX1RIX1NVQlRZUEUwOlxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBORVRDX1RBR19USF9TVUJUWVBFMTpcXG4rXFx0XFx0XFx0bmV0Y19yeF90c3RhbXBfcHJvY2Vzcyh0YWcsIHNrYik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIE5FVENfVEFHX1RIX1NVQlRZUEUyOlxcbitcXHRcXHRcXHQvKiBUaGlzIHNrYiBpcyBhIGhhcmR3YXJlLWdlbmVyYXRlZCByZXNwb25zZSB0byBhXFxuK1xcdFxcdFxcdCAqIHR3by1zdGVwIHRyYW5zbWl0IHRpbWVzdGFtcCByZXF1ZXN0LiBUaGUgdGFnXFxuK1xcdFxcdFxcdCAqIGRyaXZlciBtdXN0IGZyZWUgdGhlIHNrYiBhZnRlciBwcm9jZXNzaW5nLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0bmV0Y190d29zdGVwX3RzdGFtcF9wcm9jZXNzKHRhZywgZHAtXFx1MDAzZWRzKTtcXG4rXFx0XFx0XFx0Z290byBlcnJfZnJlZV9za2I7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKFxcdTAwMjZuZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlVuc3VwcG9ydGVkIFRvX0hvc3Qgc3VidHlwZTogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3VidHlwZSk7XFxuIFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfc2tiO1xcbitcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKFxcdTAwMjZuZGV2LVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFxcIlVuZXhwZWN0ZWQgIHRhZyB0eXBlICVkXFxcXG5cXFwiLCB0eXBlKTtcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiVW5leHBlY3RlZCB0YWcgdHlwZSAlZFxcXFxuXFxcIiwgdHlwZSk7XFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfc2tiO1xcbiBcXHR9XFxuIFxcbkBAIC0yMDAsNiArMzU0LDI4IEBAIHN0YXRpYyB2b2lkIG5ldGNfZmxvd19kaXNzZWN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8sXFxuIFxcdCpwcm90byA9ICgoX19iZTE2ICopc2tiLVxcdTAwM2VkYXRhKVsodGFnX2xlbiAvIDIpIC0gMV07XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbmV0Y19jb25uZWN0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7XFxuK1xcbitcXHR0YWdnZXJfZGF0YSA9IGt6YWxsb2Nfb2JqKCp0YWdnZXJfZGF0YSk7XFxuK1xcdGlmICghdGFnZ2VyX2RhdGEpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0dGFnZ2VyX2RhdGEtXFx1MDAzZW9uZXN0ZXBfc3luY194bWl0ID0gbmV0Y19vbmVzdGVwX3N5bmNfeG1pdDtcXG4rXFx0ZHMtXFx1MDAzZXRhZ2dlcl9kYXRhID0gdGFnZ2VyX2RhdGE7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbmV0Y19kaXNjb25uZWN0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGEgPSBkcy1cXHUwMDNldGFnZ2VyX2RhdGE7XFxuK1xcbitcXHRrZnJlZSh0YWdnZXJfZGF0YSk7XFxuK1xcdGRzLVxcdTAwM2V0YWdnZXJfZGF0YSA9IE5VTEw7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgbmV0Y19uZXRkZXZfb3BzID0ge1xcbiBcXHQubmFtZVxcdFxcdFxcdD0gTkVUQ19OQU1FLFxcbiBcXHQucHJvdG9cXHRcXHRcXHQ9IERTQV9UQUdfUFJPVE9fTkVUQyxcXG5AQCAtMjA3LDYgKzM4Myw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgbmV0Y19uZXRkZXZfb3BzID0ge1xcbiBcXHQucmN2XFx0XFx0XFx0PSBuZXRjX3JjdixcXG4gXFx0Lm5lZWRlZF9oZWFkcm9vbVxcdD0gTkVUQ19UQUdfTUFYX0xFTixcXG4gXFx0LmZsb3dfZGlzc2VjdFxcdFxcdD0gbmV0Y19mbG93X2Rpc3NlY3QsXFxuK1xcdC5jb25uZWN0XFx0XFx0PSBuZXRjX2Nvbm5lY3QsXFxuK1xcdC5kaXNjb25uZWN0XFx0XFx0PSBuZXRjX2Rpc2Nvbm5lY3QsXFxuIH07XFxuIFxcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkRTQSB0YWcgZHJpdmVyIGZvciBOWFAgTkVUQyBzd2l0Y2ggZmFtaWx5XFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA3OjU1OjU4LjQzODg4NDQ4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc2NjY3NjU0NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBzdXBwb3J0IHRvIHRoZSBOWFAgTkVUQyBzd2l0Y2ggZHJpdmVyIGFuZCBpdHMgYXNzb2NpYXRlZCBEU0EgdGFnZ2VyLiBUaGUgTkVUQyBzd2l0Y2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBkZXZpY2UgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyByZXF1aXJlZCB0byBwcm9iZSB0aGUgZHJpdmVyIGFuZCBpbnN0YW50aWF0ZSB0aGUgRFNBIHN3aXRjaCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW4gYm90aCB0aGUgZHJpdmVyIGFuZCB0aGUgdGFnZ2VyIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZDkzMjNmNjM4NjYwYjkyMjRkOTdkMmY5MDNhMTQzNGJjMmRkN2FjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDc6NTU6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZ1xuaW5kZXggNzkzZjc2OTFhMjRmMy4uNTViMWYxMzM4YTg3OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWdcbkBAIC00LDYgKzQsNyBAQCBjb25maWcgTkVUX0RTQV9ORVRDX1NXSVRDSFxuIFx0ZGVwZW5kcyBvbiBBUk02NCB8fCBDT01QSUxFX1RFU1RcbiBcdGRlcGVuZHMgb24gTkVUX0RTQSBcdTAwMjZcdTAwMjYgUENJXG4gXHRkZXBlbmRzIG9uIE5FVF9WRU5ET1JfRlJFRVNDQUxFXG4rXHRkZXBlbmRzIG9uIFBUUF9ORVRDX1Y0X1RJTUVSIHx8IFBUUF9ORVRDX1Y0X1RJTUVSPW5cbiBcdHNlbGVjdCBORVRfRFNBX1RBR19ORVRDXG4gXHRzZWxlY3QgRlNMX0VORVRDX01ESU9cbiBcdHNlbGVjdCBOWFBfTlRNUFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvTWFrZWZpbGVcbmluZGV4IGY0MGIxM2M3MDJlMDcuLjU3MmI4MzNhZDgwZmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvTWFrZWZpbGVcbkBAIC0xLDMgKzEsNCBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIG9iai0kKENPTkZJR19ORVRfRFNBX05FVENfU1dJVENIKSArPSBueHAtbmV0Yy1zd2l0Y2gub1xuLW54cC1uZXRjLXN3aXRjaC1vYmpzIDo9IG5ldGNfbWFpbi5vIG5ldGNfcGxhdGZvcm0ubyBuZXRjX2V0aHRvb2wub1xuK254cC1uZXRjLXN3aXRjaC1vYmpzIDo9IG5ldGNfbWFpbi5vIG5ldGNfcGxhdGZvcm0ubyBuZXRjX2V0aHRvb2wubyBcXFxuK1x0XHRcdG5ldGNfcHRwLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jXG5pbmRleCA3NzA3NzM1MmMxYTU3Li45ODU1ZTAyYjQ3MjY2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jXG5AQCAtNjUsNiArNjUsMjEgQEAgbmV0Y19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRyZXR1cm4gRFNBX1RBR19QUk9UT19ORVRDO1xuIH1cbiBcbitzdGF0aWMgaW50IG5ldGNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdFx0ICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG4re1xuK1x0c3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEgKnRhZ2dlcl9kYXRhO1xuK1xuK1x0aWYgKHByb3RvICE9IERTQV9UQUdfUFJPVE9fTkVUQylcbitcdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4rXG4rXHR0YWdnZXJfZGF0YSA9IGRzLVx1MDAzZXRhZ2dlcl9kYXRhO1xuK1x0dGFnZ2VyX2RhdGEtXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIgPSBuZXRjX29uZXN0ZXBfc3luY19oYW5kbGVyO1xuK1x0dGFnZ2VyX2RhdGEtXHUwMDNldHdvc3RlcF90c3RhbXBfaGFuZGxlciA9IG5ldGNfdHdvc3RlcF90c3RhbXBfaGFuZGxlcjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCBuZXRjX3BvcnRfcm13KHN0cnVjdCBuZXRjX3BvcnQgKm5wLCB1MzIgcmVnLFxuIFx0XHRcdCAgdTMyIG1hc2ssIHUzMiB2YWwpXG4ge1xuQEAgLTgwLDcgKzk1LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3JtdyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIHJlZyxcbiBcdG5ldGNfcG9ydF93cihucCwgcmVnLCBuZXcpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZXRjX21hY19wb3J0X3dyKHN0cnVjdCBuZXRjX3BvcnQgKm5wLCB1MzIgcmVnLCB1MzIgdmFsKVxuK3ZvaWQgbmV0Y19tYWNfcG9ydF93cihzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIHJlZywgdTMyIHZhbClcbiB7XG4gXHRpZiAoaXNfbmV0Y19wc2V1ZG9fcG9ydChucCkpXG4gXHRcdHJldHVybjtcbkBAIC0yMzgsNiArMjUzLDE1IEBAIHN0YXRpYyB2b2lkIG5ldGNfZ2V0X3N3aXRjaF9jYXBhYmlsaXRpZXMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxuIFx0cHJpdi1cdTAwM2VudW1fYnAgPSBGSUVMRF9HRVQoQlBDQVBSX05VTV9CUCwgdmFsKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbmV0Y19wb3J0X2luaXRfcHRwX2lwZnRfZWlkKHN0cnVjdCBuZXRjX3BvcnQgKm5wKVxuK3tcbitcdGludCBpO1xuK1xuK1x0LyogSW5pdGlhbGl6ZSB0byBpbnZhbGlkIGVudHJ5IElEcyAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTkVUQ19QVFBfTUFYOyBpKyspXG4rXHRcdG5wLVx1MDAzZXB0cF9pcGZ0X2VpZFtpXSA9IE5UTVBfTlVMTF9FTlRSWV9JRDtcbit9XG4rXG4gc3RhdGljIGludCBuZXRjX2luaXRfYWxsX3BvcnRzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LVx1MDAzZWRldjtcbkBAIC0yODYsNiArMzEwLDE3IEBAIHN0YXRpYyBpbnQgbmV0Y19pbml0X2FsbF9wb3J0cyhzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpXG4gXHRcdFx0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gY3JlYXRlIE1ESU8gYnVzXFxuXCIpO1xuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHR9XG4rXG4rXHRcdFx0LyogVGhlIGlwZnRfaGZfZWlkIGlzIGluaXRpYWxpemVkIHRvIGFuIGludmFsaWQgZW50cnlcbitcdFx0XHQgKiBJRCBiZWNhdXNlIHRoZSBob3N0IGZsb29kIHJ1bGUgKElQRlQgZW50cnkpIGhhcyBub3RcbitcdFx0XHQgKiBiZWVuIGNyZWF0ZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0bnAtXHUwMDNlaXBmdF9oZl9laWQgPSBOVE1QX05VTExfRU5UUllfSUQ7XG4rXHRcdFx0bmV0Y19wb3J0X2luaXRfcHRwX2lwZnRfZWlkKG5wKTtcbitcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4rXHRcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm5wLVx1MDAzZXNrYl90eHRzdGFtcF9xdWV1ZSk7XG4rXHRcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm5wLVx1MDAzZXNrYl9vbmVzdGVwX3F1ZXVlKTtcbitcdFx0XHRJTklUX1dPUksoXHUwMDI2bnAtXHUwMDNlb25lc3RlcF93b3JrLCBuZXRjX3BvcnRfb25lc3RlcF93b3JrKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTU0OSw2ICs1ODQsMTIgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X2ZpeGVkX2NvbmZpZyhzdHJ1Y3QgbmV0Y19wb3J0ICpucClcbiBcdG5ldGNfcG9ydF9ybXcobnAsIE5FVENfUENSLCBQQ1JfTDJET1NFIHwgUENSX0wzRE9TRSxcbiBcdFx0ICAgICAgUENSX0wyRE9TRSB8IFBDUl9MM0RPU0UpO1xuIFxuK1x0LyogRW5hYmxlIGluZ3Jlc3MgcG9ydCBmaWx0ZXIgdGFibGUgbG9va3VwLCBpZiBubyBtYXRjaCBpcyBmb3VuZCxcbitcdCAqIHRoZSBmcmFtZSBpcyBhbGxvd2VkIGFuZCBwYXNzZWQgdG8gdGhlIG5leHQgZnJhbWUgcHJvY2Vzc2luZ1xuK1x0ICogZnVuY3Rpb24uXG4rXHQgKi9cbitcdG5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIFBJUEZDUl9FTik7XG4rXG4gXHQvKiBTZXQgdGhlIHF1YW50YSB2YWx1ZSBvZiBUWCBQQVVTRSBmcmFtZSAqL1xuIFx0bmV0Y19tYWNfcG9ydF93cihucCwgTkVUQ19QTV9QQVVTRV9RVUFOVEEoMCksIE5FVENfUEFVU0VfUVVBTlRBKTtcbiBcbkBAIC04NjksNiArOTEwLDE1IEBAIHN0YXRpYyBpbnQgbmV0Y19zd2l0Y2hfYnB0X2RlZmF1bHRfY29uZmlnKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKm5ldGNfZ2V0X3B0cF90aW1lcihzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpXG4re1xuK1x0c3RydWN0IHBjaV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlcGRldi1cdTAwM2VidXM7XG4rXHR1MzIgZGV2Zm4gPSBwcml2LVx1MDAzZWluZm8tXHUwMDNldG1yX2RldmZuO1xuK1xuK1x0cmV0dXJuIHBjaV9nZXRfZG9tYWluX2J1c19hbmRfc2xvdChwY2lfZG9tYWluX25yKGJ1cyksXG4rXHRcdFx0XHRcdCAgIGJ1cy1cdTAwM2VudW1iZXIsIGRldmZuKTtcbit9XG4rXG4gc3RhdGljIGludCBuZXRjX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuQEAgLTg4OSw2ICs5MzksMTYgQEAgc3RhdGljIGludCBuZXRjX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHQvKiBUaGUgUFRQIHRpbWVyIHNpdHMgb24gdGhlIHNhbWUgUENJIGJ1cyBhcyB0aGUgc3dpdGNoLiBQQ0kgY3JlYXRlc1xuK1x0ICogZXZlcnkgZnVuY3Rpb24ncyBwY2lfZGV2IGR1cmluZyBidXMgZW51bWVyYXRpb24sIGJlZm9yZSBhbnkgZHJpdmVyXG4rXHQgKiBwcm9iZXMsIHNvIHdlIGNhbiBncmFiIHRoZSB0aW1lcidzIHBjaV9kZXYgaGVyZSBldmVuIGlmIHRoZSB0aW1lclxuK1x0ICogZHJpdmVyIGhhcyBub3QgcHJvYmVkIHlldC5cbitcdCAqL1xuK1x0cHJpdi1cdTAwM2V0bXJfZGV2ID0gbmV0Y19nZXRfcHRwX3RpbWVyKHByaXYpO1xuK1x0aWYgKCFwcml2LVx1MDAzZXRtcl9kZXYpXG4rXHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2LFxuK1x0XHRcdCBcIlBUUCB0aW1lciBQQ0kgZGV2aWNlIG5vdCBmb3VuZFxcblwiKTtcbitcbiBcdElOSVRfSExJU1RfSEVBRChcdTAwMjZwcml2LVx1MDAzZWZkYl9saXN0KTtcbiBcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VmZGJ0X2xvY2spO1xuIFx0cHJpdi1cdTAwM2VmZGJ0X2FnZWluZ19kZWxheSA9IE5FVENfRkRCVF9BR0VJTkdfREVMQVk7XG5AQCAtOTI1LDYgKzk4NSw3IEBAIHN0YXRpYyBpbnQgbmV0Y19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHQgKi9cbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2VmZGJ0X2xvY2spO1xuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZXZmdF9sb2NrKTtcbitcdHBjaV9kZXZfcHV0KHByaXYtXHUwMDNldG1yX2Rldik7XG4gXHRuZXRjX2ZyZWVfbnRtcF91c2VyKHByaXYpO1xuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC05MzgsMjAgKzk5OSwyMyBAQCBzdGF0aWMgdm9pZCBuZXRjX2Rlc3Ryb3lfYWxsX2xpc3RzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2V2ZnRfbG9jayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG5ldGNfZnJlZV9ob3N0X2Zsb29kX3J1bGVzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbitzdGF0aWMgdm9pZCBuZXRjX2ZyZWVfcG9ydHNfcmVzb3VyY2VzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuIFxuLVx0ZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIHByaXYtXHUwMDNlZHMpIHtcbitcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfYXZhaWxhYmxlX3BvcnQoZHAsIHByaXYtXHUwMDNlZHMpIHtcbiBcdFx0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBwcml2LVx1MDAzZXBvcnRzW2RwLVx1MDAzZWluZGV4XTtcbiBcbi1cdFx0LyogTm8gbmVlZCB0byBjbGVhciB0aGUgaGFyZHdhcmUgSVBGVCBlbnRyeS4gQmVjYXVzZSBQQ0llXG4tXHRcdCAqIEZMUiB3aWxsIGJlIHBlcmZvcm1lZCB3aGVuIHRoZSBzd2l0Y2ggaXMgcmUtcmVnaXN0ZXJlZCxcbi1cdFx0ICogaXQgd2lsbCByZXNldCBoYXJkd2FyZSBzdGF0ZS4gU28gb25seSBuZWVkIHRvIGZyZWUgdGhlXG4tXHRcdCAqIG1lbW9yeSB0byBhdm9pZCBtZW1vcnkgbGVhay5cbitcdFx0aWYgKCFkc2FfcG9ydF9pc191c2VyKGRwKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogTm8gbmV3IFNLQnMgY2FuIGJlIGVucXVldWVkIGR1cmluZyB0ZWFyZG93bi4gUHVyZ2Ugd2l0aG91dFxuK1x0XHQgKiB0aGUgc3BpbmxvY2sgdG8gYXZvaWQgY2FsbGluZyBrZnJlZV9za2IoKSB3aXRoIGEgZGVzdHJ1Y3RvclxuK1x0XHQgKiAoc29ja19lZnJlZSkgd2hpbGUgaG9sZGluZyBhIHNwaW5sb2NrLlxuIFx0XHQgKi9cbi1cdFx0a2ZyZWUobnAtXHUwMDNlaG9zdF9mbG9vZCk7XG4tXHRcdG5wLVx1MDAzZWhvc3RfZmxvb2QgPSBOVUxMO1xuK1x0XHRfX3NrYl9xdWV1ZV9wdXJnZShcdTAwMjZucC1cdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUpO1xuK1x0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5wLVx1MDAzZW9uZXN0ZXBfd29yayk7XG4rXHRcdF9fc2tiX3F1ZXVlX3B1cmdlKFx1MDAyNm5wLVx1MDAzZXNrYl9vbmVzdGVwX3F1ZXVlKTtcbiBcdH1cbiB9XG4gXG5AQCAtOTYxLDggKzEwMjUsOSBAQCBzdGF0aWMgdm9pZCBuZXRjX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcbiBcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VmZGJ0X2FnZWluZ193b3JrKTtcbiBcdG5ldGNfZGVzdHJveV9hbGxfbGlzdHMocHJpdik7XG4tXHRuZXRjX2ZyZWVfaG9zdF9mbG9vZF9ydWxlcyhwcml2KTtcbitcdHBjaV9kZXZfcHV0KHByaXYtXHUwMDNldG1yX2Rldik7XG4gXHRuZXRjX2ZyZWVfbnRtcF91c2VyKHByaXYpO1xuK1x0bmV0Y19mcmVlX3BvcnRzX3Jlc291cmNlcyhwcml2KTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbmV0Y19wb3J0X2lzX2VtZGlvX2NvbnN1bWVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbkBAIC0xNzIwLDggKzE3ODUsNiBAQCBzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfaG9zdF9mbG9vZF9ydWxlKHN0cnVjdCBuZXRjX3BvcnQgKm5wLFxuIFx0aW50IGVycjtcbiBcbiBcdGlmICghdWMgXHUwMDI2XHUwMDI2ICFtYykge1xuLVx0XHQvKiBEaXNhYmxlIGluZ3Jlc3MgcG9ydCBmaWx0ZXIgdGFibGUgbG9va3VwICovXG4tXHRcdG5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIDApO1xuIFx0XHRucC1cdTAwM2V1YyA9IGZhbHNlO1xuIFx0XHRucC1cdTAwM2VtYyA9IGZhbHNlO1xuIFxuQEAgLTE3NTksNDAgKzE4MjIsMzYgQEAgc3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2hvc3RfZmxvb2RfcnVsZShzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcbiBcdGNmZ2UtXHUwMDNlY2ZnID0gY3B1X3RvX2xlMzIoY2ZnKTtcbiBcbiBcdGVyciA9IG50bXBfaXBmdF9hZGRfZW50cnkoXHUwMDI2cHJpdi1cdTAwM2VudG1wLCBob3N0X2Zsb29kKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0a2ZyZWUoaG9zdF9mbG9vZCk7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGZyZWVfaG9zdF9mbG9vZDtcbiBcbiBcdG5wLVx1MDAzZXVjID0gdWM7XG4gXHRucC1cdTAwM2VtYyA9IG1jO1xuLVx0bnAtXHUwMDNlaG9zdF9mbG9vZCA9IGhvc3RfZmxvb2Q7XG4tXHQvKiBFbmFibGUgaW5ncmVzcyBwb3J0IGZpbHRlciB0YWJsZSBsb29rdXAgKi9cbi1cdG5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIFBJUEZDUl9FTik7XG4rXHRucC1cdTAwM2VpcGZ0X2hmX2VpZCA9IGhvc3RfZmxvb2QtXHUwMDNlZW50cnlfaWQ7XG4gXG4tXHRyZXR1cm4gMDtcbitmcmVlX2hvc3RfZmxvb2Q6XG4rXHRrZnJlZShob3N0X2Zsb29kKTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcbi1cdFx0XHRcdFx0c3RydWN0IGlwZnRfZW50cnlfZGF0YSAqaG9zdF9mbG9vZClcbitzdGF0aWMgdm9pZCBuZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2Qoc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiBlbnRyeV9pZClcbiB7XG4gXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBucC1cdTAwM2Vzd2l0Y2hfcHJpdjtcbiBcdGJvb2wgZGlzYWJsZV9ob3N0X2Zsb29kID0gZmFsc2U7XG4gXG4tXHRpZiAoIWhvc3RfZmxvb2QpXG4rXHRpZiAoZW50cnlfaWQgPT0gTlRNUF9OVUxMX0VOVFJZX0lEKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAobnAtXHUwMDNlaG9zdF9mbG9vZCA9PSBob3N0X2Zsb29kKVxuK1x0aWYgKG5wLVx1MDAzZWlwZnRfaGZfZWlkID09IGVudHJ5X2lkKVxuIFx0XHRkaXNhYmxlX2hvc3RfZmxvb2QgPSB0cnVlO1xuIFxuLVx0bnRtcF9pcGZ0X2RlbGV0ZV9lbnRyeShcdTAwMjZwcml2LVx1MDAzZW50bXAsIGhvc3RfZmxvb2QtXHUwMDNlZW50cnlfaWQpO1xuLVx0a2ZyZWUoaG9zdF9mbG9vZCk7XG4rXHRudG1wX2lwZnRfZGVsZXRlX2VudHJ5KFx1MDAyNnByaXYtXHUwMDNlbnRtcCwgZW50cnlfaWQpO1xuIFxuIFx0aWYgKGRpc2FibGVfaG9zdF9mbG9vZCkge1xuLVx0XHRucC1cdTAwM2Vob3N0X2Zsb29kID0gTlVMTDtcbitcdFx0bnAtXHUwMDNlaXBmdF9oZl9laWQgPSBOVE1QX05VTExfRU5UUllfSUQ7XG4gXHRcdG5wLVx1MDAzZXVjID0gZmFsc2U7XG4gXHRcdG5wLVx1MDAzZW1jID0gZmFsc2U7XG4tXHRcdG5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIDApO1xuIFx0fVxuIH1cbiBcbkBAIC0xODAwLDcgKzE4NTksNyBAQCBzdGF0aWMgdm9pZCBuZXRjX3BvcnRfc2V0X2hvc3RfZmxvb2Qoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHRcdCAgICAgYm9vbCB1YywgYm9vbCBtYylcbiB7XG4gXHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XG4tXHRzdHJ1Y3QgaXBmdF9lbnRyeV9kYXRhICpvbGRfaG9zdF9mbG9vZDtcbitcdHUzMiBvbGRfZW50cnlfaWQ7XG4gXG4gXHQvKiBEbyBub3QgYWRkIGhvc3QgZmxvb2QgcnVsZSB0byBpbmdyZXNzIHBvcnQgZmlsdGVyIHRhYmxlIHdoZW5cbiBcdCAqIHRoZSBwb3J0IGhhcyBqb2luZWQgYSBicmlkZ2UuIE90aGVyd2lzZSwgdGhlIGluZ3Jlc3MgZnJhbWVzXG5AQCAtMTgwOCw3ICsxODY3LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3NldF9ob3N0X2Zsb29kKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHQgKiB3aWxsIGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHkgdG8gdGhlIENQVSBwb3J0LlxuIFx0ICovXG4gXHRpZiAoZHNhX3BvcnRfYnJpZGdlX2Rldl9nZXQobnAtXHUwMDNlZHApKSB7XG4tXHRcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgbnAtXHUwMDNlaG9zdF9mbG9vZCk7XG4rXHRcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgbnAtXHUwMDNlaXBmdF9oZl9laWQpO1xuIFxuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMTgxOCwyMCArMTg3NywxOCBAQCBzdGF0aWMgdm9pZCBuZXRjX3BvcnRfc2V0X2hvc3RfZmxvb2Qoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcbiBcdC8qIElQRlQgZG9lcyBub3Qgc3VwcG9ydCBpbi1wbGFjZSB1cGRhdGVzIHRvIHRoZSBLRVlFIGVsZW1lbnQsXG4gXHQgKiB3ZSBuZWVkIHRvIGFkZCBhIG5ldyBlbnRyeSBhbmQgdGhlbiBkZWxldGUgdGhlIG9sZCBvbmUuIFNvXG4tXHQgKiBzYXZlIHRoZSBvbGQgZW50cnkgZmlyc3QuXG4rXHQgKiBzYXZlIHRoZSBvbGQgZW50cnkgSUQgZmlyc3QuXG4gXHQgKi9cbi1cdG9sZF9ob3N0X2Zsb29kID0gbnAtXHUwMDNlaG9zdF9mbG9vZDtcbi1cdG5wLVx1MDAzZWhvc3RfZmxvb2QgPSBOVUxMO1xuK1x0b2xkX2VudHJ5X2lkID0gbnAtXHUwMDNlaXBmdF9oZl9laWQ7XG4gXG4gXHRpZiAobmV0Y19wb3J0X2FkZF9ob3N0X2Zsb29kX3J1bGUobnAsIHVjLCBtYykpIHtcbi1cdFx0bnAtXHUwMDNlaG9zdF9mbG9vZCA9IG9sZF9ob3N0X2Zsb29kO1xuIFx0XHRkZXZfZXJyKGRzLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gYWRkIGhvc3QgZmxvb2QgcnVsZSBvbiBwb3J0ICVkXFxuXCIsXG4gXHRcdFx0cG9ydCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdC8qIFJlbW92ZSB0aGUgb2xkIGhvc3QgZmxvb2QgZW50cnkgKi9cbi1cdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgb2xkX2hvc3RfZmxvb2QpO1xuK1x0bmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBvbGRfZW50cnlfaWQpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG5ldGNfc2luZ2xlX3ZsYW5fYXdhcmVfYnJpZGdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbkBAIC0yMDIwLDcgKzIwNzcsNyBAQCBzdGF0aWMgaW50IG5ldGNfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0bmV0Y19wb3J0X3NldF9wdmlkKG5wLCB2bGFuX3VuYXdhcmVfcHZpZCk7XG4gXG4gb3V0OlxuLVx0bmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBucC1cdTAwM2Vob3N0X2Zsb29kKTtcbitcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgbnAtXHUwMDNlaXBmdF9oZl9laWQpO1xuIFxuIFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNnByaXYtXHUwMDNlYnJfY250KSA9PSAxKVxuIFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cHJpdi1cdTAwM2VmZGJ0X2FnZWluZ193b3JrLFxuQEAgLTI0MDIsNiArMjQ1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIG5ldGNfcGh5bGlua19tYWNfb3BzID0ge1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbmV0Y19zd2l0Y2hfb3BzID0ge1xuIFx0LmdldF90YWdfcHJvdG9jb2xcdFx0PSBuZXRjX2dldF90YWdfcHJvdG9jb2wsXG4rXHQuY29ubmVjdF90YWdfcHJvdG9jb2xcdFx0PSBuZXRjX2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxuIFx0LnNldHVwXHRcdFx0XHQ9IG5ldGNfc2V0dXAsXG4gXHQudGVhcmRvd25cdFx0XHQ9IG5ldGNfdGVhcmRvd24sXG4gXHQucGh5bGlua19nZXRfY2Fwc1x0XHQ9IG5ldGNfcGh5bGlua19nZXRfY2FwcyxcbkBAIC0yNDMwLDYgKzI0ODgsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBuZXRjX3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3NzZXRfY291bnRcdFx0XHQ9IG5ldGNfcG9ydF9nZXRfc3NldF9jb3VudCxcbiBcdC5nZXRfc3RyaW5nc1x0XHRcdD0gbmV0Y19wb3J0X2dldF9zdHJpbmdzLFxuIFx0LmdldF9ldGh0b29sX3N0YXRzXHRcdD0gbmV0Y19wb3J0X2dldF9ldGh0b29sX3N0YXRzLFxuK1x0LmdldF90c19pbmZvXHRcdFx0PSBuZXRjX2dldF90c19pbmZvLFxuK1x0LnBvcnRfaHd0c3RhbXBfc2V0XHRcdD0gbmV0Y19wb3J0X2h3dHN0YW1wX3NldCxcbitcdC5wb3J0X2h3dHN0YW1wX2dldFx0XHQ9IG5ldGNfcG9ydF9od3RzdGFtcF9nZXQsXG4rXHQucG9ydF9yeHRzdGFtcFx0XHRcdD0gbmV0Y19wb3J0X3J4dHN0YW1wLFxuK1x0LnBvcnRfdHh0c3RhbXBcdFx0XHQ9IG5ldGNfcG9ydF90eHRzdGFtcCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbmV0Y19zd2l0Y2hfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wbGF0Zm9ybS5jIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wbGF0Zm9ybS5jXG5pbmRleCAzNGFlYjZmY2ViM2NiLi40ZmQwY2U2NzcwYzMzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wbGF0Zm9ybS5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3BsYXRmb3JtLmNcbkBAIC01MCw2ICs1MCw3IEBAIHN0YXRpYyB2b2lkIGlteDk0X3N3aXRjaF9waHlsaW5rX2dldF9jYXBzKGludCBwb3J0LFxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0Y19zd2l0Y2hfaW5mbyBpbXg5NF9pbmZvID0ge1xuIFx0Lm51bV9wb3J0cyA9IDQsXG4rXHQudG1yX2RldmZuID0gUENJX0RFVkZOKDAsIDEpLFxuIFx0LnBoeWxpbmtfZ2V0X2NhcHMgPSBpbXg5NF9zd2l0Y2hfcGh5bGlua19nZXRfY2FwcyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcHRwLmMgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3B0cC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmY3ZDhlNWU2OGQyM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wdHAuY1xuQEAgLTAsMCArMSw2NjMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIEJTRC0zLUNsYXVzZSlcbisvKlxuKyAqIE5YUCBORVRDIHN3aXRjaCBkcml2ZXJcbisgKiBDb3B5cmlnaHQgMjAyNS0yMDI2IE5YUFxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbGFzc2lmeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJuZXRjX3N3aXRjaC5oXCJcbitcbisjZGVmaW5lIE5FVENfVFNfUkVRX0lEX05VTVx0XHQoTkVUQ19UQUdfVFNfUkVRX0lEICsgMSlcbisjZGVmaW5lIE5FVENfUFRQX1RYX1RTVEFNUF9USU1FT1VUXHQoNSAqIEhaKVxuK1xuK3N0YXRpYyBpbnQgbmV0Y19nZXRfcGhjX2luZGV4KHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbit7XG4rXHRpZiAoIXByaXYtXHUwMDNldG1yX2RldilcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRyZXR1cm4gcHRwX2Nsb2NrX2luZGV4X2J5X2RldihcdTAwMjZwcml2LVx1MDAzZXRtcl9kZXYtXHUwMDNlZGV2KTtcbit9XG4rXG4raW50IG5ldGNfZ2V0X3RzX2luZm8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0ICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1xuK1x0aW5mby1cdTAwM2Vzb190aW1lc3RhbXBpbmcgPSBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHxcbitcdFx0XHRcdFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgfFxuK1x0XHRcdFx0U09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRTtcbitcbitcdGluZm8tXHUwMDNlcGhjX2luZGV4ID0gbmV0Y19nZXRfcGhjX2luZGV4KHByaXYpO1xuK1x0aWYgKGluZm8tXHUwMDNlcGhjX2luZGV4IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxuK1x0XHRcdFx0IFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgfFxuK1x0XHRcdFx0IFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFO1xuK1xuK1x0aW5mby1cdTAwM2V0eF90eXBlcyA9IEJJVChIV1RTVEFNUF9UWF9PRkYpIHwgQklUKEhXVFNUQU1QX1RYX09OKSB8XG4rXHRcdFx0IEJJVChIV1RTVEFNUF9UWF9PTkVTVEVQX1NZTkMpO1xuK1xuK1x0aW5mby1cdTAwM2VyeF9maWx0ZXJzID0gQklUKEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8XG4rXHRcdFx0ICAgQklUKEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQpIHxcbitcdFx0XHQgICBCSVQoSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVCkgfFxuK1x0XHRcdCAgIEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnApXG4re1xuK1x0c3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtXHUwMDNlc3dpdGNoX3ByaXY7XG4rXHR1MzIgZW50cnlfaWQ7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5FVENfUFRQX01BWDsgaSsrKSB7XG4rXHRcdGVudHJ5X2lkID0gbnAtXHUwMDNlcHRwX2lwZnRfZWlkW2ldO1xuK1x0XHRpZiAoZW50cnlfaWQgIT0gTlRNUF9OVUxMX0VOVFJZX0lEKSB7XG4rXHRcdFx0bnRtcF9pcGZ0X2RlbGV0ZV9lbnRyeShcdTAwMjZwcml2LVx1MDAzZW50bXAsIGVudHJ5X2lkKTtcbitcdFx0XHRucC1cdTAwM2VwdHBfaXBmdF9laWRbaV0gPSBOVE1QX05VTExfRU5UUllfSUQ7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBuZXRjX2J1aWxkX3B0cF9pcGZ0X2tleWUoc3RydWN0IGlwZnRfa2V5ZV9kYXRhICprZXllLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICBlbnVtIG5ldGNfcHRwX3R5cGUgdHlwZSlcbit7XG4rXHR1MTYgc3JjX3BvcnQsIGZybV9hdHRyX2ZsYWdzO1xuK1xuK1x0a2V5ZS1cdTAwM2VwcmVjZWRlbmNlID0gY3B1X3RvX2xlMTYoMHhmMDAwKTtcbitcdHNyY19wb3J0ID0gRklFTERfUFJFUChJUEZUX1NSQ19QT1JULCBwb3J0KTtcbitcdHNyY19wb3J0IHw9IElQRlRfU1JDX1BPUlRfTUFTSztcbitcdGtleWUtXHUwMDNlc3JjX3BvcnQgPSBjcHVfdG9fbGUxNihzcmNfcG9ydCk7XG4rXG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgTkVUQ19QVFBfTDI6XG4rXHRcdGtleWUtXHUwMDNlZXRoZXJ0eXBlID0gaHRvbnMoRVRIX1BfMTU4OCk7XG4rXHRcdGtleWUtXHUwMDNlZXRoZXJ0eXBlX21hc2sgPSBodG9ucygweGZmZmYpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTkVUQ19QVFBfTDRfSVBWNF9FVkVOVDpcbitcdGNhc2UgTkVUQ19QVFBfTDRfSVBWNF9HRU5FUkFMOlxuK1x0Y2FzZSBORVRDX1BUUF9MNF9JUFY2X0VWRU5UOlxuK1x0Y2FzZSBORVRDX1BUUF9MNF9JUFY2X0dFTkVSQUw6XG4rXHRcdGZybV9hdHRyX2ZsYWdzID0gSVBGVF9GQUZfSVBfSERSIHwgRklFTERfUFJFUChJUEZUX0ZBRl9MNF9DT0RFLFxuK1x0XHRcdFx0IElQRlRfRkFGX1VEUF9IRFIpO1xuK1x0XHRpZiAodHlwZSA9PSBORVRDX1BUUF9MNF9JUFY2X0VWRU5UIHx8XG4rXHRcdCAgICB0eXBlID09IE5FVENfUFRQX0w0X0lQVjZfR0VORVJBTClcbitcdFx0XHRmcm1fYXR0cl9mbGFncyB8PSBJUEZUX0ZBRl9JUF9WRVI2O1xuK1xuK1x0XHRrZXllLVx1MDAzZWZybV9hdHRyX2ZsYWdzID0gY3B1X3RvX2xlMTYoZnJtX2F0dHJfZmxhZ3MpO1xuK1x0XHRrZXllLVx1MDAzZWZybV9hdHRyX2ZsYWdzX21hc2sgPSBrZXllLVx1MDAzZWZybV9hdHRyX2ZsYWdzO1xuK1x0XHRrZXllLVx1MDAzZWlwX3Byb3RvY29sID0gSVBQUk9UT19VRFA7XG4rXHRcdGtleWUtXHUwMDNlaXBfcHJvdG9jb2xfbWFzayA9IDB4ZmY7XG4rXG4rXHRcdGlmICh0eXBlID09IE5FVENfUFRQX0w0X0lQVjRfRVZFTlQgfHxcbitcdFx0ICAgIHR5cGUgPT0gTkVUQ19QVFBfTDRfSVBWNl9FVkVOVClcbitcdFx0XHRrZXllLVx1MDAzZWw0X2RzdF9wb3J0ID0gaHRvbnMoUFRQX0VWX1BPUlQpO1xuK1x0XHRlbHNlXG4rXHRcdFx0a2V5ZS1cdTAwM2VsNF9kc3RfcG9ydCA9IGh0b25zKFBUUF9HRU5fUE9SVCk7XG4rXG4rXHRcdGtleWUtXHUwMDNlbDRfZHN0X3BvcnRfbWFzayA9IGh0b25zKDB4ZmZmZik7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2lwZnRfcHRwX2VudHJ5KHN0cnVjdCBuZXRjX3BvcnQgKm5wLFxuK1x0XHRcdFx0XHRlbnVtIG5ldGNfcHRwX3R5cGUgdHlwZSlcbit7XG4rXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBucC1cdTAwM2Vzd2l0Y2hfcHJpdjtcbitcdHN0cnVjdCBpcGZ0X2VudHJ5X2RhdGEgKmVudHJ5O1xuK1x0c3RydWN0IGlwZnRfa2V5ZV9kYXRhICprZXllO1xuK1x0dTMyIGNmZztcbitcdGludCBlcnI7XG4rXG4rXHRlbnRyeSA9IGt6YWxsb2Nfb2JqKCplbnRyeSk7XG4rXHRpZiAoIWVudHJ5KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGtleWUgPSBcdTAwMjZlbnRyeS1cdTAwM2VrZXllO1xuK1x0ZXJyID0gbmV0Y19idWlsZF9wdHBfaXBmdF9rZXllKGtleWUsIG5wLVx1MDAzZWRwLVx1MDAzZWluZGV4LCB0eXBlKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZnJlZV9lbnRyeTtcbitcbitcdGNmZyA9IEZJRUxEX1BSRVAoSVBGVF9GTFRGQSwgSVBGVF9GTFRGQV9SRURJUkVDVCk7XG4rXHRjZmcgfD0gRklFTERfUFJFUChJUEZUX0hSLCBORVRDX0hSX1BUUF9UUkFQKTtcbitcdGNmZyB8PSBJUEZUX1RJTUVDQVBFIHwgSVBGVF9SUlQ7XG4rXHRlbnRyeS1cdTAwM2VjZmdlLmNmZyA9IGNwdV90b19sZTMyKGNmZyk7XG4rXG4rXHRlcnIgPSBudG1wX2lwZnRfYWRkX2VudHJ5KFx1MDAyNnByaXYtXHUwMDNlbnRtcCwgZW50cnkpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBmcmVlX2VudHJ5O1xuK1xuK1x0bnAtXHUwMDNlcHRwX2lwZnRfZWlkW3R5cGVdID0gZW50cnktXHUwMDNlZW50cnlfaWQ7XG4rXG4rZnJlZV9lbnRyeTpcbitcdGtmcmVlKGVudHJ5KTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbmV0Y19wb3J0X2FkZF9sMl9wdHBfZmlsdGVyKHN0cnVjdCBuZXRjX3BvcnQgKm5wKVxuK3tcbitcdHJldHVybiBuZXRjX3BvcnRfYWRkX2lwZnRfcHRwX2VudHJ5KG5wLCBORVRDX1BUUF9MMik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbmV0Y19wb3J0X2FkZF9sNF9wdHBfZmlsdGVyKHN0cnVjdCBuZXRjX3BvcnQgKm5wKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBuZXRjX3BvcnRfYWRkX2lwZnRfcHRwX2VudHJ5KG5wLCBORVRDX1BUUF9MNF9JUFY0X0VWRU5UKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRlcnIgPSBuZXRjX3BvcnRfYWRkX2lwZnRfcHRwX2VudHJ5KG5wLCBORVRDX1BUUF9MNF9JUFY0X0dFTkVSQUwpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBkZWxfcHRwX2ZpbHRlcjtcbitcbitcdGVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjZfRVZFTlQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBkZWxfcHRwX2ZpbHRlcjtcbitcbitcdGVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjZfR0VORVJBTCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGRlbF9wdHBfZmlsdGVyO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZGVsX3B0cF9maWx0ZXI6XG4rXHRuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIobnApO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2wyX2w0X3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnApXG4re1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IG5ldGNfcG9ydF9hZGRfbDJfcHRwX2ZpbHRlcihucCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gbmV0Y19wb3J0X2FkZF9sNF9wdHBfZmlsdGVyKG5wKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZGVsX3B0cF9maWx0ZXI7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitkZWxfcHRwX2ZpbHRlcjpcbitcdG5ldGNfcG9ydF9kZWxfcHRwX2ZpbHRlcihucCk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG5ldGNfcG9ydF9zZXRfcHRwX2ZpbHRlcihzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgaW50IHJ4X2ZpbHRlcilcbit7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGlmIChucC1cdTAwM2VwdHBfcnhfZmlsdGVyID09IHJ4X2ZpbHRlcilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobnAtXHUwMDNlcHRwX3J4X2ZpbHRlciAhPSBIV1RTVEFNUF9GSUxURVJfTk9ORSB8fFxuK1x0ICAgIHJ4X2ZpbHRlciA9PSBIV1RTVEFNUF9GSUxURVJfTk9ORSkge1xuK1x0XHRuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIobnApO1xuK1x0XHRucC1cdTAwM2VwdHBfcnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XG4rXHR9XG4rXG4rXHRzd2l0Y2ggKHJ4X2ZpbHRlcikge1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ6XG4rXHRcdGVyciA9IG5ldGNfcG9ydF9hZGRfbDJfcHRwX2ZpbHRlcihucCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOlxuK1x0XHRlcnIgPSBuZXRjX3BvcnRfYWRkX2w0X3B0cF9maWx0ZXIobnApO1xuK1x0XHRicmVhaztcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDpcbitcdFx0ZXJyID0gbmV0Y19wb3J0X2FkZF9sMl9sNF9wdHBfZmlsdGVyKG5wKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRlcnIgPSAtRVJBTkdFO1xuK1x0fVxuK1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdG5wLVx1MDAzZXB0cF9yeF9maWx0ZXIgPSByeF9maWx0ZXI7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IG5ldGNfcG9ydF9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHQgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLFxuK1x0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XG4rXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1x0aW50IHJ4X2ZpbHRlciwgZXJyO1xuK1xuK1x0c3dpdGNoIChjb25maWctXHUwMDNldHhfdHlwZSkge1xuK1x0Y2FzZSBIV1RTVEFNUF9UWF9PTjpcbitcdGNhc2UgSFdUU1RBTVBfVFhfT0ZGOlxuK1x0XHRucC1cdTAwM2VwdHBfdHhfdHlwZSA9IGNvbmZpZy1cdTAwM2V0eF90eXBlO1xuK1x0XHRicmVhaztcbitcdGNhc2UgSFdUU1RBTVBfVFhfT05FU1RFUF9TWU5DOlxuK1x0XHRpZiAoIXByaXYtXHUwMDNldG1yX2RldilcbitcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbitcbitcdFx0bnAtXHUwMDNlcHRwX3R4X3R5cGUgPSBjb25maWctXHUwMDNldHhfdHlwZTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdHN3aXRjaCAoY29uZmlnLVx1MDAzZXJ4X2ZpbHRlcikge1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbitcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X1NZTkM6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVROlxuK1x0XHRyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UO1xuK1x0XHRicmVhaztcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9TWU5DOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0RFTEFZX1JFUTpcbitcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfU1lOQzpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6XG4rXHRcdHJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHR9XG4rXG4rXHRlcnIgPSBuZXRjX3BvcnRfc2V0X3B0cF9maWx0ZXIobnAsIHJ4X2ZpbHRlcik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiRmFpbGVkIHRvIHNldCBQVFAgZmlsdGVyXCIpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0Y29uZmlnLVx1MDAzZXJ4X2ZpbHRlciA9IHJ4X2ZpbHRlcjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgbmV0Y19wb3J0X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdCAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpXG4re1xuK1x0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBORVRDX1BPUlQoZHMsIHBvcnQpO1xuK1xuK1x0Y29uZmlnLVx1MDAzZXR4X3R5cGUgPSBucC1cdTAwM2VwdHBfdHhfdHlwZTtcbitcdGNvbmZpZy1cdTAwM2VyeF9maWx0ZXIgPSBucC1cdTAwM2VwdHBfcnhfZmlsdGVyO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbmV0Y19wb3J0X3R4dHN0YW1wX3R3b3N0ZXAoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmUpXG4re1xuK1x0REVDTEFSRV9CSVRNQVAodHNfcmVxX2lkX2JpdG1hcCwgTkVUQ19UU19SRVFfSURfTlVNKTtcbitcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IG5wLVx1MDAzZXN3aXRjaF9wcml2O1xuK1x0c3RydWN0IHNrX2J1ZmZfaGVhZCBmcmVlX2xpc3Q7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqc2tiX3RtcDtcbitcdHVuc2lnbmVkIGxvbmcgdHNfcmVxX2lkO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRiaXRtYXBfemVybyh0c19yZXFfaWRfYml0bWFwLCBORVRDX1RTX1JFUV9JRF9OVU0pO1xuK1x0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmZyZWVfbGlzdCk7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1xuK1x0c2tiX3F1ZXVlX3dhbGtfc2FmZShcdTAwMjZucC1cdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUsIHNrYiwgc2tiX3RtcCkge1xuK1x0XHRpZiAodGltZV9iZWZvcmUoTkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2VwdHBfdHhfdGltZSArXG4rXHRcdFx0XHRORVRDX1BUUF9UWF9UU1RBTVBfVElNRU9VVCwgamlmZmllcykpIHtcbitcdFx0XHRkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHQgICAgXCJQb3J0ICVkIHRzX3JlcV9pZCAldSB3aGljaCBzZWVtcyBsb3N0XFxuXCIsXG4rXHRcdFx0XHRcdCAgICBucC1cdTAwM2VkcC1cdTAwM2VpbmRleCwgTkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2V0c19yZXFfaWQpO1xuK1xuK1x0XHRcdF9fc2tiX3VubGluayhza2IsIFx1MDAyNm5wLVx1MDAzZXNrYl90eHRzdGFtcF9xdWV1ZSk7XG4rXHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZmcmVlX2xpc3QsIHNrYik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0X19zZXRfYml0KE5FVENfU0tCX0NCKHNrYiktXHUwMDNldHNfcmVxX2lkLCB0c19yZXFfaWRfYml0bWFwKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0dHNfcmVxX2lkID0gZmluZF9maXJzdF96ZXJvX2JpdCh0c19yZXFfaWRfYml0bWFwLCBORVRDX1RTX1JFUV9JRF9OVU0pO1xuK1x0aWYgKHRzX3JlcV9pZCA9PSBORVRDX1RTX1JFUV9JRF9OVU0pIHtcbitcdFx0ZXJyID0gLUVCVVNZO1xuK1x0XHRnb3RvIHVubG9ja19wdHA7XG4rXHR9XG4rXG4rXHRORVRDX1NLQl9DQihjbG9uZSktXHUwMDNldHNfcmVxX2lkID0gdHNfcmVxX2lkO1xuK1x0TkVUQ19TS0JfQ0IoY2xvbmUpLVx1MDAzZXB0cF90eF90aW1lID0gamlmZmllcztcbitcdHNrYl9zaGluZm8oY2xvbmUpLVx1MDAzZXR4X2ZsYWdzIHw9IFNLQlRYX0lOX1BST0dSRVNTO1xuK1x0X19za2JfcXVldWVfdGFpbChcdTAwMjZucC1cdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUsIGNsb25lKTtcbitcbit1bmxvY2tfcHRwOlxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1xuK1x0LyogRnJlZSB0aW1lZC1vdXQgU0tCcyBvdXRzaWRlIHRoZSBzcGlubG9jayB0byBhdm9pZCBjYWxsaW5nXG4rXHQgKiBrZnJlZV9za2IoKSB3aXRoIGEgZGVzdHJ1Y3RvciAoc29ja19lZnJlZSkgdW5kZXIgYSBzcGlubG9jay5cbitcdCAqL1xuK1x0X19za2JfcXVldWVfcHVyZ2UoXHUwMDI2ZnJlZV9saXN0KTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3ZvaWQgbmV0Y190d29zdGVwX3RzdGFtcF9oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0XHQgdTggdHNfcmVxX2lkLCB1NjQgdHMpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnNrYl90bXAsICpza2JfbWF0Y2ggPSBOVUxMO1xuK1x0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBORVRDX1BPUlQoZHMsIHBvcnQpO1xuK1x0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIGh3dHN0YW1wcztcbitcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1x0c2tiX3F1ZXVlX3dhbGtfc2FmZShcdTAwMjZucC1cdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUsIHNrYiwgc2tiX3RtcCkge1xuK1x0XHRpZiAoTkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2V0c19yZXFfaWQgIT0gdHNfcmVxX2lkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRfX3NrYl91bmxpbmsoc2tiLCBcdTAwMjZucC1cdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUpO1xuK1x0XHRza2JfbWF0Y2ggPSBza2I7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1xuK1x0aWYgKCFza2JfbWF0Y2gpIHtcbitcdFx0ZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcIlBvcnQgJWQgcmVjZWl2ZWQgYW4gZXhwaXJlZCBUeCB0aW1lc3RhbXAgcmVzcG9uc2UgKHRzX3JlcV9pZCAldSlcIixcbitcdFx0XHRcdCAgICBwb3J0LCB0c19yZXFfaWQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRod3RzdGFtcHMuaHd0c3RhbXAgPSBuc190b19rdGltZSh0cyk7XG4rXHRza2JfY29tcGxldGVfdHhfdGltZXN0YW1wKHNrYl9tYXRjaCwgXHUwMDI2aHd0c3RhbXBzKTtcbit9XG4rXG4rYm9vbCBuZXRjX3BvcnRfcnh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdHlwZSlcbit7XG4rXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHN0YW1wcyA9IHNrYl9od3RzdGFtcHMoc2tiKTtcbitcdHU2NCB0cyA9IE5FVENfU0tCX0NCKHNrYiktXHUwMDNldHN0YW1wO1xuK1xuK1x0aHd0c3RhbXBzLVx1MDAzZWh3dHN0YW1wID0gbnNfdG9fa3RpbWUodHMpO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZXRjX3BvcnRfcHJlcGFyZV9vbmVzdGVwX3N5bmMoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCAgIHUzMiBwdHBfY2xhc3MsIGJvb2wgKnR3b3N0ZXApXG4re1xuK1x0c3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtXHUwMDNlc3dpdGNoX3ByaXY7XG4rXHR1MTYgY29ycmVjdGlvbl9vZmZzZXQsIHRpbWVzdGFtcF9vZmZzZXQ7XG4rXHRzdHJ1Y3QgcHRwX2hlYWRlciAqcHRwX2hkcjtcbitcdHU4IG1zZ190eXBlLCB0d29zdGVwX2ZsYWc7XG4rXHRib29sIGlzX3VkcCA9IGZhbHNlO1xuK1x0dTMyIHBrdF90eXBlO1xuK1x0dTggKnBrdF9oZHI7XG4rXG4rXHRwdHBfaGRyID0gcHRwX3BhcnNlX2hlYWRlcihza2IsIHB0cF9jbGFzcyk7XG4rXHRpZiAoIXB0cF9oZHIpIHtcbitcdFx0ZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcIlBvcnQgJWQgZmFpbGVkIHRvIHBhcnNlIFN5bmMgaGVhZGVyXFxuXCIsXG4rXHRcdFx0XHQgICAgbnAtXHUwMDNlZHAtXHUwMDNlaW5kZXgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwa3RfaGRyID0gc2tiX21hY19oZWFkZXIoc2tiKTtcbitcdGNvcnJlY3Rpb25fb2Zmc2V0ID0gKHU4ICopXHUwMDI2cHRwX2hkci1cdTAwM2Vjb3JyZWN0aW9uIC0gcGt0X2hkcjtcbitcdHRpbWVzdGFtcF9vZmZzZXQgPSAodTggKilwdHBfaGRyICsgc2l6ZW9mKCpwdHBfaGRyKSAtIHBrdF9oZHI7XG4rXG4rXHQvKiBFbnN1cmUgdGhhdCB0aGUgZW50aXJlIG9yaWdpblRpbWVzdGFtcCBmaWVsZCBpcyBwcmVzZW50IGluIHRoZVxuK1x0ICogbGluZWFyIGJ1ZmZlciBvZiB0aGUgc2tiLlxuK1x0ICovXG4rXHRpZiAocGt0X2hkciArIHRpbWVzdGFtcF9vZmZzZXQgKyAxMCBcdTAwM2Ugc2tiLVx1MDAzZWRhdGEgKyBza2JfaGVhZGxlbihza2IpKSB7XG4rXHRcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgXCJQb3J0ICVkIFN5bmMgaGVhZGVyIG5vdCBpbiBsaW5lYXIgYXJlYVxcblwiLFxuK1x0XHRcdFx0ICAgIG5wLVx1MDAzZWRwLVx1MDAzZWluZGV4KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0bXNnX3R5cGUgPSBwdHBfZ2V0X21zZ3R5cGUocHRwX2hkciwgcHRwX2NsYXNzKTtcbitcdHR3b3N0ZXBfZmxhZyA9IHB0cF9oZHItXHUwMDNlZmxhZ19maWVsZFswXSBcdTAwMjYgMHgyO1xuK1xuK1x0LyogT25seSBhIFN5bmMgZnJhbWUgd2l0aCB0aGUgdHdvU3RlcEZsYWcgY2xlYXJlZCBjYW4gdXNlIG9uZS1zdGVwXG4rXHQgKiB0aW1lc3RhbXBpbmcuIEEgZnJhbWUgdGhhdCByZXF1ZXN0cyB0d28tc3RlcCAob3IgaXMgbm90IGEgU3luYylcbitcdCAqIGNhcnJpZXMgZGlmZmVyZW50IG9uLXdpcmUgZmllbGRzLCBzbyB0aGlzIGlzIGEgcmVhbCBjbGFzc2lmaWNhdGlvbjtcbitcdCAqIHJlcG9ydCBpdCB0aHJvdWdoICp0d29zdGVwIHNvIHRoZSBjYWxsZXIgZmFsbHMgYmFjayB0byB0aGUgdHdvLXN0ZXBcbitcdCAqIHBhdGguXG4rXHQgKi9cbitcdGlmIChtc2dfdHlwZSAhPSBQVFBfTVNHVFlQRV9TWU5DIHx8IHR3b3N0ZXBfZmxhZyAhPSAwKSB7XG4rXHRcdCp0d29zdGVwID0gdHJ1ZTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogVGhpcyBpcyBhIGdlbnVpbmUgb25lLXN0ZXAgU3luYyBmcmFtZS4gc2tiX3NoaW5mbygpLVx1MDAzZWRlc3RydWN0b3JfYXJnXG4rXHQgKiBpcyBsYXRlciB1c2VkIHRvIHBhc3MgdGhlIG5ldGNfcG9ydCBwb2ludGVyIHRvXG4rXHQgKiBuZXRjX29uZXN0ZXBfc2tiX2Rlc3RydWN0b3IoKSBmb3IgVFggY29tcGxldGlvbiBub3RpZmljYXRpb24uXG4rXHQgKiBNU0dfWkVST0NPUFkgYWxzbyB1c2VzIGRlc3RydWN0b3JfYXJnICh2aWEgc2tiX3pjb3B5X2luaXQoKSkgdG9cbitcdCAqIHRyYWNrIHVzZXItc3BhY2UgcGFnZSByZWZlcmVuY2VzLiBPdmVyd3JpdGluZyBpdCBpbiB0aGF0IGNhc2Ugd291bGRcbitcdCAqIGxlYWsgdGhlIHVidWZfaW5mbyByZWZlcmVuY2UgYW5kIHByZXZlbnQgdXNlciBwYWdlcyBmcm9tIGJlaW5nXG4rXHQgKiByZWxlYXNlZC4gUFRQIGFwcGxpY2F0aW9ucyBkbyBub3QgdXNlIE1TR19aRVJPQ09QWSwgYnV0IGd1YXJkXG4rXHQgKiBhZ2FpbnN0IGl0IGRlZmVuc2l2ZWx5LlxuK1x0ICovXG4rXHRpZiAoc2tiX3pjb3B5KHNrYikpIHtcbitcdFx0ZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcIlBvcnQgJWQgb25lLXN0ZXAgU3luYyBub3Qgc3VwcG9ydGVkIG9uIHplcm9jb3B5IHNrYlxcblwiLFxuK1x0XHRcdFx0ICAgIG5wLVx1MDAzZWRwLVx1MDAzZWluZGV4KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cGt0X3R5cGUgPSBwdHBfY2xhc3MgXHUwMDI2IFBUUF9DTEFTU19QTUFTSztcbitcdGlmIChwa3RfdHlwZSA9PSBQVFBfQ0xBU1NfSVBWNCB8fCBwa3RfdHlwZSA9PSBQVFBfQ0xBU1NfSVBWNilcbitcdFx0aXNfdWRwID0gdHJ1ZTtcbitcbitcdC8qIENhY2hlIHRoZSBwYXJzaW5nIHJlc3VsdHMgc28gdGhlIHRhZ2dlciB4bWl0IHBhdGggYW5kIHRoZSBkZWZlcnJlZFxuK1x0ICogd29yayBkbyBub3QgbmVlZCB0byByZS1wYXJzZSB0aGUgUFRQIGhlYWRlciwgYW5kIHNvIHRoYXRcbitcdCAqIG5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAoKSBjYW4gZGVyaXZlIHRoZXNlIHBhcmFtZXRlcnMgZnJvbSB0aGVcbitcdCAqIHNrYi5cbitcdCAqL1xuK1x0TkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2Vjb3JyZWN0aW9uX29mZnNldCA9IGNvcnJlY3Rpb25fb2Zmc2V0O1xuK1x0TkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2V0aW1lc3RhbXBfb2Zmc2V0ID0gdGltZXN0YW1wX29mZnNldDtcbitcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlaXNfdWRwID0gaXNfdWRwO1xuK1x0TkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2VwdHBfZmxhZyA9IE5FVENfUFRQX0ZMQUdfT05FU1RFUDtcbit9XG4rXG4rdm9pZCBuZXRjX3BvcnRfdHh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XG4rXHRib29sIHR3b3N0ZXAgPSBmYWxzZTtcbitcdHUzMiBwdHBfY2xhc3M7XG4rXG4rXHRORVRDX1NLQl9DQihza2IpLVx1MDAzZXB0cF9mbGFnID0gMDtcbitcdHB0cF9jbGFzcyA9IHB0cF9jbGFzc2lmeV9yYXcoc2tiKTtcbitcdGlmIChwdHBfY2xhc3MgPT0gUFRQX0NMQVNTX05PTkUpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChucC1cdTAwM2VwdHBfdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTkVTVEVQX1NZTkMpXG4rXHRcdG5ldGNfcG9ydF9wcmVwYXJlX29uZXN0ZXBfc3luYyhucCwgc2tiLCBwdHBfY2xhc3MsIFx1MDAyNnR3b3N0ZXApO1xuK1xuK1x0aWYgKG5wLVx1MDAzZXB0cF90eF90eXBlID09IEhXVFNUQU1QX1RYX09OIHx8IHR3b3N0ZXApIHtcbitcdFx0c3RydWN0IHNrX2J1ZmYgKmNsb25lID0gc2tiX2Nsb25lX3NrKHNrYik7XG4rXG4rXHRcdGlmICh1bmxpa2VseSghY2xvbmUpKVxuK1x0XHRcdHJldHVybjtcbitcbitcdFx0aWYgKG5ldGNfcG9ydF90eHRzdGFtcF90d29zdGVwKG5wLCBjbG9uZSkpIHtcbitcdFx0XHRrZnJlZV9za2IoY2xvbmUpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuK1x0XHRORVRDX1NLQl9DQihza2IpLVx1MDAzZWNsb25lID0gY2xvbmU7XG4rXHRcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlcHRwX2ZsYWcgPSBORVRDX1BUUF9GTEFHX1RXT1NURVA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9zZXRfb25lc3RlcF9jb250cm9sKHN0cnVjdCBuZXRjX3BvcnQgKm5wLCBib29sIHVkcCxcbitcdFx0XHRcdFx0ICBpbnQgb2Zmc2V0KVxuK3tcbitcdHUzMiB2YWw7XG4rXG4rXHR2YWwgPSBQTV9TSU5HTEVfU1RFUF9FTiB8IEZJRUxEX1BSRVAoUE1fU0lOR0xFX1NURVBfT0ZGU0VULCBvZmZzZXQpO1xuK1x0aWYgKHVkcClcbitcdFx0dmFsIHw9IFBNX1NJTkdMRV9TVEVQX0NIO1xuK1x0bmV0Y19tYWNfcG9ydF93cihucCwgTkVUQ19QTV9TSU5HTEVfU1RFUCgwKSwgdmFsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbmV0Y19vbmVzdGVwX3NrYl9kZXN0cnVjdG9yKHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGVzdHJ1Y3Rvcl9hcmc7XG4rXG4rXHQvKiBza2IgaGFzIGJlZW4gdHJhbnNtaXR0ZWQgYnkgaGFyZHdhcmUsIHNjaGVkdWxlIHdvcmsgdG8gc2VuZFxuK1x0ICogdGhlIG5leHQgcXVldWVkIG9uZS1zdGVwIFN5bmMgcGFja2V0LlxuK1x0ICovXG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNm5wLVx1MDAzZW9uZXN0ZXBfd29yayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgICAgdTY0IHRzdGFtcClcbit7XG4rXHR1MTYgY29ycmVjdGlvbl9vZmZzZXQgPSBORVRDX1NLQl9DQihza2IpLVx1MDAzZWNvcnJlY3Rpb25fb2Zmc2V0O1xuK1x0dTE2IHRpbWVzdGFtcF9vZmZzZXQgPSBORVRDX1NLQl9DQihza2IpLVx1MDAzZXRpbWVzdGFtcF9vZmZzZXQ7XG4rXHRib29sIGlzX3VkcCA9IE5FVENfU0tCX0NCKHNrYiktXHUwMDNlaXNfdWRwO1xuK1x0dTggKnBrdF9oZHIgPSBza2JfbWFjX2hlYWRlcihza2IpO1xuK1x0dTY0IHNlYztcbitcdHUzMiBucztcbitcbitcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNldHN0YW1wID0gdHN0YW1wO1xuK1x0TkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2VwdHBfZmxhZyA9IE5FVENfUFRQX0ZMQUdfT05FU1RFUDtcbitcbitcdC8qIFVwZGF0ZSBvcmlnaW5UaW1lc3RhbXAgZmllbGQgb2YgU3luYyBwYWNrZXRcbitcdCAqIC0gNDggYml0cyBzZWNvbmRzIGZpZWxkXG4rXHQgKiAtIDMyIGJpdHMgbmFub3NlY29uZHMgZmllbGRcbitcdCAqL1xuK1x0c2VjID0gZGl2X3U2NF9yZW0odHN0YW1wLCBOU0VDX1BFUl9TRUMsIFx1MDAyNm5zKTtcbitcdHB1dF91bmFsaWduZWRfYmUxNigoc2VjIFx1MDAzZVx1MDAzZSAzMikgXHUwMDI2IDB4ZmZmZiwgcGt0X2hkciArIHRpbWVzdGFtcF9vZmZzZXQpO1xuK1x0cHV0X3VuYWxpZ25lZF9iZTMyKHNlYyBcdTAwMjYgMHhmZmZmZmZmZiwgcGt0X2hkciArIHRpbWVzdGFtcF9vZmZzZXQgKyAyKTtcbitcdHB1dF91bmFsaWduZWRfYmUzMihucywgcGt0X2hkciArIHRpbWVzdGFtcF9vZmZzZXQgKyA2KTtcbitcbitcdG5ldGNfcG9ydF9zZXRfb25lc3RlcF9jb250cm9sKG5wLCBpc191ZHAsIGNvcnJlY3Rpb25fb2Zmc2V0KTtcbitcbitcdC8qIE9ycGhhbiB0aGUgc2tiIHRvIHJlbGVhc2UgdGhlIHNvY2tldCBzZW5kIGJ1ZmZlciBxdW90YSBpbW1lZGlhdGVseS5cbitcdCAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIHNvY2tfd2ZyZWUoKSBvbmx5IHVwZGF0ZXMgc2tfd21lbV9hbGxvYyBhbmRcbitcdCAqIGRvZXMgbm90IHRvdWNoIHNrYi1cdTAwM2VkYXRhLiBBZnRlciBza2Jfb3JwaGFuKCksIHdlIGluc3RhbGwgb3VyIG93blxuK1x0ICogZGVzdHJ1Y3RvciBzbyB0aGF0IHdoZW4gdGhlIGNvbmR1aXQgZHJpdmVyIGZyZWVzIHRoZSBza2IgYWZ0ZXIgVFhcbitcdCAqIGNvbXBsZXRpb24sIHdlIGdldCBub3RpZmllZCB0byBzZW5kIHRoZSBuZXh0IHF1ZXVlZCBTeW5jIHBhY2tldC5cbitcdCAqL1xuK1x0c2tiX29ycGhhbihza2IpO1xuK1x0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWRlc3RydWN0b3JfYXJnID0gbnA7XG4rXHRza2ItXHUwMDNlZGVzdHJ1Y3RvciA9IG5ldGNfb25lc3RlcF9za2JfZGVzdHJ1Y3Rvcjtcbit9XG4rXG4rdm9pZCBuZXRjX3BvcnRfb25lc3RlcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0Y19wb3J0LFxuK1x0XHRcdFx0XHQgICAgb25lc3RlcF93b3JrKTtcbitcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IG5wLVx1MDAzZXN3aXRjaF9wcml2O1xuK1x0c3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEgKnRhZ2dlcl9kYXRhO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHU2NCB0c3RhbXA7XG4rXG4rXHQvKiBEZXF1ZXVlIHRoZSBuZXh0IHBlbmRpbmcgc2tiIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGluLWZsaWdodCBzbG90LFxuK1x0ICogc28gYSBuZXdseSBhcnJpdmluZyBvbmUtc3RlcCBTeW5jIGNhbm5vdCBqdW1wIGFoZWFkIG9mIGl0LiBPbmx5XG4rXHQgKiByZWxlYXNlIHRoZSBzbG90IHdoZW4gdGhlIHF1ZXVlIGlzIGVtcHR5LiBUaGlzIGtlZXBzIG9yZGVyaW5nIGFuZFxuK1x0ICogY2xvc2VzIHRoZSBlbnF1ZXVlL3dha2V1cCByYWNlLlxuK1x0ICovXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1x0c2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZucC1cdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSk7XG4rXHRpZiAoIXNrYikge1xuK1x0XHRfX2NsZWFyX2JpdChORVRDX0ZMQUdfT05FU1RFUF9JTl9QUk9HUkVTUywgXHUwMDI2bnAtXHUwMDNlZmxhZ3MpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5wLVx1MDAzZXB0cF9sb2NrKTtcbitcbitcdHRzdGFtcCA9IG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZShwcml2LVx1MDAzZXRtcl9kZXYpO1xuK1x0aWYgKCF0c3RhbXApIHtcbitcdFx0LyogVGhlIFBUUCB0aW1lciBpcyBub3QgYXZhaWxhYmxlLCBzbyB0aGVyZSBpcyBubyBjb3JyZWN0XG4rXHRcdCAqIHRpbWVzdGFtcCB0byBwcm9ncmFtLiBEcm9wIHRoaXMgZnJhbWUgYW5kIHJlLWtpY2sgdG9cbitcdFx0ICogcHJvY2VzcyB0aGUgcmVtYWluaW5nIHF1ZXVlZCBmcmFtZXMgKG9yIHJlbGVhc2UgdGhlIHNsb3QpLlxuK1x0XHQgKlxuK1x0XHQgKiBuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKCkgaGFzIG5vdCBydW4gZm9yIHRoaXMgc2tiIHlldCwgc29cbitcdFx0ICogbmV0Y19vbmVzdGVwX3NrYl9kZXN0cnVjdG9yKCkgaXMgbm90IGluc3RhbGxlZCBvbiBpdC4gRnJlZWluZ1xuK1x0XHQgKiBpdCB0aGVyZWZvcmUgZG9lcyBub3QgcmVzY2hlZHVsZSBvbmVzdGVwX3dvcmssIHNvIHRoZSB3b3JrXG4rXHRcdCAqIG11c3QgYmUgcmVzY2hlZHVsZWQgZXhwbGljaXRseSB0byBrZWVwIGRyYWluaW5nIHRoZSBxdWV1ZS5cbitcdFx0ICovXG4rXHRcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgXCJQb3J0ICVkIFBUUCB0aW1lciB1bmF2YWlsYWJsZSwgZHJvcCBTeW5jXFxuXCIsXG4rXHRcdFx0XHQgICAgbnAtXHUwMDNlZHAtXHUwMDNlaW5kZXgpO1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZucC1cdTAwM2VvbmVzdGVwX3dvcmspO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKiBSZXVzZSB0aGUgb2Zmc2V0cyBjYWNoZWQgYXQgZW5xdWV1ZSB0aW1lOyBvbmx5IHRoZSB0aW1lc3RhbXAgaXNcbitcdCAqIHJlYWQgZnJlc2ggc28gaXQgcmVmbGVjdHMgdGhlIGFjdHVhbCBUWCBtb21lbnQuXG4rXHQgKi9cbitcdG5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAobnAsIHNrYiwgdHN0YW1wKTtcbitcbitcdC8qIFRhZyBhbmQgaGFuZCB0aGUgZnJhbWUgZGlyZWN0bHkgdG8gdGhlIGNvbmR1aXQgdmlhIHRoZSB0YWdnZXIsXG4rXHQgKiBieXBhc3NpbmcgZHNhX3VzZXJfeG1pdCgpIHNvIHRoZSBUWCBzdGF0cyBhcmUgbm90IGNvdW50ZWQgdHdpY2UuXG4rXHQgKi9cbitcdHRhZ2dlcl9kYXRhID0gcHJpdi1cdTAwM2Vkcy1cdTAwM2V0YWdnZXJfZGF0YTtcbitcdHRhZ2dlcl9kYXRhLVx1MDAzZW9uZXN0ZXBfc3luY194bWl0KHNrYiwgbnAtXHUwMDNlZHAtXHUwMDNldXNlcik7XG4rfVxuK1xuK3N0cnVjdCBza19idWZmICpuZXRjX29uZXN0ZXBfc3luY19oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XG4rXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1x0dTY0IHRzdGFtcDtcbitcbitcdC8qIFNlcmlhbGl6ZSBvbmUtc3RlcCBTeW5jIHBhY2tldHM6IG9ubHkgb25lIGNhbiBiZSBpbi1mbGlnaHQgYXQgYVxuK1x0ICogdGltZSBiZWNhdXNlIHRoZSBTSU5HTEVfU1RFUCByZWdpc3RlciBpcyBzaGFyZWQgYW5kIG11c3QgbWF0Y2ggdGhlXG4rXHQgKiBwYWNrZXQgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkLiBDbGFpbSB0aGUgaW4tZmxpZ2h0IHNsb3QgdW5kZXJcbitcdCAqIHB0cF9sb2NrLiBJZiBhbm90aGVyIG9uZS1zdGVwIFN5bmMgaXMgYWxyZWFkeSBpbi1mbGlnaHQsIHF1ZXVlIHRoaXNcbitcdCAqIHNrYiBhbmQgcmV0dXJuIE5VTEw7IG93bmVyc2hpcCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcXVldWUsIHNvIG5vXG4rXHQgKiBleHRyYSByZWZlcmVuY2UgaXMgbmVlZGVkIGFuZCBuZXRjX3htaXQoKSBzdG9wcyBwcm9jZXNzaW5nIGl0LlxuK1x0ICovXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1x0aWYgKHRlc3RfYml0KE5FVENfRkxBR19PTkVTVEVQX0lOX1BST0dSRVNTLCBcdTAwMjZucC1cdTAwM2VmbGFncykpIHtcbitcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZucC1cdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSwgc2tiKTtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHRzdGFtcCA9IG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZShwcml2LVx1MDAzZXRtcl9kZXYpO1xuK1x0aWYgKCF0c3RhbXApIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1xuK1x0XHQvKiBUaGlzIGlzIGEgdmFsaWQgb25lLXN0ZXAgU3luYyBmcmFtZSwgYnV0IHRoZSBQVFAgdGltZXIgaXNcbitcdFx0ICogbm90IGF2YWlsYWJsZSwgc28gdGhlcmUgaXMgbm8gY29ycmVjdCB0aW1lc3RhbXAgdG8gcHJvZ3JhbS5cbitcdFx0ICogRHJvcCB0aGUgZnJhbWUgcmF0aGVyIHRoYW4gdHJhbnNtaXQgYSBTeW5jIHdpdGggYSBib2d1c1xuK1x0XHQgKiBjb3JyZWN0aW9uIGZpZWxkLlxuK1x0XHQgKi9cbitcdFx0ZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcIlBvcnQgJWQgUFRQIHRpbWVyIHVuYXZhaWxhYmxlLCBkcm9wIFN5bmNcXG5cIixcbitcdFx0XHRcdCAgICBucC1cdTAwM2VkcC1cdTAwM2VpbmRleCk7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdF9fc2V0X2JpdChORVRDX0ZMQUdfT05FU1RFUF9JTl9QUk9HUkVTUywgXHUwMDI2bnAtXHUwMDNlZmxhZ3MpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1xuK1x0LyogV2Ugb3duIHRoZSBpbi1mbGlnaHQgc2xvdC4gUHJvZ3JhbSB0aGUgcmVnaXN0ZXIgYW5kIGluc3RhbGwgdGhlXG4rXHQgKiBkZXN0cnVjdG9yLlxuK1x0ICovXG4rXHRuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKG5wLCBza2IsIHRzdGFtcCk7XG4rXG4rXHRyZXR1cm4gc2tiO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaC5oIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2guaFxuaW5kZXggMzA1ZjJhOTJlMmY5YS4uMjk2ZGYxZDcyMzMzZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoLmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoLmhcbkBAIC01Nyw2ICs1Nyw3IEBAIHN0cnVjdCBuZXRjX3N3aXRjaDtcbiBcbiBzdHJ1Y3QgbmV0Y19zd2l0Y2hfaW5mbyB7XG4gXHR1MzIgbnVtX3BvcnRzO1xuK1x0dTMyIHRtcl9kZXZmbjtcbiBcdHZvaWQgKCpwaHlsaW5rX2dldF9jYXBzKShpbnQgcG9ydCwgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpO1xuIH07XG4gXG5AQCAtNjYsOSArNjcsMjMgQEAgc3RydWN0IG5ldGNfcG9ydF9jYXBzIHtcbiBcdHUzMiBwc2V1ZG9fbGluazoxO1xuIH07XG4gXG4rZW51bSBuZXRjX3B0cF90eXBlIHtcbitcdE5FVENfUFRQX0wyLFxuK1x0TkVUQ19QVFBfTDRfSVBWNF9FVkVOVCxcbitcdE5FVENfUFRQX0w0X0lQVjRfR0VORVJBTCxcbitcdE5FVENfUFRQX0w0X0lQVjZfRVZFTlQsXG4rXHRORVRDX1BUUF9MNF9JUFY2X0dFTkVSQUwsXG4rXHRORVRDX1BUUF9NQVgsXG4rfTtcbitcbiBlbnVtIG5ldGNfaG9zdF9yZWFzb24ge1xuIFx0LyogU29mdHdhcmUgZGVmaW5lZCBob3N0IHJlYXNvbnMgKi9cbiBcdE5FVENfSFJfSE9TVF9GTE9PRCA9IDgsXG4rXHRORVRDX0hSX1BUUF9UUkFQICAgPSA5LFxuK307XG4rXG4rZW51bSBuZXRjX3BvcnRfZmxhZ3Mge1xuK1x0TkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MgPSAwLFxuIH07XG4gXG4gc3RydWN0IG5ldGNfcG9ydCB7XG5AQCAtODQsNyArOTksMTkgQEAgc3RydWN0IG5ldGNfcG9ydCB7XG4gXHR1MTYgdWM6MTtcbiBcdHUxNiBtYzoxO1xuIFx0dTE2IHB2aWQ7XG4tXHRzdHJ1Y3QgaXBmdF9lbnRyeV9kYXRhICpob3N0X2Zsb29kO1xuK1x0dTMyIGlwZnRfaGZfZWlkO1xuK1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdC8qIFNlcmlhbGl6ZSBQVFAgb3BlcmF0aW9ucyAqL1xuK1x0c3BpbmxvY2tfdCBwdHBfbG9jaztcbitcdC8qIHNrYiBxdWV1ZSBmb3IgdHdvLXN0ZXAgdGltZXN0YW1wIGZyYW1lcyAqL1xuK1x0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfdHh0c3RhbXBfcXVldWU7XG4rXHQvKiBza2IgcXVldWUgZm9yIG9uZS1zdGVwIHN5bmMgZnJhbWVzICovXG4rXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9vbmVzdGVwX3F1ZXVlO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IG9uZXN0ZXBfd29yaztcbitcdGludCBwdHBfdHhfdHlwZTtcbitcdGludCBwdHBfcnhfZmlsdGVyO1xuK1x0dTMyIHB0cF9pcGZ0X2VpZFtORVRDX1BUUF9NQVhdO1xuIH07XG4gXG4gc3RydWN0IG5ldGNfc3dpdGNoX3JlZ3Mge1xuQEAgLTEzOSw2ICsxNjYsNyBAQCBzdHJ1Y3QgbmV0Y19zd2l0Y2gge1xuIFx0dTMyIG51bV9icDtcbiBcbiBcdHN0cnVjdCBicHRfY2ZnZV9kYXRhICpicHRfbGlzdDtcbitcdHN0cnVjdCBwY2lfZGV2ICp0bXJfZGV2OyAvKiBUaGUgUFRQIFRpbWVyIFBDSSBkZXZpY2UgKi9cbiB9O1xuIFxuICNkZWZpbmUgTkVUQ19QUklWKGRzKVx0XHRcdCgoc3RydWN0IG5ldGNfc3dpdGNoICopKChkcyktXHUwMDNlcHJpdikpXG5AQCAtMTg3LDYgKzIxNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRjX2RlbF92bGFuX2VudHJ5KHN0cnVjdCBuZXRjX3ZsYW5fZW50cnkgKmVudHJ5KVxuIH1cbiBcbiBpbnQgbmV0Y19zd2l0Y2hfcGxhdGZvcm1fcHJvYmUoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KTtcbit2b2lkIG5ldGNfbWFjX3BvcnRfd3Ioc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsIHUzMiB2YWwpO1xuIFxuIC8qIGV0aHRvb2wgQVBJcyAqL1xuIHZvaWQgbmV0Y19wb3J0X2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuQEAgLTIwMyw0ICsyMzIsMjIgQEAgdm9pZCBuZXRjX3BvcnRfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHQgICB1MzIgc3NldCwgdTggKmRhdGEpO1xuIHZvaWQgbmV0Y19wb3J0X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU2NCAqZGF0YSk7XG4gXG4rLyogUFRQIEFQSXMgKi9cbitpbnQgbmV0Y19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0X2lkLFxuK1x0XHQgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKTtcbitpbnQgbmV0Y19wb3J0X2h3dHN0YW1wX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0X2lkLFxuK1x0XHRcdCAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4rXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitpbnQgbmV0Y19wb3J0X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0X2lkLFxuK1x0XHRcdCAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpO1xuK3ZvaWQgbmV0Y190d29zdGVwX3RzdGFtcF9oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0XHQgdTggdHNfcmVxX2lkLCB1NjQgdHMpO1xuK2Jvb2wgbmV0Y19wb3J0X3J4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHR5cGUpO1xuK3ZvaWQgbmV0Y19wb3J0X3R4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnRfaWQsXG4rXHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rdm9pZCBuZXRjX3BvcnRfb25lc3RlcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4rc3RydWN0IHNrX2J1ZmYgKm5ldGNfb25lc3RlcF9zeW5jX2hhbmRsZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2hfaHcuaFxuaW5kZXggMTQwNGFlNDFjN2JjYi4uMzdkMWRkN2VjMmM3ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoX2h3LmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoX2h3LmhcbkBAIC0yMDMsNiArMjAzLDExIEBAIGVudW0gbmV0Y19zdGdfc3RhZ2Uge1xuICNkZWZpbmUgICBTU1BfMTBNXHRcdFx0MVxuICNkZWZpbmUgICBTU1BfMUdcdFx0XHQyXG4gXG4rI2RlZmluZSBORVRDX1BNX1NJTkdMRV9TVEVQKGEpXHRcdCgweDEwYzAgKyAoYSkgKiAweDQwMClcbisjZGVmaW5lICBQTV9TSU5HTEVfU1RFUF9DSFx0XHRCSVQoNilcbisjZGVmaW5lICBQTV9TSU5HTEVfU1RFUF9PRkZTRVRcdFx0R0VOTUFTSygxNSwgNylcbisjZGVmaW5lICBQTV9TSU5HTEVfU1RFUF9FTlx0XHRCSVQoMzEpXG4rXG4gLyogUG9ydCBNQUMgMC8xIFJlY2VpdmUgRXRoZXJuZXQgT2N0ZXRzIENvdW50ZXIgKi9cbiAjZGVmaW5lIE5FVENfUE1fUkVPQ1QoYSlcdFx0KDB4MTEwMCArIChhKSAqIDB4NDAwKVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9uZXRjLmMgYi9kcml2ZXJzL3B0cC9wdHBfbmV0Yy5jXG5pbmRleCA5NGU5NTJlZTY5OTAyLi5mMmI3N2JkNWFmMDE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX25ldGMuY1xuKysrIGIvZHJpdmVycy9wdHAvcHRwX25ldGMuY1xuQEAgLTEyNyw2ICsxMjcsMTcgQEAgc3RydWN0IG5ldGNfdGltZXIge1xuIFxuICNkZWZpbmUgbmV0Y190aW1lcl9yZChwLCBvKVx0XHRuZXRjX3JlYWQoKHApLVx1MDAzZWJhc2UgKyAobykpXG4gI2RlZmluZSBuZXRjX3RpbWVyX3dyKHAsIG8sIHYpXHRcdG5ldGNfd3JpdGUoKHApLVx1MDAzZWJhc2UgKyAobyksIHYpXG4rXG4rLyogVGhlIDY0LWJpdCB0aW1lciByZWdpc3RlcnMgY29uc2lzdCBvZiBhIGxvdyAoTCkgYW5kIGhpZ2ggKEgpIHJlZ2lzdGVyIHBhaXIuXG4rICogSGFyZHdhcmUgcmVxdWlyZXMgYSBzdHJpY3QgYWNjZXNzIG9yZGVyOiBmb3Igd3JpdGVzLCBUTVJfeHh4X0wgbXVzdCBiZVxuKyAqIHdyaXR0ZW4gZmlyc3QsIHdoaWNoIGxhdGNoZXMgdGhlIHZhbHVlIGludG8gYSBzaGFkb3cgcmVnaXN0ZXI7IHRoZSB3cml0ZVxuKyAqIHRvIFRNUl94eHhfSCB0aGVuIGF0b21pY2FsbHkgdHJhbnNmZXJzIGJvdGggc2hhZG93IHJlZ2lzdGVycyBpbnRvIHRoZSBsaXZlXG4rICogY291bnRlci4gRm9yIHJlYWRzLCBUTVJfeHh4X0wgbXVzdCBiZSByZWFkIGZpcnN0IHRvIGNhcHR1cmUgYSBjb2hlcmVudFxuKyAqIHNuYXBzaG90LiBpb3dyaXRlNjRfbG9faGkoKSBhbmQgaW9yZWFkNjRfbG9faGkoKSBlbmZvcmNlIHRoaXMgTC1iZWZvcmUtSFxuKyAqIG9yZGVyaW5nLlxuKyAqL1xuKyNkZWZpbmUgbmV0Y190aW1lcl9yZDY0KHAsIG8pXHRcdGlvcmVhZDY0X2xvX2hpKChwKS1cdTAwM2ViYXNlICsgKG8pKVxuKyNkZWZpbmUgbmV0Y190aW1lcl93cjY0KHAsIG8sIHYpXHRpb3dyaXRlNjRfbG9faGkodiwgKHApLVx1MDAzZWJhc2UgKyAobykpXG4gI2RlZmluZSBwdHBfdG9fbmV0Y190aW1lcihwdHApXHRcdGNvbnRhaW5lcl9vZigocHRwKSwgc3RydWN0IG5ldGNfdGltZXIsIGNhcHMpXG4gXG4gc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHRpbWVyX2Nsa19zcmNbXSA9IHtcbkBAIC0xMzYsNjYgKzE0Nyw0NSBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGltZXJfY2xrX3NyY1tdID0ge1xuIFxuIHN0YXRpYyB2b2lkIG5ldGNfdGltZXJfY250X3dyaXRlKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2LCB1NjQgbnMpXG4ge1xuLVx0dTMyIHRtcl9jbnRfaCA9IHVwcGVyXzMyX2JpdHMobnMpO1xuLVx0dTMyIHRtcl9jbnRfbCA9IGxvd2VyXzMyX2JpdHMobnMpO1xuLVxuLVx0LyogV3JpdGVzIHRvIHRoZSBUTVJfQ05UX0wgcmVnaXN0ZXIgY29waWVzIHRoZSB3cml0dGVuIHZhbHVlXG4tXHQgKiBpbnRvIHRoZSBzaGFkb3cgVE1SX0NOVF9MIHJlZ2lzdGVyLiBXcml0ZXMgdG8gdGhlIFRNUl9DTlRfSFxuLVx0ICogcmVnaXN0ZXIgY29waWVzIHRoZSB2YWx1ZXMgd3JpdHRlbiBpbnRvIHRoZSBzaGFkb3cgVE1SX0NOVF9IXG4tXHQgKiByZWdpc3Rlci4gQ29udGVudHMgb2YgdGhlIHNoYWRvdyByZWdpc3RlcnMgYXJlIGNvcGllZCBpbnRvXG4tXHQgKiB0aGUgVE1SX0NOVF9MIGFuZCBUTVJfQ05UX0ggcmVnaXN0ZXJzIGZvbGxvd2luZyBhIHdyaXRlIGludG9cbi1cdCAqIHRoZSBUTVJfQ05UX0ggcmVnaXN0ZXIuIFNvIHRoZSB1c2VyIG11c3Qgd3JpdGVzIHRvIFRNUl9DTlRfTFxuLVx0ICogcmVnaXN0ZXIgZmlyc3QuIE90aGVyIEgvTCByZWdpc3RlcnMgc2hvdWxkIGhhdmUgdGhlIHNhbWVcbi1cdCAqIGJlaGF2aW9yLlxuLVx0ICovXG4tXHRuZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX0NOVF9MLCB0bXJfY250X2wpO1xuLVx0bmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9DTlRfSCwgdG1yX2NudF9oKTtcbitcdG5ldGNfdGltZXJfd3I2NChwcml2LCBORVRDX1RNUl9DTlRfTCwgbnMpO1xuIH1cbiBcbiBzdGF0aWMgdTY0IG5ldGNfdGltZXJfb2Zmc2V0X3JlYWQoc3RydWN0IG5ldGNfdGltZXIgKnByaXYpXG4ge1xuLVx0dTMyIHRtcl9vZmZfbCwgdG1yX29mZl9oO1xuLVx0dTY0IG9mZnNldDtcbi1cbi1cdHRtcl9vZmZfbCA9IG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfT0ZGX0wpO1xuLVx0dG1yX29mZl9oID0gbmV0Y190aW1lcl9yZChwcml2LCBORVRDX1RNUl9PRkZfSCk7XG4tXHRvZmZzZXQgPSAoKCh1NjQpdG1yX29mZl9oKSBcdTAwM2NcdTAwM2MgMzIpIHwgdG1yX29mZl9sO1xuLVxuLVx0cmV0dXJuIG9mZnNldDtcbitcdHJldHVybiBuZXRjX3RpbWVyX3JkNjQocHJpdiwgTkVUQ19UTVJfT0ZGX0wpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZXRjX3RpbWVyX29mZnNldF93cml0ZShzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdiwgdTY0IG9mZnNldClcbiB7XG4tXHR1MzIgdG1yX29mZl9oID0gdXBwZXJfMzJfYml0cyhvZmZzZXQpO1xuLVx0dTMyIHRtcl9vZmZfbCA9IGxvd2VyXzMyX2JpdHMob2Zmc2V0KTtcbi1cbi1cdG5ldGNfdGltZXJfd3IocHJpdiwgTkVUQ19UTVJfT0ZGX0wsIHRtcl9vZmZfbCk7XG4tXHRuZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX09GRl9ILCB0bXJfb2ZmX2gpO1xuK1x0bmV0Y190aW1lcl93cjY0KHByaXYsIE5FVENfVE1SX09GRl9MLCBvZmZzZXQpO1xuIH1cbiBcbiBzdGF0aWMgdTY0IG5ldGNfdGltZXJfY3VyX3RpbWVfcmVhZChzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdilcbiB7XG4tXHR1MzIgdGltZV9oLCB0aW1lX2w7XG4tXHR1NjQgbnM7XG4rXHRyZXR1cm4gbmV0Y190aW1lcl9yZDY0KHByaXYsIE5FVENfVE1SX0NVUl9USU1FX0wpO1xuK31cbiBcbi1cdC8qIFRoZSB1c2VyIHNob3VsZCByZWFkIE5FVENfVE1SX0NVUl9USU1FX0wgZmlyc3QgdG9cbi1cdCAqIGdldCBjb3JyZWN0IGN1cnJlbnQgdGltZS5cbi1cdCAqL1xuLVx0dGltZV9sID0gbmV0Y190aW1lcl9yZChwcml2LCBORVRDX1RNUl9DVVJfVElNRV9MKTtcbi1cdHRpbWVfaCA9IG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfQ1VSX1RJTUVfSCk7XG4tXHRucyA9ICh1NjQpdGltZV9oIFx1MDAzY1x1MDAzYyAzMiB8IHRpbWVfbDtcbit1NjQgbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHN0cnVjdCBuZXRjX3RpbWVyICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHU2NCBjdXJfdGltZTtcbiBcbi1cdHJldHVybiBucztcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGN1cl90aW1lID0gbmV0Y190aW1lcl9jdXJfdGltZV9yZWFkKHByaXYpO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiBjdXJfdGltZTtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwobmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKTtcbiBcbiBzdGF0aWMgdm9pZCBuZXRjX3RpbWVyX2FsYXJtX3dyaXRlKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2LFxuIFx0XHRcdFx0ICAgdTY0IGFsYXJtLCBpbnQgaW5kZXgpXG4ge1xuLVx0dTMyIGFsYXJtX2ggPSB1cHBlcl8zMl9iaXRzKGFsYXJtKTtcbi1cdHUzMiBhbGFybV9sID0gbG93ZXJfMzJfYml0cyhhbGFybSk7XG4tXG4tXHRuZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX0FMQVJNX0woaW5kZXgpLCBhbGFybV9sKTtcbi1cdG5ldGNfdGltZXJfd3IocHJpdiwgTkVUQ19UTVJfQUxBUk1fSChpbmRleCksIGFsYXJtX2gpO1xuK1x0bmV0Y190aW1lcl93cjY0KHByaXYsIE5FVENfVE1SX0FMQVJNX0woaW5kZXgpLCBhbGFybSk7XG4gfVxuIFxuIHN0YXRpYyB1MzIgbmV0Y190aW1lcl9nZXRfaW50ZWdyYWxfcGVyaW9kKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2KVxuQEAgLTQ5NywyMiArNDg3LDE5IEBAIHN0YXRpYyB2b2lkIG5ldGNfdGltZXJfaGFuZGxlX2V0dHNfZXZlbnQoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsIGludCBpbmRleCxcbiBcdFx0XHRcdFx0IGJvb2wgdXBkYXRlX2V2ZW50KVxuIHtcbiBcdHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgZXZlbnQ7XG4tXHR1MzIgZXR0c19sID0gMCwgZXR0c19oID0gMDtcbitcdHU2NCBldHRzID0gMDtcbiBcbi1cdHdoaWxlIChuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX1NUQVQpIFx1MDAyNiBUTVJfU1RBVF9FVFNfVkxEKGluZGV4KSkge1xuLVx0XHRldHRzX2wgPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0VUVFNfTChpbmRleCkpO1xuLVx0XHRldHRzX2ggPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0VUVFNfSChpbmRleCkpO1xuLVx0fVxuK1x0d2hpbGUgKG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfU1RBVCkgXHUwMDI2IFRNUl9TVEFUX0VUU19WTEQoaW5kZXgpKVxuK1x0XHRldHRzID0gbmV0Y190aW1lcl9yZDY0KHByaXYsIE5FVENfVE1SX0VUVFNfTChpbmRleCkpO1xuIFxuIFx0LyogSW52YWxpZCB0aW1lIHN0YW1wICovXG4tXHRpZiAoIWV0dHNfbCBcdTAwMjZcdTAwMjYgIWV0dHNfaClcbitcdGlmICghZXR0cylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHVwZGF0ZV9ldmVudCkge1xuIFx0XHRldmVudC50eXBlID0gUFRQX0NMT0NLX0VYVFRTO1xuIFx0XHRldmVudC5pbmRleCA9IGluZGV4O1xuLVx0XHRldmVudC50aW1lc3RhbXAgPSAodTY0KWV0dHNfaCBcdTAwM2NcdTAwM2MgMzI7XG4tXHRcdGV2ZW50LnRpbWVzdGFtcCB8PSBldHRzX2w7XG4rXHRcdGV2ZW50LnRpbWVzdGFtcCA9IGV0dHM7XG4gXHRcdHB0cF9jbG9ja19ldmVudChwcml2LVx1MDAzZWNsb2NrLCBcdTAwMjZldmVudCk7XG4gXHR9XG4gfVxuQEAgLTgwMiw3ICs3ODksNiBAQCBzdGF0aWMgaW50IG5ldGNfdGltZXJfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0aWYgKCFwcml2KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHBjaWVfZmxyKHBkZXYpO1xuIFx0ZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwiRmFpbGVkIHRvIGVuYWJsZSBkZXZpY2VcXG5cIik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kc2EvdGFnX25ldGMuaCBiL2luY2x1ZGUvbGludXgvZHNhL3RhZ19uZXRjLmhcbmluZGV4IGZlOTY0NzIyZTViMDMuLjIyOWM3MGNiN2E4YWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RzYS90YWdfbmV0Yy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RzYS90YWdfbmV0Yy5oXG5AQCAtMTAsNSArMTAsNDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiBcbiAjZGVmaW5lIE5FVENfVEFHX01BWF9MRU5cdFx0XHQxNFxuKyNkZWZpbmUgTkVUQ19UQUdfVFNfUkVRX0lEXHRcdFx0R0VOTUFTSygzLCAwKVxuKyNkZWZpbmUgTkVUQ19QVFBfRkxBR19PTkVTVEVQXHRcdFx0QklUKDApXG4rI2RlZmluZSBORVRDX1BUUF9GTEFHX1RXT1NURVBcdFx0XHRCSVQoMSlcbitcbitzdHJ1Y3QgbmV0Y19za2JfY2Ige1xuK1x0c3RydWN0IHNrX2J1ZmYgKmNsb25lO1xuK1x0dW5zaWduZWQgbG9uZyBwdHBfdHhfdGltZTtcbitcdHU2NCB0c3RhbXA7XG4rXHR1OCBwdHBfZmxhZztcbitcdHU4IHRzX3JlcV9pZDtcbitcdC8qIE9uZS1zdGVwIFN5bmMgcGFyc2luZyByZXN1bHRzLCBjb21wdXRlZCBpbiBuZXRjX3BvcnRfdHh0c3RhbXAoKVxuK1x0ICogYW5kIHJldXNlZCBpbiB0aGUgdGFnZ2VyIHhtaXQgcGF0aCBhbmQgdGhlIGRlZmVycmVkIHdvcmssIHRvIGF2b2lkXG4rXHQgKiByZS1wYXJzaW5nIHRoZSBQVFAgaGVhZGVyLiBWYWxpZCBvbmx5IHdoaWxlXG4rXHQgKiBwdHBfZmxhZyA9PSBORVRDX1BUUF9GTEFHX09ORVNURVAuXG4rXHQgKi9cbitcdHUxNiBjb3JyZWN0aW9uX29mZnNldDtcbitcdHUxNiB0aW1lc3RhbXBfb2Zmc2V0O1xuK1x0Ym9vbCBpc191ZHA7XG4rfTtcbitcbisjZGVmaW5lIE5FVENfU0tCX0NCKHNrYilcdCgoc3RydWN0IG5ldGNfc2tiX2NiICopKChza2IpLVx1MDAzZWNiKSlcbitcbisvKipcbisgKiBzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAtIE5FVEMgdGFnZ2VyL3N3aXRjaC1kcml2ZXIgc2hhcmVkIG9wZXJhdGlvbnNcbisgKiBAdHdvc3RlcF90c3RhbXBfaGFuZGxlcjogQ2FsbGVkIGJ5IHRoZSB0YWdnZXIgd2hlbiBhIHR3by1zdGVwIHRyYW5zbWl0XG4rICpcdHRpbWVzdGFtcCByZXNwb25zZSBpcyByZWNlaXZlZCwgdG8gZGVsaXZlciB0aGUgdGltZXN0YW1wIHRvIHRoZVxuKyAqXHRzd2l0Y2ggZHJpdmVyLlxuKyAqIEBvbmVzdGVwX3N5bmNfaGFuZGxlcjogQ2FsbGVkIGZyb20gdGhlIHRhZ2dlciB4bWl0IHBhdGggZm9yIGEgb25lLXN0ZXAgU3luY1xuKyAqXHRmcmFtZS4gUmV0dXJucyB0aGUgc2tiIGlmIGl0IGNhbiBiZSB0cmFuc21pdHRlZCBpbW1lZGlhdGVseSAodGhlXG4rICpcdGluLWZsaWdodCBzbG90IGhhcyBiZWVuIGNsYWltZWQgYW5kIFBNX1NJTkdMRV9TVEVQIHByb2dyYW1tZWQpLCBvciBOVUxMXG4rICpcdGlmIHRoZSBmcmFtZSBoYXMgYmVlbiBxdWV1ZWQgZm9yIGRlZmVycmVkIHRyYW5zbWlzc2lvbiBvciBkcm9wcGVkLlxuKyAqIEBvbmVzdGVwX3N5bmNfeG1pdDogQ2FsbGVkIGJ5IHRoZSBzd2l0Y2ggZHJpdmVyIHRvIHRyYW5zbWl0IGEgZGVmZXJyZWRcbisgKlx0b25lLXN0ZXAgU3luYyBmcmFtZSBkaXJlY3RseSB0byB0aGUgY29uZHVpdCwgYnlwYXNzaW5nIGRzYV91c2VyX3htaXQoKS5cbisgKi9cbitzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSB7XG4rXHR2b2lkICgqdHdvc3RlcF90c3RhbXBfaGFuZGxlcikoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICAgICB1OCB0c19yZXFfaWQsIHU2NCB0cyk7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqKCpvbmVzdGVwX3N5bmNfaGFuZGxlcikoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdFx0XHRcdGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitcdG5ldGRldl90eF90ICgqb25lc3RlcF9zeW5jX3htaXQpKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4rfTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzbC9uZXRjX2dsb2JhbC5oIGIvaW5jbHVkZS9saW51eC9mc2wvbmV0Y19nbG9iYWwuaFxuaW5kZXggNWI4ZmY1MjhkMzY5OS4uOTE0NDFjYjM1YmMyOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnNsL25ldGNfZ2xvYmFsLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnNsL25ldGNfZ2xvYmFsLmhcbkBAIC0yMiw0ICsyMiwxMyBAQCBzdGF0aWMgaW5saW5lIHU2NCBuZXRjX3JlYWQ2NCh2b2lkIF9faW9tZW0gKnJlZylcbiBcdHJldHVybiBpb3JlYWQ2NChyZWcpO1xuIH1cbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfUFRQX05FVENfVjRfVElNRVIpXG4rdTY0IG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZShzdHJ1Y3QgcGNpX2RldiAqdGltZXJfZGV2KTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdTY0IG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZShzdHJ1Y3QgcGNpX2RldiAqdGltZXJfZGV2KVxuK3tcbitcdHJldHVybiAwO1xuK31cbisjZW5kaWZcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19uZXRjLmMgYi9uZXQvZHNhL3RhZ19uZXRjLmNcbmluZGV4IGRmNzJhNjE3OTZhZDUuLjk0Y2NhMjBmZmNkYWQgMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL3RhZ19uZXRjLmNcbisrKyBiL25ldC9kc2EvdGFnX25ldGMuY1xuQEAgLTE2LDYgKzE2LDEwIEBAXG4gI2RlZmluZSBORVRDX1RBR19UT19QT1JUXHRcdDFcbiAvKiBTdWJUeXBlMDogTm8gcmVxdWVzdCB0byBwZXJmb3JtIHRpbWVzdGFtcGluZyAqL1xuICNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTBcdFx0MFxuKy8qIFN1YlR5cGUxOiBSZXF1ZXN0IHRvIHBlcmZvcm0gb25lLXN0ZXAgdGltZXN0YW1waW5nICovXG4rI2RlZmluZSBORVRDX1RBR19UUF9TVUJUWVBFMVx0XHQxXG4rLyogU3ViVHlwZTI6IFJlcXVlc3QgdG8gcGVyZm9ybSB0d28tc3RlcCB0aW1lc3RhbXBpbmcgKi9cbisjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUyXHRcdDJcbiBcbiAvKiBUb19Ib3N0IE5YUCBzd2l0Y2ggdGFnICovXG4gI2RlZmluZSBORVRDX1RBR19UT19IT1NUXHRcdDJcbkBAIC0yOSw2ICszMyw4IEBAXG4gLyogTkVUQyBzd2l0Y2ggdGFnIGxlbmd0aHMgKi9cbiAjZGVmaW5lIE5FVENfVEFHX0ZPUldBUkRfTEVOXHRcdDZcbiAjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUwX0xFTlx0NlxuKyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTFfTEVOXHQxMFxuKyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTJfTEVOXHQ2XG4gI2RlZmluZSBORVRDX1RBR19USF9TVUJUWVBFMF9MRU5cdDZcbiAjZGVmaW5lIE5FVENfVEFHX1RIX1NVQlRZUEUxX0xFTlx0MTRcbiAjZGVmaW5lIE5FVENfVEFHX1RIX1NVQlRZUEUyX0xFTlx0MTRcbkBAIC00MCw2ICs0Niw3IEBAXG4gI2RlZmluZSBORVRDX1RBR19JUFZcdFx0XHRHRU5NQVNLKDQsIDIpXG4gI2RlZmluZSBORVRDX1RBR19TV0lUQ0hcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBORVRDX1RBR19QT1JUXHRcdFx0R0VOTUFTSyg3LCAzKVxuKyNkZWZpbmUgTkVUQ19UQUdfVElNRVNUQU1QXHRcdEdFTk1BU0soMjksIDApXG4gXG4gc3RydWN0IG5ldGNfdGFnX2NtbiB7XG4gXHRfX2JlMTYgdHBpZDtcbkBAIC00OCw2ICs1NSwyOSBAQCBzdHJ1Y3QgbmV0Y190YWdfY21uIHtcbiBcdHU4IHN3aXRjaF9wb3J0O1xuIH0gX19wYWNrZWQ7XG4gXG4rc3RydWN0IG5ldGNfdGFnX3RwX3N1YnR5cGUxIHtcbitcdHN0cnVjdCBuZXRjX3RhZ19jbW4gY21uO1xuK1x0dTggcmVzdjtcbitcdF9fYmUzMiB0aW1lc3RhbXA7XG4rfSBfX3BhY2tlZDtcbitcbitzdHJ1Y3QgbmV0Y190YWdfdHBfc3VidHlwZTIge1xuK1x0c3RydWN0IG5ldGNfdGFnX2NtbiBjbW47XG4rXHR1OCB0c19yZXFfaWQ7XG4rfSBfX3BhY2tlZDtcbitcbitzdHJ1Y3QgbmV0Y190YWdfdGhfc3VidHlwZTEge1xuK1x0c3RydWN0IG5ldGNfdGFnX2NtbiBjbW47XG4rXHR1OCBob3N0X3JlYXNvbjtcbitcdF9fYmU2NCB0aW1lc3RhbXA7XG4rfSBfX3BhY2tlZDtcbitcbitzdHJ1Y3QgbmV0Y190YWdfdGhfc3VidHlwZTIge1xuK1x0c3RydWN0IG5ldGNfdGFnX2NtbiBjbW47XG4rXHR1OCBocl90c3JlcV9pZDtcbitcdF9fYmU2NCB0aW1lc3RhbXA7XG4rfSBfX3BhY2tlZDtcbitcbiBzdGF0aWMgdm9pZCBuZXRjX2ZpbGxfY29tbW9uX3RhZyhzdHJ1Y3QgbmV0Y190YWdfY21uICp0YWcsIHU4IHR5cGUsXG4gXHRcdFx0XHQgdTggc3VidHlwZSwgdTggc3dfaWQsIHU4IHBvcnQsIHU4IGlwdilcbiB7XG5AQCAtOTcsMTUgKzEyNywxMjAgQEAgc3RhdGljIHZvaWQgbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0TkVUQ19UQUdfVFBfU1VCVFlQRTBfTEVOKTtcbiB9XG4gXG4tLyogQ3VycmVudGx5IG9ubHkgc3VwcG9ydCBUb19Qb3J0IHRhZywgc3VidHlwZSAwICovXG4rc3RhdGljIHZvaWQgbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0dTMyIHRzID0gRklFTERfUFJFUChORVRDX1RBR19USU1FU1RBTVAsIE5FVENfU0tCX0NCKHNrYiktXHUwMDNldHN0YW1wKTtcbitcdHN0cnVjdCBuZXRjX3RhZ190cF9zdWJ0eXBlMSAqdGFnO1xuK1xuK1x0dGFnID0gbmV0Y19maWxsX2NvbW1vbl90cF90YWcoc2tiLCBuZGV2LCBORVRDX1RBR19UUF9TVUJUWVBFMSxcbitcdFx0XHRcdCAgICAgIE5FVENfVEFHX1RQX1NVQlRZUEUxX0xFTik7XG4rXHR0YWctXHUwMDNldGltZXN0YW1wID0gaHRvbmwodHMpO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUyKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmUgPSBORVRDX1NLQl9DQihza2IpLVx1MDAzZWNsb25lO1xuK1x0dTggdHNfcmVxX2lkID0gTkVUQ19TS0JfQ0IoY2xvbmUpLVx1MDAzZXRzX3JlcV9pZDtcbitcdHN0cnVjdCBuZXRjX3RhZ190cF9zdWJ0eXBlMiAqdGFnO1xuK1xuK1x0dGFnID0gbmV0Y19maWxsX2NvbW1vbl90cF90YWcoc2tiLCBuZGV2LCBORVRDX1RBR19UUF9TVUJUWVBFMixcbitcdFx0XHRcdCAgICAgIE5FVENfVEFHX1RQX1NVQlRZUEUyX0xFTik7XG4rXHR0YWctXHUwMDNldHNfcmVxX2lkID0gRklFTERfUFJFUChORVRDX1RBR19UU19SRVFfSUQsIHRzX3JlcV9pZCk7XG4rfVxuK1xuK3N0YXRpYyBuZXRkZXZfdHhfdCBuZXRjX29uZXN0ZXBfc3luY194bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHQvKiBUaGlzIGRlZmVycmVkIG9uZS1zdGVwIFN5bmMgZnJhbWUgYWxyZWFkeSB3ZW50IHRocm91Z2hcbitcdCAqIGRzYV91c2VyX3htaXQoKSdzIHNrYl9lbnN1cmVfd3JpdGFibGVfaGVhZF90YWlsKCkgYW5kIGV0aF9za2JfcGFkKClcbitcdCAqIGJlZm9yZSBpdCB3YXMgcXVldWVkIGluIG5ldGNfeG1pdCgpLCBhbmQgbm90aGluZyBoYXMgY2xvbmVkIGl0IG9yXG4rXHQgKiBzaHJ1bmsgaXRzIGhlYWQvdGFpbCByb29tIHNpbmNlLiBTbyB0aGUgaGVhZC90YWlsIHJvb20gaXMgc3RpbGxcbitcdCAqIGd1YXJhbnRlZWQgYW5kIHRoZSBza2IgaXMgc3RpbGwgd3JpdGFibGU7IG9ubHkgdGhlIHRhZyBuZWVkcyB0byBiZVxuK1x0ICogcHVzaGVkIGJlZm9yZSBoYW5kaW5nIGl0IGRpcmVjdGx5IHRvIHRoZSBjb25kdWl0LCBieXBhc3NpbmdcbitcdCAqIGRzYV91c2VyX3htaXQoKSBzbyB0aGF0IGRldl9zd19uZXRzdGF0c190eF9hZGQoKSBpcyBub3QgaW52b2tlZCBhXG4rXHQgKiBzZWNvbmQgdGltZSBmb3IgdGhlIHNhbWUgZnJhbWUuXG4rXHQgKi9cbitcdG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTEoc2tiLCBkZXYpO1xuK1xuK1x0cmV0dXJuIGRzYV9lbnF1ZXVlX3NrYihza2IsIGRldik7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19vbmVzdGVwX3N5bmNfcHJvY2VzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChuZGV2KTtcbitcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YTtcbitcdHN0cnVjdCBza19idWZmICpuc2tiO1xuK1xuK1x0dGFnZ2VyX2RhdGEgPSBkcC1cdTAwM2Vkcy1cdTAwM2V0YWdnZXJfZGF0YTtcbitcdGlmICh1bmxpa2VseSghdGFnZ2VyX2RhdGEtXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIpKSB7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdC8qIERlY2lkZSwgdW5kZXIgcHRwX2xvY2ssIHdoZXRoZXIgdGhpcyBvbmUtc3RlcCBTeW5jIGNhbiBiZSBzZW50XG4rXHQgKiBub3cgb3IgbXVzdCBiZSBkZWZlcnJlZC4gUmV0dXJucyB0aGUgc2tiICh3aXRoIHRoZSBpbi1mbGlnaHRcbitcdCAqIHNsb3QgY2xhaW1lZCBhbmQgUE1fU0lOR0xFX1NURVAgYWxyZWFkeSBwcm9ncmFtbWVkKSBmb3JcbitcdCAqIGltbWVkaWF0ZSB0cmFuc21pc3Npb24sIG9yIE5VTEwgaWYgaXQgd2FzIHF1ZXVlZCBmb3IgZGVmZXJyZWRcbitcdCAqIHRyYW5zbWlzc2lvbiBvciBkcm9wcGVkLlxuK1x0ICovXG4rXHRuc2tiID0gdGFnZ2VyX2RhdGEtXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIoZHAtXHUwMDNlZHMsIGRwLVx1MDAzZWluZGV4LCBza2IpO1xuK1x0aWYgKHVubGlrZWx5KCFuc2tiKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gbnNrYjtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4tXHRuZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUwKHNrYiwgbmRldik7XG4rXHR1OCBwdHBfZmxhZyA9IE5FVENfU0tCX0NCKHNrYiktXHUwMDNlcHRwX2ZsYWc7XG4rXG4rXHQvKiBGYXN0IHBhdGg6IHRoZSBvdmVyd2hlbG1pbmcgbWFqb3JpdHkgb2YgZnJhbWVzIGFyZSBub3QgUFRQIGZyYW1lcyAqL1xuK1x0aWYgKGxpa2VseSghcHRwX2ZsYWcpKSB7XG4rXHRcdG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTAoc2tiLCBuZGV2KTtcbitcdFx0cmV0dXJuIHNrYjtcbitcdH1cbitcbitcdGlmIChwdHBfZmxhZyA9PSBORVRDX1BUUF9GTEFHX09ORVNURVApIHtcbitcdFx0aWYgKCFuZXRjX29uZXN0ZXBfc3luY19wcm9jZXNzKHNrYiwgbmRldikpXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRcdG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTEoc2tiLCBuZGV2KTtcbitcdH0gZWxzZSBpZiAocHRwX2ZsYWcgPT0gTkVUQ19QVFBfRkxBR19UV09TVEVQKSB7XG4rXHRcdG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTIoc2tiLCBuZGV2KTtcbitcdH0gZWxzZSB7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbiBcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5ldGNfcnhfdHN0YW1wX3Byb2Nlc3Moc3RydWN0IG5ldGNfdGFnX3RoX3N1YnR5cGUxICp0YWcsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHU2NCB0cyA9IGdldF91bmFsaWduZWRfYmU2NChcdTAwMjZ0YWctXHUwMDNldGltZXN0YW1wKTtcbitcbitcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNldHN0YW1wID0gdHM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG5ldGNfdHdvc3RlcF90c3RhbXBfcHJvY2VzcyhzdHJ1Y3QgbmV0Y190YWdfdGhfc3VidHlwZTIgKnRhZyxcbitcdFx0XHRcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuK3tcbitcdHU4IHRzX3JlcV9pZCA9IEZJRUxEX0dFVChORVRDX1RBR19UU19SRVFfSUQsIHRhZy1cdTAwM2Vocl90c3JlcV9pZCk7XG4rXHRpbnQgcG9ydCA9IEZJRUxEX0dFVChORVRDX1RBR19QT1JULCB0YWctXHUwMDNlY21uLnN3aXRjaF9wb3J0KTtcbitcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YSA9IGRzLVx1MDAzZXRhZ2dlcl9kYXRhO1xuK1x0dTY0IHRzID0gZ2V0X3VuYWxpZ25lZF9iZTY0KFx1MDAyNnRhZy1cdTAwM2V0aW1lc3RhbXApO1xuK1xuK1x0aWYgKHVubGlrZWx5KCF0YWdnZXJfZGF0YS1cdTAwM2V0d29zdGVwX3RzdGFtcF9oYW5kbGVyKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0dGFnZ2VyX2RhdGEtXHUwMDNldHdvc3RlcF90c3RhbXBfaGFuZGxlcihkcywgcG9ydCwgdHNfcmVxX2lkLCB0cyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbmV0Y19nZXRfcnhfdGFnX2xlbihpbnQgdHlwZSwgaW50IHN1YnR5cGUpXG4ge1xuIFx0LyogT25seSBORVRDX1RBR19UT19IT1NUIGFuZCBORVRDX1RBR19GT1JXQVJEIGFyZSBleHBlY3RlZCBpbiBSWCxcbkBAIC0xMjYsMTQgKzI2MSwxNyBAQCBzdGF0aWMgaW50IG5ldGNfZ2V0X3J4X3RhZ19sZW4oaW50IHR5cGUsIGludCBzdWJ0eXBlKVxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBuZGV2LVx1MDAzZWRzYV9wdHI7XG4gXHRzdHJ1Y3QgbmV0Y190YWdfY21uICp0YWdfY21uO1xuIFx0aW50IHRhZ19sZW4sIHN3X2lkLCBwb3J0O1xuIFx0aW50IHR5cGUsIHN1YnR5cGU7XG4rXHR2b2lkICp0YWc7XG4gXG4tXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBORVRDX1RBR19NQVhfTEVOKSkpXG4rXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBORVRDX1RBR19NQVhfTEVOIC0gMikpKVxuIFx0XHRnb3RvIGVycl9mcmVlX3NrYjtcbiBcbi1cdHRhZ19jbW4gPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc19yeChza2IpO1xuK1x0dGFnID0gZHNhX2V0eXBlX2hlYWRlcl9wb3Nfcngoc2tiKTtcbitcdHRhZ19jbW4gPSB0YWc7XG4gXHRpZiAobnRvaHModGFnX2Ntbi1cdTAwM2V0cGlkKSAhPSBFVEhfUF9OWFBfTkVUQykge1xuIFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChcdTAwMjZuZGV2LVx1MDAzZWRldiwgXCJVbmtub3duIFRQSUQgMHglMDR4XFxuXCIsXG4gXHRcdFx0XHQgICAgIG50b2hzKHRhZ19jbW4tXHUwMDNldHBpZCkpO1xuQEAgLTE2MSwxMiArMjk5LDI4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICh0eXBlID09IE5FVENfVEFHX0ZPUldBUkQpIHtcbiBcdFx0ZHNhX2RlZmF1bHRfb2ZmbG9hZF9md2RfbWFyayhza2IpO1xuIFx0fSBlbHNlIGlmICh0eXBlID09IE5FVENfVEFHX1RPX0hPU1QpIHtcbi1cdFx0LyogQ3VycmVudGx5IG9ubHkgc3VidHlwZTAgc3VwcG9ydGVkICovXG4tXHRcdGlmIChzdWJ0eXBlICE9IE5FVENfVEFHX1RIX1NVQlRZUEUwKVxuK1x0XHRzd2l0Y2ggKHN1YnR5cGUpIHtcbitcdFx0Y2FzZSBORVRDX1RBR19USF9TVUJUWVBFMDpcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBORVRDX1RBR19USF9TVUJUWVBFMTpcbitcdFx0XHRuZXRjX3J4X3RzdGFtcF9wcm9jZXNzKHRhZywgc2tiKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBORVRDX1RBR19USF9TVUJUWVBFMjpcbitcdFx0XHQvKiBUaGlzIHNrYiBpcyBhIGhhcmR3YXJlLWdlbmVyYXRlZCByZXNwb25zZSB0byBhXG4rXHRcdFx0ICogdHdvLXN0ZXAgdHJhbnNtaXQgdGltZXN0YW1wIHJlcXVlc3QuIFRoZSB0YWdcbitcdFx0XHQgKiBkcml2ZXIgbXVzdCBmcmVlIHRoZSBza2IgYWZ0ZXIgcHJvY2Vzc2luZy5cbitcdFx0XHQgKi9cbitcdFx0XHRuZXRjX3R3b3N0ZXBfdHN0YW1wX3Byb2Nlc3ModGFnLCBkcC1cdTAwM2Vkcyk7XG4rXHRcdFx0Z290byBlcnJfZnJlZV9za2I7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoXHUwMDI2bmRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCAgICAgXCJVbnN1cHBvcnRlZCBUb19Ib3N0IHN1YnR5cGU6ICVkXFxuXCIsXG4rXHRcdFx0XHRcdCAgICAgc3VidHlwZSk7XG4gXHRcdFx0Z290byBlcnJfZnJlZV9za2I7XG4rXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKFx1MDAyNm5kZXYtXHUwMDNlZGV2LFxuLVx0XHRcdFx0ICAgICBcIlVuZXhwZWN0ZWQgIHRhZyB0eXBlICVkXFxuXCIsIHR5cGUpO1xuK1x0XHRcdFx0ICAgICBcIlVuZXhwZWN0ZWQgdGFnIHR5cGUgJWRcXG5cIiwgdHlwZSk7XG4gXHRcdGdvdG8gZXJyX2ZyZWVfc2tiO1xuIFx0fVxuIFxuQEAgLTIwMCw2ICszNTQsMjggQEAgc3RhdGljIHZvaWQgbmV0Y19mbG93X2Rpc3NlY3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2ICpwcm90byxcbiBcdCpwcm90byA9ICgoX19iZTE2ICopc2tiLVx1MDAzZWRhdGEpWyh0YWdfbGVuIC8gMikgLSAxXTtcbiB9XG4gXG4rc3RhdGljIGludCBuZXRjX2Nvbm5lY3Qoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuK3tcbitcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YTtcbitcbitcdHRhZ2dlcl9kYXRhID0ga3phbGxvY19vYmooKnRhZ2dlcl9kYXRhKTtcbitcdGlmICghdGFnZ2VyX2RhdGEpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0dGFnZ2VyX2RhdGEtXHUwMDNlb25lc3RlcF9zeW5jX3htaXQgPSBuZXRjX29uZXN0ZXBfc3luY194bWl0O1xuK1x0ZHMtXHUwMDNldGFnZ2VyX2RhdGEgPSB0YWdnZXJfZGF0YTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZXRjX2Rpc2Nvbm5lY3Qoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuK3tcbitcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YSA9IGRzLVx1MDAzZXRhZ2dlcl9kYXRhO1xuK1xuK1x0a2ZyZWUodGFnZ2VyX2RhdGEpO1xuK1x0ZHMtXHUwMDNldGFnZ2VyX2RhdGEgPSBOVUxMO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIG5ldGNfbmV0ZGV2X29wcyA9IHtcbiBcdC5uYW1lXHRcdFx0PSBORVRDX05BTUUsXG4gXHQucHJvdG9cdFx0XHQ9IERTQV9UQUdfUFJPVE9fTkVUQyxcbkBAIC0yMDcsNiArMzgzLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyBuZXRjX25ldGRldl9vcHMgPSB7XG4gXHQucmN2XHRcdFx0PSBuZXRjX3JjdixcbiBcdC5uZWVkZWRfaGVhZHJvb21cdD0gTkVUQ19UQUdfTUFYX0xFTixcbiBcdC5mbG93X2Rpc3NlY3RcdFx0PSBuZXRjX2Zsb3dfZGlzc2VjdCxcbitcdC5jb25uZWN0XHRcdD0gbmV0Y19jb25uZWN0LFxuK1x0LmRpc2Nvbm5lY3RcdFx0PSBuZXRjX2Rpc2Nvbm5lY3QsXG4gfTtcbiBcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJEU0EgdGFnIGRyaXZlciBmb3IgTlhQIE5FVEMgc3dpdGNoIGZhbWlseVwiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA3OjU1OjU4LjQzODg4NjU2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4OTg3NjIyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBcHBsaWNhYmlsaXR5IG9mIHRoZSBOWFAgTkVUQyBQVFAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBhZGRpbmcgUFRQIHN1cHBvcnQgdG8gdGhlIE5YUCBORVRDIHN3aXRjaCBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGBuZXRjX3B0cC5jYCwgYG5ldGNfbWFpbi5jYCwgYG5ldGNfcGxhdGZvcm0uY2AsIHNvbWUgaGVhZGVyIGZpbGVzLCBhbmQgYSBmZXcgb3RoZXJzLiBQcmV0dHkgY29tcHJlaGVuc2l2ZS5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgY2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJcyB0aGlzIHNvbWV0aGluZyBJIGNhbiBlZmZlY3RpdmVseSBmdXp6PyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGRyaXZlciwgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvZHNhL25ldGMvYCwgaXMgYnVpbHQgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIHVzZWQgYnkgZnV6emVycy4gSXQgZGVwZW5kcyBvbiBgTkVUX0RTQV9ORVRDX1NXSVRDSGAsIHdoaWNoLCBpbiB0dXJuLCBkZXBlbmRzIG9uIGBBUk02NCB8fCBDT01QSUxFX1RFU1RgLCBgTkVUX0RTQSBcdTAwMjZcdTAwMjYgUENJYCwgYW5kIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAuIFJpZ2h0LCBpdCBsb29rcyBsaWtlIGEgUENJIGRldmljZS4gQW5kIHRoaW5raW5nIGFib3V0IGl0LCBOWFAgTkVUQyBpcyBwcm9iYWJseSBhIHBoeXNpY2FsIGhhcmR3YXJlIGNvbXBvbmVudCwgaXNuJ3QgaXQ/IE5ldHdvcmsgRWRnZSBUaW1lLVNlbnNpdGl2ZSBOZXR3b3JraW5nIENvbnRyb2xsZXIsIHllcCwgUENJIG1ha2VzIHNlbnNlLlxuXG5TbywgdGhlIG5leHQgcXVlc3Rpb246IGlzIHRoaXMgaGFyZHdhcmUgZW11bGF0ZWQgaW4gUUVNVT8gVGhhdCdzIHRoZSByZWFsIGJsb2NrZXIuIEknZCB0eXBpY2FsbHkgc2VhcmNoIHRoZSBRRU1VIHNvdXJjZSBmb3IgXCJORVRDXCIsIGJ1dCBJIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoYXQgaGVyZS4gVGhlIHByb21wdCBkb2VzIGdpdmUgYSBjbHVlLCBtZW50aW9uaW5nIHRoYXQgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGRyaXZlcnMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHNwZWNpZmljIFBDSWUgaGFyZHdhcmUgY2FyZHMgYXJlbid0IHVzdWFsbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhpbmdzIGxpa2UgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUsIHRoYXQgc29ydCBvZiB0aGluZy4gR2l2ZW4gdGhhdCB0aGlzIGlzIGFuIE5YUC1zcGVjaWZpYyBjb21wb25lbnQsIEkgc3VzcGVjdCBpdCdzIHRoZSBzYW1lIHNpdHVhdGlvbi4gVW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBtYWNoaW5lIG1vZGVsIGZvciBhbiBpLk1YIGJvYXJkLCB0aGVuIE5YUCBzcGVjaWZpYyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQuXG5cbkFscmlnaHQsIHRoZSBkcml2ZXIgcHJvYmUgZnVuY3Rpb24sIGBuZXRjX3N3aXRjaF9wcm9iZWAsIGNvbmZpcm1zIHRoaXMgaXMgYSBQQ0kgZHJpdmVyIGJlY2F1c2UgaXQgdGFrZXMgYSBgcGNpX2RldmAgYXJndW1lbnQuIEl0IGxvb2tzIGxpa2UgbXkgYXNzdW1wdGlvbiBvZiBwaHlzaWNhbCBoYXJkd2FyZSBpcyBjb3JyZWN0LiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jYCB0byBpZGVudGlmeSB0aGUgUENJIElEcy4gSWYgaXTigJlzIG5vdCBlbXVsYXRlZCwgdGhlbiBmdXp6aW5nIGlzIGdvaW5nIHRvIGJlIHNpZ25pZmljYW50bHkgbW9yZSBkaWZmaWN1bHQsIGlmIG5vdCBpbXBvc3NpYmxlLCB3aXRob3V0IGEgY3VzdG9tIFFFTVUgc2V0dXAgb3IgYWNjZXNzIHRvIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyODMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NjowNy4zMzc2NTMwOTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwNzM2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX2RldmljZV9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbmV0Yy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9MjQ5OD1zdGF0aWMgaW50IG5ldGNfc3dpdGNoX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jOjI0OTk6XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMjUwMC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0yNTYwPXN0YXRpYyB2b2lkIG5ldGNfc3dpdGNoX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMjU3MC1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoyNTcxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZXRjX3N3aXRjaF9pZHNbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0yNTcyLVxcdHsgUENJX0RFVklDRShORVRDX1NXSVRDSF9WRU5ET1JfSUQsIE5FVENfU1dJVENIX0RFVklDRV9JRCkgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6MDcuMzk3NzM0ODUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxNTk0NTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU3dpdGNoIElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uc3RhbnRzLCBgTkVUQ19TV0lUQ0hfVkVORE9SX0lEYCBhbmQgYE5FVENfU1dJVENIX0RFVklDRV9JRGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gd2hhdCB0aGV5IGFjdHVhbGx5IHJlcHJlc2VudC4gV2UgbmVlZCB0byBpZGVudGlmeSB0aGUgZXhhY3QgdmVuZG9yIGFuZCBkZXZpY2UgdGhlc2UgY29uc3RhbnRzIGFyZSBtZWFudCB0byBwaW5wb2ludC4gSSdtIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gaG93IHRoZSBzeXN0ZW0gaWRlbnRpZmllcyBzcGVjaWZpYyBuZXR3b3JrIHN3aXRjaGVzIHdpdGhpbiBpdHMgcHVydmlldywgbGlrZWx5IHRocm91Z2ggc29tZSBraW5kIG9mIGhhcmR3YXJlIG9yIGZpcm13YXJlIGlkZW50aWZpY2F0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzb3VyY2Ugb2YgdGhlc2UgY29uc3RhbnRzLiBBcmUgdGhleSBkZWZpbmVkIGluIGEgZHJpdmVyLCBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgcGVyaGFwcyBkZXJpdmVkIGZyb20gc29tZSBraW5kIG9mIG5ldHdvcmsgZGlzY292ZXJ5IHByb3RvY29sPyBVbmRlcnN0YW5kaW5nIHRoZSBvcmlnaW4gd2lsbCBkaWN0YXRlIGhvdyBJJ2xsIGFwcHJvYWNoIHRoaXMgaW52ZXN0aWdhdGlvbi4gS25vd2luZyB0aGUgY29udGV4dCB3aWxsIHBvaW50IG1lIHRvIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgb3IgaGFyZHdhcmUgcmVnaXN0ZXJzIHdoZXJlIHRoaXMgaW5mb3JtYXRpb24gaXMgYmVpbmcgZmV0Y2hlZC4gVGhlIGdvYWwsIGNsZWFybHksIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiB2YXJpb3VzIHN3aXRjaCBtb2RlbHMgb3IgbWFudWZhY3R1cmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NjoxMi4wMTM2ODM4MzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNzk3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUQ19TV0lUQ0hfVkVORE9SX0lEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9uZXRjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0yNTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZXRjX3N3aXRjaF9pZHNbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoyNTcyOlxcdHsgUENJX0RFVklDRShORVRDX1NXSVRDSF9WRU5ET1JfSUQsIE5FVENfU1dJVENIX0RFVklDRV9JRCkgfSxcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0yNTczLVxcdHsgfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2hfaHcuaC0xMC1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oOjExOiNkZWZpbmUgTkVUQ19TV0lUQ0hfVkVORE9SX0lEXFx0XFx0MHgxMTMxXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2hfaHcuaC0xMi0jZGVmaW5lIE5FVENfU1dJVENIX0RFVklDRV9JRFxcdFxcdDB4ZWVmMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NjoxMi4wNjQ5Njk5MzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ3NTA4NTMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBUaGlzIENvZGUqKlxuXG5Pa2F5LCBzbyBWZW5kb3IgSUQgYDB4MTEzMWAgaXMgTlhQLCBmb3JtZXJseSBQaGlsaXBzIFNlbWljb25kdWN0b3JzLiBUaGUgY29yZSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgdGhpcyBQQ0kgZGV2aWNlLCB0aGUgTlhQIE5FVEMgc3dpdGNoLCBpcyBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIGlzIG5vLiBTdGFuZGFyZCBRRU1VIHN0aWNrcyB0byBlbXVsYXRpbmcgZ2VuZXJpYyBuZXR3b3JrIGRldmljZXMgbGlrZSBlMTAwMCwgdmlydGlvLW5ldCwgb3IgcnRsODEzOS4gVmVuZG9yLXNwZWNpZmljIGRldmljZXMsIHN1Y2ggYXMgdGhlIE5FVEMgc3dpdGNoLCBhcmUgdHlwaWNhbGx5ICpub3QqIGVtdWxhdGVkLlxuXG5UaGVyZWZvcmUsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcsIHRoZSBjb2RlIHBhdGhzIGluIHRoaXMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgTkVUQyBzd2l0Y2gsIHNob3VsZCBiZSBlbnRpcmVseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGluc3RydWN0cyBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIHRhcmdldHMgb25seSB2ZW5kb3Itc3BlY2lmaWMgUENJIGhhcmR3YXJlIHRoYXQgaXNuJ3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgc3VjaCBhcyBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4gVGhpcyBzZWVtcyB0byBhcHBseSBkaXJlY3RseS5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGNvbnNpZGVyIGEgcG90ZW50aWFsIGxvb3Bob2xlOiB0aGUgRFNBIHRhZ2dlciBjb21wb25lbnQsIGBuZXQvZHNhL3RhZ19uZXRjLmNgLiBDYW4gKnRoYXQqIGJlIHJlYWNoZWQgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIGJlY2F1c2UgRFNBIHRhZ2dlcnMgYXJlIHR5cGljYWxseSBpbnZvbHZlZCBpbiBoYW5kbGluZyBwYWNrZXRzIGJlaW5nIHNlbnQgb3IgcmVjZWl2ZWQgb24gYSBEU0EgbWFzdGVyIG5ldHdvcmsgZGV2aWNlPyBJZiB0aGUgc3dpdGNoIGlzbid0IHByZXNlbnQsIHRoZSB0YWdnZXIgdHlwaWNhbGx5IGlzbid0IHVzZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IGlzbid0LCBidXQgc3l6a2FsbGVyIGNhbiBzb21ldGltZXMgY3JlYXRlIERTQSB0cmVlcyB1c2luZyBkdW1teSBkZXZpY2VzIG9yIHdvcmthcm91bmRzIGlmIGl0IGNhbiBieXBhc3MgdGhlIGhhcmR3YXJlIHByb2JlLiBIb3dldmVyLCB0aGF0IHVzdWFsbHkgcmVsaWVzIG9uIHRoZSBzd2l0Y2ggZHJpdmVyIHByb2Jpbmcgc3VjY2Vzc2Z1bGx5LlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2suIFN5emthbGxlciAqZG9lcyogaGF2ZSBzb21lIHN1cHBvcnQgZm9yIGluamVjdGluZyBwYWNrZXRzIGludG8gRFNBIGludGVyZmFjZXMsIGJ1dCBpdCBzdGlsbCBoaW5nZXMgb24gdGhlIERTQSBzd2l0Y2ggYmVpbmcgcmVnaXN0ZXJlZC4gSWYgdGhlIG1haW4gc3dpdGNoIGRyaXZlciwgYG5ldGNfbWFpbi5jYCwgY2FuJ3QgcHJvYmUgdGhlIFBDSSBkZXZpY2UsIGJlY2F1c2UgaXQncyBtaXNzaW5nLCB0aGUgRFNBIHN3aXRjaCB3b24ndCBiZSByZWdpc3RlcmVkLCBhbmQgY29uc2VxdWVudGx5LCB0aGUgdGFnZ2VyIGNvZGUgd29uJ3QgYmUgZXhlY3V0ZWQuXG5cblNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gYmVjb21lczogSXMgdGhlcmUgKmFueSogcG9zc2libGUgd2F5IHRvIGluc3RhbnRpYXRlIG9yIHJlZ2lzdGVyIHRoZSBORVRDIERTQSBzd2l0Y2ggd2l0aG91dCB0aGUgcHJlc2VuY2Ugb2YgdGhlIFBDSSBoYXJkd2FyZT8gSSBuZWVkIHRvIGRldGVybWluZSBpZiBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9yIGFsdGVybmF0aXZlIGRyaXZlciBwYXRoIGV4aXN0cywgb3IgaWYgaXQncyBzdHJpY3RseSBkZXBlbmRlbnQgb24gdGhlIFBDSSBkZXZpY2UuIEknbSBnb2luZyB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTExMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NjoyMi41NDAwNTk5NjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0NTk3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL25ldGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jPTI1Nzc9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5ldGNfc3dpdGNoX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTI1ODMtfTtcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoyNTg0Om1vZHVsZV9wY2lfZHJpdmVyKG5ldGNfc3dpdGNoX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMjU4NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6MjIuNTkyNTI3MTY0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNjExMjc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQQ0llIERyaXZlciBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciwgbm90aGluZyBtb3JlLiBBbmQgYmVjYXVzZSBpdCdzIHNwZWNpZmljYWxseSBmb3IgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIHRoZSBOWFAgTkVUQywgaXQncyB0aWVkIGRpcmVjdGx5IHRvIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4gU3RhbmRhcmQgUUVNVSBqdXN0IGlzbid0IGdvaW5nIHRvIGN1dCBpdDsgbm8gZW11bGF0aW9uIGhlcmUuIFNvLCBmdXp6aW5nIGl0IGlzbid0IGdvaW5nIHRvIGJlIHdvcnRod2hpbGU7IGl0J3MgZ29pbmcgdG8gYmUgYSBkZWFkIGVuZC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgc2hvdWxkIHZlcmlmeSB3aGV0aGVyIHRoZSBjb2RlIGluIGB0YWdfbmV0Yy5jYCBpcyBldmVuIHJlYWNoYWJsZS4gTGV0IG1lIGNoZWNrIHRoZSBEU0EgdGFnZ2VyIHJlZ2lzdHJhdGlvbjsgaXQgbG9va3MgbGlrZSB0aGF0IHVzZXMgYG1vZHVsZV9kc2FfdGFnX2RyaXZlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTY2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6MjYuMzE4NjQzOTQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQ1Nzc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfZHNhX3RhZ19kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYS90YWdfbmV0Yy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2EvdGFnX25ldGMuYz0zOTM9TU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fTkVUQywgTkVUQ19OQU1FKTtcXG5uZXQvZHNhL3RhZ19uZXRjLmM6Mzk0Om1vZHVsZV9kc2FfdGFnX2RyaXZlcihuZXRjX25ldGRldl9vcHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NjoyNi4zNzAxMTAyNDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk3Mzc0NjYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IFRyYWluIG9mIFRob3VnaHQqKlxuXG5Pa2F5LCBzbyB0aGUgdGFnZ2VyIGJlaW5nIHJlZ2lzdGVyZWQgaXNuJ3QgZW5vdWdoOyBpdCAqYWxzbyogbmVlZHMgYSBEU0Egc3dpdGNoIGNvbmZpZ3VyZWQgdG8gYWN0dWFsbHkgYmUgdXRpbGl6ZWQuIFRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgYSBxdWVzdGlvbiBwb3BzIGludG8gbXkgaGVhZDogY2FuIGEgdXNlciwgaW4gdGhlb3J5LCBqdXN0IHNldCB1cCBhIGR1bW15IERTQSBzd2l0Y2gsIGV2ZW4gb25lIHRoYXQncyBub3QgYWN0dWFsbHkgY29ubmVjdGVkIHRvIGFueXRoaW5nLCBqdXN0IHRvICplbmFibGUqIGEgcGFydGljdWxhciB0YWdnZXIsIHBlcmhhcHMgc3BlY2lmaWNhbGx5IHVzaW5nIGBEU0FfVEFHX1BST1RPX05FVENgPyBJbnRlcmVzdGluZyBhbmdsZS5cblxuVGhlIG5leHQgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIFN5emthbGxlci4gSSB3b25kZXIsIGNhbiBpdCBiZSBsZXZlcmFnZWQgdG8gdGVzdCB0aGVzZSB0YWdnZXJzPyBTcGVjaWZpY2FsbHksIGNhbiBpdCBtYWtlIHVzZSBvZiBgZHNhX2xvb3BgIG9yIGEgc2ltaWxhciBjb25zdHJ1Y3QgZm9yIHRoaXMgcHVycG9zZT8gSXQgbWFrZXMgc2Vuc2UgdGhhdCBTeXprYWxsZXIgaXMgdGhlIHJpZ2h0IHRvb2wuIExldCdzIHNlZSBpZiBgZHNhX2xvb3BgIHdvdWxkIGFsbG93IHVzIHRvIHRlc3QgYXJiaXRyYXJ5IHRhZ2dlcnMuXG5cbkhvbGQgb24sIEkgc2VlbSB0byByZW1lbWJlciB0aGF0IGBkc2FfbG9vcGAgKmdlbmVyYWxseSogcmVsaWVzIG9uIGBEU0FfVEFHX1BST1RPX05PTkVgIG9yIHdoYXRldmVyIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBwcm90b2NvbCBpcy4gT2theSwgd2FpdCBhIG1pbnV0ZSwgSSB0aGluayBJJ20gZ2V0dGluZyBhaGVhZCBvZiBteXNlbGYuIFN5emthbGxlciAqZG9lcyogaGF2ZSB0aGUgYWJpbGl0eSB0byB0ZXN0IERTQSB0YWdnZXJzLCBlaXRoZXIgYnkgaW5qZWN0aW5nIHBhY2tldHMgZGlyZWN0bHksIG9yIGJ5IHVzaW5nIGBkc2FfbG9vcGAgb3Igc29tZSByZWxhdGVkIG1lY2hhbmlzbS4gVGhhdCdzIGEgZ29vZCBzaWduLiBMZXQncyBqdXN0IGNvbmZpcm0sIGZvciBteSBvd24gcGVhY2Ugb2YgbWluZCwgdGhhdCBTeXprYWxsZXIgKnNwZWNpZmljYWxseSogdGVzdHMgYHRhZ19uZXRjLmNgLiBUaGF0IHdvdWxkIGdpdmUgbWUgdGhlIGNvbmZpcm1hdGlvbiBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTE3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA3OjU2OjMyLjM0Mzg2MDQ2OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzNzIyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFnX25ldGNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9NYWtlZmlsZT0zMj1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTVhMX0dTVzFYWCkgKz0gdGFnX214bC1nc3cxeHgub1xcbm5ldC9kc2EvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX05FVEMpICs9IHRhZ19uZXRjLm9cXG5uZXQvZHNhL01ha2VmaWxlLTM0LW9iai0kKENPTkZJR19ORVRfRFNBX1RBR19OT05FKSArPSB0YWdfbm9uZS5vXFxuLS1cXG5uZXQvZHNhL3RhZ19uZXRjLmMtNS1cXG5uZXQvZHNhL3RhZ19uZXRjLmM6NjojaW5jbHVkZSBcXHUwMDNjbGludXgvZHNhL3RhZ19uZXRjLmhcXHUwMDNlXFxubmV0L2RzYS90YWdfbmV0Yy5jLTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA3OjU2OjMyLjM5ODIzOTgxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njg4NTE4MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgU3l6a2FsbGVyJ3MgRFNBIFRhZ2dlciBDb3ZlcmFnZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgY29tcHJlaGVuc2l2ZWx5IFN5emthbGxlciBjb3ZlcnMgRFNBIHRhZ2dlciBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgdGhlcmUgbWlnaHQgYmUgYSBkZWRpY2F0ZWQgYHN5el9kc2Ffc2V0dXBgIGNhbGwgb3IgYSBzaW1pbGFyIGNvbnN0cnVjdCwgc3BlY2lmaWNhbGx5IGZvciBjb25maWd1cmluZyBhbmQgdGVzdGluZyB0aGVzZSB0YWdnZXJzLiBCdXQsIG9uIGZ1cnRoZXIgcmVmbGVjdGlvbiwgSSBkb24ndCB0aGluayB0aGF0J3MgcXVpdGUgcmlnaHQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBTeXprYWxsZXIgYXBwcm9hY2hlcyBEU0EgdGVzdGluZyB0aHJvdWdoIHZldGggcGFpcnMsIHdoaWNoIGl0IHRoZW4gY29ubmVjdHMgc29tZWhvdyB0byBhIERTQSBzd2l0Y2guIEJ1dCB3YWl0Li4uIEknbSBwcmV0dHkgc3VyZSB0aGF0IGl0IGRvZXNuJ3QgaGF2ZSBhIHRydWx5IGdlbmVyaWMgd2F5IHRvIGluc3RhbnRpYXRlIGFueSBhbmQgYWxsIERTQSB0YWdnZXJzLCBhdCBsZWFzdCB1bmxlc3MgdGhlcmUncyBhIHZpcnR1YWwgZHJpdmVyIHByZXNlbnQuIEkgbWVhbiwgd2l0aG91dCB0aGF0LCBpdCB3b3VsZCBiZSBkaWZmaWN1bHQgdG8gdGVzdC5cblxuQWgsIHRoYXQncyBpdCEgVGhlIGBkc2FfbG9vcGAgZHJpdmVyLiBSaWdodC4gKlRoYXQncyogdGhlIHZpcnR1YWwgRFNBIHN3aXRjaCBkcml2ZXIgdXNlZCBzcGVjaWZpY2FsbHkgZm9yIHRlc3RpbmcgRFNBIGZ1bmN0aW9uYWxpdHkuIFRoYXQgZ2l2ZXMgaXQgdGhlIHBvd2VyIHRvIGNyZWF0ZSB0ZXN0IHNjZW5hcmlvcyB0aGF0IHdvdWxkIGJlIGRpZmZpY3VsdCBvdGhlcndpc2UuIE9rYXksIHNvIG5vdyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIGlmIGBkc2FfbG9vcGAgY2FuIHV0aWxpemUgYERTQV9UQUdfUFJPVE9fTkVUQ2AuIElmIGl0IGNhbiwgd2UnbGwgc2VlIGlmIHRoZSBjb3ZlcmFnZSBpbXByb3ZlcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjcxODQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6MzcuMDg2NzYyMzY4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY2NDM4NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRTQV9UQUdfUFJPVE9fTkVUQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9NjI9bmV0Y19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy02NC17XFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6NjU6XFx0cmV0dXJuIERTQV9UQUdfUFJPVE9fTkVUQztcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy02Ni19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz02OD1zdGF0aWMgaW50IG5ldGNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtNzItXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6NzM6XFx0aWYgKHByb3RvICE9IERTQV9UQUdfUFJPVE9fTkVUQylcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy03NC1cXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oPTI2PXN0cnVjdCB0Y19hY3Rpb247XFxuLS1cXG5pbmNsdWRlL25ldC9kc2EuaC02MC0jZGVmaW5lIERTQV9UQUdfUFJPVE9fTVhMODYyX1ZBTFVFXFx0XFx0MzJcXG5pbmNsdWRlL25ldC9kc2EuaDo2MTojZGVmaW5lIERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRVxcdFxcdDMzXFxuaW5jbHVkZS9uZXQvZHNhLmgtNjItXFxuaW5jbHVkZS9uZXQvZHNhLmg9NjM9ZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oLTk2LVxcdERTQV9UQUdfUFJPVE9fTVhMODYyXFx0XFx0PSBEU0FfVEFHX1BST1RPX01YTDg2Ml9WQUxVRSxcXG5pbmNsdWRlL25ldC9kc2EuaDo5NzpcXHREU0FfVEFHX1BST1RPX05FVENcXHRcXHQ9IERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRSxcXG5pbmNsdWRlL25ldC9kc2EuaC05OC19O1xcbi0tXFxubmV0L2RzYS90YWdfbmV0Yy5jPTM3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIG5ldGNfbmV0ZGV2X29wcyA9IHtcXG5uZXQvZHNhL3RhZ19uZXRjLmMtMzgwLVxcdC5uYW1lXFx0XFx0XFx0PSBORVRDX05BTUUsXFxubmV0L2RzYS90YWdfbmV0Yy5jOjM4MTpcXHQucHJvdG9cXHRcXHRcXHQ9IERTQV9UQUdfUFJPVE9fTkVUQyxcXG5uZXQvZHNhL3RhZ19uZXRjLmMtMzgyLVxcdC54bWl0XFx0XFx0XFx0PSBuZXRjX3htaXQsXFxuLS1cXG5uZXQvZHNhL3RhZ19uZXRjLmM9MzkxPU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5uZXQvZHNhL3RhZ19uZXRjLmMtMzkyLVxcbm5ldC9kc2EvdGFnX25ldGMuYzozOTM6TU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fTkVUQywgTkVUQ19OQU1FKTtcXG5uZXQvZHNhL3RhZ19uZXRjLmMtMzk0LW1vZHVsZV9kc2FfdGFnX2RyaXZlcihuZXRjX25ldGRldl9vcHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NjozOS4wNTMyMDgxMjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1MjQ0Njc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgVGFnZ2luZyBGbGV4aWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGEgd2F5IHRvIGludGVyYWN0IHdpdGggYG5ldGNfeG1pdGAgb3IgYG5ldGNfcmN2YCB3aXRoaW4gYG5ldC9kc2EvdGFnX25ldGMuY2Agd2l0aG91dCBhY3R1YWxseSBuZWVkaW5nIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBwcmVzZW50LiBUaGF0J3MgdGhlIGNvcmUgcXVlc3Rpb24uIE15IHRoaW5raW5nIGlzLCBjYW4gSSBzaW11bGF0ZSBvciB0ZXN0IHRoZXNlIGZ1bmN0aW9ucyBpbiBhIG1vcmUgY29udHJvbGxlZCBlbnZpcm9ubWVudD9cblxuU3BlY2lmaWNhbGx5LCBJJ20gd29uZGVyaW5nIGlmIGEgdXNlciwgdGhyb3VnaCBzeXNmcyBvciBuZXRsaW5rLCBjb3VsZCAqZHluYW1pY2FsbHkqIGFsdGVyIHRoZSBEU0EgdGFnIHByb3RvY29sIG9mIGFuIGV4aXN0aW5nIERTQSBzd2l0Y2guIEZvciBpbnN0YW5jZSwgY2FuIEkgdGFrZSBhIHNldHVwIHVzaW5nIGBkc2FfbG9vcGAgb3IgZXZlbiBgZHNhX21vY2tgIGFuZCBzb21laG93IHJlY29uZmlndXJlIGl0IHRvIHVzZSBgRFNBX1RBR19QUk9UT19ORVRDYD8gVGhpcyB3b3VsZCBnaXZlIG1lIGEgdmFsdWFibGUgd2luZG93IGludG8gaG93IHRoZSBgTkVUQ2AgdGFnIHByb3RvY29sIHdvdWxkIGZ1bmN0aW9uIHVuZGVyIGRpZmZlcmVudCBjb25kaXRpb25zLCBhbmQgcG90ZW50aWFsbHkgZmFjaWxpdGF0ZSBlYXNpZXIgZGVidWdnaW5nIGFuZCBleHBlcmltZW50YXRpb24uIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzICp3aGV0aGVyKiBEU0EncyBhcmNoaXRlY3R1cmUgZXZlbiBwZXJtaXRzIHRoaXMga2luZCBvZiBvbi10aGUtZmx5IHRhZyBwcm90b2NvbCBzd2l0Y2hpbmcuIExldCdzIGRpZyBpbnRvIHRoZSBEU0EgaW50ZXJuYWxzIGFuZCBmaW5kIG91dCBpZiBpdCBpcyBkZXNpZ25lZCB0byBoYW5kbGUgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyODQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6NDMuNjA1NjU4MDA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY0NTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGFuZ2VfdGFnX3Byb3RvY29sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kc2EvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2EvZHNhLmM9NTY5PXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9zZXR1cF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxubmV0L2RzYS9kc2EuYy01NzgtXFx0cnRubF9sb2NrKCk7XFxubmV0L2RzYS9kc2EuYzo1Nzk6XFx0ZXJyID0gZHMtXFx1MDAzZW9wcy1cXHUwMDNlY2hhbmdlX3RhZ19wcm90b2NvbChkcywgdGFnX29wcy1cXHUwMDNlcHJvdG8pO1xcbm5ldC9kc2EvZHNhLmMtNTgwLVxcdHJ0bmxfdW5sb2NrKCk7XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTExNTQ9c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV9jcHUoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTExNzUtXFx0aWYgKHVzZXJfcHJvdG9jb2wpIHtcXG5uZXQvZHNhL2RzYS5jOjExNzY6XFx0XFx0aWYgKCFkcy1cXHUwMDNlb3BzLVxcdTAwM2VjaGFuZ2VfdGFnX3Byb3RvY29sKSB7XFxubmV0L2RzYS9kc2EuYy0xMTc3LVxcdFxcdFxcdGRldl9lcnIoZHMtXFx1MDAzZWRldiwgXFxcIlRhZyBwcm90b2NvbCBjYW5ub3QgYmUgbW9kaWZpZWRcXFxcblxcXCIpO1xcbi0tXFxubmV0L2RzYS9kc2EuYy0xMjI5LVxcdCAqIGRzYV9zd2l0Y2hfc2V0dXBfdGFnX3Byb3RvY29sIG9uY2UgLnNldHVwIGhhcyBydW4gYW5kIHRoZVxcbm5ldC9kc2EvZHNhLmM6MTIzMDpcXHQgKiBkcml2ZXIgaXMgcmVhZHkgdG8gYWNjZXB0IGNhbGxzIHRvIC5jaGFuZ2VfdGFnX3Byb3RvY29sLiBJZlxcbm5ldC9kc2EvZHNhLmMtMTIzMS1cXHQgKiB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGN1c3RvbSBwcm90b2NvbCBhdCB0aGF0XFxuLS1cXG5uZXQvZHNhL3N3aXRjaC5jPTg3Mz1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfY2hhbmdlX3RhZ19wcm90byhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuLS1cXG5uZXQvZHNhL3N3aXRjaC5jLTg3OS1cXG5uZXQvZHNhL3N3aXRjaC5jOjg4MDpcXHRpZiAoIWRzLVxcdTAwM2VvcHMtXFx1MDAzZWNoYW5nZV90YWdfcHJvdG9jb2wpXFxubmV0L2RzYS9zd2l0Y2guYy04ODEtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2RzYS9zd2l0Y2guYy04ODQtXFxubmV0L2RzYS9zd2l0Y2guYzo4ODU6XFx0ZXJyID0gZHMtXFx1MDAzZW9wcy1cXHUwMDNlY2hhbmdlX3RhZ19wcm90b2NvbChkcywgdGFnX29wcy1cXHUwMDNlcHJvdG8pO1xcbm5ldC9kc2Evc3dpdGNoLmMtODg2LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA3OjU2OjQzLjY1ODMwODk1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzk5MjMyNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCByZWZsZWN0aW9uLCBhcyBpZiBJJ20gdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBhbiBleHBlcnQ6XG5cbioqRHluYW1pYyBUYWcgUHJvdG9jb2wgaW4gRFNBOiBWZXJpZmljYXRpb24gUmVxdWlyZWQqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IERTQSDigJMgdGhlIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUuIFRoZSBkb2N1bWVudGF0aW9uIGNsZWFybHkgc3RhdGVzIHRoYXQgdGhlIGBjaGFuZ2VfdGFnX3Byb3RvY29sYCBzd2l0Y2ggb3BlcmF0aW9uIGFsbG93cyBmb3IgZHluYW1pY2FsbHkgbW9kaWZ5aW5nIHRoZSB0YWdnaW5nIHByb3RvY29sIGluIHVzZS4gVGhhdCdzIGEga2V5IGZlYXR1cmUsIGFuZCBpdCBvZmZlcnMgYSBsb3Qgb2YgZmxleGliaWxpdHkgaW4gdmFyaW91cyBuZXR3b3JraW5nIHNjZW5hcmlvcy5cblxuQnV0LCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBkcmlsbCBkb3duIGhlcmUuIE15IGV4cGVyaWVuY2UgaXMgdGhhdCBhIGZlYXR1cmUncyBhdmFpbGFiaWxpdHkgaXMgb25seSB0aGUgKnN0YXJ0KiBvZiB0aGUgc3RvcnkuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsIGRvZXMgdGhlICpzcGVjaWZpYyogRFNBIGRyaXZlciBJJ20gY29uc2lkZXJpbmcsIHNheSwgdGhlIGBkc2FfbG9vcGAgZHJpdmVyLCBhY3R1YWxseSBzdXBwb3J0IHRoaXMgYGNoYW5nZV90YWdfcHJvdG9jb2xgIGZlYXR1cmU/IEp1c3QgYmVjYXVzZSB0aGUgb3ZlcmFsbCBEU0EgYXJjaGl0ZWN0dXJlICphbGxvd3MqIGl0IGRvZXNuJ3QgYXV0b21hdGljYWxseSBtZWFuIGV2ZXJ5IHNpbmdsZSBkcml2ZXIgKmltcGxlbWVudHMqIGl0LiBJJ3ZlIGJlZW4gY2F1Z2h0IG91dCBieSB0aGVzZSBzb3J0cyBvZiBhc3N1bXB0aW9ucyBiZWZvcmUuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyJ3MgaW1wbGVtZW50YXRpb24gaXMgdHJ1bHkgY29tcGxpYW50IHdpdGggdGhhdCBhcmNoaXRlY3R1cmFsIGZlYXR1cmUuIEkgbmVlZCB0byBjaGVjayBpdHMgc291cmNlIGNvZGUsIG9yIGRvY3VtZW50YXRpb24sIG9yIHJ1biBzb21lIHRhcmdldGVkIHRlc3RpbmcgdG8gYmUgY2VydGFpbi4gT3RoZXJ3aXNlLCBJIG1pZ2h0IGJlIHNldHRpbmcgbXlzZWxmIHVwIGZvciB0cm91YmxlIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTkyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6NDguMDU3NTQ2MjQ5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDAzNTI3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhbmdlX3RhZ19wcm90b2NvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6NDguMTExNTk1MzY5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDM0MzkzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQWJzZW5jZSBvZiBGdW5jdGlvbmFsaXR5IGFuZCBDb25zaWRlcmluZyBBbHRlcm5hdGl2ZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBpbXByZXNzaW9uIGlzIGEgbmVnYXRpdmUgb25lLiBFc3NlbnRpYWxseSwgd2hhdGV2ZXIgc3lzdGVtIG9yIGZ1bmN0aW9uIEkgd2FzIGV4cGVjdGluZyB0byBmaW5kIGlzLi4uIG1pc3NpbmcuIEl0J3MgYSBub24tc3RhcnRlci4gVGhpcyBhYnNlbmNlIGlzIGEga2V5IGRhdGEgcG9pbnQ7IGl0IGhpZ2hsaWdodHMgYSBnYXAsIGVpdGhlciBpbiB0aGUgZGVzaWduLCB0aGUgaW1wbGVtZW50YXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gaW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgYXJjaGl0ZWN0dXJlLlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHBvdGVudGlhbCB3b3JrYXJvdW5kcyBvciBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzLiBMZXQncyBzZWUuLi4gd2hhdCBhYm91dCB0aGUgcG9zc2liaWxpdHkgb2YgYSBgZHNhX21vY2tgPyBUaGUgZXhpc3RlbmNlIChvciBub24tZXhpc3RlbmNlKSBvZiBhIG1vY2sgZHJpdmVyIGJlY29tZXMgY3J1Y2lhbCBpbiBkZXRlcm1pbmluZyBob3cgYmVzdCB0byBwcm9jZWVkLiBJZiBvbmUgaXMgYXZhaWxhYmxlLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGdyZWF0bHksIGFsbG93aW5nIG1lIHRvIGlzb2xhdGUgYW5kIHRlc3QgZGlmZmVyZW50IGNvbXBvbmVudHMgd2l0aG91dCByZWx5aW5nIG9uIHRoZSBmdWxsIHN5c3RlbS4gSWYgaXQncyAqbm90KiBhdmFpbGFibGUsIHRoZW4gdGhhdCByYWlzZXMgYSB3aG9sZSBob3N0IG9mIGZ1cnRoZXIgcXVlc3Rpb25zIGFib3V0IHRlc3Rpbmcgc3RyYXRlZ3kgYW5kIGhvdyB0byBiZXN0IGNyZWF0ZSB0aGUgbmVjZXNzYXJ5IHRlc3QgZW52aXJvbm1lbnQuIFRoZSBtb2NrIGRyaXZlcidzIGFic2VuY2UgYWxzbyB0ZWxscyBtZSBhYm91dCB0aGUgc3lzdGVtJ3Mgb3ZlcmFsbCBsZXZlbCBvZiB0ZXN0YWJpbGl0eSBhbmQgdGhlIGRlZ3JlZSB0byB3aGljaCBpdCBtaWdodCBuZWVkIGZ1cnRoZXIgcmVmaW5lbWVudC4gVGhpcyBhYnNlbmNlIGFsc28gY2F1c2VzIG1lIHRvIHRoaW5rIGFib3V0IHdoZXJlIHN1Y2ggYSBtb2NrIG1pZ2h0IGZpdCwgYW5kIGlmIHN1Y2ggYSBtb2NrIGlzIGV2ZW4gcG9zc2libGUsIGdpdmVuIHRoZSBleGlzdGluZyBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTUzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6NTEuODU1MDM4MDY3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM1ODAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGFuZ2VfdGFnX3Byb3RvY29sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM9NjY0Nj1zdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIG12ODhlNnh4eF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTY2NTQtXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6NjY1NTpzdGF0aWMgaW50IG12ODhlNnh4eF9jaGFuZ2VfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjU2LVxcdFxcdFxcdFxcdFxcdCBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz03MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXY4OGU2eHh4X3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNzE4OC1cXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gbXY4OGU2eHh4X2dldF90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6NzE4OTpcXHQuY2hhbmdlX3RhZ19wcm90b2NvbFxcdD0gbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNzE5MC1cXHQuc2V0dXBcXHRcXHRcXHQ9IG12ODhlNnh4eF9zZXR1cCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz03MzI9ZmVsaXhfdGFnX3Byb3RvX3NldHVwX3NoYXJlZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtNzUzLSAqL1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzo3NTQ6c3RhdGljIGludCBmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtNzU1LVxcdFxcdFxcdFxcdCAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTE2OTY9c3RhdGljIGludCBmZWxpeF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMTc1MS1cXHQgKi9cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6MTc1MjpcXHRmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sKGRzLCBmZWxpeC1cXHUwMDNldGFnX3Byb3RvKTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMTc1My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz0yMzA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZmVsaXhfc3dpdGNoX29wcyA9IHtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwNy1cXHQuZ2V0X3RhZ19wcm90b2NvbFxcdFxcdD0gZmVsaXhfZ2V0X3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6MjMwODpcXHQuY2hhbmdlX3RhZ19wcm90b2NvbFxcdFxcdD0gZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwOS1cXHQuY29ubmVjdF90YWdfcHJvdG9jb2xcXHRcXHQ9IGZlbGl4X2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYz0yMzAzPXN0YXRpYyBpbnQgcnRsODM2NW1iX2NwdV9jb25maWcoc3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMjMzMS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jOjIzMzI6c3RhdGljIGludCBydGw4MzY1bWJfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0yMzMzLVxcdFxcdFxcdFxcdFxcdCBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jPTI2NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBydGw4MzY1bWJfc3dpdGNoX29wcyA9IHtcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jLTI2NjctXFx0LmdldF90YWdfcHJvdG9jb2wgPSBydGw4MzY1bWJfZ2V0X3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jOjI2Njg6XFx0LmNoYW5nZV90YWdfcHJvdG9jb2wgPSBydGw4MzY1bWJfY2hhbmdlX3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jLTI2NjktXFx0LnNldHVwID0gcnRsODM2NW1iX3NldHVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1Njo1MS45MDM0MDE5NjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzNTY4NzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFByb3RvY29sIFN1cHBvcnQgb2YgU3dpdGNoIENoaXBzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgc3dpdGNoIGRyaXZlciBsYW5kc2NhcGUgYW5kIHNlZWluZyB3aGVyZSB3ZSBzdGFuZCB3aXRoIFZMQU4gdGFnZ2luZyBwcm90b2NvbHMuIEkga25vdyB0aGF0IGNoaXBzIGxpa2UgdGhlIGBtdjg4ZTZ4eHhgLCBgZmVsaXhgLCBhbmQgYHJ0bDgzNjVtYmAgc2VyaWVzICpkbyogb2ZmZXIgdGhpcyBraW5kIG9mIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSG93ZXZlciwgdGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSBibGFua2V0IHN1cHBvcnQgZm9yIGV2ZXJ5IHRhZ2dpbmcgcHJvdG9jb2wgdW5kZXIgdGhlIHN1bi4gSXQncyBsb29raW5nIGxpa2UgdGhlaXIgaW1wbGVtZW50YXRpb25zIGFyZSBwcmV0dHkgc3BlY2lmaWMuXG5cbkZvciBpbnN0YW5jZSwgdGhlIGBmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sYCBmdW5jdGlvbiBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGF0IGl0cyBzdXBwb3J0IGlzIHByb2JhYmx5IGxpbWl0ZWQgdG8sIGxldCdzIHNheSwgYERTQV9UQUdfUFJPVE9fT0NFTE9UYCBhbmQgYERTQV9UQUdfUFJPVE9fT0NFTE9UXzgwMjFRYCBwcm90b2NvbHMuIEl0IHNlZW1zIGxpa2UgdGhlIHByb3RvY29sIGlzIHZlcnkgY2hpcC1kZXBlbmRlbnQuXG5cblRvIGdldCBhIGJldHRlciBwaWN0dXJlLCBJIG5lZWQgdG8gbG9vayBpbnRvIGBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbGAgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHByb3RvY29scyBlYWNoIG9mIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBhY3R1YWxseSBzdXBwb3J0cywgc28gSSBjYW4gc3RhcnQgdG8gYnVpbGQgYSBjbGVhcmVyLCBtb3JlIGNvbXBsZXRlIG1vZGVsIG9mIHRoZSBvcHRpb25zIGF2YWlsYWJsZSB0byBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwMDAsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1Njo1Ni4zMzkwOTIxMzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzMzNTQxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz02NjQ2PXN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXY4OGU2eHh4X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNjY1NC1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzo2NjU1OnN0YXRpYyBpbnQgbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTY2NTYtXFx0XFx0XFx0XFx0XFx0IGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTcxODc9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdjg4ZTZ4eHhfc3dpdGNoX29wcyA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy03MTg4LVxcdC5nZXRfdGFnX3Byb3RvY29sXFx0PSBtdjg4ZTZ4eHhfZ2V0X3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzo3MTg5OlxcdC5jaGFuZ2VfdGFnX3Byb3RvY29sXFx0PSBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy03MTkwLVxcdC5zZXR1cFxcdFxcdFxcdD0gbXY4OGU2eHh4X3NldHVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1Njo1Ni43NTI0MzM1MDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQyMzg3MTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4gbmV0d29ya2luZyBhbmQga2VybmVsIGRldmVsb3BtZW50OlxuXG4qKkFuYWx5emluZyB0aGUgYG12ODhlNnh4eF9jaGFuZ2VfdGFnX3Byb3RvY29sYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRoZSBuZXh0IHRhc2sgaXMgdG8gZGl2ZSBpbnRvIGBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbGAuIFNvdW5kcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgTWFydmVsbCA4OEU2eHh4IHNlcmllcyBvZiBFdGhlcm5ldCBzd2l0Y2hlcyDigJMgYW5kIHNwZWNpZmljYWxseSwgaG93IHRoZXkgaGFuZGxlIHRhZ2dlZCBFdGhlcm5ldCBmcmFtZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSB3YXkgdGhlIHN3aXRjaCBpbnRlcnByZXRzIG9yIGhhbmRsZXMgdGhlIHRhZ2dpbmcgcHJvdG9jb2wuXG5cbkltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2hhdCBraW5kIG9mIHRhZ2dpbmcgcHJvdG9jb2xzIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBWTEFOIHRhZ3MgKDgwMi4xUSk/IFByb3ZpZGVyIEJyaWRnZSB0YWdzICg4MDIuMWFkKT8gTWF5YmUgc29tZSBwcm9wcmlldGFyeSBNYXJ2ZWxsIGV4dGVuc2lvbnM/IFRoZSBmdW5jdGlvbidzIHB1cnBvc2Ugc2hvdWxkIGJlIHByZXR0eSBjcml0aWNhbCBpbiBhIGxvdCBvZiBuZXR3b3JraW5nIHNjZW5hcmlvcy5cblxuSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwYXNzZWQgaW4/IEEgZGV2aWNlIHN0cnVjdHVyZSBsaWtlbHksIGFuZCBhbG1vc3QgY2VydGFpbmx5IGEgcG9pbnRlciB0byBzb21lIHNvcnQgb2YgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGUgc3dpdGNoJ3MgcG9ydCBzZXR0aW5ncy4gSSBleHBlY3QgdG8gc2VlIHJlZ2lzdGVyIHdyaXRlcyBpbnZvbHZlZCwgbGlrZWx5IHRvIHRoZSBzd2l0Y2gncyBpbnRlcm5hbCByZWdpc3RlcnMgdGhhdCBjb250cm9sIHRoZSB0YWdnaW5nIHNldHRpbmdzLiBUaGUgZnVuY3Rpb24gY291bGQgYWxzbyBiZSBoYW5kbGluZyB0aGUgaW50ZXJhY3Rpb24gd2l0aCBhbnkgTUlJL01ESU8gaW50ZXJmYWNlIHRoYXQncyBpbnZvbHZlZC5cblxuSSdsbCBrZWVwIGEgY2xvc2UgZXllIG91dCBmb3IgYW55IGVycm9yIGhhbmRsaW5nLiBJcyB0aGlzIGZ1bmN0aW9uIHJvYnVzdD8gRG9lcyBpdCBjaGVjayBmb3IgdmFsaWQgcHJvdG9jb2wgSURzIG9yIHBhcmFtZXRlciByYW5nZXM/IEFyZSB0aGVyZSBjaGVja3MgZm9yIGhhcmR3YXJlIGxpbWl0YXRpb25zPyBBIG1pc2NvbmZpZ3VyYXRpb24gaGVyZSBjb3VsZCBlYXNpbHkgY3JlYXRlIGludGVybWl0dGVudCBjb25uZWN0aXZpdHkgaXNzdWVzLCBvciBldmVuIGEgZnVsbCBuZXR3b3JrIG91dGFnZS5cblxuVWx0aW1hdGVseSwgSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgKmhvdyogdGhlIHRhZ2dpbmcgcHJvdG9jb2wgaXMgYmVpbmcgY2hhbmdlZC4gSXMgaXQganVzdCB0aGUgYWRkaXRpb24gb2YgYSBuZXcgVkxBTiBJRCBvciBpcyBpdCBjaGFuZ2luZyB0aGUgZW50aXJlIHRhZ2dpbmcgc2NoZW1lIGZvciB0aGUgcG9ydD8gQWZ0ZXIgdGhhdCwgSSB3aWxsIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBzd2l0Y2ggZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTczOSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA3OjU3OjAyLjE3NjMwODU3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODcxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjY1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjY1NTpcXHRzdGF0aWMgaW50IG12ODhlNnh4eF9jaGFuZ2VfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG42NjU2OlxcdFxcdFxcdFxcdFxcdFxcdCBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuNjY1NzpcXHR7XFxuNjY1ODpcXHRcXHRzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAgPSBkcy1cXHUwMDNlcHJpdjtcXG42NjU5OlxcdFxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBvbGRfcHJvdG9jb2w7XFxuNjY2MDpcXHRcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDtcXG42NjYxOlxcdFxcdGludCBlcnI7XFxuNjY2MjpcXHRcXG42NjYzOlxcdFxcdHN3aXRjaCAocHJvdG8pIHtcXG42NjY0OlxcdFxcdGNhc2UgRFNBX1RBR19QUk9UT19FRFNBOlxcbjY2NjU6XFx0XFx0XFx0c3dpdGNoIChjaGlwLVxcdTAwM2VpbmZvLVxcdTAwM2VlZHNhX3N1cHBvcnQpIHtcXG42NjY2OlxcdFxcdFxcdGNhc2UgTVY4OEU2WFhYX0VEU0FfVU5TVVBQT1JURUQ6XFxuNjY2NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG42NjY4OlxcdFxcdFxcdGNhc2UgTVY4OEU2WFhYX0VEU0FfVU5ET0NVTUVOVEVEOlxcbjY2Njk6XFx0XFx0XFx0XFx0ZGV2X3dhcm4oY2hpcC1cXHUwMDNlZGV2LCBcXFwiUmVseWluZyBvbiB1bmRvY3VtZW50ZWQgRURTQSB0YWdnaW5nIGJlaGF2aW9yXFxcXG5cXFwiKTtcXG42NjcwOlxcdFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbjY2NzE6XFx0XFx0XFx0Y2FzZSBNVjg4RTZYWFhfRURTQV9TVVBQT1JURUQ6XFxuNjY3MjpcXHRcXHRcXHRcXHRicmVhaztcXG42NjczOlxcdFxcdFxcdH1cXG42Njc0OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NzowMi4xNzY1OTc1MzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5Mjk5MDg5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBQYXRoczogTlhQIE5FVEMgRHJpdmVyIGFuZCBUYWdnZXIqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBpbiBxdWVzdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIE5YUCBORVRDIGRyaXZlciBhbmQgYHRhZ19uZXRjLmNgLCByZWxpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgcHJvdG9jb2xzLCBzcGVjaWZpY2FsbHkgdGhlIE5YUCBORVRDIFBDSSBoYXJkd2FyZS4gVGhlcmUncyBubyB3YXkgdG8gcmVhY2ggYHRhZ19uZXRjLmNgIGRpcmVjdGx5IHdpdGhvdXQgdGhhdCBoYXJkd2FyZSwgYW5kIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBub3QgdmlhIGFueSBzdGFuZGFyZCB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIHRyaWNrcyBvciBwYWNrZXQgaW5qZWN0aW9uLiBTeXprYWxsZXIgaXMgb3V0LCBhcyBgdGFnX25ldGMuY2AgaXMgbGlua2VkIHRvIGEgbmV0d29yayBpbnRlcmZhY2Ugb25seSBpZiB0aGUgRFNBIHN3aXRjaCB1c2luZyBgbmV0Y19tYWluLmNgIGlzIGNvbmZpZ3VyZWQsIHdoaWNoIGluIHR1cm4gZGVtYW5kcyB0aGlzIE5YUCBORVRDIFBDSSBoYXJkd2FyZS5cblxuSSB3YXMgaG9waW5nIG1heWJlIGEgRFNBIHN3aXRjaCBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgZGlmZmVyZW50bHksIGJ1dCBpdCBsb29rcyBsaWtlIGRyaXZlcnMgY2FsbCBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgdG8gZG8gc28sIGFuZCBgbmV0Y19tYWluLmNgIGlzIHRoZSBzb2xlIGRyaXZlciByZXR1cm5pbmcgYERTQV9UQUdfUFJPVE9fTkVUQ2AuICBUaGlzIGNvbmZpcm1zIGB0YWdfbmV0Yy5jYCBhbmQgYnkgZXh0ZW5zaW9uLCB0aGUgdXBkYXRlZCBjb2RlIGFyZSBkZXBlbmRlbnQgb24gdGhhdCBwaHlzaWNhbCBoYXJkd2FyZS5cblxuSSBjaGVja2VkIGZvciBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLCBsaWtlIGBkc2FfbG9vcGAgb3IgYGRzYV9tb2NrYC4gYGRzYV9sb29wYCBpcyB0aGVyZSwgYnV0IHVzZXMgYERTQV9UQUdfUFJPVE9fTk9ORWAuICBgZHNhX2xvb3BfYmRpbmZvYCByZWdpc3RlcnMgYGRzYV9sb29wYCwgYnV0IHRoYXQncyBub3QgaGVscGluZy4gQmFzaWNhbGx5LCB1bmxlc3MgdGhlcmUncyBleHBsaWNpdCB2aXJ0dWFsIGRyaXZlciBzdXBwb3J0IGZvciB0aGlzIHNwZWNpZmljIHRhZ2dlciwgaXQncyB1bnJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS5cblxuR2l2ZW4gdGhlIHByb21wdCdzIGNyaXRlcmlhOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSxcIiBJIGhhdmUgdG8gY29uY2x1ZGUgdGhhdCB0aGUgTlhQIE5FVEMgc3dpdGNoIGZpdHMgdGhhdCBkZXNjcmlwdGlvbi4gSXQncyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGUgZHJpdmVyIGl0c2VsZiwgdGhlIFBUUCBzdXBwb3J0IGFkZGVkIGluIHRoZSBwYXRjaCwgYW5kIHRoZSBhc3NvY2lhdGVkIHRhZ2dlciwgYXJlIGFsbCB1bnJlYWNoYWJsZSB3aXRob3V0IHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUuXG5cbkkndmUgdmVyaWZpZWQgdGhhdCBgbmV0Y19tYWluLmNgIHV0aWxpemVzIGBtb2R1bGVfcGNpX2RyaXZlcihuZXRjX3N3aXRjaF9kcml2ZXIpYCwgYW5kIGl0cyB2ZW5kb3IgSUQgKDB4MTEzMSwgTlhQKSBhbmQgZGV2aWNlIElEICgweGVlZjIpIGNvbmZpcm0gaXQncyBhIHBoeXNpY2FsIGhhcmR3YXJlIGNvbXBvbmVudC4gVGhlIFBUUCBzdXBwb3J0LCB0aGVyZWZvcmUsIGlzIGVxdWFsbHkgaW5hY2Nlc3NpYmxlLiBJIHdhcyBjb25zaWRlcmluZyBvdGhlciB3YXlzIHRvIHBvc3NpYmx5IGFjdGl2YXRlIGB0YWdfbmV0Yy5jYCB0aHJvdWdoIERTQSByb3V0aW5nIHJ1bGVzIG9yIHRyYWZmaWMgY29udHJvbCAodGMpIC8gQlBGLCBidXQgYHRhZ19uZXRjLmNgIGlzIHRpZWQgdG8gdGhlIGBkc2FfZGV2aWNlX29wc2Agc3RydWN0IHJlZ2lzdGVyZWQgdmlhIGBtb2R1bGVfZHNhX3RhZ19kcml2ZXJgLiBJdCdzIHNlbGVjdGVkIG9ubHkgd2hlbiB0aGUgRFNBIHN3aXRjaCBpcyBzZXR1cCwgYW5kIG9ubHkgaWYgdGhlIHN3aXRjaCwgdGhyb3VnaCBpdHMgYGdldF90YWdfcHJvdG9jb2xgIG9yIGBjaGFuZ2VfdGFnX3Byb3RvY29sYCBvcHMsIHJlcXVlc3RzIGBEU0FfVEFHX1BST1RPX05FVENgLCB3aGljaCBubyB2aXJ0dWFsIHN3aXRjaCBkb2VzLlxuXG5UaGVyZWZvcmUsIHRoZSBlbnRpcmUgcGF0Y2gncyBjb2RlIHBhdGhzIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBNeSByZWFzb25pbmcgbGVhZHMgbWUgdG8gYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUyOCwiT3V0cHV0VG9rZW5zIjoxMTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NzoxNS4xMDY1MDk2MDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBzdXBwb3J0IHRvIHRoZSBOWFAgTkVUQyBzd2l0Y2ggZHJpdmVyIGFuZCBpdHMgYXNzb2NpYXRlZCBEU0EgdGFnZ2VyLiBUaGUgTkVUQyBzd2l0Y2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBkZXZpY2UgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyByZXF1aXJlZCB0byBwcm9iZSB0aGUgZHJpdmVyIGFuZCBpbnN0YW50aWF0ZSB0aGUgRFNBIHN3aXRjaCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW4gYm90aCB0aGUgZHJpdmVyIGFuZCB0aGUgdGFnZ2VyIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBzdXBwb3J0IHRvIHRoZSBOWFAgTkVUQyBzd2l0Y2ggZHJpdmVyIGFuZCBpdHMgYXNzb2NpYXRlZCBEU0EgdGFnZ2VyLiBUaGUgTkVUQyBzd2l0Y2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBkZXZpY2UgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyByZXF1aXJlZCB0byBwcm9iZSB0aGUgZHJpdmVyIGFuZCBpbnN0YW50aWF0ZSB0aGUgRFNBIHN3aXRjaCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW4gYm90aCB0aGUgZHJpdmVyIGFuZCB0aGUgdGFnZ2VyIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsbzhz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 07:29:34 +0000 UTC FinishedAt: 2026-07-29 07:57:16 +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+CgkJCTx0ZD4yMDI2LzA3LzI5IDA3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIHN1cHBvcnQgdG8gdGhlIE5YUCBORVRDIHN3aXRjaCBkcml2ZXIgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWdnZXIuIFRoZSBORVRDIHN3aXRjaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGRldmljZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gU2luY2UgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIHJlcXVpcmVkIHRvIHByb2JlIHRoZSBkcml2ZXIgYW5kIGluc3RhbnRpYXRlIHRoZSBEU0Egc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbiBib3RoIHRoZSBkcml2ZXIgYW5kIHRoZSB0YWdnZXIgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZDkzMjNmNjM4NjYwYjkyMjRkOTdkMmY5MDNhMTQzNGJjMmRkN2FjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDc6NTU6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWdcbmluZGV4IDc5M2Y3NjkxYTI0ZjMuLjU1YjFmMTMzOGE4NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnXG5AQCAtNCw2ICYjNDM7NCw3IEBAIGNvbmZpZyBORVRfRFNBX05FVENfU1dJVENIXG4gXHRkZXBlbmRzIG9uIEFSTTY0IHx8IENPTVBJTEVfVEVTVFxuIFx0ZGVwZW5kcyBvbiBORVRfRFNBIFx1MDAyNlx1MDAyNiBQQ0lcbiBcdGRlcGVuZHMgb24gTkVUX1ZFTkRPUl9GUkVFU0NBTEVcbiYjNDM7XHRkZXBlbmRzIG9uIFBUUF9ORVRDX1Y0X1RJTUVSIHx8IFBUUF9ORVRDX1Y0X1RJTUVSPW5cbiBcdHNlbGVjdCBORVRfRFNBX1RBR19ORVRDXG4gXHRzZWxlY3QgRlNMX0VORVRDX01ESU9cbiBcdHNlbGVjdCBOWFBfTlRNUFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvTWFrZWZpbGVcbmluZGV4IGY0MGIxM2M3MDJlMDcuLjU3MmI4MzNhZDgwZmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL25ldGMvTWFrZWZpbGVcbkBAIC0xLDMgJiM0MzsxLDQgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiBvYmotJChDT05GSUdfTkVUX0RTQV9ORVRDX1NXSVRDSCkgJiM0Mzs9IG54cC1uZXRjLXN3aXRjaC5vXG4tbnhwLW5ldGMtc3dpdGNoLW9ianMgOj0gbmV0Y19tYWluLm8gbmV0Y19wbGF0Zm9ybS5vIG5ldGNfZXRodG9vbC5vXG4mIzQzO254cC1uZXRjLXN3aXRjaC1vYmpzIDo9IG5ldGNfbWFpbi5vIG5ldGNfcGxhdGZvcm0ubyBuZXRjX2V0aHRvb2wubyBcXFxuJiM0MztcdFx0XHRuZXRjX3B0cC5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uY1xuaW5kZXggNzcwNzczNTJjMWE1Ny4uOTg1NWUwMmI0NzI2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uY1xuQEAgLTY1LDYgJiM0Mzs2NSwyMSBAQCBuZXRjX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdHJldHVybiBEU0FfVEFHX1BST1RPX05FVEM7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG5ldGNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuJiM0MztcdFx0XHRcdCAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEgKnRhZ2dlcl9kYXRhO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvdG8gIT0gRFNBX1RBR19QUk9UT19ORVRDKVxuJiM0MztcdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4mIzQzO1xuJiM0MztcdHRhZ2dlcl9kYXRhID0gZHMtXHUwMDNldGFnZ2VyX2RhdGE7XG4mIzQzO1x0dGFnZ2VyX2RhdGEtXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIgPSBuZXRjX29uZXN0ZXBfc3luY19oYW5kbGVyO1xuJiM0MztcdHRhZ2dlcl9kYXRhLVx1MDAzZXR3b3N0ZXBfdHN0YW1wX2hhbmRsZXIgPSBuZXRjX3R3b3N0ZXBfdHN0YW1wX2hhbmRsZXI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9ybXcoc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsXG4gXHRcdFx0ICB1MzIgbWFzaywgdTMyIHZhbClcbiB7XG5AQCAtODAsNyAmIzQzOzk1LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3JtdyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIHJlZyxcbiBcdG5ldGNfcG9ydF93cihucCwgcmVnLCBuZXcpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZXRjX21hY19wb3J0X3dyKHN0cnVjdCBuZXRjX3BvcnQgKm5wLCB1MzIgcmVnLCB1MzIgdmFsKVxuJiM0Mzt2b2lkIG5ldGNfbWFjX3BvcnRfd3Ioc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsIHUzMiB2YWwpXG4ge1xuIFx0aWYgKGlzX25ldGNfcHNldWRvX3BvcnQobnApKVxuIFx0XHRyZXR1cm47XG5AQCAtMjM4LDYgJiM0MzsyNTMsMTUgQEAgc3RhdGljIHZvaWQgbmV0Y19nZXRfc3dpdGNoX2NhcGFiaWxpdGllcyhzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpXG4gXHRwcml2LVx1MDAzZW51bV9icCA9IEZJRUxEX0dFVChCUENBUFJfTlVNX0JQLCB2YWwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbmV0Y19wb3J0X2luaXRfcHRwX2lwZnRfZWlkKHN0cnVjdCBuZXRjX3BvcnQgKm5wKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIEluaXRpYWxpemUgdG8gaW52YWxpZCBlbnRyeSBJRHMgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBORVRDX1BUUF9NQVg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bnAtXHUwMDNlcHRwX2lwZnRfZWlkW2ldID0gTlRNUF9OVUxMX0VOVFJZX0lEO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbmV0Y19pbml0X2FsbF9wb3J0cyhzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gcHJpdi1cdTAwM2VkZXY7XG5AQCAtMjg2LDYgJiM0MzszMTAsMTcgQEAgc3RhdGljIGludCBuZXRjX2luaXRfYWxsX3BvcnRzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbiBcdFx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gY3JlYXRlIE1ESU8gYnVzXFxuXCYjMzQ7KTtcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0LyogVGhlIGlwZnRfaGZfZWlkIGlzIGluaXRpYWxpemVkIHRvIGFuIGludmFsaWQgZW50cnlcbiYjNDM7XHRcdFx0ICogSUQgYmVjYXVzZSB0aGUgaG9zdCBmbG9vZCBydWxlIChJUEZUIGVudHJ5KSBoYXMgbm90XG4mIzQzO1x0XHRcdCAqIGJlZW4gY3JlYXRlZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG5wLVx1MDAzZWlwZnRfaGZfZWlkID0gTlRNUF9OVUxMX0VOVFJZX0lEO1xuJiM0MztcdFx0XHRuZXRjX3BvcnRfaW5pdF9wdHBfaXBmdF9laWQobnApO1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4mIzQzO1x0XHRcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZucC1cdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUpO1xuJiM0MztcdFx0XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bnAtXHUwMDNlc2tiX29uZXN0ZXBfcXVldWUpO1xuJiM0MztcdFx0XHRJTklUX1dPUksoXHUwMDI2bnAtXHUwMDNlb25lc3RlcF93b3JrLCBuZXRjX3BvcnRfb25lc3RlcF93b3JrKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTU0OSw2ICYjNDM7NTg0LDEyIEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9maXhlZF9jb25maWcoc3RydWN0IG5ldGNfcG9ydCAqbnApXG4gXHRuZXRjX3BvcnRfcm13KG5wLCBORVRDX1BDUiwgUENSX0wyRE9TRSB8IFBDUl9MM0RPU0UsXG4gXHRcdCAgICAgIFBDUl9MMkRPU0UgfCBQQ1JfTDNET1NFKTtcbiBcbiYjNDM7XHQvKiBFbmFibGUgaW5ncmVzcyBwb3J0IGZpbHRlciB0YWJsZSBsb29rdXAsIGlmIG5vIG1hdGNoIGlzIGZvdW5kLFxuJiM0MztcdCAqIHRoZSBmcmFtZSBpcyBhbGxvd2VkIGFuZCBwYXNzZWQgdG8gdGhlIG5leHQgZnJhbWUgcHJvY2Vzc2luZ1xuJiM0MztcdCAqIGZ1bmN0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIFBJUEZDUl9FTik7XG4mIzQzO1xuIFx0LyogU2V0IHRoZSBxdWFudGEgdmFsdWUgb2YgVFggUEFVU0UgZnJhbWUgKi9cbiBcdG5ldGNfbWFjX3BvcnRfd3IobnAsIE5FVENfUE1fUEFVU0VfUVVBTlRBKDApLCBORVRDX1BBVVNFX1FVQU5UQSk7XG4gXG5AQCAtODY5LDYgJiM0Mzs5MTAsMTUgQEAgc3RhdGljIGludCBuZXRjX3N3aXRjaF9icHRfZGVmYXVsdF9jb25maWcoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kZXYgKm5ldGNfZ2V0X3B0cF90aW1lcihzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VwZGV2LVx1MDAzZWJ1cztcbiYjNDM7XHR1MzIgZGV2Zm4gPSBwcml2LVx1MDAzZWluZm8tXHUwMDNldG1yX2RldmZuO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGNpX2dldF9kb21haW5fYnVzX2FuZF9zbG90KHBjaV9kb21haW5fbnIoYnVzKSxcbiYjNDM7XHRcdFx0XHRcdCAgIGJ1cy1cdTAwM2VudW1iZXIsIGRldmZuKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG5ldGNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG5AQCAtODg5LDYgJiM0Mzs5MzksMTYgQEAgc3RhdGljIGludCBuZXRjX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0LyogVGhlIFBUUCB0aW1lciBzaXRzIG9uIHRoZSBzYW1lIFBDSSBidXMgYXMgdGhlIHN3aXRjaC4gUENJIGNyZWF0ZXNcbiYjNDM7XHQgKiBldmVyeSBmdW5jdGlvbiYjMzk7cyBwY2lfZGV2IGR1cmluZyBidXMgZW51bWVyYXRpb24sIGJlZm9yZSBhbnkgZHJpdmVyXG4mIzQzO1x0ICogcHJvYmVzLCBzbyB3ZSBjYW4gZ3JhYiB0aGUgdGltZXImIzM5O3MgcGNpX2RldiBoZXJlIGV2ZW4gaWYgdGhlIHRpbWVyXG4mIzQzO1x0ICogZHJpdmVyIGhhcyBub3QgcHJvYmVkIHlldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwcml2LVx1MDAzZXRtcl9kZXYgPSBuZXRjX2dldF9wdHBfdGltZXIocHJpdik7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZXRtcl9kZXYpXG4mIzQzO1x0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0IFwmIzM0O1BUUCB0aW1lciBQQ0kgZGV2aWNlIG5vdCBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1xuIFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNnByaXYtXHUwMDNlZmRiX2xpc3QpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWZkYnRfbG9jayk7XG4gXHRwcml2LVx1MDAzZWZkYnRfYWdlaW5nX2RlbGF5ID0gTkVUQ19GREJUX0FHRUlOR19ERUxBWTtcbkBAIC05MjUsNiAmIzQzOzk4NSw3IEBAIHN0YXRpYyBpbnQgbmV0Y19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHQgKi9cbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2VmZGJ0X2xvY2spO1xuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZXZmdF9sb2NrKTtcbiYjNDM7XHRwY2lfZGV2X3B1dChwcml2LVx1MDAzZXRtcl9kZXYpO1xuIFx0bmV0Y19mcmVlX250bXBfdXNlcihwcml2KTtcbiBcbiBcdHJldHVybiBlcnI7XG5AQCAtOTM4LDIwICYjNDM7OTk5LDIzIEBAIHN0YXRpYyB2b2lkIG5ldGNfZGVzdHJveV9hbGxfbGlzdHMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZXZmdF9sb2NrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbmV0Y19mcmVlX2hvc3RfZmxvb2RfcnVsZXMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxuJiM0MztzdGF0aWMgdm9pZCBuZXRjX2ZyZWVfcG9ydHNfcmVzb3VyY2VzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuIFxuLVx0ZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIHByaXYtXHUwMDNlZHMpIHtcbiYjNDM7XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2F2YWlsYWJsZV9wb3J0KGRwLCBwcml2LVx1MDAzZWRzKSB7XG4gXHRcdHN0cnVjdCBuZXRjX3BvcnQgKm5wID0gcHJpdi1cdTAwM2Vwb3J0c1tkcC1cdTAwM2VpbmRleF07XG4gXG4tXHRcdC8qIE5vIG5lZWQgdG8gY2xlYXIgdGhlIGhhcmR3YXJlIElQRlQgZW50cnkuIEJlY2F1c2UgUENJZVxuLVx0XHQgKiBGTFIgd2lsbCBiZSBwZXJmb3JtZWQgd2hlbiB0aGUgc3dpdGNoIGlzIHJlLXJlZ2lzdGVyZWQsXG4tXHRcdCAqIGl0IHdpbGwgcmVzZXQgaGFyZHdhcmUgc3RhdGUuIFNvIG9ubHkgbmVlZCB0byBmcmVlIHRoZVxuLVx0XHQgKiBtZW1vcnkgdG8gYXZvaWQgbWVtb3J5IGxlYWsuXG4mIzQzO1x0XHRpZiAoIWRzYV9wb3J0X2lzX3VzZXIoZHApKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBObyBuZXcgU0tCcyBjYW4gYmUgZW5xdWV1ZWQgZHVyaW5nIHRlYXJkb3duLiBQdXJnZSB3aXRob3V0XG4mIzQzO1x0XHQgKiB0aGUgc3BpbmxvY2sgdG8gYXZvaWQgY2FsbGluZyBrZnJlZV9za2IoKSB3aXRoIGEgZGVzdHJ1Y3RvclxuJiM0MztcdFx0ICogKHNvY2tfZWZyZWUpIHdoaWxlIGhvbGRpbmcgYSBzcGlubG9jay5cbiBcdFx0ICovXG4tXHRcdGtmcmVlKG5wLVx1MDAzZWhvc3RfZmxvb2QpO1xuLVx0XHRucC1cdTAwM2Vob3N0X2Zsb29kID0gTlVMTDtcbiYjNDM7XHRcdF9fc2tiX3F1ZXVlX3B1cmdlKFx1MDAyNm5wLVx1MDAzZXNrYl90eHRzdGFtcF9xdWV1ZSk7XG4mIzQzO1x0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5wLVx1MDAzZW9uZXN0ZXBfd29yayk7XG4mIzQzO1x0XHRfX3NrYl9xdWV1ZV9wdXJnZShcdTAwMjZucC1cdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSk7XG4gXHR9XG4gfVxuIFxuQEAgLTk2MSw4ICYjNDM7MTAyNSw5IEBAIHN0YXRpYyB2b2lkIG5ldGNfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFxuIFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZWZkYnRfYWdlaW5nX3dvcmspO1xuIFx0bmV0Y19kZXN0cm95X2FsbF9saXN0cyhwcml2KTtcbi1cdG5ldGNfZnJlZV9ob3N0X2Zsb29kX3J1bGVzKHByaXYpO1xuJiM0MztcdHBjaV9kZXZfcHV0KHByaXYtXHUwMDNldG1yX2Rldik7XG4gXHRuZXRjX2ZyZWVfbnRtcF91c2VyKHByaXYpO1xuJiM0MztcdG5ldGNfZnJlZV9wb3J0c19yZXNvdXJjZXMocHJpdik7XG4gfVxuIFxuIHN0YXRpYyBib29sIG5ldGNfcG9ydF9pc19lbWRpb19jb25zdW1lcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG5AQCAtMTcyMCw4ICYjNDM7MTc4NSw2IEBAIHN0YXRpYyBpbnQgbmV0Y19wb3J0X2FkZF9ob3N0X2Zsb29kX3J1bGUoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCF1YyBcdTAwMjZcdTAwMjYgIW1jKSB7XG4tXHRcdC8qIERpc2FibGUgaW5ncmVzcyBwb3J0IGZpbHRlciB0YWJsZSBsb29rdXAgKi9cbi1cdFx0bmV0Y19wb3J0X3dyKG5wLCBORVRDX1BJUEZDUiwgMCk7XG4gXHRcdG5wLVx1MDAzZXVjID0gZmFsc2U7XG4gXHRcdG5wLVx1MDAzZW1jID0gZmFsc2U7XG4gXG5AQCAtMTc1OSw0MCAmIzQzOzE4MjIsMzYgQEAgc3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2hvc3RfZmxvb2RfcnVsZShzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcbiBcdGNmZ2UtXHUwMDNlY2ZnID0gY3B1X3RvX2xlMzIoY2ZnKTtcbiBcbiBcdGVyciA9IG50bXBfaXBmdF9hZGRfZW50cnkoXHUwMDI2cHJpdi1cdTAwM2VudG1wLCBob3N0X2Zsb29kKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0a2ZyZWUoaG9zdF9mbG9vZCk7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZnJlZV9ob3N0X2Zsb29kO1xuIFxuIFx0bnAtXHUwMDNldWMgPSB1YztcbiBcdG5wLVx1MDAzZW1jID0gbWM7XG4tXHRucC1cdTAwM2Vob3N0X2Zsb29kID0gaG9zdF9mbG9vZDtcbi1cdC8qIEVuYWJsZSBpbmdyZXNzIHBvcnQgZmlsdGVyIHRhYmxlIGxvb2t1cCAqL1xuLVx0bmV0Y19wb3J0X3dyKG5wLCBORVRDX1BJUEZDUiwgUElQRkNSX0VOKTtcbiYjNDM7XHRucC1cdTAwM2VpcGZ0X2hmX2VpZCA9IGhvc3RfZmxvb2QtXHUwMDNlZW50cnlfaWQ7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7ZnJlZV9ob3N0X2Zsb29kOlxuJiM0MztcdGtmcmVlKGhvc3RfZmxvb2QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2Qoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4tXHRcdFx0XHRcdHN0cnVjdCBpcGZ0X2VudHJ5X2RhdGEgKmhvc3RfZmxvb2QpXG4mIzQzO3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIGVudHJ5X2lkKVxuIHtcbiBcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IG5wLVx1MDAzZXN3aXRjaF9wcml2O1xuIFx0Ym9vbCBkaXNhYmxlX2hvc3RfZmxvb2QgPSBmYWxzZTtcbiBcbi1cdGlmICghaG9zdF9mbG9vZClcbiYjNDM7XHRpZiAoZW50cnlfaWQgPT0gTlRNUF9OVUxMX0VOVFJZX0lEKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAobnAtXHUwMDNlaG9zdF9mbG9vZCA9PSBob3N0X2Zsb29kKVxuJiM0MztcdGlmIChucC1cdTAwM2VpcGZ0X2hmX2VpZCA9PSBlbnRyeV9pZClcbiBcdFx0ZGlzYWJsZV9ob3N0X2Zsb29kID0gdHJ1ZTtcbiBcbi1cdG50bXBfaXBmdF9kZWxldGVfZW50cnkoXHUwMDI2cHJpdi1cdTAwM2VudG1wLCBob3N0X2Zsb29kLVx1MDAzZWVudHJ5X2lkKTtcbi1cdGtmcmVlKGhvc3RfZmxvb2QpO1xuJiM0MztcdG50bXBfaXBmdF9kZWxldGVfZW50cnkoXHUwMDI2cHJpdi1cdTAwM2VudG1wLCBlbnRyeV9pZCk7XG4gXG4gXHRpZiAoZGlzYWJsZV9ob3N0X2Zsb29kKSB7XG4tXHRcdG5wLVx1MDAzZWhvc3RfZmxvb2QgPSBOVUxMO1xuJiM0MztcdFx0bnAtXHUwMDNlaXBmdF9oZl9laWQgPSBOVE1QX05VTExfRU5UUllfSUQ7XG4gXHRcdG5wLVx1MDAzZXVjID0gZmFsc2U7XG4gXHRcdG5wLVx1MDAzZW1jID0gZmFsc2U7XG4tXHRcdG5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIDApO1xuIFx0fVxuIH1cbiBcbkBAIC0xODAwLDcgJiM0MzsxODU5LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3NldF9ob3N0X2Zsb29kKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0XHQgICAgIGJvb2wgdWMsIGJvb2wgbWMpXG4ge1xuIFx0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBORVRDX1BPUlQoZHMsIHBvcnQpO1xuLVx0c3RydWN0IGlwZnRfZW50cnlfZGF0YSAqb2xkX2hvc3RfZmxvb2Q7XG4mIzQzO1x0dTMyIG9sZF9lbnRyeV9pZDtcbiBcbiBcdC8qIERvIG5vdCBhZGQgaG9zdCBmbG9vZCBydWxlIHRvIGluZ3Jlc3MgcG9ydCBmaWx0ZXIgdGFibGUgd2hlblxuIFx0ICogdGhlIHBvcnQgaGFzIGpvaW5lZCBhIGJyaWRnZS4gT3RoZXJ3aXNlLCB0aGUgaW5ncmVzcyBmcmFtZXNcbkBAIC0xODA4LDcgJiM0MzsxODY3LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3NldF9ob3N0X2Zsb29kKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHQgKiB3aWxsIGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHkgdG8gdGhlIENQVSBwb3J0LlxuIFx0ICovXG4gXHRpZiAoZHNhX3BvcnRfYnJpZGdlX2Rldl9nZXQobnAtXHUwMDNlZHApKSB7XG4tXHRcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgbnAtXHUwMDNlaG9zdF9mbG9vZCk7XG4mIzQzO1x0XHRuZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2QobnAsIG5wLVx1MDAzZWlwZnRfaGZfZWlkKTtcbiBcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTE4MTgsMjAgJiM0MzsxODc3LDE4IEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9zZXRfaG9zdF9mbG9vZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFxuIFx0LyogSVBGVCBkb2VzIG5vdCBzdXBwb3J0IGluLXBsYWNlIHVwZGF0ZXMgdG8gdGhlIEtFWUUgZWxlbWVudCxcbiBcdCAqIHdlIG5lZWQgdG8gYWRkIGEgbmV3IGVudHJ5IGFuZCB0aGVuIGRlbGV0ZSB0aGUgb2xkIG9uZS4gU29cbi1cdCAqIHNhdmUgdGhlIG9sZCBlbnRyeSBmaXJzdC5cbiYjNDM7XHQgKiBzYXZlIHRoZSBvbGQgZW50cnkgSUQgZmlyc3QuXG4gXHQgKi9cbi1cdG9sZF9ob3N0X2Zsb29kID0gbnAtXHUwMDNlaG9zdF9mbG9vZDtcbi1cdG5wLVx1MDAzZWhvc3RfZmxvb2QgPSBOVUxMO1xuJiM0MztcdG9sZF9lbnRyeV9pZCA9IG5wLVx1MDAzZWlwZnRfaGZfZWlkO1xuIFxuIFx0aWYgKG5ldGNfcG9ydF9hZGRfaG9zdF9mbG9vZF9ydWxlKG5wLCB1YywgbWMpKSB7XG4tXHRcdG5wLVx1MDAzZWhvc3RfZmxvb2QgPSBvbGRfaG9zdF9mbG9vZDtcbiBcdFx0ZGV2X2Vycihkcy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBhZGQgaG9zdCBmbG9vZCBydWxlIG9uIHBvcnQgJWRcXG5cJiMzNDssXG4gXHRcdFx0cG9ydCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdC8qIFJlbW92ZSB0aGUgb2xkIGhvc3QgZmxvb2QgZW50cnkgKi9cbi1cdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgb2xkX2hvc3RfZmxvb2QpO1xuJiM0MztcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgb2xkX2VudHJ5X2lkKTtcbiB9XG4gXG4gc3RhdGljIGludCBuZXRjX3NpbmdsZV92bGFuX2F3YXJlX2JyaWRnZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5AQCAtMjAyMCw3ICYjNDM7MjA3Nyw3IEBAIHN0YXRpYyBpbnQgbmV0Y19wb3J0X2JyaWRnZV9qb2luKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRuZXRjX3BvcnRfc2V0X3B2aWQobnAsIHZsYW5fdW5hd2FyZV9wdmlkKTtcbiBcbiBvdXQ6XG4tXHRuZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2QobnAsIG5wLVx1MDAzZWhvc3RfZmxvb2QpO1xuJiM0MztcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgbnAtXHUwMDNlaXBmdF9oZl9laWQpO1xuIFxuIFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNnByaXYtXHUwMDNlYnJfY250KSA9PSAxKVxuIFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cHJpdi1cdTAwM2VmZGJ0X2FnZWluZ193b3JrLFxuQEAgLTI0MDIsNiAmIzQzOzI0NTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBuZXRjX3BoeWxpbmtfbWFjX29wcyA9IHtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG5ldGNfc3dpdGNoX29wcyA9IHtcbiBcdC5nZXRfdGFnX3Byb3RvY29sXHRcdD0gbmV0Y19nZXRfdGFnX3Byb3RvY29sLFxuJiM0MztcdC5jb25uZWN0X3RhZ19wcm90b2NvbFx0XHQ9IG5ldGNfY29ubmVjdF90YWdfcHJvdG9jb2wsXG4gXHQuc2V0dXBcdFx0XHRcdD0gbmV0Y19zZXR1cCxcbiBcdC50ZWFyZG93blx0XHRcdD0gbmV0Y190ZWFyZG93bixcbiBcdC5waHlsaW5rX2dldF9jYXBzXHRcdD0gbmV0Y19waHlsaW5rX2dldF9jYXBzLFxuQEAgLTI0MzAsNiAmIzQzOzI0ODgsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBuZXRjX3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3NzZXRfY291bnRcdFx0XHQ9IG5ldGNfcG9ydF9nZXRfc3NldF9jb3VudCxcbiBcdC5nZXRfc3RyaW5nc1x0XHRcdD0gbmV0Y19wb3J0X2dldF9zdHJpbmdzLFxuIFx0LmdldF9ldGh0b29sX3N0YXRzXHRcdD0gbmV0Y19wb3J0X2dldF9ldGh0b29sX3N0YXRzLFxuJiM0MztcdC5nZXRfdHNfaW5mb1x0XHRcdD0gbmV0Y19nZXRfdHNfaW5mbyxcbiYjNDM7XHQucG9ydF9od3RzdGFtcF9zZXRcdFx0PSBuZXRjX3BvcnRfaHd0c3RhbXBfc2V0LFxuJiM0MztcdC5wb3J0X2h3dHN0YW1wX2dldFx0XHQ9IG5ldGNfcG9ydF9od3RzdGFtcF9nZXQsXG4mIzQzO1x0LnBvcnRfcnh0c3RhbXBcdFx0XHQ9IG5ldGNfcG9ydF9yeHRzdGFtcCxcbiYjNDM7XHQucG9ydF90eHRzdGFtcFx0XHRcdD0gbmV0Y19wb3J0X3R4dHN0YW1wLFxuIH07XG4gXG4gc3RhdGljIGludCBuZXRjX3N3aXRjaF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3BsYXRmb3JtLmMgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3BsYXRmb3JtLmNcbmluZGV4IDM0YWViNmZjZWIzY2IuLjRmZDBjZTY3NzBjMzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3BsYXRmb3JtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcGxhdGZvcm0uY1xuQEAgLTUwLDYgJiM0Mzs1MCw3IEBAIHN0YXRpYyB2b2lkIGlteDk0X3N3aXRjaF9waHlsaW5rX2dldF9jYXBzKGludCBwb3J0LFxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0Y19zd2l0Y2hfaW5mbyBpbXg5NF9pbmZvID0ge1xuIFx0Lm51bV9wb3J0cyA9IDQsXG4mIzQzO1x0LnRtcl9kZXZmbiA9IFBDSV9ERVZGTigwLCAxKSxcbiBcdC5waHlsaW5rX2dldF9jYXBzID0gaW14OTRfc3dpdGNoX3BoeWxpbmtfZ2V0X2NhcHMsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3B0cC5jIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wdHAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZmN2Q4ZTVlNjhkMjNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcHRwLmNcbkBAIC0wLDAgJiM0MzsxLDY2MyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAmIzQzOyBPUiBCU0QtMy1DbGF1c2UpXG4mIzQzOy8qXG4mIzQzOyAqIE5YUCBORVRDIHN3aXRjaCBkcml2ZXJcbiYjNDM7ICogQ29weXJpZ2h0IDIwMjUtMjAyNiBOWFBcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xhc3NpZnkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O25ldGNfc3dpdGNoLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTkVUQ19UU19SRVFfSURfTlVNXHRcdChORVRDX1RBR19UU19SRVFfSUQgJiM0MzsgMSlcbiYjNDM7I2RlZmluZSBORVRDX1BUUF9UWF9UU1RBTVBfVElNRU9VVFx0KDUgKiBIWilcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmV0Y19nZXRfcGhjX2luZGV4KHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2V0bXJfZGV2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwdHBfY2xvY2tfaW5kZXhfYnlfZGV2KFx1MDAyNnByaXYtXHUwMDNldG1yX2Rldi1cdTAwM2VkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbmV0Y19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0ICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nID0gU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSB8XG4mIzQzO1x0XHRcdFx0U09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSB8XG4mIzQzO1x0XHRcdFx0U09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRTtcbiYjNDM7XG4mIzQzO1x0aW5mby1cdTAwM2VwaGNfaW5kZXggPSBuZXRjX2dldF9waGNfaW5kZXgocHJpdik7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcGhjX2luZGV4IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxuJiM0MztcdFx0XHRcdCBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFIHxcbiYjNDM7XHRcdFx0XHQgU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkU7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNldHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT0ZGKSB8IEJJVChIV1RTVEFNUF9UWF9PTikgfFxuJiM0MztcdFx0XHQgQklUKEhXVFNUQU1QX1RYX09ORVNURVBfU1lOQyk7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNlcnhfZmlsdGVycyA9IEJJVChIV1RTVEFNUF9GSUxURVJfTk9ORSkgfFxuJiM0MztcdFx0XHQgICBCSVQoSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVCkgfFxuJiM0MztcdFx0XHQgICBCSVQoSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVCkgfFxuJiM0MztcdFx0XHQgICBCSVQoSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBucC1cdTAwM2Vzd2l0Y2hfcHJpdjtcbiYjNDM7XHR1MzIgZW50cnlfaWQ7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5FVENfUFRQX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVudHJ5X2lkID0gbnAtXHUwMDNlcHRwX2lwZnRfZWlkW2ldO1xuJiM0MztcdFx0aWYgKGVudHJ5X2lkICE9IE5UTVBfTlVMTF9FTlRSWV9JRCkge1xuJiM0MztcdFx0XHRudG1wX2lwZnRfZGVsZXRlX2VudHJ5KFx1MDAyNnByaXYtXHUwMDNlbnRtcCwgZW50cnlfaWQpO1xuJiM0MztcdFx0XHRucC1cdTAwM2VwdHBfaXBmdF9laWRbaV0gPSBOVE1QX05VTExfRU5UUllfSUQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5ldGNfYnVpbGRfcHRwX2lwZnRfa2V5ZShzdHJ1Y3QgaXBmdF9rZXllX2RhdGEgKmtleWUsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICBlbnVtIG5ldGNfcHRwX3R5cGUgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHUxNiBzcmNfcG9ydCwgZnJtX2F0dHJfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGtleWUtXHUwMDNlcHJlY2VkZW5jZSA9IGNwdV90b19sZTE2KDB4ZjAwMCk7XG4mIzQzO1x0c3JjX3BvcnQgPSBGSUVMRF9QUkVQKElQRlRfU1JDX1BPUlQsIHBvcnQpO1xuJiM0MztcdHNyY19wb3J0IHw9IElQRlRfU1JDX1BPUlRfTUFTSztcbiYjNDM7XHRrZXllLVx1MDAzZXNyY19wb3J0ID0gY3B1X3RvX2xlMTYoc3JjX3BvcnQpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIE5FVENfUFRQX0wyOlxuJiM0MztcdFx0a2V5ZS1cdTAwM2VldGhlcnR5cGUgPSBodG9ucyhFVEhfUF8xNTg4KTtcbiYjNDM7XHRcdGtleWUtXHUwMDNlZXRoZXJ0eXBlX21hc2sgPSBodG9ucygweGZmZmYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORVRDX1BUUF9MNF9JUFY0X0VWRU5UOlxuJiM0MztcdGNhc2UgTkVUQ19QVFBfTDRfSVBWNF9HRU5FUkFMOlxuJiM0MztcdGNhc2UgTkVUQ19QVFBfTDRfSVBWNl9FVkVOVDpcbiYjNDM7XHRjYXNlIE5FVENfUFRQX0w0X0lQVjZfR0VORVJBTDpcbiYjNDM7XHRcdGZybV9hdHRyX2ZsYWdzID0gSVBGVF9GQUZfSVBfSERSIHwgRklFTERfUFJFUChJUEZUX0ZBRl9MNF9DT0RFLFxuJiM0MztcdFx0XHRcdCBJUEZUX0ZBRl9VRFBfSERSKTtcbiYjNDM7XHRcdGlmICh0eXBlID09IE5FVENfUFRQX0w0X0lQVjZfRVZFTlQgfHxcbiYjNDM7XHRcdCAgICB0eXBlID09IE5FVENfUFRQX0w0X0lQVjZfR0VORVJBTClcbiYjNDM7XHRcdFx0ZnJtX2F0dHJfZmxhZ3MgfD0gSVBGVF9GQUZfSVBfVkVSNjtcbiYjNDM7XG4mIzQzO1x0XHRrZXllLVx1MDAzZWZybV9hdHRyX2ZsYWdzID0gY3B1X3RvX2xlMTYoZnJtX2F0dHJfZmxhZ3MpO1xuJiM0MztcdFx0a2V5ZS1cdTAwM2Vmcm1fYXR0cl9mbGFnc19tYXNrID0ga2V5ZS1cdTAwM2Vmcm1fYXR0cl9mbGFncztcbiYjNDM7XHRcdGtleWUtXHUwMDNlaXBfcHJvdG9jb2wgPSBJUFBST1RPX1VEUDtcbiYjNDM7XHRcdGtleWUtXHUwMDNlaXBfcHJvdG9jb2xfbWFzayA9IDB4ZmY7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHR5cGUgPT0gTkVUQ19QVFBfTDRfSVBWNF9FVkVOVCB8fFxuJiM0MztcdFx0ICAgIHR5cGUgPT0gTkVUQ19QVFBfTDRfSVBWNl9FVkVOVClcbiYjNDM7XHRcdFx0a2V5ZS1cdTAwM2VsNF9kc3RfcG9ydCA9IGh0b25zKFBUUF9FVl9QT1JUKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0a2V5ZS1cdTAwM2VsNF9kc3RfcG9ydCA9IGh0b25zKFBUUF9HRU5fUE9SVCk7XG4mIzQzO1xuJiM0MztcdFx0a2V5ZS1cdTAwM2VsNF9kc3RfcG9ydF9tYXNrID0gaHRvbnMoMHhmZmZmKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4mIzQzO1x0XHRcdFx0XHRlbnVtIG5ldGNfcHRwX3R5cGUgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IG5wLVx1MDAzZXN3aXRjaF9wcml2O1xuJiM0MztcdHN0cnVjdCBpcGZ0X2VudHJ5X2RhdGEgKmVudHJ5O1xuJiM0MztcdHN0cnVjdCBpcGZ0X2tleWVfZGF0YSAqa2V5ZTtcbiYjNDM7XHR1MzIgY2ZnO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVudHJ5ID0ga3phbGxvY19vYmooKmVudHJ5KTtcbiYjNDM7XHRpZiAoIWVudHJ5KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGtleWUgPSBcdTAwMjZlbnRyeS1cdTAwM2VrZXllO1xuJiM0MztcdGVyciA9IG5ldGNfYnVpbGRfcHRwX2lwZnRfa2V5ZShrZXllLCBucC1cdTAwM2VkcC1cdTAwM2VpbmRleCwgdHlwZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZnJlZV9lbnRyeTtcbiYjNDM7XG4mIzQzO1x0Y2ZnID0gRklFTERfUFJFUChJUEZUX0ZMVEZBLCBJUEZUX0ZMVEZBX1JFRElSRUNUKTtcbiYjNDM7XHRjZmcgfD0gRklFTERfUFJFUChJUEZUX0hSLCBORVRDX0hSX1BUUF9UUkFQKTtcbiYjNDM7XHRjZmcgfD0gSVBGVF9USU1FQ0FQRSB8IElQRlRfUlJUO1xuJiM0MztcdGVudHJ5LVx1MDAzZWNmZ2UuY2ZnID0gY3B1X3RvX2xlMzIoY2ZnKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbnRtcF9pcGZ0X2FkZF9lbnRyeShcdTAwMjZwcml2LVx1MDAzZW50bXAsIGVudHJ5KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBmcmVlX2VudHJ5O1xuJiM0MztcbiYjNDM7XHRucC1cdTAwM2VwdHBfaXBmdF9laWRbdHlwZV0gPSBlbnRyeS1cdTAwM2VlbnRyeV9pZDtcbiYjNDM7XG4mIzQzO2ZyZWVfZW50cnk6XG4mIzQzO1x0a2ZyZWUoZW50cnkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfbDJfcHRwX2ZpbHRlcihzdHJ1Y3QgbmV0Y19wb3J0ICpucClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBuZXRjX3BvcnRfYWRkX2lwZnRfcHRwX2VudHJ5KG5wLCBORVRDX1BUUF9MMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmV0Y19wb3J0X2FkZF9sNF9wdHBfZmlsdGVyKHN0cnVjdCBuZXRjX3BvcnQgKm5wKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbmV0Y19wb3J0X2FkZF9pcGZ0X3B0cF9lbnRyeShucCwgTkVUQ19QVFBfTDRfSVBWNF9FVkVOVCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjRfR0VORVJBTCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZGVsX3B0cF9maWx0ZXI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjZfRVZFTlQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGRlbF9wdHBfZmlsdGVyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBuZXRjX3BvcnRfYWRkX2lwZnRfcHRwX2VudHJ5KG5wLCBORVRDX1BUUF9MNF9JUFY2X0dFTkVSQUwpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGRlbF9wdHBfZmlsdGVyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2RlbF9wdHBfZmlsdGVyOlxuJiM0MztcdG5ldGNfcG9ydF9kZWxfcHRwX2ZpbHRlcihucCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmV0Y19wb3J0X2FkZF9sMl9sNF9wdHBfZmlsdGVyKHN0cnVjdCBuZXRjX3BvcnQgKm5wKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbmV0Y19wb3J0X2FkZF9sMl9wdHBfZmlsdGVyKG5wKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbmV0Y19wb3J0X2FkZF9sNF9wdHBfZmlsdGVyKG5wKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBkZWxfcHRwX2ZpbHRlcjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztkZWxfcHRwX2ZpbHRlcjpcbiYjNDM7XHRuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIobnApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5ldGNfcG9ydF9zZXRfcHRwX2ZpbHRlcihzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgaW50IHJ4X2ZpbHRlcilcbiYjNDM7e1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAobnAtXHUwMDNlcHRwX3J4X2ZpbHRlciA9PSByeF9maWx0ZXIpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG5wLVx1MDAzZXB0cF9yeF9maWx0ZXIgIT0gSFdUU1RBTVBfRklMVEVSX05PTkUgfHxcbiYjNDM7XHQgICAgcnhfZmlsdGVyID09IEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB7XG4mIzQzO1x0XHRuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIobnApO1xuJiM0MztcdFx0bnAtXHUwMDNlcHRwX3J4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9OT05FO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChyeF9maWx0ZXIpIHtcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9OT05FOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UOlxuJiM0MztcdFx0ZXJyID0gbmV0Y19wb3J0X2FkZF9sMl9wdHBfZmlsdGVyKG5wKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDpcbiYjNDM7XHRcdGVyciA9IG5ldGNfcG9ydF9hZGRfbDRfcHRwX2ZpbHRlcihucCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6XG4mIzQzO1x0XHRlcnIgPSBuZXRjX3BvcnRfYWRkX2wyX2w0X3B0cF9maWx0ZXIobnApO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGVyciA9IC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0bnAtXHUwMDNlcHRwX3J4X2ZpbHRlciA9IHJ4X2ZpbHRlcjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBuZXRjX3BvcnRfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRjX3BvcnQgKm5wID0gTkVUQ19QT1JUKGRzLCBwb3J0KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByeF9maWx0ZXIsIGVycjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjb25maWctXHUwMDNldHhfdHlwZSkge1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfVFhfT046XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XG4mIzQzO1x0XHRucC1cdTAwM2VwdHBfdHhfdHlwZSA9IGNvbmZpZy1cdTAwM2V0eF90eXBlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9UWF9PTkVTVEVQX1NZTkM6XG4mIzQzO1x0XHRpZiAoIXByaXYtXHUwMDNldG1yX2RldilcbiYjNDM7XHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1xuJiM0MztcdFx0bnAtXHUwMDNlcHRwX3R4X3R5cGUgPSBjb25maWctXHUwMDNldHhfdHlwZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoY29uZmlnLVx1MDAzZXJ4X2ZpbHRlcikge1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6XG4mIzQzO1x0XHRyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfTk9ORTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfU1lOQzpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVROlxuJiM0MztcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfU1lOQzpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfREVMQVlfUkVROlxuJiM0MztcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfU1lOQzpcbiYjNDM7XHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVROlxuJiM0MztcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IG5ldGNfcG9ydF9zZXRfcHRwX2ZpbHRlcihucCwgcnhfZmlsdGVyKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gc2V0IFBUUCBmaWx0ZXJcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VyeF9maWx0ZXIgPSByeF9maWx0ZXI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbmV0Y19wb3J0X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHQgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBORVRDX1BPUlQoZHMsIHBvcnQpO1xuJiM0MztcbiYjNDM7XHRjb25maWctXHUwMDNldHhfdHlwZSA9IG5wLVx1MDAzZXB0cF90eF90eXBlO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VyeF9maWx0ZXIgPSBucC1cdTAwM2VwdHBfcnhfZmlsdGVyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBuZXRjX3BvcnRfdHh0c3RhbXBfdHdvc3RlcChzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmUpXG4mIzQzO3tcbiYjNDM7XHRERUNMQVJFX0JJVE1BUCh0c19yZXFfaWRfYml0bWFwLCBORVRDX1RTX1JFUV9JRF9OVU0pO1xuJiM0MztcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IG5wLVx1MDAzZXN3aXRjaF9wcml2O1xuJiM0MztcdHN0cnVjdCBza19idWZmX2hlYWQgZnJlZV9saXN0O1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IsICpza2JfdG1wO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdHNfcmVxX2lkO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRiaXRtYXBfemVybyh0c19yZXFfaWRfYml0bWFwLCBORVRDX1RTX1JFUV9JRF9OVU0pO1xuJiM0MztcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmVlX2xpc3QpO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4mIzQzO1xuJiM0MztcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXHUwMDI2bnAtXHUwMDNlc2tiX3R4dHN0YW1wX3F1ZXVlLCBza2IsIHNrYl90bXApIHtcbiYjNDM7XHRcdGlmICh0aW1lX2JlZm9yZShORVRDX1NLQl9DQihza2IpLVx1MDAzZXB0cF90eF90aW1lICYjNDM7XG4mIzQzO1x0XHRcdFx0TkVUQ19QVFBfVFhfVFNUQU1QX1RJTUVPVVQsIGppZmZpZXMpKSB7XG4mIzQzO1x0XHRcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgXCYjMzQ7UG9ydCAlZCB0c19yZXFfaWQgJXUgd2hpY2ggc2VlbXMgbG9zdFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICBucC1cdTAwM2VkcC1cdTAwM2VpbmRleCwgTkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2V0c19yZXFfaWQpO1xuJiM0MztcbiYjNDM7XHRcdFx0X19za2JfdW5saW5rKHNrYiwgXHUwMDI2bnAtXHUwMDNlc2tiX3R4dHN0YW1wX3F1ZXVlKTtcbiYjNDM7XHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZmcmVlX2xpc3QsIHNrYik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRfX3NldF9iaXQoTkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2V0c19yZXFfaWQsIHRzX3JlcV9pZF9iaXRtYXApO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHNfcmVxX2lkID0gZmluZF9maXJzdF96ZXJvX2JpdCh0c19yZXFfaWRfYml0bWFwLCBORVRDX1RTX1JFUV9JRF9OVU0pO1xuJiM0MztcdGlmICh0c19yZXFfaWQgPT0gTkVUQ19UU19SRVFfSURfTlVNKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUJVU1k7XG4mIzQzO1x0XHRnb3RvIHVubG9ja19wdHA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRORVRDX1NLQl9DQihjbG9uZSktXHUwMDNldHNfcmVxX2lkID0gdHNfcmVxX2lkO1xuJiM0MztcdE5FVENfU0tCX0NCKGNsb25lKS1cdTAwM2VwdHBfdHhfdGltZSA9IGppZmZpZXM7XG4mIzQzO1x0c2tiX3NoaW5mbyhjbG9uZSktXHUwMDNldHhfZmxhZ3MgfD0gU0tCVFhfSU5fUFJPR1JFU1M7XG4mIzQzO1x0X19za2JfcXVldWVfdGFpbChcdTAwMjZucC1cdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUsIGNsb25lKTtcbiYjNDM7XG4mIzQzO3VubG9ja19wdHA6XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBGcmVlIHRpbWVkLW91dCBTS0JzIG91dHNpZGUgdGhlIHNwaW5sb2NrIHRvIGF2b2lkIGNhbGxpbmdcbiYjNDM7XHQgKiBrZnJlZV9za2IoKSB3aXRoIGEgZGVzdHJ1Y3RvciAoc29ja19lZnJlZSkgdW5kZXIgYSBzcGlubG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRfX3NrYl9xdWV1ZV9wdXJnZShcdTAwMjZmcmVlX2xpc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG5ldGNfdHdvc3RlcF90c3RhbXBfaGFuZGxlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCB1OCB0c19yZXFfaWQsIHU2NCB0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IsICpza2JfdG1wLCAqc2tiX21hdGNoID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XG4mIzQzO1x0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIGh3dHN0YW1wcztcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuJiM0MztcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXHUwMDI2bnAtXHUwMDNlc2tiX3R4dHN0YW1wX3F1ZXVlLCBza2IsIHNrYl90bXApIHtcbiYjNDM7XHRcdGlmIChORVRDX1NLQl9DQihza2IpLVx1MDAzZXRzX3JlcV9pZCAhPSB0c19yZXFfaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdF9fc2tiX3VubGluayhza2IsIFx1MDAyNm5wLVx1MDAzZXNrYl90eHRzdGFtcF9xdWV1ZSk7XG4mIzQzO1x0XHRza2JfbWF0Y2ggPSBza2I7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoIXNrYl9tYXRjaCkge1xuJiM0MztcdFx0ZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7UG9ydCAlZCByZWNlaXZlZCBhbiBleHBpcmVkIFR4IHRpbWVzdGFtcCByZXNwb25zZSAodHNfcmVxX2lkICV1KVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgcG9ydCwgdHNfcmVxX2lkKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGh3dHN0YW1wcy5od3RzdGFtcCA9IG5zX3RvX2t0aW1lKHRzKTtcbiYjNDM7XHRza2JfY29tcGxldGVfdHhfdGltZXN0YW1wKHNrYl9tYXRjaCwgXHUwMDI2aHd0c3RhbXBzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBuZXRjX3BvcnRfcnh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHN0YW1wcyA9IHNrYl9od3RzdGFtcHMoc2tiKTtcbiYjNDM7XHR1NjQgdHMgPSBORVRDX1NLQl9DQihza2IpLVx1MDAzZXRzdGFtcDtcbiYjNDM7XG4mIzQzO1x0aHd0c3RhbXBzLVx1MDAzZWh3dHN0YW1wID0gbnNfdG9fa3RpbWUodHMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9wcmVwYXJlX29uZXN0ZXBfc3luYyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHQgICB1MzIgcHRwX2NsYXNzLCBib29sICp0d29zdGVwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtXHUwMDNlc3dpdGNoX3ByaXY7XG4mIzQzO1x0dTE2IGNvcnJlY3Rpb25fb2Zmc2V0LCB0aW1lc3RhbXBfb2Zmc2V0O1xuJiM0MztcdHN0cnVjdCBwdHBfaGVhZGVyICpwdHBfaGRyO1xuJiM0MztcdHU4IG1zZ190eXBlLCB0d29zdGVwX2ZsYWc7XG4mIzQzO1x0Ym9vbCBpc191ZHAgPSBmYWxzZTtcbiYjNDM7XHR1MzIgcGt0X3R5cGU7XG4mIzQzO1x0dTggKnBrdF9oZHI7XG4mIzQzO1xuJiM0MztcdHB0cF9oZHIgPSBwdHBfcGFyc2VfaGVhZGVyKHNrYiwgcHRwX2NsYXNzKTtcbiYjNDM7XHRpZiAoIXB0cF9oZHIpIHtcbiYjNDM7XHRcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O1BvcnQgJWQgZmFpbGVkIHRvIHBhcnNlIFN5bmMgaGVhZGVyXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBucC1cdTAwM2VkcC1cdTAwM2VpbmRleCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwa3RfaGRyID0gc2tiX21hY19oZWFkZXIoc2tiKTtcbiYjNDM7XHRjb3JyZWN0aW9uX29mZnNldCA9ICh1OCAqKVx1MDAyNnB0cF9oZHItXHUwMDNlY29ycmVjdGlvbiAtIHBrdF9oZHI7XG4mIzQzO1x0dGltZXN0YW1wX29mZnNldCA9ICh1OCAqKXB0cF9oZHIgJiM0Mzsgc2l6ZW9mKCpwdHBfaGRyKSAtIHBrdF9oZHI7XG4mIzQzO1xuJiM0MztcdC8qIEVuc3VyZSB0aGF0IHRoZSBlbnRpcmUgb3JpZ2luVGltZXN0YW1wIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlXG4mIzQzO1x0ICogbGluZWFyIGJ1ZmZlciBvZiB0aGUgc2tiLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwa3RfaGRyICYjNDM7IHRpbWVzdGFtcF9vZmZzZXQgJiM0MzsgMTAgXHUwMDNlIHNrYi1cdTAwM2VkYXRhICYjNDM7IHNrYl9oZWFkbGVuKHNrYikpIHtcbiYjNDM7XHRcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O1BvcnQgJWQgU3luYyBoZWFkZXIgbm90IGluIGxpbmVhciBhcmVhXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBucC1cdTAwM2VkcC1cdTAwM2VpbmRleCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtc2dfdHlwZSA9IHB0cF9nZXRfbXNndHlwZShwdHBfaGRyLCBwdHBfY2xhc3MpO1xuJiM0MztcdHR3b3N0ZXBfZmxhZyA9IHB0cF9oZHItXHUwMDNlZmxhZ19maWVsZFswXSBcdTAwMjYgMHgyO1xuJiM0MztcbiYjNDM7XHQvKiBPbmx5IGEgU3luYyBmcmFtZSB3aXRoIHRoZSB0d29TdGVwRmxhZyBjbGVhcmVkIGNhbiB1c2Ugb25lLXN0ZXBcbiYjNDM7XHQgKiB0aW1lc3RhbXBpbmcuIEEgZnJhbWUgdGhhdCByZXF1ZXN0cyB0d28tc3RlcCAob3IgaXMgbm90IGEgU3luYylcbiYjNDM7XHQgKiBjYXJyaWVzIGRpZmZlcmVudCBvbi13aXJlIGZpZWxkcywgc28gdGhpcyBpcyBhIHJlYWwgY2xhc3NpZmljYXRpb247XG4mIzQzO1x0ICogcmVwb3J0IGl0IHRocm91Z2ggKnR3b3N0ZXAgc28gdGhlIGNhbGxlciBmYWxscyBiYWNrIHRvIHRoZSB0d28tc3RlcFxuJiM0MztcdCAqIHBhdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1zZ190eXBlICE9IFBUUF9NU0dUWVBFX1NZTkMgfHwgdHdvc3RlcF9mbGFnICE9IDApIHtcbiYjNDM7XHRcdCp0d29zdGVwID0gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRoaXMgaXMgYSBnZW51aW5lIG9uZS1zdGVwIFN5bmMgZnJhbWUuIHNrYl9zaGluZm8oKS1cdTAwM2VkZXN0cnVjdG9yX2FyZ1xuJiM0MztcdCAqIGlzIGxhdGVyIHVzZWQgdG8gcGFzcyB0aGUgbmV0Y19wb3J0IHBvaW50ZXIgdG9cbiYjNDM7XHQgKiBuZXRjX29uZXN0ZXBfc2tiX2Rlc3RydWN0b3IoKSBmb3IgVFggY29tcGxldGlvbiBub3RpZmljYXRpb24uXG4mIzQzO1x0ICogTVNHX1pFUk9DT1BZIGFsc28gdXNlcyBkZXN0cnVjdG9yX2FyZyAodmlhIHNrYl96Y29weV9pbml0KCkpIHRvXG4mIzQzO1x0ICogdHJhY2sgdXNlci1zcGFjZSBwYWdlIHJlZmVyZW5jZXMuIE92ZXJ3cml0aW5nIGl0IGluIHRoYXQgY2FzZSB3b3VsZFxuJiM0MztcdCAqIGxlYWsgdGhlIHVidWZfaW5mbyByZWZlcmVuY2UgYW5kIHByZXZlbnQgdXNlciBwYWdlcyBmcm9tIGJlaW5nXG4mIzQzO1x0ICogcmVsZWFzZWQuIFBUUCBhcHBsaWNhdGlvbnMgZG8gbm90IHVzZSBNU0dfWkVST0NPUFksIGJ1dCBndWFyZFxuJiM0MztcdCAqIGFnYWluc3QgaXQgZGVmZW5zaXZlbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNrYl96Y29weShza2IpKSB7XG4mIzQzO1x0XHRkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtQb3J0ICVkIG9uZS1zdGVwIFN5bmMgbm90IHN1cHBvcnRlZCBvbiB6ZXJvY29weSBza2JcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIG5wLVx1MDAzZWRwLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBrdF90eXBlID0gcHRwX2NsYXNzIFx1MDAyNiBQVFBfQ0xBU1NfUE1BU0s7XG4mIzQzO1x0aWYgKHBrdF90eXBlID09IFBUUF9DTEFTU19JUFY0IHx8IHBrdF90eXBlID09IFBUUF9DTEFTU19JUFY2KVxuJiM0MztcdFx0aXNfdWRwID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0LyogQ2FjaGUgdGhlIHBhcnNpbmcgcmVzdWx0cyBzbyB0aGUgdGFnZ2VyIHhtaXQgcGF0aCBhbmQgdGhlIGRlZmVycmVkXG4mIzQzO1x0ICogd29yayBkbyBub3QgbmVlZCB0byByZS1wYXJzZSB0aGUgUFRQIGhlYWRlciwgYW5kIHNvIHRoYXRcbiYjNDM7XHQgKiBuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKCkgY2FuIGRlcml2ZSB0aGVzZSBwYXJhbWV0ZXJzIGZyb20gdGhlXG4mIzQzO1x0ICogc2tiLlxuJiM0MztcdCAqL1xuJiM0MztcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlY29ycmVjdGlvbl9vZmZzZXQgPSBjb3JyZWN0aW9uX29mZnNldDtcbiYjNDM7XHRORVRDX1NLQl9DQihza2IpLVx1MDAzZXRpbWVzdGFtcF9vZmZzZXQgPSB0aW1lc3RhbXBfb2Zmc2V0O1xuJiM0MztcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlaXNfdWRwID0gaXNfdWRwO1xuJiM0MztcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlcHRwX2ZsYWcgPSBORVRDX1BUUF9GTEFHX09ORVNURVA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgbmV0Y19wb3J0X3R4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XG4mIzQzO1x0Ym9vbCB0d29zdGVwID0gZmFsc2U7XG4mIzQzO1x0dTMyIHB0cF9jbGFzcztcbiYjNDM7XG4mIzQzO1x0TkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2VwdHBfZmxhZyA9IDA7XG4mIzQzO1x0cHRwX2NsYXNzID0gcHRwX2NsYXNzaWZ5X3Jhdyhza2IpO1xuJiM0MztcdGlmIChwdHBfY2xhc3MgPT0gUFRQX0NMQVNTX05PTkUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChucC1cdTAwM2VwdHBfdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTkVTVEVQX1NZTkMpXG4mIzQzO1x0XHRuZXRjX3BvcnRfcHJlcGFyZV9vbmVzdGVwX3N5bmMobnAsIHNrYiwgcHRwX2NsYXNzLCBcdTAwMjZ0d29zdGVwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5wLVx1MDAzZXB0cF90eF90eXBlID09IEhXVFNUQU1QX1RYX09OIHx8IHR3b3N0ZXApIHtcbiYjNDM7XHRcdHN0cnVjdCBza19idWZmICpjbG9uZSA9IHNrYl9jbG9uZV9zayhza2IpO1xuJiM0MztcbiYjNDM7XHRcdGlmICh1bmxpa2VseSghY2xvbmUpKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5ldGNfcG9ydF90eHRzdGFtcF90d29zdGVwKG5wLCBjbG9uZSkpIHtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKGNsb25lKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlY2xvbmUgPSBjbG9uZTtcbiYjNDM7XHRcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlcHRwX2ZsYWcgPSBORVRDX1BUUF9GTEFHX1RXT1NURVA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZXRjX3BvcnRfc2V0X29uZXN0ZXBfY29udHJvbChzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgYm9vbCB1ZHAsXG4mIzQzO1x0XHRcdFx0XHQgIGludCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBQTV9TSU5HTEVfU1RFUF9FTiB8IEZJRUxEX1BSRVAoUE1fU0lOR0xFX1NURVBfT0ZGU0VULCBvZmZzZXQpO1xuJiM0MztcdGlmICh1ZHApXG4mIzQzO1x0XHR2YWwgfD0gUE1fU0lOR0xFX1NURVBfQ0g7XG4mIzQzO1x0bmV0Y19tYWNfcG9ydF93cihucCwgTkVUQ19QTV9TSU5HTEVfU1RFUCgwKSwgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbmV0Y19vbmVzdGVwX3NrYl9kZXN0cnVjdG9yKHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2VkZXN0cnVjdG9yX2FyZztcbiYjNDM7XG4mIzQzO1x0Lyogc2tiIGhhcyBiZWVuIHRyYW5zbWl0dGVkIGJ5IGhhcmR3YXJlLCBzY2hlZHVsZSB3b3JrIHRvIHNlbmRcbiYjNDM7XHQgKiB0aGUgbmV4dCBxdWV1ZWQgb25lLXN0ZXAgU3luYyBwYWNrZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2NoZWR1bGVfd29yayhcdTAwMjZucC1cdTAwM2VvbmVzdGVwX3dvcmspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKHN0cnVjdCBuZXRjX3BvcnQgKm5wLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgICAgdTY0IHRzdGFtcClcbiYjNDM7e1xuJiM0MztcdHUxNiBjb3JyZWN0aW9uX29mZnNldCA9IE5FVENfU0tCX0NCKHNrYiktXHUwMDNlY29ycmVjdGlvbl9vZmZzZXQ7XG4mIzQzO1x0dTE2IHRpbWVzdGFtcF9vZmZzZXQgPSBORVRDX1NLQl9DQihza2IpLVx1MDAzZXRpbWVzdGFtcF9vZmZzZXQ7XG4mIzQzO1x0Ym9vbCBpc191ZHAgPSBORVRDX1NLQl9DQihza2IpLVx1MDAzZWlzX3VkcDtcbiYjNDM7XHR1OCAqcGt0X2hkciA9IHNrYl9tYWNfaGVhZGVyKHNrYik7XG4mIzQzO1x0dTY0IHNlYztcbiYjNDM7XHR1MzIgbnM7XG4mIzQzO1xuJiM0MztcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNldHN0YW1wID0gdHN0YW1wO1xuJiM0MztcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlcHRwX2ZsYWcgPSBORVRDX1BUUF9GTEFHX09ORVNURVA7XG4mIzQzO1xuJiM0MztcdC8qIFVwZGF0ZSBvcmlnaW5UaW1lc3RhbXAgZmllbGQgb2YgU3luYyBwYWNrZXRcbiYjNDM7XHQgKiAtIDQ4IGJpdHMgc2Vjb25kcyBmaWVsZFxuJiM0MztcdCAqIC0gMzIgYml0cyBuYW5vc2Vjb25kcyBmaWVsZFxuJiM0MztcdCAqL1xuJiM0MztcdHNlYyA9IGRpdl91NjRfcmVtKHRzdGFtcCwgTlNFQ19QRVJfU0VDLCBcdTAwMjZucyk7XG4mIzQzO1x0cHV0X3VuYWxpZ25lZF9iZTE2KChzZWMgXHUwMDNlXHUwMDNlIDMyKSBcdTAwMjYgMHhmZmZmLCBwa3RfaGRyICYjNDM7IHRpbWVzdGFtcF9vZmZzZXQpO1xuJiM0MztcdHB1dF91bmFsaWduZWRfYmUzMihzZWMgXHUwMDI2IDB4ZmZmZmZmZmYsIHBrdF9oZHIgJiM0MzsgdGltZXN0YW1wX29mZnNldCAmIzQzOyAyKTtcbiYjNDM7XHRwdXRfdW5hbGlnbmVkX2JlMzIobnMsIHBrdF9oZHIgJiM0MzsgdGltZXN0YW1wX29mZnNldCAmIzQzOyA2KTtcbiYjNDM7XG4mIzQzO1x0bmV0Y19wb3J0X3NldF9vbmVzdGVwX2NvbnRyb2wobnAsIGlzX3VkcCwgY29ycmVjdGlvbl9vZmZzZXQpO1xuJiM0MztcbiYjNDM7XHQvKiBPcnBoYW4gdGhlIHNrYiB0byByZWxlYXNlIHRoZSBzb2NrZXQgc2VuZCBidWZmZXIgcXVvdGEgaW1tZWRpYXRlbHkuXG4mIzQzO1x0ICogVGhpcyBpcyBzYWZlIGJlY2F1c2Ugc29ja193ZnJlZSgpIG9ubHkgdXBkYXRlcyBza193bWVtX2FsbG9jIGFuZFxuJiM0MztcdCAqIGRvZXMgbm90IHRvdWNoIHNrYi1cdTAwM2VkYXRhLiBBZnRlciBza2Jfb3JwaGFuKCksIHdlIGluc3RhbGwgb3VyIG93blxuJiM0MztcdCAqIGRlc3RydWN0b3Igc28gdGhhdCB3aGVuIHRoZSBjb25kdWl0IGRyaXZlciBmcmVlcyB0aGUgc2tiIGFmdGVyIFRYXG4mIzQzO1x0ICogY29tcGxldGlvbiwgd2UgZ2V0IG5vdGlmaWVkIHRvIHNlbmQgdGhlIG5leHQgcXVldWVkIFN5bmMgcGFja2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHNrYl9vcnBoYW4oc2tiKTtcbiYjNDM7XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGVzdHJ1Y3Rvcl9hcmcgPSBucDtcbiYjNDM7XHRza2ItXHUwMDNlZGVzdHJ1Y3RvciA9IG5ldGNfb25lc3RlcF9za2JfZGVzdHJ1Y3RvcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBuZXRjX3BvcnRfb25lc3RlcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRjX3BvcnQgKm5wID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjX3BvcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgb25lc3RlcF93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBucC1cdTAwM2Vzd2l0Y2hfcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHR1NjQgdHN0YW1wO1xuJiM0MztcbiYjNDM7XHQvKiBEZXF1ZXVlIHRoZSBuZXh0IHBlbmRpbmcgc2tiIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGluLWZsaWdodCBzbG90LFxuJiM0MztcdCAqIHNvIGEgbmV3bHkgYXJyaXZpbmcgb25lLXN0ZXAgU3luYyBjYW5ub3QganVtcCBhaGVhZCBvZiBpdC4gT25seVxuJiM0MztcdCAqIHJlbGVhc2UgdGhlIHNsb3Qgd2hlbiB0aGUgcXVldWUgaXMgZW1wdHkuIFRoaXMga2VlcHMgb3JkZXJpbmcgYW5kXG4mIzQzO1x0ICogY2xvc2VzIHRoZSBlbnF1ZXVlL3dha2V1cCByYWNlLlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4mIzQzO1x0c2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZucC1cdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSk7XG4mIzQzO1x0aWYgKCFza2IpIHtcbiYjNDM7XHRcdF9fY2xlYXJfYml0KE5FVENfRkxBR19PTkVTVEVQX0lOX1BST0dSRVNTLCBcdTAwMjZucC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5wLVx1MDAzZXB0cF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0dHN0YW1wID0gbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHByaXYtXHUwMDNldG1yX2Rldik7XG4mIzQzO1x0aWYgKCF0c3RhbXApIHtcbiYjNDM7XHRcdC8qIFRoZSBQVFAgdGltZXIgaXMgbm90IGF2YWlsYWJsZSwgc28gdGhlcmUgaXMgbm8gY29ycmVjdFxuJiM0MztcdFx0ICogdGltZXN0YW1wIHRvIHByb2dyYW0uIERyb3AgdGhpcyBmcmFtZSBhbmQgcmUta2ljayB0b1xuJiM0MztcdFx0ICogcHJvY2VzcyB0aGUgcmVtYWluaW5nIHF1ZXVlZCBmcmFtZXMgKG9yIHJlbGVhc2UgdGhlIHNsb3QpLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIG5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAoKSBoYXMgbm90IHJ1biBmb3IgdGhpcyBza2IgeWV0LCBzb1xuJiM0MztcdFx0ICogbmV0Y19vbmVzdGVwX3NrYl9kZXN0cnVjdG9yKCkgaXMgbm90IGluc3RhbGxlZCBvbiBpdC4gRnJlZWluZ1xuJiM0MztcdFx0ICogaXQgdGhlcmVmb3JlIGRvZXMgbm90IHJlc2NoZWR1bGUgb25lc3RlcF93b3JrLCBzbyB0aGUgd29ya1xuJiM0MztcdFx0ICogbXVzdCBiZSByZXNjaGVkdWxlZCBleHBsaWNpdGx5IHRvIGtlZXAgZHJhaW5pbmcgdGhlIHF1ZXVlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtQb3J0ICVkIFBUUCB0aW1lciB1bmF2YWlsYWJsZSwgZHJvcCBTeW5jXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBucC1cdTAwM2VkcC1cdTAwM2VpbmRleCk7XG4mIzQzO1x0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bnAtXHUwMDNlb25lc3RlcF93b3JrKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFJldXNlIHRoZSBvZmZzZXRzIGNhY2hlZCBhdCBlbnF1ZXVlIHRpbWU7IG9ubHkgdGhlIHRpbWVzdGFtcCBpc1xuJiM0MztcdCAqIHJlYWQgZnJlc2ggc28gaXQgcmVmbGVjdHMgdGhlIGFjdHVhbCBUWCBtb21lbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0Y19wb3J0X3Byb2dyYW1fb25lc3RlcChucCwgc2tiLCB0c3RhbXApO1xuJiM0MztcbiYjNDM7XHQvKiBUYWcgYW5kIGhhbmQgdGhlIGZyYW1lIGRpcmVjdGx5IHRvIHRoZSBjb25kdWl0IHZpYSB0aGUgdGFnZ2VyLFxuJiM0MztcdCAqIGJ5cGFzc2luZyBkc2FfdXNlcl94bWl0KCkgc28gdGhlIFRYIHN0YXRzIGFyZSBub3QgY291bnRlZCB0d2ljZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR0YWdnZXJfZGF0YSA9IHByaXYtXHUwMDNlZHMtXHUwMDNldGFnZ2VyX2RhdGE7XG4mIzQzO1x0dGFnZ2VyX2RhdGEtXHUwMDNlb25lc3RlcF9zeW5jX3htaXQoc2tiLCBucC1cdTAwM2VkcC1cdTAwM2V1c2VyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IHNrX2J1ZmYgKm5ldGNfb25lc3RlcF9zeW5jX2hhbmRsZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRjX3BvcnQgKm5wID0gTkVUQ19QT1JUKGRzLCBwb3J0KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHU2NCB0c3RhbXA7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmlhbGl6ZSBvbmUtc3RlcCBTeW5jIHBhY2tldHM6IG9ubHkgb25lIGNhbiBiZSBpbi1mbGlnaHQgYXQgYVxuJiM0MztcdCAqIHRpbWUgYmVjYXVzZSB0aGUgU0lOR0xFX1NURVAgcmVnaXN0ZXIgaXMgc2hhcmVkIGFuZCBtdXN0IG1hdGNoIHRoZVxuJiM0MztcdCAqIHBhY2tldCBjdXJyZW50bHkgYmVpbmcgdHJhbnNtaXR0ZWQuIENsYWltIHRoZSBpbi1mbGlnaHQgc2xvdCB1bmRlclxuJiM0MztcdCAqIHB0cF9sb2NrLiBJZiBhbm90aGVyIG9uZS1zdGVwIFN5bmMgaXMgYWxyZWFkeSBpbi1mbGlnaHQsIHF1ZXVlIHRoaXNcbiYjNDM7XHQgKiBza2IgYW5kIHJldHVybiBOVUxMOyBvd25lcnNoaXAgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHF1ZXVlLCBzbyBub1xuJiM0MztcdCAqIGV4dHJhIHJlZmVyZW5jZSBpcyBuZWVkZWQgYW5kIG5ldGNfeG1pdCgpIHN0b3BzIHByb2Nlc3NpbmcgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5wLVx1MDAzZXB0cF9sb2NrKTtcbiYjNDM7XHRpZiAodGVzdF9iaXQoTkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MsIFx1MDAyNm5wLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZucC1cdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSwgc2tiKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5wLVx1MDAzZXB0cF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHRzdGFtcCA9IG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZShwcml2LVx1MDAzZXRtcl9kZXYpO1xuJiM0MztcdGlmICghdHN0YW1wKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhpcyBpcyBhIHZhbGlkIG9uZS1zdGVwIFN5bmMgZnJhbWUsIGJ1dCB0aGUgUFRQIHRpbWVyIGlzXG4mIzQzO1x0XHQgKiBub3QgYXZhaWxhYmxlLCBzbyB0aGVyZSBpcyBubyBjb3JyZWN0IHRpbWVzdGFtcCB0byBwcm9ncmFtLlxuJiM0MztcdFx0ICogRHJvcCB0aGUgZnJhbWUgcmF0aGVyIHRoYW4gdHJhbnNtaXQgYSBTeW5jIHdpdGggYSBib2d1c1xuJiM0MztcdFx0ICogY29ycmVjdGlvbiBmaWVsZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7UG9ydCAlZCBQVFAgdGltZXIgdW5hdmFpbGFibGUsIGRyb3AgU3luY1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgbnAtXHUwMDNlZHAtXHUwMDNlaW5kZXgpO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX3NldF9iaXQoTkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MsIFx1MDAyNm5wLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFdlIG93biB0aGUgaW4tZmxpZ2h0IHNsb3QuIFByb2dyYW0gdGhlIHJlZ2lzdGVyIGFuZCBpbnN0YWxsIHRoZVxuJiM0MztcdCAqIGRlc3RydWN0b3IuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0Y19wb3J0X3Byb2dyYW1fb25lc3RlcChucCwgc2tiLCB0c3RhbXApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2tiO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2guaCBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoLmhcbmluZGV4IDMwNWYyYTkyZTJmOWEuLjI5NmRmMWQ3MjMzM2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaC5oXG5AQCAtNTcsNiAmIzQzOzU3LDcgQEAgc3RydWN0IG5ldGNfc3dpdGNoO1xuIFxuIHN0cnVjdCBuZXRjX3N3aXRjaF9pbmZvIHtcbiBcdHUzMiBudW1fcG9ydHM7XG4mIzQzO1x0dTMyIHRtcl9kZXZmbjtcbiBcdHZvaWQgKCpwaHlsaW5rX2dldF9jYXBzKShpbnQgcG9ydCwgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpO1xuIH07XG4gXG5AQCAtNjYsOSAmIzQzOzY3LDIzIEBAIHN0cnVjdCBuZXRjX3BvcnRfY2FwcyB7XG4gXHR1MzIgcHNldWRvX2xpbms6MTtcbiB9O1xuIFxuJiM0MztlbnVtIG5ldGNfcHRwX3R5cGUge1xuJiM0MztcdE5FVENfUFRQX0wyLFxuJiM0MztcdE5FVENfUFRQX0w0X0lQVjRfRVZFTlQsXG4mIzQzO1x0TkVUQ19QVFBfTDRfSVBWNF9HRU5FUkFMLFxuJiM0MztcdE5FVENfUFRQX0w0X0lQVjZfRVZFTlQsXG4mIzQzO1x0TkVUQ19QVFBfTDRfSVBWNl9HRU5FUkFMLFxuJiM0MztcdE5FVENfUFRQX01BWCxcbiYjNDM7fTtcbiYjNDM7XG4gZW51bSBuZXRjX2hvc3RfcmVhc29uIHtcbiBcdC8qIFNvZnR3YXJlIGRlZmluZWQgaG9zdCByZWFzb25zICovXG4gXHRORVRDX0hSX0hPU1RfRkxPT0QgPSA4LFxuJiM0MztcdE5FVENfSFJfUFRQX1RSQVAgICA9IDksXG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIG5ldGNfcG9ydF9mbGFncyB7XG4mIzQzO1x0TkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MgPSAwLFxuIH07XG4gXG4gc3RydWN0IG5ldGNfcG9ydCB7XG5AQCAtODQsNyAmIzQzOzk5LDE5IEBAIHN0cnVjdCBuZXRjX3BvcnQge1xuIFx0dTE2IHVjOjE7XG4gXHR1MTYgbWM6MTtcbiBcdHUxNiBwdmlkO1xuLVx0c3RydWN0IGlwZnRfZW50cnlfZGF0YSAqaG9zdF9mbG9vZDtcbiYjNDM7XHR1MzIgaXBmdF9oZl9laWQ7XG4mIzQzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0LyogU2VyaWFsaXplIFBUUCBvcGVyYXRpb25zICovXG4mIzQzO1x0c3BpbmxvY2tfdCBwdHBfbG9jaztcbiYjNDM7XHQvKiBza2IgcXVldWUgZm9yIHR3by1zdGVwIHRpbWVzdGFtcCBmcmFtZXMgKi9cbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl90eHRzdGFtcF9xdWV1ZTtcbiYjNDM7XHQvKiBza2IgcXVldWUgZm9yIG9uZS1zdGVwIHN5bmMgZnJhbWVzICovXG4mIzQzO1x0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2Jfb25lc3RlcF9xdWV1ZTtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgb25lc3RlcF93b3JrO1xuJiM0MztcdGludCBwdHBfdHhfdHlwZTtcbiYjNDM7XHRpbnQgcHRwX3J4X2ZpbHRlcjtcbiYjNDM7XHR1MzIgcHRwX2lwZnRfZWlkW05FVENfUFRQX01BWF07XG4gfTtcbiBcbiBzdHJ1Y3QgbmV0Y19zd2l0Y2hfcmVncyB7XG5AQCAtMTM5LDYgJiM0MzsxNjYsNyBAQCBzdHJ1Y3QgbmV0Y19zd2l0Y2gge1xuIFx0dTMyIG51bV9icDtcbiBcbiBcdHN0cnVjdCBicHRfY2ZnZV9kYXRhICpicHRfbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqdG1yX2RldjsgLyogVGhlIFBUUCBUaW1lciBQQ0kgZGV2aWNlICovXG4gfTtcbiBcbiAjZGVmaW5lIE5FVENfUFJJVihkcylcdFx0XHQoKHN0cnVjdCBuZXRjX3N3aXRjaCAqKSgoZHMpLVx1MDAzZXByaXYpKVxuQEAgLTE4Nyw2ICYjNDM7MjE1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG5ldGNfZGVsX3ZsYW5fZW50cnkoc3RydWN0IG5ldGNfdmxhbl9lbnRyeSAqZW50cnkpXG4gfVxuIFxuIGludCBuZXRjX3N3aXRjaF9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpO1xuJiM0Mzt2b2lkIG5ldGNfbWFjX3BvcnRfd3Ioc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsIHUzMiB2YWwpO1xuIFxuIC8qIGV0aHRvb2wgQVBJcyAqL1xuIHZvaWQgbmV0Y19wb3J0X2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuQEAgLTIwMyw0ICYjNDM7MjMyLDIyIEBAIHZvaWQgbmV0Y19wb3J0X2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0ICAgdTMyIHNzZXQsIHU4ICpkYXRhKTtcbiB2b2lkIG5ldGNfcG9ydF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1NjQgKmRhdGEpO1xuIFxuJiM0MzsvKiBQVFAgQVBJcyAqL1xuJiM0MztpbnQgbmV0Y19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0X2lkLFxuJiM0MztcdFx0ICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyk7XG4mIzQzO2ludCBuZXRjX3BvcnRfaHd0c3RhbXBfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnRfaWQsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO2ludCBuZXRjX3BvcnRfaHd0c3RhbXBfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnRfaWQsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpO1xuJiM0Mzt2b2lkIG5ldGNfdHdvc3RlcF90c3RhbXBfaGFuZGxlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCB1OCB0c19yZXFfaWQsIHU2NCB0cyk7XG4mIzQzO2Jvb2wgbmV0Y19wb3J0X3J4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0eXBlKTtcbiYjNDM7dm9pZCBuZXRjX3BvcnRfdHh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydF9pZCxcbiYjNDM7XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzQzO3ZvaWQgbmV0Y19wb3J0X29uZXN0ZXBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuJiM0MztzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19vbmVzdGVwX3N5bmNfaGFuZGxlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2hfaHcuaCBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoX2h3LmhcbmluZGV4IDE0MDRhZTQxYzdiY2IuLjM3ZDFkZDdlYzJjN2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oXG5AQCAtMjAzLDYgJiM0MzsyMDMsMTEgQEAgZW51bSBuZXRjX3N0Z19zdGFnZSB7XG4gI2RlZmluZSAgIFNTUF8xME1cdFx0XHQxXG4gI2RlZmluZSAgIFNTUF8xR1x0XHRcdDJcbiBcbiYjNDM7I2RlZmluZSBORVRDX1BNX1NJTkdMRV9TVEVQKGEpXHRcdCgweDEwYzAgJiM0MzsgKGEpICogMHg0MDApXG4mIzQzOyNkZWZpbmUgIFBNX1NJTkdMRV9TVEVQX0NIXHRcdEJJVCg2KVxuJiM0MzsjZGVmaW5lICBQTV9TSU5HTEVfU1RFUF9PRkZTRVRcdFx0R0VOTUFTSygxNSwgNylcbiYjNDM7I2RlZmluZSAgUE1fU0lOR0xFX1NURVBfRU5cdFx0QklUKDMxKVxuJiM0MztcbiAvKiBQb3J0IE1BQyAwLzEgUmVjZWl2ZSBFdGhlcm5ldCBPY3RldHMgQ291bnRlciAqL1xuICNkZWZpbmUgTkVUQ19QTV9SRU9DVChhKVx0XHQoMHgxMTAwICYjNDM7IChhKSAqIDB4NDAwKVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9uZXRjLmMgYi9kcml2ZXJzL3B0cC9wdHBfbmV0Yy5jXG5pbmRleCA5NGU5NTJlZTY5OTAyLi5mMmI3N2JkNWFmMDE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX25ldGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wdHAvcHRwX25ldGMuY1xuQEAgLTEyNyw2ICYjNDM7MTI3LDE3IEBAIHN0cnVjdCBuZXRjX3RpbWVyIHtcbiBcbiAjZGVmaW5lIG5ldGNfdGltZXJfcmQocCwgbylcdFx0bmV0Y19yZWFkKChwKS1cdTAwM2ViYXNlICYjNDM7IChvKSlcbiAjZGVmaW5lIG5ldGNfdGltZXJfd3IocCwgbywgdilcdFx0bmV0Y193cml0ZSgocCktXHUwMDNlYmFzZSAmIzQzOyAobyksIHYpXG4mIzQzO1xuJiM0MzsvKiBUaGUgNjQtYml0IHRpbWVyIHJlZ2lzdGVycyBjb25zaXN0IG9mIGEgbG93IChMKSBhbmQgaGlnaCAoSCkgcmVnaXN0ZXIgcGFpci5cbiYjNDM7ICogSGFyZHdhcmUgcmVxdWlyZXMgYSBzdHJpY3QgYWNjZXNzIG9yZGVyOiBmb3Igd3JpdGVzLCBUTVJfeHh4X0wgbXVzdCBiZVxuJiM0MzsgKiB3cml0dGVuIGZpcnN0LCB3aGljaCBsYXRjaGVzIHRoZSB2YWx1ZSBpbnRvIGEgc2hhZG93IHJlZ2lzdGVyOyB0aGUgd3JpdGVcbiYjNDM7ICogdG8gVE1SX3h4eF9IIHRoZW4gYXRvbWljYWxseSB0cmFuc2ZlcnMgYm90aCBzaGFkb3cgcmVnaXN0ZXJzIGludG8gdGhlIGxpdmVcbiYjNDM7ICogY291bnRlci4gRm9yIHJlYWRzLCBUTVJfeHh4X0wgbXVzdCBiZSByZWFkIGZpcnN0IHRvIGNhcHR1cmUgYSBjb2hlcmVudFxuJiM0MzsgKiBzbmFwc2hvdC4gaW93cml0ZTY0X2xvX2hpKCkgYW5kIGlvcmVhZDY0X2xvX2hpKCkgZW5mb3JjZSB0aGlzIEwtYmVmb3JlLUhcbiYjNDM7ICogb3JkZXJpbmcuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIG5ldGNfdGltZXJfcmQ2NChwLCBvKVx0XHRpb3JlYWQ2NF9sb19oaSgocCktXHUwMDNlYmFzZSAmIzQzOyAobykpXG4mIzQzOyNkZWZpbmUgbmV0Y190aW1lcl93cjY0KHAsIG8sIHYpXHRpb3dyaXRlNjRfbG9faGkodiwgKHApLVx1MDAzZWJhc2UgJiM0MzsgKG8pKVxuICNkZWZpbmUgcHRwX3RvX25ldGNfdGltZXIocHRwKVx0XHRjb250YWluZXJfb2YoKHB0cCksIHN0cnVjdCBuZXRjX3RpbWVyLCBjYXBzKVxuIFxuIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0aW1lcl9jbGtfc3JjW10gPSB7XG5AQCAtMTM2LDY2ICYjNDM7MTQ3LDQ1IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0aW1lcl9jbGtfc3JjW10gPSB7XG4gXG4gc3RhdGljIHZvaWQgbmV0Y190aW1lcl9jbnRfd3JpdGUoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsIHU2NCBucylcbiB7XG4tXHR1MzIgdG1yX2NudF9oID0gdXBwZXJfMzJfYml0cyhucyk7XG4tXHR1MzIgdG1yX2NudF9sID0gbG93ZXJfMzJfYml0cyhucyk7XG4tXG4tXHQvKiBXcml0ZXMgdG8gdGhlIFRNUl9DTlRfTCByZWdpc3RlciBjb3BpZXMgdGhlIHdyaXR0ZW4gdmFsdWVcbi1cdCAqIGludG8gdGhlIHNoYWRvdyBUTVJfQ05UX0wgcmVnaXN0ZXIuIFdyaXRlcyB0byB0aGUgVE1SX0NOVF9IXG4tXHQgKiByZWdpc3RlciBjb3BpZXMgdGhlIHZhbHVlcyB3cml0dGVuIGludG8gdGhlIHNoYWRvdyBUTVJfQ05UX0hcbi1cdCAqIHJlZ2lzdGVyLiBDb250ZW50cyBvZiB0aGUgc2hhZG93IHJlZ2lzdGVycyBhcmUgY29waWVkIGludG9cbi1cdCAqIHRoZSBUTVJfQ05UX0wgYW5kIFRNUl9DTlRfSCByZWdpc3RlcnMgZm9sbG93aW5nIGEgd3JpdGUgaW50b1xuLVx0ICogdGhlIFRNUl9DTlRfSCByZWdpc3Rlci4gU28gdGhlIHVzZXIgbXVzdCB3cml0ZXMgdG8gVE1SX0NOVF9MXG4tXHQgKiByZWdpc3RlciBmaXJzdC4gT3RoZXIgSC9MIHJlZ2lzdGVycyBzaG91bGQgaGF2ZSB0aGUgc2FtZVxuLVx0ICogYmVoYXZpb3IuXG4tXHQgKi9cbi1cdG5ldGNfdGltZXJfd3IocHJpdiwgTkVUQ19UTVJfQ05UX0wsIHRtcl9jbnRfbCk7XG4tXHRuZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX0NOVF9ILCB0bXJfY250X2gpO1xuJiM0MztcdG5ldGNfdGltZXJfd3I2NChwcml2LCBORVRDX1RNUl9DTlRfTCwgbnMpO1xuIH1cbiBcbiBzdGF0aWMgdTY0IG5ldGNfdGltZXJfb2Zmc2V0X3JlYWQoc3RydWN0IG5ldGNfdGltZXIgKnByaXYpXG4ge1xuLVx0dTMyIHRtcl9vZmZfbCwgdG1yX29mZl9oO1xuLVx0dTY0IG9mZnNldDtcbi1cbi1cdHRtcl9vZmZfbCA9IG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfT0ZGX0wpO1xuLVx0dG1yX29mZl9oID0gbmV0Y190aW1lcl9yZChwcml2LCBORVRDX1RNUl9PRkZfSCk7XG4tXHRvZmZzZXQgPSAoKCh1NjQpdG1yX29mZl9oKSBcdTAwM2NcdTAwM2MgMzIpIHwgdG1yX29mZl9sO1xuLVxuLVx0cmV0dXJuIG9mZnNldDtcbiYjNDM7XHRyZXR1cm4gbmV0Y190aW1lcl9yZDY0KHByaXYsIE5FVENfVE1SX09GRl9MKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmV0Y190aW1lcl9vZmZzZXRfd3JpdGUoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsIHU2NCBvZmZzZXQpXG4ge1xuLVx0dTMyIHRtcl9vZmZfaCA9IHVwcGVyXzMyX2JpdHMob2Zmc2V0KTtcbi1cdHUzMiB0bXJfb2ZmX2wgPSBsb3dlcl8zMl9iaXRzKG9mZnNldCk7XG4tXG4tXHRuZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX09GRl9MLCB0bXJfb2ZmX2wpO1xuLVx0bmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9PRkZfSCwgdG1yX29mZl9oKTtcbiYjNDM7XHRuZXRjX3RpbWVyX3dyNjQocHJpdiwgTkVUQ19UTVJfT0ZGX0wsIG9mZnNldCk7XG4gfVxuIFxuIHN0YXRpYyB1NjQgbmV0Y190aW1lcl9jdXJfdGltZV9yZWFkKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2KVxuIHtcbi1cdHUzMiB0aW1lX2gsIHRpbWVfbDtcbi1cdHU2NCBucztcbiYjNDM7XHRyZXR1cm4gbmV0Y190aW1lcl9yZDY0KHByaXYsIE5FVENfVE1SX0NVUl9USU1FX0wpO1xuJiM0Mzt9XG4gXG4tXHQvKiBUaGUgdXNlciBzaG91bGQgcmVhZCBORVRDX1RNUl9DVVJfVElNRV9MIGZpcnN0IHRvXG4tXHQgKiBnZXQgY29ycmVjdCBjdXJyZW50IHRpbWUuXG4tXHQgKi9cbi1cdHRpbWVfbCA9IG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfQ1VSX1RJTUVfTCk7XG4tXHR0aW1lX2ggPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0NVUl9USU1FX0gpO1xuLVx0bnMgPSAodTY0KXRpbWVfaCBcdTAwM2NcdTAwM2MgMzIgfCB0aW1lX2w7XG4mIzQzO3U2NCBuZXRjX3RpbWVyX2dldF9jdXJyZW50X3RpbWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHU2NCBjdXJfdGltZTtcbiBcbi1cdHJldHVybiBucztcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0Y3VyX3RpbWUgPSBuZXRjX3RpbWVyX2N1cl90aW1lX3JlYWQocHJpdik7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGN1cl90aW1lO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKTtcbiBcbiBzdGF0aWMgdm9pZCBuZXRjX3RpbWVyX2FsYXJtX3dyaXRlKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2LFxuIFx0XHRcdFx0ICAgdTY0IGFsYXJtLCBpbnQgaW5kZXgpXG4ge1xuLVx0dTMyIGFsYXJtX2ggPSB1cHBlcl8zMl9iaXRzKGFsYXJtKTtcbi1cdHUzMiBhbGFybV9sID0gbG93ZXJfMzJfYml0cyhhbGFybSk7XG4tXG4tXHRuZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX0FMQVJNX0woaW5kZXgpLCBhbGFybV9sKTtcbi1cdG5ldGNfdGltZXJfd3IocHJpdiwgTkVUQ19UTVJfQUxBUk1fSChpbmRleCksIGFsYXJtX2gpO1xuJiM0MztcdG5ldGNfdGltZXJfd3I2NChwcml2LCBORVRDX1RNUl9BTEFSTV9MKGluZGV4KSwgYWxhcm0pO1xuIH1cbiBcbiBzdGF0aWMgdTMyIG5ldGNfdGltZXJfZ2V0X2ludGVncmFsX3BlcmlvZChzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdilcbkBAIC00OTcsMjIgJiM0Mzs0ODcsMTkgQEAgc3RhdGljIHZvaWQgbmV0Y190aW1lcl9oYW5kbGVfZXR0c19ldmVudChzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdiwgaW50IGluZGV4LFxuIFx0XHRcdFx0XHQgYm9vbCB1cGRhdGVfZXZlbnQpXG4ge1xuIFx0c3RydWN0IHB0cF9jbG9ja19ldmVudCBldmVudDtcbi1cdHUzMiBldHRzX2wgPSAwLCBldHRzX2ggPSAwO1xuJiM0MztcdHU2NCBldHRzID0gMDtcbiBcbi1cdHdoaWxlIChuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX1NUQVQpIFx1MDAyNiBUTVJfU1RBVF9FVFNfVkxEKGluZGV4KSkge1xuLVx0XHRldHRzX2wgPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0VUVFNfTChpbmRleCkpO1xuLVx0XHRldHRzX2ggPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0VUVFNfSChpbmRleCkpO1xuLVx0fVxuJiM0MztcdHdoaWxlIChuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX1NUQVQpIFx1MDAyNiBUTVJfU1RBVF9FVFNfVkxEKGluZGV4KSlcbiYjNDM7XHRcdGV0dHMgPSBuZXRjX3RpbWVyX3JkNjQocHJpdiwgTkVUQ19UTVJfRVRUU19MKGluZGV4KSk7XG4gXG4gXHQvKiBJbnZhbGlkIHRpbWUgc3RhbXAgKi9cbi1cdGlmICghZXR0c19sIFx1MDAyNlx1MDAyNiAhZXR0c19oKVxuJiM0MztcdGlmICghZXR0cylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHVwZGF0ZV9ldmVudCkge1xuIFx0XHRldmVudC50eXBlID0gUFRQX0NMT0NLX0VYVFRTO1xuIFx0XHRldmVudC5pbmRleCA9IGluZGV4O1xuLVx0XHRldmVudC50aW1lc3RhbXAgPSAodTY0KWV0dHNfaCBcdTAwM2NcdTAwM2MgMzI7XG4tXHRcdGV2ZW50LnRpbWVzdGFtcCB8PSBldHRzX2w7XG4mIzQzO1x0XHRldmVudC50aW1lc3RhbXAgPSBldHRzO1xuIFx0XHRwdHBfY2xvY2tfZXZlbnQocHJpdi1cdTAwM2VjbG9jaywgXHUwMDI2ZXZlbnQpO1xuIFx0fVxuIH1cbkBAIC04MDIsNyAmIzQzOzc4OSw2IEBAIHN0YXRpYyBpbnQgbmV0Y190aW1lcl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRpZiAoIXByaXYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cGNpZV9mbHIocGRldik7XG4gXHRlcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7RmFpbGVkIHRvIGVuYWJsZSBkZXZpY2VcXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHNhL3RhZ19uZXRjLmggYi9pbmNsdWRlL2xpbnV4L2RzYS90YWdfbmV0Yy5oXG5pbmRleCBmZTk2NDcyMmU1YjAzLi4yMjljNzBjYjdhOGFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kc2EvdGFnX25ldGMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kc2EvdGFnX25ldGMuaFxuQEAgLTEwLDUgJiM0MzsxMCw0NyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuIFxuICNkZWZpbmUgTkVUQ19UQUdfTUFYX0xFTlx0XHRcdDE0XG4mIzQzOyNkZWZpbmUgTkVUQ19UQUdfVFNfUkVRX0lEXHRcdFx0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIE5FVENfUFRQX0ZMQUdfT05FU1RFUFx0XHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIE5FVENfUFRQX0ZMQUdfVFdPU1RFUFx0XHRcdEJJVCgxKVxuJiM0MztcbiYjNDM7c3RydWN0IG5ldGNfc2tiX2NiIHtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwdHBfdHhfdGltZTtcbiYjNDM7XHR1NjQgdHN0YW1wO1xuJiM0MztcdHU4IHB0cF9mbGFnO1xuJiM0MztcdHU4IHRzX3JlcV9pZDtcbiYjNDM7XHQvKiBPbmUtc3RlcCBTeW5jIHBhcnNpbmcgcmVzdWx0cywgY29tcHV0ZWQgaW4gbmV0Y19wb3J0X3R4dHN0YW1wKClcbiYjNDM7XHQgKiBhbmQgcmV1c2VkIGluIHRoZSB0YWdnZXIgeG1pdCBwYXRoIGFuZCB0aGUgZGVmZXJyZWQgd29yaywgdG8gYXZvaWRcbiYjNDM7XHQgKiByZS1wYXJzaW5nIHRoZSBQVFAgaGVhZGVyLiBWYWxpZCBvbmx5IHdoaWxlXG4mIzQzO1x0ICogcHRwX2ZsYWcgPT0gTkVUQ19QVFBfRkxBR19PTkVTVEVQLlxuJiM0MztcdCAqL1xuJiM0MztcdHUxNiBjb3JyZWN0aW9uX29mZnNldDtcbiYjNDM7XHR1MTYgdGltZXN0YW1wX29mZnNldDtcbiYjNDM7XHRib29sIGlzX3VkcDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTkVUQ19TS0JfQ0Ioc2tiKVx0KChzdHJ1Y3QgbmV0Y19za2JfY2IgKikoKHNrYiktXHUwMDNlY2IpKVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhIC0gTkVUQyB0YWdnZXIvc3dpdGNoLWRyaXZlciBzaGFyZWQgb3BlcmF0aW9uc1xuJiM0MzsgKiBAdHdvc3RlcF90c3RhbXBfaGFuZGxlcjogQ2FsbGVkIGJ5IHRoZSB0YWdnZXIgd2hlbiBhIHR3by1zdGVwIHRyYW5zbWl0XG4mIzQzOyAqXHR0aW1lc3RhbXAgcmVzcG9uc2UgaXMgcmVjZWl2ZWQsIHRvIGRlbGl2ZXIgdGhlIHRpbWVzdGFtcCB0byB0aGVcbiYjNDM7ICpcdHN3aXRjaCBkcml2ZXIuXG4mIzQzOyAqIEBvbmVzdGVwX3N5bmNfaGFuZGxlcjogQ2FsbGVkIGZyb20gdGhlIHRhZ2dlciB4bWl0IHBhdGggZm9yIGEgb25lLXN0ZXAgU3luY1xuJiM0MzsgKlx0ZnJhbWUuIFJldHVybnMgdGhlIHNrYiBpZiBpdCBjYW4gYmUgdHJhbnNtaXR0ZWQgaW1tZWRpYXRlbHkgKHRoZVxuJiM0MzsgKlx0aW4tZmxpZ2h0IHNsb3QgaGFzIGJlZW4gY2xhaW1lZCBhbmQgUE1fU0lOR0xFX1NURVAgcHJvZ3JhbW1lZCksIG9yIE5VTExcbiYjNDM7ICpcdGlmIHRoZSBmcmFtZSBoYXMgYmVlbiBxdWV1ZWQgZm9yIGRlZmVycmVkIHRyYW5zbWlzc2lvbiBvciBkcm9wcGVkLlxuJiM0MzsgKiBAb25lc3RlcF9zeW5jX3htaXQ6IENhbGxlZCBieSB0aGUgc3dpdGNoIGRyaXZlciB0byB0cmFuc21pdCBhIGRlZmVycmVkXG4mIzQzOyAqXHRvbmUtc3RlcCBTeW5jIGZyYW1lIGRpcmVjdGx5IHRvIHRoZSBjb25kdWl0LCBieXBhc3NpbmcgZHNhX3VzZXJfeG1pdCgpLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEge1xuJiM0MztcdHZvaWQgKCp0d29zdGVwX3RzdGFtcF9oYW5kbGVyKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgICB1OCB0c19yZXFfaWQsIHU2NCB0cyk7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKigqb25lc3RlcF9zeW5jX2hhbmRsZXIpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiYjNDM7XHRcdFx0XHRcdFx0aW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IpO1xuJiM0MztcdG5ldGRldl90eF90ICgqb25lc3RlcF9zeW5jX3htaXQpKHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuJiM0Mzt9O1xuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNsL25ldGNfZ2xvYmFsLmggYi9pbmNsdWRlL2xpbnV4L2ZzbC9uZXRjX2dsb2JhbC5oXG5pbmRleCA1YjhmZjUyOGQzNjk5Li45MTQ0MWNiMzViYzI4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc2wvbmV0Y19nbG9iYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mc2wvbmV0Y19nbG9iYWwuaFxuQEAgLTIyLDQgJiM0MzsyMiwxMyBAQCBzdGF0aWMgaW5saW5lIHU2NCBuZXRjX3JlYWQ2NCh2b2lkIF9faW9tZW0gKnJlZylcbiBcdHJldHVybiBpb3JlYWQ2NChyZWcpO1xuIH1cbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1BUUF9ORVRDX1Y0X1RJTUVSKVxuJiM0Mzt1NjQgbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHN0cnVjdCBwY2lfZGV2ICp0aW1lcl9kZXYpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHU2NCBuZXRjX3RpbWVyX2dldF9jdXJyZW50X3RpbWUoc3RydWN0IHBjaV9kZXYgKnRpbWVyX2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19uZXRjLmMgYi9uZXQvZHNhL3RhZ19uZXRjLmNcbmluZGV4IGRmNzJhNjE3OTZhZDUuLjk0Y2NhMjBmZmNkYWQgMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL3RhZ19uZXRjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdGFnX25ldGMuY1xuQEAgLTE2LDYgJiM0MzsxNiwxMCBAQFxuICNkZWZpbmUgTkVUQ19UQUdfVE9fUE9SVFx0XHQxXG4gLyogU3ViVHlwZTA6IE5vIHJlcXVlc3QgdG8gcGVyZm9ybSB0aW1lc3RhbXBpbmcgKi9cbiAjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUwXHRcdDBcbiYjNDM7LyogU3ViVHlwZTE6IFJlcXVlc3QgdG8gcGVyZm9ybSBvbmUtc3RlcCB0aW1lc3RhbXBpbmcgKi9cbiYjNDM7I2RlZmluZSBORVRDX1RBR19UUF9TVUJUWVBFMVx0XHQxXG4mIzQzOy8qIFN1YlR5cGUyOiBSZXF1ZXN0IHRvIHBlcmZvcm0gdHdvLXN0ZXAgdGltZXN0YW1waW5nICovXG4mIzQzOyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTJcdFx0MlxuIFxuIC8qIFRvX0hvc3QgTlhQIHN3aXRjaCB0YWcgKi9cbiAjZGVmaW5lIE5FVENfVEFHX1RPX0hPU1RcdFx0MlxuQEAgLTI5LDYgJiM0MzszMyw4IEBAXG4gLyogTkVUQyBzd2l0Y2ggdGFnIGxlbmd0aHMgKi9cbiAjZGVmaW5lIE5FVENfVEFHX0ZPUldBUkRfTEVOXHRcdDZcbiAjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUwX0xFTlx0NlxuJiM0MzsjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUxX0xFTlx0MTBcbiYjNDM7I2RlZmluZSBORVRDX1RBR19UUF9TVUJUWVBFMl9MRU5cdDZcbiAjZGVmaW5lIE5FVENfVEFHX1RIX1NVQlRZUEUwX0xFTlx0NlxuICNkZWZpbmUgTkVUQ19UQUdfVEhfU1VCVFlQRTFfTEVOXHQxNFxuICNkZWZpbmUgTkVUQ19UQUdfVEhfU1VCVFlQRTJfTEVOXHQxNFxuQEAgLTQwLDYgJiM0Mzs0Niw3IEBAXG4gI2RlZmluZSBORVRDX1RBR19JUFZcdFx0XHRHRU5NQVNLKDQsIDIpXG4gI2RlZmluZSBORVRDX1RBR19TV0lUQ0hcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBORVRDX1RBR19QT1JUXHRcdFx0R0VOTUFTSyg3LCAzKVxuJiM0MzsjZGVmaW5lIE5FVENfVEFHX1RJTUVTVEFNUFx0XHRHRU5NQVNLKDI5LCAwKVxuIFxuIHN0cnVjdCBuZXRjX3RhZ19jbW4ge1xuIFx0X19iZTE2IHRwaWQ7XG5AQCAtNDgsNiAmIzQzOzU1LDI5IEBAIHN0cnVjdCBuZXRjX3RhZ19jbW4ge1xuIFx0dTggc3dpdGNoX3BvcnQ7XG4gfSBfX3BhY2tlZDtcbiBcbiYjNDM7c3RydWN0IG5ldGNfdGFnX3RwX3N1YnR5cGUxIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y190YWdfY21uIGNtbjtcbiYjNDM7XHR1OCByZXN2O1xuJiM0MztcdF9fYmUzMiB0aW1lc3RhbXA7XG4mIzQzO30gX19wYWNrZWQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbmV0Y190YWdfdHBfc3VidHlwZTIge1xuJiM0MztcdHN0cnVjdCBuZXRjX3RhZ19jbW4gY21uO1xuJiM0MztcdHU4IHRzX3JlcV9pZDtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMSB7XG4mIzQzO1x0c3RydWN0IG5ldGNfdGFnX2NtbiBjbW47XG4mIzQzO1x0dTggaG9zdF9yZWFzb247XG4mIzQzO1x0X19iZTY0IHRpbWVzdGFtcDtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMiB7XG4mIzQzO1x0c3RydWN0IG5ldGNfdGFnX2NtbiBjbW47XG4mIzQzO1x0dTggaHJfdHNyZXFfaWQ7XG4mIzQzO1x0X19iZTY0IHRpbWVzdGFtcDtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4gc3RhdGljIHZvaWQgbmV0Y19maWxsX2NvbW1vbl90YWcoc3RydWN0IG5ldGNfdGFnX2NtbiAqdGFnLCB1OCB0eXBlLFxuIFx0XHRcdFx0IHU4IHN1YnR5cGUsIHU4IHN3X2lkLCB1OCBwb3J0LCB1OCBpcHYpXG4ge1xuQEAgLTk3LDE1ICYjNDM7MTI3LDEyMCBAQCBzdGF0aWMgdm9pZCBuZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRORVRDX1RBR19UUF9TVUJUWVBFMF9MRU4pO1xuIH1cbiBcbi0vKiBDdXJyZW50bHkgb25seSBzdXBwb3J0IFRvX1BvcnQgdGFnLCBzdWJ0eXBlIDAgKi9cbiYjNDM7c3RhdGljIHZvaWQgbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHRzID0gRklFTERfUFJFUChORVRDX1RBR19USU1FU1RBTVAsIE5FVENfU0tCX0NCKHNrYiktXHUwMDNldHN0YW1wKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y190YWdfdHBfc3VidHlwZTEgKnRhZztcbiYjNDM7XG4mIzQzO1x0dGFnID0gbmV0Y19maWxsX2NvbW1vbl90cF90YWcoc2tiLCBuZGV2LCBORVRDX1RBR19UUF9TVUJUWVBFMSxcbiYjNDM7XHRcdFx0XHQgICAgICBORVRDX1RBR19UUF9TVUJUWVBFMV9MRU4pO1xuJiM0MztcdHRhZy1cdTAwM2V0aW1lc3RhbXAgPSBodG9ubCh0cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpjbG9uZSA9IE5FVENfU0tCX0NCKHNrYiktXHUwMDNlY2xvbmU7XG4mIzQzO1x0dTggdHNfcmVxX2lkID0gTkVUQ19TS0JfQ0IoY2xvbmUpLVx1MDAzZXRzX3JlcV9pZDtcbiYjNDM7XHRzdHJ1Y3QgbmV0Y190YWdfdHBfc3VidHlwZTIgKnRhZztcbiYjNDM7XG4mIzQzO1x0dGFnID0gbmV0Y19maWxsX2NvbW1vbl90cF90YWcoc2tiLCBuZGV2LCBORVRDX1RBR19UUF9TVUJUWVBFMixcbiYjNDM7XHRcdFx0XHQgICAgICBORVRDX1RBR19UUF9TVUJUWVBFMl9MRU4pO1xuJiM0MztcdHRhZy1cdTAwM2V0c19yZXFfaWQgPSBGSUVMRF9QUkVQKE5FVENfVEFHX1RTX1JFUV9JRCwgdHNfcmVxX2lkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIG5ldGRldl90eF90IG5ldGNfb25lc3RlcF9zeW5jX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdC8qIFRoaXMgZGVmZXJyZWQgb25lLXN0ZXAgU3luYyBmcmFtZSBhbHJlYWR5IHdlbnQgdGhyb3VnaFxuJiM0MztcdCAqIGRzYV91c2VyX3htaXQoKSYjMzk7cyBza2JfZW5zdXJlX3dyaXRhYmxlX2hlYWRfdGFpbCgpIGFuZCBldGhfc2tiX3BhZCgpXG4mIzQzO1x0ICogYmVmb3JlIGl0IHdhcyBxdWV1ZWQgaW4gbmV0Y194bWl0KCksIGFuZCBub3RoaW5nIGhhcyBjbG9uZWQgaXQgb3JcbiYjNDM7XHQgKiBzaHJ1bmsgaXRzIGhlYWQvdGFpbCByb29tIHNpbmNlLiBTbyB0aGUgaGVhZC90YWlsIHJvb20gaXMgc3RpbGxcbiYjNDM7XHQgKiBndWFyYW50ZWVkIGFuZCB0aGUgc2tiIGlzIHN0aWxsIHdyaXRhYmxlOyBvbmx5IHRoZSB0YWcgbmVlZHMgdG8gYmVcbiYjNDM7XHQgKiBwdXNoZWQgYmVmb3JlIGhhbmRpbmcgaXQgZGlyZWN0bHkgdG8gdGhlIGNvbmR1aXQsIGJ5cGFzc2luZ1xuJiM0MztcdCAqIGRzYV91c2VyX3htaXQoKSBzbyB0aGF0IGRldl9zd19uZXRzdGF0c190eF9hZGQoKSBpcyBub3QgaW52b2tlZCBhXG4mIzQzO1x0ICogc2Vjb25kIHRpbWUgZm9yIHRoZSBzYW1lIGZyYW1lLlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTEoc2tiLCBkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZHNhX2VucXVldWVfc2tiKHNrYiwgZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjX29uZXN0ZXBfc3luY19wcm9jZXNzKHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdXNlcl90b19wb3J0KG5kZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YTtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbiYjNDM7XG4mIzQzO1x0dGFnZ2VyX2RhdGEgPSBkcC1cdTAwM2Vkcy1cdTAwM2V0YWdnZXJfZGF0YTtcbiYjNDM7XHRpZiAodW5saWtlbHkoIXRhZ2dlcl9kYXRhLVx1MDAzZW9uZXN0ZXBfc3luY19oYW5kbGVyKSkge1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIERlY2lkZSwgdW5kZXIgcHRwX2xvY2ssIHdoZXRoZXIgdGhpcyBvbmUtc3RlcCBTeW5jIGNhbiBiZSBzZW50XG4mIzQzO1x0ICogbm93IG9yIG11c3QgYmUgZGVmZXJyZWQuIFJldHVybnMgdGhlIHNrYiAod2l0aCB0aGUgaW4tZmxpZ2h0XG4mIzQzO1x0ICogc2xvdCBjbGFpbWVkIGFuZCBQTV9TSU5HTEVfU1RFUCBhbHJlYWR5IHByb2dyYW1tZWQpIGZvclxuJiM0MztcdCAqIGltbWVkaWF0ZSB0cmFuc21pc3Npb24sIG9yIE5VTEwgaWYgaXQgd2FzIHF1ZXVlZCBmb3IgZGVmZXJyZWRcbiYjNDM7XHQgKiB0cmFuc21pc3Npb24gb3IgZHJvcHBlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuc2tiID0gdGFnZ2VyX2RhdGEtXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIoZHAtXHUwMDNlZHMsIGRwLVx1MDAzZWluZGV4LCBza2IpO1xuJiM0MztcdGlmICh1bmxpa2VseSghbnNrYikpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5za2I7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4tXHRuZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUwKHNrYiwgbmRldik7XG4mIzQzO1x0dTggcHRwX2ZsYWcgPSBORVRDX1NLQl9DQihza2IpLVx1MDAzZXB0cF9mbGFnO1xuJiM0MztcbiYjNDM7XHQvKiBGYXN0IHBhdGg6IHRoZSBvdmVyd2hlbG1pbmcgbWFqb3JpdHkgb2YgZnJhbWVzIGFyZSBub3QgUFRQIGZyYW1lcyAqL1xuJiM0MztcdGlmIChsaWtlbHkoIXB0cF9mbGFnKSkge1xuJiM0MztcdFx0bmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMChza2IsIG5kZXYpO1xuJiM0MztcdFx0cmV0dXJuIHNrYjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwdHBfZmxhZyA9PSBORVRDX1BUUF9GTEFHX09ORVNURVApIHtcbiYjNDM7XHRcdGlmICghbmV0Y19vbmVzdGVwX3N5bmNfcHJvY2Vzcyhza2IsIG5kZXYpKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRuZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUxKHNrYiwgbmRldik7XG4mIzQzO1x0fSBlbHNlIGlmIChwdHBfZmxhZyA9PSBORVRDX1BUUF9GTEFHX1RXT1NURVApIHtcbiYjNDM7XHRcdG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTIoc2tiLCBuZGV2KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gc2tiO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbmV0Y19yeF90c3RhbXBfcHJvY2VzcyhzdHJ1Y3QgbmV0Y190YWdfdGhfc3VidHlwZTEgKnRhZyxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHRzID0gZ2V0X3VuYWxpZ25lZF9iZTY0KFx1MDAyNnRhZy1cdTAwM2V0aW1lc3RhbXApO1xuJiM0MztcbiYjNDM7XHRORVRDX1NLQl9DQihza2IpLVx1MDAzZXRzdGFtcCA9IHRzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZXRjX3R3b3N0ZXBfdHN0YW1wX3Byb2Nlc3Moc3RydWN0IG5ldGNfdGFnX3RoX3N1YnR5cGUyICp0YWcsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4mIzQzO3tcbiYjNDM7XHR1OCB0c19yZXFfaWQgPSBGSUVMRF9HRVQoTkVUQ19UQUdfVFNfUkVRX0lELCB0YWctXHUwMDNlaHJfdHNyZXFfaWQpO1xuJiM0MztcdGludCBwb3J0ID0gRklFTERfR0VUKE5FVENfVEFHX1BPUlQsIHRhZy1cdTAwM2VjbW4uc3dpdGNoX3BvcnQpO1xuJiM0MztcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YSA9IGRzLVx1MDAzZXRhZ2dlcl9kYXRhO1xuJiM0MztcdHU2NCB0cyA9IGdldF91bmFsaWduZWRfYmU2NChcdTAwMjZ0YWctXHUwMDNldGltZXN0YW1wKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCF0YWdnZXJfZGF0YS1cdTAwM2V0d29zdGVwX3RzdGFtcF9oYW5kbGVyKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dGFnZ2VyX2RhdGEtXHUwMDNldHdvc3RlcF90c3RhbXBfaGFuZGxlcihkcywgcG9ydCwgdHNfcmVxX2lkLCB0cyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBuZXRjX2dldF9yeF90YWdfbGVuKGludCB0eXBlLCBpbnQgc3VidHlwZSlcbiB7XG4gXHQvKiBPbmx5IE5FVENfVEFHX1RPX0hPU1QgYW5kIE5FVENfVEFHX0ZPUldBUkQgYXJlIGV4cGVjdGVkIGluIFJYLFxuQEAgLTEyNiwxNCAmIzQzOzI2MSwxNyBAQCBzdGF0aWMgaW50IG5ldGNfZ2V0X3J4X3RhZ19sZW4oaW50IHR5cGUsIGludCBzdWJ0eXBlKVxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gbmRldi1cdTAwM2Vkc2FfcHRyO1xuIFx0c3RydWN0IG5ldGNfdGFnX2NtbiAqdGFnX2NtbjtcbiBcdGludCB0YWdfbGVuLCBzd19pZCwgcG9ydDtcbiBcdGludCB0eXBlLCBzdWJ0eXBlO1xuJiM0MztcdHZvaWQgKnRhZztcbiBcbi1cdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIE5FVENfVEFHX01BWF9MRU4pKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBORVRDX1RBR19NQVhfTEVOIC0gMikpKVxuIFx0XHRnb3RvIGVycl9mcmVlX3NrYjtcbiBcbi1cdHRhZ19jbW4gPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc19yeChza2IpO1xuJiM0MztcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7XG4mIzQzO1x0dGFnX2NtbiA9IHRhZztcbiBcdGlmIChudG9ocyh0YWdfY21uLVx1MDAzZXRwaWQpICE9IEVUSF9QX05YUF9ORVRDKSB7XG4gXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKFx1MDAyNm5kZXYtXHUwMDNlZGV2LCBcJiMzNDtVbmtub3duIFRQSUQgMHglMDR4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0ICAgICBudG9ocyh0YWdfY21uLVx1MDAzZXRwaWQpKTtcbkBAIC0xNjEsMTIgJiM0MzsyOTksMjggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHR5cGUgPT0gTkVUQ19UQUdfRk9SV0FSRCkge1xuIFx0XHRkc2FfZGVmYXVsdF9vZmZsb2FkX2Z3ZF9tYXJrKHNrYik7XG4gXHR9IGVsc2UgaWYgKHR5cGUgPT0gTkVUQ19UQUdfVE9fSE9TVCkge1xuLVx0XHQvKiBDdXJyZW50bHkgb25seSBzdWJ0eXBlMCBzdXBwb3J0ZWQgKi9cbi1cdFx0aWYgKHN1YnR5cGUgIT0gTkVUQ19UQUdfVEhfU1VCVFlQRTApXG4mIzQzO1x0XHRzd2l0Y2ggKHN1YnR5cGUpIHtcbiYjNDM7XHRcdGNhc2UgTkVUQ19UQUdfVEhfU1VCVFlQRTA6XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBORVRDX1RBR19USF9TVUJUWVBFMTpcbiYjNDM7XHRcdFx0bmV0Y19yeF90c3RhbXBfcHJvY2Vzcyh0YWcsIHNrYik7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBORVRDX1RBR19USF9TVUJUWVBFMjpcbiYjNDM7XHRcdFx0LyogVGhpcyBza2IgaXMgYSBoYXJkd2FyZS1nZW5lcmF0ZWQgcmVzcG9uc2UgdG8gYVxuJiM0MztcdFx0XHQgKiB0d28tc3RlcCB0cmFuc21pdCB0aW1lc3RhbXAgcmVxdWVzdC4gVGhlIHRhZ1xuJiM0MztcdFx0XHQgKiBkcml2ZXIgbXVzdCBmcmVlIHRoZSBza2IgYWZ0ZXIgcHJvY2Vzc2luZy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG5ldGNfdHdvc3RlcF90c3RhbXBfcHJvY2Vzcyh0YWcsIGRwLVx1MDAzZWRzKTtcbiYjNDM7XHRcdFx0Z290byBlcnJfZnJlZV9za2I7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChcdTAwMjZuZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7VW5zdXBwb3J0ZWQgVG9fSG9zdCBzdWJ0eXBlOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3VidHlwZSk7XG4gXHRcdFx0Z290byBlcnJfZnJlZV9za2I7XG4mIzQzO1x0XHR9XG4gXHR9IGVsc2Uge1xuIFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChcdTAwMjZuZGV2LVx1MDAzZWRldixcbi1cdFx0XHRcdCAgICAgXCYjMzQ7VW5leHBlY3RlZCAgdGFnIHR5cGUgJWRcXG5cJiMzNDssIHR5cGUpO1xuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7VW5leHBlY3RlZCB0YWcgdHlwZSAlZFxcblwmIzM0OywgdHlwZSk7XG4gXHRcdGdvdG8gZXJyX2ZyZWVfc2tiO1xuIFx0fVxuIFxuQEAgLTIwMCw2ICYjNDM7MzU0LDI4IEBAIHN0YXRpYyB2b2lkIG5ldGNfZmxvd19kaXNzZWN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8sXG4gXHQqcHJvdG8gPSAoKF9fYmUxNiAqKXNrYi1cdTAwM2VkYXRhKVsodGFnX2xlbiAvIDIpIC0gMV07XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG5ldGNfY29ubmVjdChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7XG4mIzQzO1xuJiM0MztcdHRhZ2dlcl9kYXRhID0ga3phbGxvY19vYmooKnRhZ2dlcl9kYXRhKTtcbiYjNDM7XHRpZiAoIXRhZ2dlcl9kYXRhKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHRhZ2dlcl9kYXRhLVx1MDAzZW9uZXN0ZXBfc3luY194bWl0ID0gbmV0Y19vbmVzdGVwX3N5bmNfeG1pdDtcbiYjNDM7XHRkcy1cdTAwM2V0YWdnZXJfZGF0YSA9IHRhZ2dlcl9kYXRhO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbmV0Y19kaXNjb25uZWN0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YSA9IGRzLVx1MDAzZXRhZ2dlcl9kYXRhO1xuJiM0MztcbiYjNDM7XHRrZnJlZSh0YWdnZXJfZGF0YSk7XG4mIzQzO1x0ZHMtXHUwMDNldGFnZ2VyX2RhdGEgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgbmV0Y19uZXRkZXZfb3BzID0ge1xuIFx0Lm5hbWVcdFx0XHQ9IE5FVENfTkFNRSxcbiBcdC5wcm90b1x0XHRcdD0gRFNBX1RBR19QUk9UT19ORVRDLFxuQEAgLTIwNyw2ICYjNDM7MzgzLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyBuZXRjX25ldGRldl9vcHMgPSB7XG4gXHQucmN2XHRcdFx0PSBuZXRjX3JjdixcbiBcdC5uZWVkZWRfaGVhZHJvb21cdD0gTkVUQ19UQUdfTUFYX0xFTixcbiBcdC5mbG93X2Rpc3NlY3RcdFx0PSBuZXRjX2Zsb3dfZGlzc2VjdCxcbiYjNDM7XHQuY29ubmVjdFx0XHQ9IG5ldGNfY29ubmVjdCxcbiYjNDM7XHQuZGlzY29ubmVjdFx0XHQ9IG5ldGNfZGlzY29ubmVjdCxcbiB9O1xuIFxuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtEU0EgdGFnIGRyaXZlciBmb3IgTlhQIE5FVEMgc3dpdGNoIGZhbWlseVwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIHN1cHBvcnQgdG8gdGhlIE5YUCBORVRDIHN3aXRjaCBkcml2ZXIgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWdnZXIuIFRoZSBORVRDIHN3aXRjaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGRldmljZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gU2luY2UgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIHJlcXVpcmVkIHRvIHByb2JlIHRoZSBkcml2ZXIgYW5kIGluc3RhbnRpYXRlIHRoZSBEU0Egc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbiBib3RoIHRoZSBkcml2ZXIgYW5kIHRoZSB0YWdnZXIgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZDkzMjNmNjM4NjYwYjkyMjRkOTdkMmY5MDNhMTQzNGJjMmRkN2FjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMDc6NTU6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZwppbmRleCA3OTNmNzY5MWEyNGYzLi41NWIxZjEzMzhhODc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWcKQEAgLTQsNiAmIzQzOzQsNyBAQCBjb25maWcgTkVUX0RTQV9ORVRDX1NXSVRDSAogCWRlcGVuZHMgb24gQVJNNjQgfHwgQ09NUElMRV9URVNUCiAJZGVwZW5kcyBvbiBORVRfRFNBICZhbXA7JmFtcDsgUENJCiAJZGVwZW5kcyBvbiBORVRfVkVORE9SX0ZSRUVTQ0FMRQomIzQzOwlkZXBlbmRzIG9uIFBUUF9ORVRDX1Y0X1RJTUVSIHx8IFBUUF9ORVRDX1Y0X1RJTUVSPW4KIAlzZWxlY3QgTkVUX0RTQV9UQUdfTkVUQwogCXNlbGVjdCBGU0xfRU5FVENfTURJTwogCXNlbGVjdCBOWFBfTlRNUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9NYWtlZmlsZQppbmRleCBmNDBiMTNjNzAyZTA3Li41NzJiODMzYWQ4MGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9NYWtlZmlsZQpAQCAtMSwzICYjNDM7MSw0IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIG9iai0kKENPTkZJR19ORVRfRFNBX05FVENfU1dJVENIKSAmIzQzOz0gbnhwLW5ldGMtc3dpdGNoLm8KLW54cC1uZXRjLXN3aXRjaC1vYmpzIDo9IG5ldGNfbWFpbi5vIG5ldGNfcGxhdGZvcm0ubyBuZXRjX2V0aHRvb2wubwomIzQzO254cC1uZXRjLXN3aXRjaC1vYmpzIDo9IG5ldGNfbWFpbi5vIG5ldGNfcGxhdGZvcm0ubyBuZXRjX2V0aHRvb2wubyBcCiYjNDM7CQkJbmV0Y19wdHAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYwppbmRleCA3NzA3NzM1MmMxYTU3Li45ODU1ZTAyYjQ3MjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYwpAQCAtNjUsNiAmIzQzOzY1LDIxIEBAIG5ldGNfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCXJldHVybiBEU0FfVEFHX1BST1RPX05FVEM7CiB9CiAKJiM0MztzdGF0aWMgaW50IG5ldGNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCQkgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YTsKJiM0MzsKJiM0MzsJaWYgKHByb3RvICE9IERTQV9UQUdfUFJPVE9fTkVUQykKJiM0MzsJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOwomIzQzOwomIzQzOwl0YWdnZXJfZGF0YSA9IGRzLSZndDt0YWdnZXJfZGF0YTsKJiM0MzsJdGFnZ2VyX2RhdGEtJmd0O29uZXN0ZXBfc3luY19oYW5kbGVyID0gbmV0Y19vbmVzdGVwX3N5bmNfaGFuZGxlcjsKJiM0MzsJdGFnZ2VyX2RhdGEtJmd0O3R3b3N0ZXBfdHN0YW1wX2hhbmRsZXIgPSBuZXRjX3R3b3N0ZXBfdHN0YW1wX2hhbmRsZXI7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9ybXcoc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsCiAJCQkgIHUzMiBtYXNrLCB1MzIgdmFsKQogewpAQCAtODAsNyAmIzQzOzk1LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3JtdyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIHJlZywKIAluZXRjX3BvcnRfd3IobnAsIHJlZywgbmV3KTsKIH0KIAotc3RhdGljIHZvaWQgbmV0Y19tYWNfcG9ydF93cihzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIHJlZywgdTMyIHZhbCkKJiM0Mzt2b2lkIG5ldGNfbWFjX3BvcnRfd3Ioc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsIHUzMiB2YWwpCiB7CiAJaWYgKGlzX25ldGNfcHNldWRvX3BvcnQobnApKQogCQlyZXR1cm47CkBAIC0yMzgsNiAmIzQzOzI1MywxNSBAQCBzdGF0aWMgdm9pZCBuZXRjX2dldF9zd2l0Y2hfY2FwYWJpbGl0aWVzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdikKIAlwcml2LSZndDtudW1fYnAgPSBGSUVMRF9HRVQoQlBDQVBSX05VTV9CUCwgdmFsKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9pbml0X3B0cF9pcGZ0X2VpZChzdHJ1Y3QgbmV0Y19wb3J0ICpucCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIHRvIGludmFsaWQgZW50cnkgSURzICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBORVRDX1BUUF9NQVg7IGkmIzQzOyYjNDM7KQomIzQzOwkJbnAtJmd0O3B0cF9pcGZ0X2VpZFtpXSA9IE5UTVBfTlVMTF9FTlRSWV9JRDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG5ldGNfaW5pdF9hbGxfcG9ydHMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtJmd0O2RldjsKQEAgLTI4Niw2ICYjNDM7MzEwLDE3IEBAIHN0YXRpYyBpbnQgbmV0Y19pbml0X2FsbF9wb3J0cyhzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpCiAJCQkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBNRElPIGJ1c1xuJiMzNDspOwogCQkJCXJldHVybiBlcnI7CiAJCQl9CiYjNDM7CiYjNDM7CQkJLyogVGhlIGlwZnRfaGZfZWlkIGlzIGluaXRpYWxpemVkIHRvIGFuIGludmFsaWQgZW50cnkKJiM0MzsJCQkgKiBJRCBiZWNhdXNlIHRoZSBob3N0IGZsb29kIHJ1bGUgKElQRlQgZW50cnkpIGhhcyBub3QKJiM0MzsJCQkgKiBiZWVuIGNyZWF0ZWQuCiYjNDM7CQkJICovCiYjNDM7CQkJbnAtJmd0O2lwZnRfaGZfZWlkID0gTlRNUF9OVUxMX0VOVFJZX0lEOwomIzQzOwkJCW5ldGNfcG9ydF9pbml0X3B0cF9pcGZ0X2VpZChucCk7CiYjNDM7CQkJc3Bpbl9sb2NrX2luaXQoJmFtcDtucC0mZ3Q7cHRwX2xvY2spOwomIzQzOwkJCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO25wLSZndDtza2JfdHh0c3RhbXBfcXVldWUpOwomIzQzOwkJCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO25wLSZndDtza2Jfb25lc3RlcF9xdWV1ZSk7CiYjNDM7CQkJSU5JVF9XT1JLKCZhbXA7bnAtJmd0O29uZXN0ZXBfd29yaywgbmV0Y19wb3J0X29uZXN0ZXBfd29yayk7CiAJCX0KIAl9CiAKQEAgLTU0OSw2ICYjNDM7NTg0LDEyIEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9maXhlZF9jb25maWcoc3RydWN0IG5ldGNfcG9ydCAqbnApCiAJbmV0Y19wb3J0X3JtdyhucCwgTkVUQ19QQ1IsIFBDUl9MMkRPU0UgfCBQQ1JfTDNET1NFLAogCQkgICAgICBQQ1JfTDJET1NFIHwgUENSX0wzRE9TRSk7CiAKJiM0MzsJLyogRW5hYmxlIGluZ3Jlc3MgcG9ydCBmaWx0ZXIgdGFibGUgbG9va3VwLCBpZiBubyBtYXRjaCBpcyBmb3VuZCwKJiM0MzsJICogdGhlIGZyYW1lIGlzIGFsbG93ZWQgYW5kIHBhc3NlZCB0byB0aGUgbmV4dCBmcmFtZSBwcm9jZXNzaW5nCiYjNDM7CSAqIGZ1bmN0aW9uLgomIzQzOwkgKi8KJiM0MzsJbmV0Y19wb3J0X3dyKG5wLCBORVRDX1BJUEZDUiwgUElQRkNSX0VOKTsKJiM0MzsKIAkvKiBTZXQgdGhlIHF1YW50YSB2YWx1ZSBvZiBUWCBQQVVTRSBmcmFtZSAqLwogCW5ldGNfbWFjX3BvcnRfd3IobnAsIE5FVENfUE1fUEFVU0VfUVVBTlRBKDApLCBORVRDX1BBVVNFX1FVQU5UQSk7CiAKQEAgLTg2OSw2ICYjNDM7OTEwLDE1IEBAIHN0YXRpYyBpbnQgbmV0Y19zd2l0Y2hfYnB0X2RlZmF1bHRfY29uZmlnKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbmV0Y19nZXRfcHRwX3RpbWVyKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfYnVzICpidXMgPSBwcml2LSZndDtwZGV2LSZndDtidXM7CiYjNDM7CXUzMiBkZXZmbiA9IHByaXYtJmd0O2luZm8tJmd0O3Rtcl9kZXZmbjsKJiM0MzsKJiM0MzsJcmV0dXJuIHBjaV9nZXRfZG9tYWluX2J1c19hbmRfc2xvdChwY2lfZG9tYWluX25yKGJ1cyksCiYjNDM7CQkJCQkgICBidXMtJmd0O251bWJlciwgZGV2Zm4pOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmV0Y19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJc3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gZHMtJmd0O3ByaXY7CkBAIC04ODksNiAmIzQzOzkzOSwxNiBAQCBzdGF0aWMgaW50IG5ldGNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKJiM0MzsJLyogVGhlIFBUUCB0aW1lciBzaXRzIG9uIHRoZSBzYW1lIFBDSSBidXMgYXMgdGhlIHN3aXRjaC4gUENJIGNyZWF0ZXMKJiM0MzsJICogZXZlcnkgZnVuY3Rpb24mIzM5O3MgcGNpX2RldiBkdXJpbmcgYnVzIGVudW1lcmF0aW9uLCBiZWZvcmUgYW55IGRyaXZlcgomIzQzOwkgKiBwcm9iZXMsIHNvIHdlIGNhbiBncmFiIHRoZSB0aW1lciYjMzk7cyBwY2lfZGV2IGhlcmUgZXZlbiBpZiB0aGUgdGltZXIKJiM0MzsJICogZHJpdmVyIGhhcyBub3QgcHJvYmVkIHlldC4KJiM0MzsJICovCiYjNDM7CXByaXYtJmd0O3Rtcl9kZXYgPSBuZXRjX2dldF9wdHBfdGltZXIocHJpdik7CiYjNDM7CWlmICghcHJpdi0mZ3Q7dG1yX2RldikKJiM0MzsJCWRldl9pbmZvKHByaXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtQVFAgdGltZXIgUENJIGRldmljZSBub3QgZm91bmRcbiYjMzQ7KTsKJiM0MzsKIAlJTklUX0hMSVNUX0hFQUQoJmFtcDtwcml2LSZndDtmZGJfbGlzdCk7CiAJbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O2ZkYnRfbG9jayk7CiAJcHJpdi0mZ3Q7ZmRidF9hZ2VpbmdfZGVsYXkgPSBORVRDX0ZEQlRfQUdFSU5HX0RFTEFZOwpAQCAtOTI1LDYgJiM0Mzs5ODUsNyBAQCBzdGF0aWMgaW50IG5ldGNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCSAqLwogCW11dGV4X2Rlc3Ryb3koJmFtcDtwcml2LSZndDtmZGJ0X2xvY2spOwogCW11dGV4X2Rlc3Ryb3koJmFtcDtwcml2LSZndDt2ZnRfbG9jayk7CiYjNDM7CXBjaV9kZXZfcHV0KHByaXYtJmd0O3Rtcl9kZXYpOwogCW5ldGNfZnJlZV9udG1wX3VzZXIocHJpdik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtOTM4LDIwICYjNDM7OTk5LDIzIEBAIHN0YXRpYyB2b2lkIG5ldGNfZGVzdHJveV9hbGxfbGlzdHMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KQogCW11dGV4X2Rlc3Ryb3koJmFtcDtwcml2LSZndDt2ZnRfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIG5ldGNfZnJlZV9ob3N0X2Zsb29kX3J1bGVzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdikKJiM0MztzdGF0aWMgdm9pZCBuZXRjX2ZyZWVfcG9ydHNfcmVzb3VyY2VzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdikKIHsKIAlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwogCi0JZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIHByaXYtJmd0O2RzKSB7CiYjNDM7CWRzYV9zd2l0Y2hfZm9yX2VhY2hfYXZhaWxhYmxlX3BvcnQoZHAsIHByaXYtJmd0O2RzKSB7CiAJCXN0cnVjdCBuZXRjX3BvcnQgKm5wID0gcHJpdi0mZ3Q7cG9ydHNbZHAtJmd0O2luZGV4XTsKIAotCQkvKiBObyBuZWVkIHRvIGNsZWFyIHRoZSBoYXJkd2FyZSBJUEZUIGVudHJ5LiBCZWNhdXNlIFBDSWUKLQkJICogRkxSIHdpbGwgYmUgcGVyZm9ybWVkIHdoZW4gdGhlIHN3aXRjaCBpcyByZS1yZWdpc3RlcmVkLAotCQkgKiBpdCB3aWxsIHJlc2V0IGhhcmR3YXJlIHN0YXRlLiBTbyBvbmx5IG5lZWQgdG8gZnJlZSB0aGUKLQkJICogbWVtb3J5IHRvIGF2b2lkIG1lbW9yeSBsZWFrLgomIzQzOwkJaWYgKCFkc2FfcG9ydF9pc191c2VyKGRwKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIE5vIG5ldyBTS0JzIGNhbiBiZSBlbnF1ZXVlZCBkdXJpbmcgdGVhcmRvd24uIFB1cmdlIHdpdGhvdXQKJiM0MzsJCSAqIHRoZSBzcGlubG9jayB0byBhdm9pZCBjYWxsaW5nIGtmcmVlX3NrYigpIHdpdGggYSBkZXN0cnVjdG9yCiYjNDM7CQkgKiAoc29ja19lZnJlZSkgd2hpbGUgaG9sZGluZyBhIHNwaW5sb2NrLgogCQkgKi8KLQkJa2ZyZWUobnAtJmd0O2hvc3RfZmxvb2QpOwotCQlucC0mZ3Q7aG9zdF9mbG9vZCA9IE5VTEw7CiYjNDM7CQlfX3NrYl9xdWV1ZV9wdXJnZSgmYW1wO25wLSZndDtza2JfdHh0c3RhbXBfcXVldWUpOwomIzQzOwkJY2FuY2VsX3dvcmtfc3luYygmYW1wO25wLSZndDtvbmVzdGVwX3dvcmspOwomIzQzOwkJX19za2JfcXVldWVfcHVyZ2UoJmFtcDtucC0mZ3Q7c2tiX29uZXN0ZXBfcXVldWUpOwogCX0KIH0KIApAQCAtOTYxLDggJiM0MzsxMDI1LDkgQEAgc3RhdGljIHZvaWQgbmV0Y190ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAKIAlkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7cHJpdi0mZ3Q7ZmRidF9hZ2Vpbmdfd29yayk7CiAJbmV0Y19kZXN0cm95X2FsbF9saXN0cyhwcml2KTsKLQluZXRjX2ZyZWVfaG9zdF9mbG9vZF9ydWxlcyhwcml2KTsKJiM0MzsJcGNpX2Rldl9wdXQocHJpdi0mZ3Q7dG1yX2Rldik7CiAJbmV0Y19mcmVlX250bXBfdXNlcihwcml2KTsKJiM0MzsJbmV0Y19mcmVlX3BvcnRzX3Jlc291cmNlcyhwcml2KTsKIH0KIAogc3RhdGljIGJvb2wgbmV0Y19wb3J0X2lzX2VtZGlvX2NvbnN1bWVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKQEAgLTE3MjAsOCAmIzQzOzE3ODUsNiBAQCBzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfaG9zdF9mbG9vZF9ydWxlKHN0cnVjdCBuZXRjX3BvcnQgKm5wLAogCWludCBlcnI7CiAKIAlpZiAoIXVjICZhbXA7JmFtcDsgIW1jKSB7Ci0JCS8qIERpc2FibGUgaW5ncmVzcyBwb3J0IGZpbHRlciB0YWJsZSBsb29rdXAgKi8KLQkJbmV0Y19wb3J0X3dyKG5wLCBORVRDX1BJUEZDUiwgMCk7CiAJCW5wLSZndDt1YyA9IGZhbHNlOwogCQlucC0mZ3Q7bWMgPSBmYWxzZTsKIApAQCAtMTc1OSw0MCAmIzQzOzE4MjIsMzYgQEAgc3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2hvc3RfZmxvb2RfcnVsZShzdHJ1Y3QgbmV0Y19wb3J0ICpucCwKIAljZmdlLSZndDtjZmcgPSBjcHVfdG9fbGUzMihjZmcpOwogCiAJZXJyID0gbnRtcF9pcGZ0X2FkZF9lbnRyeSgmYW1wO3ByaXYtJmd0O250bXAsIGhvc3RfZmxvb2QpOwotCWlmIChlcnIpIHsKLQkJa2ZyZWUoaG9zdF9mbG9vZCk7Ci0JCXJldHVybiBlcnI7Ci0JfQomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBmcmVlX2hvc3RfZmxvb2Q7CiAKIAlucC0mZ3Q7dWMgPSB1YzsKIAlucC0mZ3Q7bWMgPSBtYzsKLQlucC0mZ3Q7aG9zdF9mbG9vZCA9IGhvc3RfZmxvb2Q7Ci0JLyogRW5hYmxlIGluZ3Jlc3MgcG9ydCBmaWx0ZXIgdGFibGUgbG9va3VwICovCi0JbmV0Y19wb3J0X3dyKG5wLCBORVRDX1BJUEZDUiwgUElQRkNSX0VOKTsKJiM0MzsJbnAtJmd0O2lwZnRfaGZfZWlkID0gaG9zdF9mbG9vZC0mZ3Q7ZW50cnlfaWQ7CiAKLQlyZXR1cm4gMDsKJiM0MztmcmVlX2hvc3RfZmxvb2Q6CiYjNDM7CWtmcmVlKGhvc3RfZmxvb2QpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBuZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2Qoc3RydWN0IG5ldGNfcG9ydCAqbnAsCi0JCQkJCXN0cnVjdCBpcGZ0X2VudHJ5X2RhdGEgKmhvc3RfZmxvb2QpCiYjNDM7c3RhdGljIHZvaWQgbmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKHN0cnVjdCBuZXRjX3BvcnQgKm5wLCB1MzIgZW50cnlfaWQpCiB7CiAJc3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtJmd0O3N3aXRjaF9wcml2OwogCWJvb2wgZGlzYWJsZV9ob3N0X2Zsb29kID0gZmFsc2U7CiAKLQlpZiAoIWhvc3RfZmxvb2QpCiYjNDM7CWlmIChlbnRyeV9pZCA9PSBOVE1QX05VTExfRU5UUllfSUQpCiAJCXJldHVybjsKIAotCWlmIChucC0mZ3Q7aG9zdF9mbG9vZCA9PSBob3N0X2Zsb29kKQomIzQzOwlpZiAobnAtJmd0O2lwZnRfaGZfZWlkID09IGVudHJ5X2lkKQogCQlkaXNhYmxlX2hvc3RfZmxvb2QgPSB0cnVlOwogCi0JbnRtcF9pcGZ0X2RlbGV0ZV9lbnRyeSgmYW1wO3ByaXYtJmd0O250bXAsIGhvc3RfZmxvb2QtJmd0O2VudHJ5X2lkKTsKLQlrZnJlZShob3N0X2Zsb29kKTsKJiM0MzsJbnRtcF9pcGZ0X2RlbGV0ZV9lbnRyeSgmYW1wO3ByaXYtJmd0O250bXAsIGVudHJ5X2lkKTsKIAogCWlmIChkaXNhYmxlX2hvc3RfZmxvb2QpIHsKLQkJbnAtJmd0O2hvc3RfZmxvb2QgPSBOVUxMOwomIzQzOwkJbnAtJmd0O2lwZnRfaGZfZWlkID0gTlRNUF9OVUxMX0VOVFJZX0lEOwogCQlucC0mZ3Q7dWMgPSBmYWxzZTsKIAkJbnAtJmd0O21jID0gZmFsc2U7Ci0JCW5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIDApOwogCX0KIH0KIApAQCAtMTgwMCw3ICYjNDM7MTg1OSw3IEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9zZXRfaG9zdF9mbG9vZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkJCSAgICAgYm9vbCB1YywgYm9vbCBtYykKIHsKIAlzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7Ci0Jc3RydWN0IGlwZnRfZW50cnlfZGF0YSAqb2xkX2hvc3RfZmxvb2Q7CiYjNDM7CXUzMiBvbGRfZW50cnlfaWQ7CiAKIAkvKiBEbyBub3QgYWRkIGhvc3QgZmxvb2QgcnVsZSB0byBpbmdyZXNzIHBvcnQgZmlsdGVyIHRhYmxlIHdoZW4KIAkgKiB0aGUgcG9ydCBoYXMgam9pbmVkIGEgYnJpZGdlLiBPdGhlcndpc2UsIHRoZSBpbmdyZXNzIGZyYW1lcwpAQCAtMTgwOCw3ICYjNDM7MTg2Nyw3IEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9zZXRfaG9zdF9mbG9vZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCSAqIHdpbGwgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSB0byB0aGUgQ1BVIHBvcnQuCiAJICovCiAJaWYgKGRzYV9wb3J0X2JyaWRnZV9kZXZfZ2V0KG5wLSZndDtkcCkpIHsKLQkJbmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBucC0mZ3Q7aG9zdF9mbG9vZCk7CiYjNDM7CQluZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2QobnAsIG5wLSZndDtpcGZ0X2hmX2VpZCk7CiAKIAkJcmV0dXJuOwogCX0KQEAgLTE4MTgsMjAgJiM0MzsxODc3LDE4IEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9zZXRfaG9zdF9mbG9vZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCiAJLyogSVBGVCBkb2VzIG5vdCBzdXBwb3J0IGluLXBsYWNlIHVwZGF0ZXMgdG8gdGhlIEtFWUUgZWxlbWVudCwKIAkgKiB3ZSBuZWVkIHRvIGFkZCBhIG5ldyBlbnRyeSBhbmQgdGhlbiBkZWxldGUgdGhlIG9sZCBvbmUuIFNvCi0JICogc2F2ZSB0aGUgb2xkIGVudHJ5IGZpcnN0LgomIzQzOwkgKiBzYXZlIHRoZSBvbGQgZW50cnkgSUQgZmlyc3QuCiAJICovCi0Jb2xkX2hvc3RfZmxvb2QgPSBucC0mZ3Q7aG9zdF9mbG9vZDsKLQlucC0mZ3Q7aG9zdF9mbG9vZCA9IE5VTEw7CiYjNDM7CW9sZF9lbnRyeV9pZCA9IG5wLSZndDtpcGZ0X2hmX2VpZDsKIAogCWlmIChuZXRjX3BvcnRfYWRkX2hvc3RfZmxvb2RfcnVsZShucCwgdWMsIG1jKSkgewotCQlucC0mZ3Q7aG9zdF9mbG9vZCA9IG9sZF9ob3N0X2Zsb29kOwogCQlkZXZfZXJyKGRzLSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIGFkZCBob3N0IGZsb29kIHJ1bGUgb24gcG9ydCAlZFxuJiMzNDssCiAJCQlwb3J0KTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIFJlbW92ZSB0aGUgb2xkIGhvc3QgZmxvb2QgZW50cnkgKi8KLQluZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2QobnAsIG9sZF9ob3N0X2Zsb29kKTsKJiM0MzsJbmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBvbGRfZW50cnlfaWQpOwogfQogCiBzdGF0aWMgaW50IG5ldGNfc2luZ2xlX3ZsYW5fYXdhcmVfYnJpZGdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKQEAgLTIwMjAsNyAmIzQzOzIwNzcsNyBAQCBzdGF0aWMgaW50IG5ldGNfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCW5ldGNfcG9ydF9zZXRfcHZpZChucCwgdmxhbl91bmF3YXJlX3B2aWQpOwogCiBvdXQ6Ci0JbmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBucC0mZ3Q7aG9zdF9mbG9vZCk7CiYjNDM7CW5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgbnAtJmd0O2lwZnRfaGZfZWlkKTsKIAogCWlmIChhdG9taWNfaW5jX3JldHVybigmYW1wO3ByaXYtJmd0O2JyX2NudCkgPT0gMSkKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7cHJpdi0mZ3Q7ZmRidF9hZ2Vpbmdfd29yaywKQEAgLTI0MDIsNiAmIzQzOzI0NTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBuZXRjX3BoeWxpbmtfbWFjX29wcyA9IHsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBuZXRjX3N3aXRjaF9vcHMgPSB7CiAJLmdldF90YWdfcHJvdG9jb2wJCT0gbmV0Y19nZXRfdGFnX3Byb3RvY29sLAomIzQzOwkuY29ubmVjdF90YWdfcHJvdG9jb2wJCT0gbmV0Y19jb25uZWN0X3RhZ19wcm90b2NvbCwKIAkuc2V0dXAJCQkJPSBuZXRjX3NldHVwLAogCS50ZWFyZG93bgkJCT0gbmV0Y190ZWFyZG93biwKIAkucGh5bGlua19nZXRfY2FwcwkJPSBuZXRjX3BoeWxpbmtfZ2V0X2NhcHMsCkBAIC0yNDMwLDYgJiM0MzsyNDg4LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbmV0Y19zd2l0Y2hfb3BzID0gewogCS5nZXRfc3NldF9jb3VudAkJCT0gbmV0Y19wb3J0X2dldF9zc2V0X2NvdW50LAogCS5nZXRfc3RyaW5ncwkJCT0gbmV0Y19wb3J0X2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cwkJPSBuZXRjX3BvcnRfZ2V0X2V0aHRvb2xfc3RhdHMsCiYjNDM7CS5nZXRfdHNfaW5mbwkJCT0gbmV0Y19nZXRfdHNfaW5mbywKJiM0MzsJLnBvcnRfaHd0c3RhbXBfc2V0CQk9IG5ldGNfcG9ydF9od3RzdGFtcF9zZXQsCiYjNDM7CS5wb3J0X2h3dHN0YW1wX2dldAkJPSBuZXRjX3BvcnRfaHd0c3RhbXBfZ2V0LAomIzQzOwkucG9ydF9yeHRzdGFtcAkJCT0gbmV0Y19wb3J0X3J4dHN0YW1wLAomIzQzOwkucG9ydF90eHRzdGFtcAkJCT0gbmV0Y19wb3J0X3R4dHN0YW1wLAogfTsKIAogc3RhdGljIGludCBuZXRjX3N3aXRjaF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcGxhdGZvcm0uYyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcGxhdGZvcm0uYwppbmRleCAzNGFlYjZmY2ViM2NiLi40ZmQwY2U2NzcwYzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3BsYXRmb3JtLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wbGF0Zm9ybS5jCkBAIC01MCw2ICYjNDM7NTAsNyBAQCBzdGF0aWMgdm9pZCBpbXg5NF9zd2l0Y2hfcGh5bGlua19nZXRfY2FwcyhpbnQgcG9ydCwKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRjX3N3aXRjaF9pbmZvIGlteDk0X2luZm8gPSB7CiAJLm51bV9wb3J0cyA9IDQsCiYjNDM7CS50bXJfZGV2Zm4gPSBQQ0lfREVWRk4oMCwgMSksCiAJLnBoeWxpbmtfZ2V0X2NhcHMgPSBpbXg5NF9zd2l0Y2hfcGh5bGlua19nZXRfY2FwcywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcHRwLmMgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3B0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmZmN2Q4ZTVlNjhkMjMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3B0cC5jCkBAIC0wLDAgJiM0MzsxLDY2MyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCYjNDM7IE9SIEJTRC0zLUNsYXVzZSkKJiM0MzsvKgomIzQzOyAqIE5YUCBORVRDIHN3aXRjaCBkcml2ZXIKJiM0MzsgKiBDb3B5cmlnaHQgMjAyNS0yMDI2IE5YUAomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xhc3NpZnkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0Y19zd2l0Y2guaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBORVRDX1RTX1JFUV9JRF9OVU0JCShORVRDX1RBR19UU19SRVFfSUQgJiM0MzsgMSkKJiM0MzsjZGVmaW5lIE5FVENfUFRQX1RYX1RTVEFNUF9USU1FT1VUCSg1ICogSFopCiYjNDM7CiYjNDM7c3RhdGljIGludCBuZXRjX2dldF9waGNfaW5kZXgoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KQomIzQzO3sKJiM0MzsJaWYgKCFwcml2LSZndDt0bXJfZGV2KQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXJldHVybiBwdHBfY2xvY2tfaW5kZXhfYnlfZGV2KCZhbXA7cHJpdi0mZ3Q7dG1yX2Rldi0mZ3Q7ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG5ldGNfZ2V0X3RzX2luZm8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCSAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaW5mby0mZ3Q7c29fdGltZXN0YW1waW5nID0gU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSB8CiYjNDM7CQkJCVNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgfAomIzQzOwkJCQlTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFOwomIzQzOwomIzQzOwlpbmZvLSZndDtwaGNfaW5kZXggPSBuZXRjX2dldF9waGNfaW5kZXgocHJpdik7CiYjNDM7CWlmIChpbmZvLSZndDtwaGNfaW5kZXggJmx0OyAwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWluZm8tJmd0O3NvX3RpbWVzdGFtcGluZyB8PSBTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIHwKJiM0MzsJCQkJIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgfAomIzQzOwkJCQkgU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkU7CiYjNDM7CiYjNDM7CWluZm8tJmd0O3R4X3R5cGVzID0gQklUKEhXVFNUQU1QX1RYX09GRikgfCBCSVQoSFdUU1RBTVBfVFhfT04pIHwKJiM0MzsJCQkgQklUKEhXVFNUQU1QX1RYX09ORVNURVBfU1lOQyk7CiYjNDM7CiYjNDM7CWluZm8tJmd0O3J4X2ZpbHRlcnMgPSBCSVQoSFdUU1RBTVBfRklMVEVSX05PTkUpIHwKJiM0MzsJCQkgICBCSVQoSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVCkgfAomIzQzOwkJCSAgIEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKSB8CiYjNDM7CQkJICAgQklUKEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfRVZFTlQpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmV0Y19wb3J0X2RlbF9wdHBfZmlsdGVyKHN0cnVjdCBuZXRjX3BvcnQgKm5wKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtJmd0O3N3aXRjaF9wcml2OwomIzQzOwl1MzIgZW50cnlfaWQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTkVUQ19QVFBfTUFYOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZW50cnlfaWQgPSBucC0mZ3Q7cHRwX2lwZnRfZWlkW2ldOwomIzQzOwkJaWYgKGVudHJ5X2lkICE9IE5UTVBfTlVMTF9FTlRSWV9JRCkgewomIzQzOwkJCW50bXBfaXBmdF9kZWxldGVfZW50cnkoJmFtcDtwcml2LSZndDtudG1wLCBlbnRyeV9pZCk7CiYjNDM7CQkJbnAtJmd0O3B0cF9pcGZ0X2VpZFtpXSA9IE5UTVBfTlVMTF9FTlRSWV9JRDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5ldGNfYnVpbGRfcHRwX2lwZnRfa2V5ZShzdHJ1Y3QgaXBmdF9rZXllX2RhdGEgKmtleWUsIGludCBwb3J0LAomIzQzOwkJCQkgICAgZW51bSBuZXRjX3B0cF90eXBlIHR5cGUpCiYjNDM7ewomIzQzOwl1MTYgc3JjX3BvcnQsIGZybV9hdHRyX2ZsYWdzOwomIzQzOwomIzQzOwlrZXllLSZndDtwcmVjZWRlbmNlID0gY3B1X3RvX2xlMTYoMHhmMDAwKTsKJiM0MzsJc3JjX3BvcnQgPSBGSUVMRF9QUkVQKElQRlRfU1JDX1BPUlQsIHBvcnQpOwomIzQzOwlzcmNfcG9ydCB8PSBJUEZUX1NSQ19QT1JUX01BU0s7CiYjNDM7CWtleWUtJmd0O3NyY19wb3J0ID0gY3B1X3RvX2xlMTYoc3JjX3BvcnQpOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBORVRDX1BUUF9MMjoKJiM0MzsJCWtleWUtJmd0O2V0aGVydHlwZSA9IGh0b25zKEVUSF9QXzE1ODgpOwomIzQzOwkJa2V5ZS0mZ3Q7ZXRoZXJ0eXBlX21hc2sgPSBodG9ucygweGZmZmYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkVUQ19QVFBfTDRfSVBWNF9FVkVOVDoKJiM0MzsJY2FzZSBORVRDX1BUUF9MNF9JUFY0X0dFTkVSQUw6CiYjNDM7CWNhc2UgTkVUQ19QVFBfTDRfSVBWNl9FVkVOVDoKJiM0MzsJY2FzZSBORVRDX1BUUF9MNF9JUFY2X0dFTkVSQUw6CiYjNDM7CQlmcm1fYXR0cl9mbGFncyA9IElQRlRfRkFGX0lQX0hEUiB8IEZJRUxEX1BSRVAoSVBGVF9GQUZfTDRfQ09ERSwKJiM0MzsJCQkJIElQRlRfRkFGX1VEUF9IRFIpOwomIzQzOwkJaWYgKHR5cGUgPT0gTkVUQ19QVFBfTDRfSVBWNl9FVkVOVCB8fAomIzQzOwkJICAgIHR5cGUgPT0gTkVUQ19QVFBfTDRfSVBWNl9HRU5FUkFMKQomIzQzOwkJCWZybV9hdHRyX2ZsYWdzIHw9IElQRlRfRkFGX0lQX1ZFUjY7CiYjNDM7CiYjNDM7CQlrZXllLSZndDtmcm1fYXR0cl9mbGFncyA9IGNwdV90b19sZTE2KGZybV9hdHRyX2ZsYWdzKTsKJiM0MzsJCWtleWUtJmd0O2ZybV9hdHRyX2ZsYWdzX21hc2sgPSBrZXllLSZndDtmcm1fYXR0cl9mbGFnczsKJiM0MzsJCWtleWUtJmd0O2lwX3Byb3RvY29sID0gSVBQUk9UT19VRFA7CiYjNDM7CQlrZXllLSZndDtpcF9wcm90b2NvbF9tYXNrID0gMHhmZjsKJiM0MzsKJiM0MzsJCWlmICh0eXBlID09IE5FVENfUFRQX0w0X0lQVjRfRVZFTlQgfHwKJiM0MzsJCSAgICB0eXBlID09IE5FVENfUFRQX0w0X0lQVjZfRVZFTlQpCiYjNDM7CQkJa2V5ZS0mZ3Q7bDRfZHN0X3BvcnQgPSBodG9ucyhQVFBfRVZfUE9SVCk7CiYjNDM7CQllbHNlCiYjNDM7CQkJa2V5ZS0mZ3Q7bDRfZHN0X3BvcnQgPSBodG9ucyhQVFBfR0VOX1BPUlQpOwomIzQzOwomIzQzOwkJa2V5ZS0mZ3Q7bDRfZHN0X3BvcnRfbWFzayA9IGh0b25zKDB4ZmZmZik7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkoc3RydWN0IG5ldGNfcG9ydCAqbnAsCiYjNDM7CQkJCQllbnVtIG5ldGNfcHRwX3R5cGUgdHlwZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IG5wLSZndDtzd2l0Y2hfcHJpdjsKJiM0MzsJc3RydWN0IGlwZnRfZW50cnlfZGF0YSAqZW50cnk7CiYjNDM7CXN0cnVjdCBpcGZ0X2tleWVfZGF0YSAqa2V5ZTsKJiM0MzsJdTMyIGNmZzsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZW50cnkgPSBremFsbG9jX29iaigqZW50cnkpOwomIzQzOwlpZiAoIWVudHJ5KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWtleWUgPSAmYW1wO2VudHJ5LSZndDtrZXllOwomIzQzOwllcnIgPSBuZXRjX2J1aWxkX3B0cF9pcGZ0X2tleWUoa2V5ZSwgbnAtJmd0O2RwLSZndDtpbmRleCwgdHlwZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGZyZWVfZW50cnk7CiYjNDM7CiYjNDM7CWNmZyA9IEZJRUxEX1BSRVAoSVBGVF9GTFRGQSwgSVBGVF9GTFRGQV9SRURJUkVDVCk7CiYjNDM7CWNmZyB8PSBGSUVMRF9QUkVQKElQRlRfSFIsIE5FVENfSFJfUFRQX1RSQVApOwomIzQzOwljZmcgfD0gSVBGVF9USU1FQ0FQRSB8IElQRlRfUlJUOwomIzQzOwllbnRyeS0mZ3Q7Y2ZnZS5jZmcgPSBjcHVfdG9fbGUzMihjZmcpOwomIzQzOwomIzQzOwllcnIgPSBudG1wX2lwZnRfYWRkX2VudHJ5KCZhbXA7cHJpdi0mZ3Q7bnRtcCwgZW50cnkpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBmcmVlX2VudHJ5OwomIzQzOwomIzQzOwlucC0mZ3Q7cHRwX2lwZnRfZWlkW3R5cGVdID0gZW50cnktJmd0O2VudHJ5X2lkOwomIzQzOwomIzQzO2ZyZWVfZW50cnk6CiYjNDM7CWtmcmVlKGVudHJ5KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2wyX3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnApCiYjNDM7ewomIzQzOwlyZXR1cm4gbmV0Y19wb3J0X2FkZF9pcGZ0X3B0cF9lbnRyeShucCwgTkVUQ19QVFBfTDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfbDRfcHRwX2ZpbHRlcihzdHJ1Y3QgbmV0Y19wb3J0ICpucCkKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjRfRVZFTlQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gbmV0Y19wb3J0X2FkZF9pcGZ0X3B0cF9lbnRyeShucCwgTkVUQ19QVFBfTDRfSVBWNF9HRU5FUkFMKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZGVsX3B0cF9maWx0ZXI7CiYjNDM7CiYjNDM7CWVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjZfRVZFTlQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBkZWxfcHRwX2ZpbHRlcjsKJiM0MzsKJiM0MzsJZXJyID0gbmV0Y19wb3J0X2FkZF9pcGZ0X3B0cF9lbnRyeShucCwgTkVUQ19QVFBfTDRfSVBWNl9HRU5FUkFMKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZGVsX3B0cF9maWx0ZXI7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2RlbF9wdHBfZmlsdGVyOgomIzQzOwluZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIobnApOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfbDJfbDRfcHRwX2ZpbHRlcihzdHJ1Y3QgbmV0Y19wb3J0ICpucCkKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG5ldGNfcG9ydF9hZGRfbDJfcHRwX2ZpbHRlcihucCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBuZXRjX3BvcnRfYWRkX2w0X3B0cF9maWx0ZXIobnApOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBkZWxfcHRwX2ZpbHRlcjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZGVsX3B0cF9maWx0ZXI6CiYjNDM7CW5ldGNfcG9ydF9kZWxfcHRwX2ZpbHRlcihucCk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbmV0Y19wb3J0X3NldF9wdHBfZmlsdGVyKHN0cnVjdCBuZXRjX3BvcnQgKm5wLCBpbnQgcnhfZmlsdGVyKQomIzQzO3sKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmIChucC0mZ3Q7cHRwX3J4X2ZpbHRlciA9PSByeF9maWx0ZXIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG5wLSZndDtwdHBfcnhfZmlsdGVyICE9IEhXVFNUQU1QX0ZJTFRFUl9OT05FIHx8CiYjNDM7CSAgICByeF9maWx0ZXIgPT0gSFdUU1RBTVBfRklMVEVSX05PTkUpIHsKJiM0MzsJCW5ldGNfcG9ydF9kZWxfcHRwX2ZpbHRlcihucCk7CiYjNDM7CQlucC0mZ3Q7cHRwX3J4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9OT05FOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAocnhfZmlsdGVyKSB7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UOgomIzQzOwkJZXJyID0gbmV0Y19wb3J0X2FkZF9sMl9wdHBfZmlsdGVyKG5wKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfRVZFTlQ6CiYjNDM7CQllcnIgPSBuZXRjX3BvcnRfYWRkX2w0X3B0cF9maWx0ZXIobnApOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDoKJiM0MzsJCWVyciA9IG5ldGNfcG9ydF9hZGRfbDJfbDRfcHRwX2ZpbHRlcihucCk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWVyciA9IC1FUkFOR0U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW5wLSZndDtwdHBfcnhfZmlsdGVyID0gcnhfZmlsdGVyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG5ldGNfcG9ydF9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLAomIzQzOwkJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjX3BvcnQgKm5wID0gTkVUQ19QT1JUKGRzLCBwb3J0KTsKJiM0MzsJc3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CWludCByeF9maWx0ZXIsIGVycjsKJiM0MzsKJiM0MzsJc3dpdGNoIChjb25maWctJmd0O3R4X3R5cGUpIHsKJiM0MzsJY2FzZSBIV1RTVEFNUF9UWF9PTjoKJiM0MzsJY2FzZSBIV1RTVEFNUF9UWF9PRkY6CiYjNDM7CQlucC0mZ3Q7cHRwX3R4X3R5cGUgPSBjb25maWctJmd0O3R4X3R5cGU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBIV1RTVEFNUF9UWF9PTkVTVEVQX1NZTkM6CiYjNDM7CQlpZiAoIXByaXYtJmd0O3Rtcl9kZXYpCiYjNDM7CQkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CQlucC0mZ3Q7cHRwX3R4X3R5cGUgPSBjb25maWctJmd0O3R4X3R5cGU7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAoY29uZmlnLSZndDtyeF9maWx0ZXIpIHsKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORToKJiM0MzsJCXJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9OT05FOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X1NZTkM6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9ERUxBWV9SRVE6CiYjNDM7CQlyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX1NZTkM6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9ERUxBWV9SRVE6CiYjNDM7CQlyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDoKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkM6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6CiYjNDM7CQlyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBuZXRjX3BvcnRfc2V0X3B0cF9maWx0ZXIobnAsIHJ4X2ZpbHRlcik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIHNldCBQVFAgZmlsdGVyJiMzNDspOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwljb25maWctJmd0O3J4X2ZpbHRlciA9IHJ4X2ZpbHRlcjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBuZXRjX3BvcnRfaHd0c3RhbXBfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjX3BvcnQgKm5wID0gTkVUQ19QT1JUKGRzLCBwb3J0KTsKJiM0MzsKJiM0MzsJY29uZmlnLSZndDt0eF90eXBlID0gbnAtJmd0O3B0cF90eF90eXBlOwomIzQzOwljb25maWctJmd0O3J4X2ZpbHRlciA9IG5wLSZndDtwdHBfcnhfZmlsdGVyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBuZXRjX3BvcnRfdHh0c3RhbXBfdHdvc3RlcChzdHJ1Y3QgbmV0Y19wb3J0ICpucCwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKmNsb25lKQomIzQzO3sKJiM0MzsJREVDTEFSRV9CSVRNQVAodHNfcmVxX2lkX2JpdG1hcCwgTkVUQ19UU19SRVFfSURfTlVNKTsKJiM0MzsJc3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtJmd0O3N3aXRjaF9wcml2OwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyZWVfbGlzdDsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnNrYl90bXA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdHNfcmVxX2lkOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJYml0bWFwX3plcm8odHNfcmVxX2lkX2JpdG1hcCwgTkVUQ19UU19SRVFfSURfTlVNKTsKJiM0MzsJX19za2JfcXVldWVfaGVhZF9pbml0KCZhbXA7ZnJlZV9saXN0KTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bnAtJmd0O3B0cF9sb2NrKTsKJiM0MzsKJiM0MzsJc2tiX3F1ZXVlX3dhbGtfc2FmZSgmYW1wO25wLSZndDtza2JfdHh0c3RhbXBfcXVldWUsIHNrYiwgc2tiX3RtcCkgewomIzQzOwkJaWYgKHRpbWVfYmVmb3JlKE5FVENfU0tCX0NCKHNrYiktJmd0O3B0cF90eF90aW1lICYjNDM7CiYjNDM7CQkJCU5FVENfUFRQX1RYX1RTVEFNUF9USU1FT1VULCBqaWZmaWVzKSkgewomIzQzOwkJCWRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICAgICYjMzQ7UG9ydCAlZCB0c19yZXFfaWQgJXUgd2hpY2ggc2VlbXMgbG9zdFxuJiMzNDssCiYjNDM7CQkJCQkgICAgbnAtJmd0O2RwLSZndDtpbmRleCwgTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7dHNfcmVxX2lkKTsKJiM0MzsKJiM0MzsJCQlfX3NrYl91bmxpbmsoc2tiLCAmYW1wO25wLSZndDtza2JfdHh0c3RhbXBfcXVldWUpOwomIzQzOwkJCV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDtmcmVlX2xpc3QsIHNrYik7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCV9fc2V0X2JpdChORVRDX1NLQl9DQihza2IpLSZndDt0c19yZXFfaWQsIHRzX3JlcV9pZF9iaXRtYXApOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXRzX3JlcV9pZCA9IGZpbmRfZmlyc3RfemVyb19iaXQodHNfcmVxX2lkX2JpdG1hcCwgTkVUQ19UU19SRVFfSURfTlVNKTsKJiM0MzsJaWYgKHRzX3JlcV9pZCA9PSBORVRDX1RTX1JFUV9JRF9OVU0pIHsKJiM0MzsJCWVyciA9IC1FQlVTWTsKJiM0MzsJCWdvdG8gdW5sb2NrX3B0cDsKJiM0MzsJfQomIzQzOwomIzQzOwlORVRDX1NLQl9DQihjbG9uZSktJmd0O3RzX3JlcV9pZCA9IHRzX3JlcV9pZDsKJiM0MzsJTkVUQ19TS0JfQ0IoY2xvbmUpLSZndDtwdHBfdHhfdGltZSA9IGppZmZpZXM7CiYjNDM7CXNrYl9zaGluZm8oY2xvbmUpLSZndDt0eF9mbGFncyB8PSBTS0JUWF9JTl9QUk9HUkVTUzsKJiM0MzsJX19za2JfcXVldWVfdGFpbCgmYW1wO25wLSZndDtza2JfdHh0c3RhbXBfcXVldWUsIGNsb25lKTsKJiM0MzsKJiM0Mzt1bmxvY2tfcHRwOgomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25wLSZndDtwdHBfbG9jayk7CiYjNDM7CiYjNDM7CS8qIEZyZWUgdGltZWQtb3V0IFNLQnMgb3V0c2lkZSB0aGUgc3BpbmxvY2sgdG8gYXZvaWQgY2FsbGluZwomIzQzOwkgKiBrZnJlZV9za2IoKSB3aXRoIGEgZGVzdHJ1Y3RvciAoc29ja19lZnJlZSkgdW5kZXIgYSBzcGlubG9jay4KJiM0MzsJICovCiYjNDM7CV9fc2tiX3F1ZXVlX3B1cmdlKCZhbXA7ZnJlZV9saXN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBuZXRjX3R3b3N0ZXBfdHN0YW1wX2hhbmRsZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkJIHU4IHRzX3JlcV9pZCwgdTY0IHRzKQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnNrYl90bXAsICpza2JfbWF0Y2ggPSBOVUxMOwomIzQzOwlzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7CiYjNDM7CXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBod3RzdGFtcHM7CiYjNDM7CXN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtucC0mZ3Q7cHRwX2xvY2spOwomIzQzOwlza2JfcXVldWVfd2Fsa19zYWZlKCZhbXA7bnAtJmd0O3NrYl90eHRzdGFtcF9xdWV1ZSwgc2tiLCBza2JfdG1wKSB7CiYjNDM7CQlpZiAoTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7dHNfcmVxX2lkICE9IHRzX3JlcV9pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCV9fc2tiX3VubGluayhza2IsICZhbXA7bnAtJmd0O3NrYl90eHRzdGFtcF9xdWV1ZSk7CiYjNDM7CQlza2JfbWF0Y2ggPSBza2I7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25wLSZndDtwdHBfbG9jayk7CiYjNDM7CiYjNDM7CWlmICghc2tiX21hdGNoKSB7CiYjNDM7CQlkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtJmd0O2RldiwKJiM0MzsJCQkJICAgICYjMzQ7UG9ydCAlZCByZWNlaXZlZCBhbiBleHBpcmVkIFR4IHRpbWVzdGFtcCByZXNwb25zZSAodHNfcmVxX2lkICV1KSYjMzQ7LAomIzQzOwkJCQkgICAgcG9ydCwgdHNfcmVxX2lkKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlod3RzdGFtcHMuaHd0c3RhbXAgPSBuc190b19rdGltZSh0cyk7CiYjNDM7CXNrYl9jb21wbGV0ZV90eF90aW1lc3RhbXAoc2tiX21hdGNoLCAmYW1wO2h3dHN0YW1wcyk7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgbmV0Y19wb3J0X3J4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHR5cGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHN0YW1wcyA9IHNrYl9od3RzdGFtcHMoc2tiKTsKJiM0MzsJdTY0IHRzID0gTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7dHN0YW1wOwomIzQzOwomIzQzOwlod3RzdGFtcHMtJmd0O2h3dHN0YW1wID0gbnNfdG9fa3RpbWUodHMpOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9wcmVwYXJlX29uZXN0ZXBfc3luYyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCwKJiM0MzsJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQkgICB1MzIgcHRwX2NsYXNzLCBib29sICp0d29zdGVwKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtJmd0O3N3aXRjaF9wcml2OwomIzQzOwl1MTYgY29ycmVjdGlvbl9vZmZzZXQsIHRpbWVzdGFtcF9vZmZzZXQ7CiYjNDM7CXN0cnVjdCBwdHBfaGVhZGVyICpwdHBfaGRyOwomIzQzOwl1OCBtc2dfdHlwZSwgdHdvc3RlcF9mbGFnOwomIzQzOwlib29sIGlzX3VkcCA9IGZhbHNlOwomIzQzOwl1MzIgcGt0X3R5cGU7CiYjNDM7CXU4ICpwa3RfaGRyOwomIzQzOwomIzQzOwlwdHBfaGRyID0gcHRwX3BhcnNlX2hlYWRlcihza2IsIHB0cF9jbGFzcyk7CiYjNDM7CWlmICghcHRwX2hkcikgewomIzQzOwkJZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LSZndDtkZXYsCiYjNDM7CQkJCSAgICAmIzM0O1BvcnQgJWQgZmFpbGVkIHRvIHBhcnNlIFN5bmMgaGVhZGVyXG4mIzM0OywKJiM0MzsJCQkJICAgIG5wLSZndDtkcC0mZ3Q7aW5kZXgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBrdF9oZHIgPSBza2JfbWFjX2hlYWRlcihza2IpOwomIzQzOwljb3JyZWN0aW9uX29mZnNldCA9ICh1OCAqKSZhbXA7cHRwX2hkci0mZ3Q7Y29ycmVjdGlvbiAtIHBrdF9oZHI7CiYjNDM7CXRpbWVzdGFtcF9vZmZzZXQgPSAodTggKilwdHBfaGRyICYjNDM7IHNpemVvZigqcHRwX2hkcikgLSBwa3RfaGRyOwomIzQzOwomIzQzOwkvKiBFbnN1cmUgdGhhdCB0aGUgZW50aXJlIG9yaWdpblRpbWVzdGFtcCBmaWVsZCBpcyBwcmVzZW50IGluIHRoZQomIzQzOwkgKiBsaW5lYXIgYnVmZmVyIG9mIHRoZSBza2IuCiYjNDM7CSAqLwomIzQzOwlpZiAocGt0X2hkciAmIzQzOyB0aW1lc3RhbXBfb2Zmc2V0ICYjNDM7IDEwICZndDsgc2tiLSZndDtkYXRhICYjNDM7IHNrYl9oZWFkbGVuKHNrYikpIHsKJiM0MzsJCWRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtQb3J0ICVkIFN5bmMgaGVhZGVyIG5vdCBpbiBsaW5lYXIgYXJlYVxuJiMzNDssCiYjNDM7CQkJCSAgICBucC0mZ3Q7ZHAtJmd0O2luZGV4KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwltc2dfdHlwZSA9IHB0cF9nZXRfbXNndHlwZShwdHBfaGRyLCBwdHBfY2xhc3MpOwomIzQzOwl0d29zdGVwX2ZsYWcgPSBwdHBfaGRyLSZndDtmbGFnX2ZpZWxkWzBdICZhbXA7IDB4MjsKJiM0MzsKJiM0MzsJLyogT25seSBhIFN5bmMgZnJhbWUgd2l0aCB0aGUgdHdvU3RlcEZsYWcgY2xlYXJlZCBjYW4gdXNlIG9uZS1zdGVwCiYjNDM7CSAqIHRpbWVzdGFtcGluZy4gQSBmcmFtZSB0aGF0IHJlcXVlc3RzIHR3by1zdGVwIChvciBpcyBub3QgYSBTeW5jKQomIzQzOwkgKiBjYXJyaWVzIGRpZmZlcmVudCBvbi13aXJlIGZpZWxkcywgc28gdGhpcyBpcyBhIHJlYWwgY2xhc3NpZmljYXRpb247CiYjNDM7CSAqIHJlcG9ydCBpdCB0aHJvdWdoICp0d29zdGVwIHNvIHRoZSBjYWxsZXIgZmFsbHMgYmFjayB0byB0aGUgdHdvLXN0ZXAKJiM0MzsJICogcGF0aC4KJiM0MzsJICovCiYjNDM7CWlmIChtc2dfdHlwZSAhPSBQVFBfTVNHVFlQRV9TWU5DIHx8IHR3b3N0ZXBfZmxhZyAhPSAwKSB7CiYjNDM7CQkqdHdvc3RlcCA9IHRydWU7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVGhpcyBpcyBhIGdlbnVpbmUgb25lLXN0ZXAgU3luYyBmcmFtZS4gc2tiX3NoaW5mbygpLSZndDtkZXN0cnVjdG9yX2FyZwomIzQzOwkgKiBpcyBsYXRlciB1c2VkIHRvIHBhc3MgdGhlIG5ldGNfcG9ydCBwb2ludGVyIHRvCiYjNDM7CSAqIG5ldGNfb25lc3RlcF9za2JfZGVzdHJ1Y3RvcigpIGZvciBUWCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbi4KJiM0MzsJICogTVNHX1pFUk9DT1BZIGFsc28gdXNlcyBkZXN0cnVjdG9yX2FyZyAodmlhIHNrYl96Y29weV9pbml0KCkpIHRvCiYjNDM7CSAqIHRyYWNrIHVzZXItc3BhY2UgcGFnZSByZWZlcmVuY2VzLiBPdmVyd3JpdGluZyBpdCBpbiB0aGF0IGNhc2Ugd291bGQKJiM0MzsJICogbGVhayB0aGUgdWJ1Zl9pbmZvIHJlZmVyZW5jZSBhbmQgcHJldmVudCB1c2VyIHBhZ2VzIGZyb20gYmVpbmcKJiM0MzsJICogcmVsZWFzZWQuIFBUUCBhcHBsaWNhdGlvbnMgZG8gbm90IHVzZSBNU0dfWkVST0NPUFksIGJ1dCBndWFyZAomIzQzOwkgKiBhZ2FpbnN0IGl0IGRlZmVuc2l2ZWx5LgomIzQzOwkgKi8KJiM0MzsJaWYgKHNrYl96Y29weShza2IpKSB7CiYjNDM7CQlkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtJmd0O2RldiwKJiM0MzsJCQkJICAgICYjMzQ7UG9ydCAlZCBvbmUtc3RlcCBTeW5jIG5vdCBzdXBwb3J0ZWQgb24gemVyb2NvcHkgc2tiXG4mIzM0OywKJiM0MzsJCQkJICAgIG5wLSZndDtkcC0mZ3Q7aW5kZXgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBrdF90eXBlID0gcHRwX2NsYXNzICZhbXA7IFBUUF9DTEFTU19QTUFTSzsKJiM0MzsJaWYgKHBrdF90eXBlID09IFBUUF9DTEFTU19JUFY0IHx8IHBrdF90eXBlID09IFBUUF9DTEFTU19JUFY2KQomIzQzOwkJaXNfdWRwID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogQ2FjaGUgdGhlIHBhcnNpbmcgcmVzdWx0cyBzbyB0aGUgdGFnZ2VyIHhtaXQgcGF0aCBhbmQgdGhlIGRlZmVycmVkCiYjNDM7CSAqIHdvcmsgZG8gbm90IG5lZWQgdG8gcmUtcGFyc2UgdGhlIFBUUCBoZWFkZXIsIGFuZCBzbyB0aGF0CiYjNDM7CSAqIG5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAoKSBjYW4gZGVyaXZlIHRoZXNlIHBhcmFtZXRlcnMgZnJvbSB0aGUKJiM0MzsJICogc2tiLgomIzQzOwkgKi8KJiM0MzsJTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7Y29ycmVjdGlvbl9vZmZzZXQgPSBjb3JyZWN0aW9uX29mZnNldDsKJiM0MzsJTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7dGltZXN0YW1wX29mZnNldCA9IHRpbWVzdGFtcF9vZmZzZXQ7CiYjNDM7CU5FVENfU0tCX0NCKHNrYiktJmd0O2lzX3VkcCA9IGlzX3VkcDsKJiM0MzsJTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7cHRwX2ZsYWcgPSBORVRDX1BUUF9GTEFHX09ORVNURVA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbmV0Y19wb3J0X3R4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7CiYjNDM7CWJvb2wgdHdvc3RlcCA9IGZhbHNlOwomIzQzOwl1MzIgcHRwX2NsYXNzOwomIzQzOwomIzQzOwlORVRDX1NLQl9DQihza2IpLSZndDtwdHBfZmxhZyA9IDA7CiYjNDM7CXB0cF9jbGFzcyA9IHB0cF9jbGFzc2lmeV9yYXcoc2tiKTsKJiM0MzsJaWYgKHB0cF9jbGFzcyA9PSBQVFBfQ0xBU1NfTk9ORSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKG5wLSZndDtwdHBfdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTkVTVEVQX1NZTkMpCiYjNDM7CQluZXRjX3BvcnRfcHJlcGFyZV9vbmVzdGVwX3N5bmMobnAsIHNrYiwgcHRwX2NsYXNzLCAmYW1wO3R3b3N0ZXApOwomIzQzOwomIzQzOwlpZiAobnAtJmd0O3B0cF90eF90eXBlID09IEhXVFNUQU1QX1RYX09OIHx8IHR3b3N0ZXApIHsKJiM0MzsJCXN0cnVjdCBza19idWZmICpjbG9uZSA9IHNrYl9jbG9uZV9zayhza2IpOwomIzQzOwomIzQzOwkJaWYgKHVubGlrZWx5KCFjbG9uZSkpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwomIzQzOwkJaWYgKG5ldGNfcG9ydF90eHRzdGFtcF90d29zdGVwKG5wLCBjbG9uZSkpIHsKJiM0MzsJCQlrZnJlZV9za2IoY2xvbmUpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCU5FVENfU0tCX0NCKHNrYiktJmd0O2Nsb25lID0gY2xvbmU7CiYjNDM7CQlORVRDX1NLQl9DQihza2IpLSZndDtwdHBfZmxhZyA9IE5FVENfUFRQX0ZMQUdfVFdPU1RFUDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBuZXRjX3BvcnRfc2V0X29uZXN0ZXBfY29udHJvbChzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgYm9vbCB1ZHAsCiYjNDM7CQkJCQkgIGludCBvZmZzZXQpCiYjNDM7ewomIzQzOwl1MzIgdmFsOwomIzQzOwomIzQzOwl2YWwgPSBQTV9TSU5HTEVfU1RFUF9FTiB8IEZJRUxEX1BSRVAoUE1fU0lOR0xFX1NURVBfT0ZGU0VULCBvZmZzZXQpOwomIzQzOwlpZiAodWRwKQomIzQzOwkJdmFsIHw9IFBNX1NJTkdMRV9TVEVQX0NIOwomIzQzOwluZXRjX21hY19wb3J0X3dyKG5wLCBORVRDX1BNX1NJTkdMRV9TVEVQKDApLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBuZXRjX29uZXN0ZXBfc2tiX2Rlc3RydWN0b3Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjX3BvcnQgKm5wID0gc2tiX3NoaW5mbyhza2IpLSZndDtkZXN0cnVjdG9yX2FyZzsKJiM0MzsKJiM0MzsJLyogc2tiIGhhcyBiZWVuIHRyYW5zbWl0dGVkIGJ5IGhhcmR3YXJlLCBzY2hlZHVsZSB3b3JrIHRvIHNlbmQKJiM0MzsJICogdGhlIG5leHQgcXVldWVkIG9uZS1zdGVwIFN5bmMgcGFja2V0LgomIzQzOwkgKi8KJiM0MzsJc2NoZWR1bGVfd29yaygmYW1wO25wLSZndDtvbmVzdGVwX3dvcmspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKHN0cnVjdCBuZXRjX3BvcnQgKm5wLAomIzQzOwkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICAgICB1NjQgdHN0YW1wKQomIzQzO3sKJiM0MzsJdTE2IGNvcnJlY3Rpb25fb2Zmc2V0ID0gTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7Y29ycmVjdGlvbl9vZmZzZXQ7CiYjNDM7CXUxNiB0aW1lc3RhbXBfb2Zmc2V0ID0gTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7dGltZXN0YW1wX29mZnNldDsKJiM0MzsJYm9vbCBpc191ZHAgPSBORVRDX1NLQl9DQihza2IpLSZndDtpc191ZHA7CiYjNDM7CXU4ICpwa3RfaGRyID0gc2tiX21hY19oZWFkZXIoc2tiKTsKJiM0MzsJdTY0IHNlYzsKJiM0MzsJdTMyIG5zOwomIzQzOwomIzQzOwlORVRDX1NLQl9DQihza2IpLSZndDt0c3RhbXAgPSB0c3RhbXA7CiYjNDM7CU5FVENfU0tCX0NCKHNrYiktJmd0O3B0cF9mbGFnID0gTkVUQ19QVFBfRkxBR19PTkVTVEVQOwomIzQzOwomIzQzOwkvKiBVcGRhdGUgb3JpZ2luVGltZXN0YW1wIGZpZWxkIG9mIFN5bmMgcGFja2V0CiYjNDM7CSAqIC0gNDggYml0cyBzZWNvbmRzIGZpZWxkCiYjNDM7CSAqIC0gMzIgYml0cyBuYW5vc2Vjb25kcyBmaWVsZAomIzQzOwkgKi8KJiM0MzsJc2VjID0gZGl2X3U2NF9yZW0odHN0YW1wLCBOU0VDX1BFUl9TRUMsICZhbXA7bnMpOwomIzQzOwlwdXRfdW5hbGlnbmVkX2JlMTYoKHNlYyAmZ3Q7Jmd0OyAzMikgJmFtcDsgMHhmZmZmLCBwa3RfaGRyICYjNDM7IHRpbWVzdGFtcF9vZmZzZXQpOwomIzQzOwlwdXRfdW5hbGlnbmVkX2JlMzIoc2VjICZhbXA7IDB4ZmZmZmZmZmYsIHBrdF9oZHIgJiM0MzsgdGltZXN0YW1wX29mZnNldCAmIzQzOyAyKTsKJiM0MzsJcHV0X3VuYWxpZ25lZF9iZTMyKG5zLCBwa3RfaGRyICYjNDM7IHRpbWVzdGFtcF9vZmZzZXQgJiM0MzsgNik7CiYjNDM7CiYjNDM7CW5ldGNfcG9ydF9zZXRfb25lc3RlcF9jb250cm9sKG5wLCBpc191ZHAsIGNvcnJlY3Rpb25fb2Zmc2V0KTsKJiM0MzsKJiM0MzsJLyogT3JwaGFuIHRoZSBza2IgdG8gcmVsZWFzZSB0aGUgc29ja2V0IHNlbmQgYnVmZmVyIHF1b3RhIGltbWVkaWF0ZWx5LgomIzQzOwkgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBzb2NrX3dmcmVlKCkgb25seSB1cGRhdGVzIHNrX3dtZW1fYWxsb2MgYW5kCiYjNDM7CSAqIGRvZXMgbm90IHRvdWNoIHNrYi0mZ3Q7ZGF0YS4gQWZ0ZXIgc2tiX29ycGhhbigpLCB3ZSBpbnN0YWxsIG91ciBvd24KJiM0MzsJICogZGVzdHJ1Y3RvciBzbyB0aGF0IHdoZW4gdGhlIGNvbmR1aXQgZHJpdmVyIGZyZWVzIHRoZSBza2IgYWZ0ZXIgVFgKJiM0MzsJICogY29tcGxldGlvbiwgd2UgZ2V0IG5vdGlmaWVkIHRvIHNlbmQgdGhlIG5leHQgcXVldWVkIFN5bmMgcGFja2V0LgomIzQzOwkgKi8KJiM0MzsJc2tiX29ycGhhbihza2IpOwomIzQzOwlza2Jfc2hpbmZvKHNrYiktJmd0O2Rlc3RydWN0b3JfYXJnID0gbnA7CiYjNDM7CXNrYi0mZ3Q7ZGVzdHJ1Y3RvciA9IG5ldGNfb25lc3RlcF9za2JfZGVzdHJ1Y3RvcjsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBuZXRjX3BvcnRfb25lc3RlcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRjX3BvcnQgKm5wID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjX3BvcnQsCiYjNDM7CQkJCQkgICAgb25lc3RlcF93b3JrKTsKJiM0MzsJc3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtJmd0O3N3aXRjaF9wcml2OwomIzQzOwlzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXU2NCB0c3RhbXA7CiYjNDM7CiYjNDM7CS8qIERlcXVldWUgdGhlIG5leHQgcGVuZGluZyBza2Igd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgaW4tZmxpZ2h0IHNsb3QsCiYjNDM7CSAqIHNvIGEgbmV3bHkgYXJyaXZpbmcgb25lLXN0ZXAgU3luYyBjYW5ub3QganVtcCBhaGVhZCBvZiBpdC4gT25seQomIzQzOwkgKiByZWxlYXNlIHRoZSBzbG90IHdoZW4gdGhlIHF1ZXVlIGlzIGVtcHR5LiBUaGlzIGtlZXBzIG9yZGVyaW5nIGFuZAomIzQzOwkgKiBjbG9zZXMgdGhlIGVucXVldWUvd2FrZXVwIHJhY2UuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtucC0mZ3Q7cHRwX2xvY2spOwomIzQzOwlza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7bnAtJmd0O3NrYl9vbmVzdGVwX3F1ZXVlKTsKJiM0MzsJaWYgKCFza2IpIHsKJiM0MzsJCV9fY2xlYXJfYml0KE5FVENfRkxBR19PTkVTVEVQX0lOX1BST0dSRVNTLCAmYW1wO25wLSZndDtmbGFncyk7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO25wLSZndDtwdHBfbG9jayk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtucC0mZ3Q7cHRwX2xvY2spOwomIzQzOwomIzQzOwl0c3RhbXAgPSBuZXRjX3RpbWVyX2dldF9jdXJyZW50X3RpbWUocHJpdi0mZ3Q7dG1yX2Rldik7CiYjNDM7CWlmICghdHN0YW1wKSB7CiYjNDM7CQkvKiBUaGUgUFRQIHRpbWVyIGlzIG5vdCBhdmFpbGFibGUsIHNvIHRoZXJlIGlzIG5vIGNvcnJlY3QKJiM0MzsJCSAqIHRpbWVzdGFtcCB0byBwcm9ncmFtLiBEcm9wIHRoaXMgZnJhbWUgYW5kIHJlLWtpY2sgdG8KJiM0MzsJCSAqIHByb2Nlc3MgdGhlIHJlbWFpbmluZyBxdWV1ZWQgZnJhbWVzIChvciByZWxlYXNlIHRoZSBzbG90KS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKCkgaGFzIG5vdCBydW4gZm9yIHRoaXMgc2tiIHlldCwgc28KJiM0MzsJCSAqIG5ldGNfb25lc3RlcF9za2JfZGVzdHJ1Y3RvcigpIGlzIG5vdCBpbnN0YWxsZWQgb24gaXQuIEZyZWVpbmcKJiM0MzsJCSAqIGl0IHRoZXJlZm9yZSBkb2VzIG5vdCByZXNjaGVkdWxlIG9uZXN0ZXBfd29yaywgc28gdGhlIHdvcmsKJiM0MzsJCSAqIG11c3QgYmUgcmVzY2hlZHVsZWQgZXhwbGljaXRseSB0byBrZWVwIGRyYWluaW5nIHRoZSBxdWV1ZS4KJiM0MzsJCSAqLwomIzQzOwkJZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LSZndDtkZXYsCiYjNDM7CQkJCSAgICAmIzM0O1BvcnQgJWQgUFRQIHRpbWVyIHVuYXZhaWxhYmxlLCBkcm9wIFN5bmNcbiYjMzQ7LAomIzQzOwkJCQkgICAgbnAtJmd0O2RwLSZndDtpbmRleCk7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXNjaGVkdWxlX3dvcmsoJmFtcDtucC0mZ3Q7b25lc3RlcF93b3JrKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBSZXVzZSB0aGUgb2Zmc2V0cyBjYWNoZWQgYXQgZW5xdWV1ZSB0aW1lOyBvbmx5IHRoZSB0aW1lc3RhbXAgaXMKJiM0MzsJICogcmVhZCBmcmVzaCBzbyBpdCByZWZsZWN0cyB0aGUgYWN0dWFsIFRYIG1vbWVudC4KJiM0MzsJICovCiYjNDM7CW5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAobnAsIHNrYiwgdHN0YW1wKTsKJiM0MzsKJiM0MzsJLyogVGFnIGFuZCBoYW5kIHRoZSBmcmFtZSBkaXJlY3RseSB0byB0aGUgY29uZHVpdCB2aWEgdGhlIHRhZ2dlciwKJiM0MzsJICogYnlwYXNzaW5nIGRzYV91c2VyX3htaXQoKSBzbyB0aGUgVFggc3RhdHMgYXJlIG5vdCBjb3VudGVkIHR3aWNlLgomIzQzOwkgKi8KJiM0MzsJdGFnZ2VyX2RhdGEgPSBwcml2LSZndDtkcy0mZ3Q7dGFnZ2VyX2RhdGE7CiYjNDM7CXRhZ2dlcl9kYXRhLSZndDtvbmVzdGVwX3N5bmNfeG1pdChza2IsIG5wLSZndDtkcC0mZ3Q7dXNlcik7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBza19idWZmICpuZXRjX29uZXN0ZXBfc3luY19oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7CiYjNDM7CXN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwl1NjQgdHN0YW1wOwomIzQzOwomIzQzOwkvKiBTZXJpYWxpemUgb25lLXN0ZXAgU3luYyBwYWNrZXRzOiBvbmx5IG9uZSBjYW4gYmUgaW4tZmxpZ2h0IGF0IGEKJiM0MzsJICogdGltZSBiZWNhdXNlIHRoZSBTSU5HTEVfU1RFUCByZWdpc3RlciBpcyBzaGFyZWQgYW5kIG11c3QgbWF0Y2ggdGhlCiYjNDM7CSAqIHBhY2tldCBjdXJyZW50bHkgYmVpbmcgdHJhbnNtaXR0ZWQuIENsYWltIHRoZSBpbi1mbGlnaHQgc2xvdCB1bmRlcgomIzQzOwkgKiBwdHBfbG9jay4gSWYgYW5vdGhlciBvbmUtc3RlcCBTeW5jIGlzIGFscmVhZHkgaW4tZmxpZ2h0LCBxdWV1ZSB0aGlzCiYjNDM7CSAqIHNrYiBhbmQgcmV0dXJuIE5VTEw7IG93bmVyc2hpcCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcXVldWUsIHNvIG5vCiYjNDM7CSAqIGV4dHJhIHJlZmVyZW5jZSBpcyBuZWVkZWQgYW5kIG5ldGNfeG1pdCgpIHN0b3BzIHByb2Nlc3NpbmcgaXQuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtucC0mZ3Q7cHRwX2xvY2spOwomIzQzOwlpZiAodGVzdF9iaXQoTkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MsICZhbXA7bnAtJmd0O2ZsYWdzKSkgewomIzQzOwkJX19za2JfcXVldWVfdGFpbCgmYW1wO25wLSZndDtza2Jfb25lc3RlcF9xdWV1ZSwgc2tiKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bnAtJmd0O3B0cF9sb2NrKTsKJiM0MzsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXRzdGFtcCA9IG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZShwcml2LSZndDt0bXJfZGV2KTsKJiM0MzsJaWYgKCF0c3RhbXApIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bnAtJmd0O3B0cF9sb2NrKTsKJiM0MzsKJiM0MzsJCS8qIFRoaXMgaXMgYSB2YWxpZCBvbmUtc3RlcCBTeW5jIGZyYW1lLCBidXQgdGhlIFBUUCB0aW1lciBpcwomIzQzOwkJICogbm90IGF2YWlsYWJsZSwgc28gdGhlcmUgaXMgbm8gY29ycmVjdCB0aW1lc3RhbXAgdG8gcHJvZ3JhbS4KJiM0MzsJCSAqIERyb3AgdGhlIGZyYW1lIHJhdGhlciB0aGFuIHRyYW5zbWl0IGEgU3luYyB3aXRoIGEgYm9ndXMKJiM0MzsJCSAqIGNvcnJlY3Rpb24gZmllbGQuCiYjNDM7CQkgKi8KJiM0MzsJCWRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtQb3J0ICVkIFBUUCB0aW1lciB1bmF2YWlsYWJsZSwgZHJvcCBTeW5jXG4mIzM0OywKJiM0MzsJCQkJICAgIG5wLSZndDtkcC0mZ3Q7aW5kZXgpOwomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlfX3NldF9iaXQoTkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MsICZhbXA7bnAtJmd0O2ZsYWdzKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtucC0mZ3Q7cHRwX2xvY2spOwomIzQzOwomIzQzOwkvKiBXZSBvd24gdGhlIGluLWZsaWdodCBzbG90LiBQcm9ncmFtIHRoZSByZWdpc3RlciBhbmQgaW5zdGFsbCB0aGUKJiM0MzsJICogZGVzdHJ1Y3Rvci4KJiM0MzsJICovCiYjNDM7CW5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAobnAsIHNrYiwgdHN0YW1wKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNrYjsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaC5oIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2guaAppbmRleCAzMDVmMmE5MmUyZjlhLi4yOTZkZjFkNzIzMzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoLmgKQEAgLTU3LDYgJiM0Mzs1Nyw3IEBAIHN0cnVjdCBuZXRjX3N3aXRjaDsKIAogc3RydWN0IG5ldGNfc3dpdGNoX2luZm8gewogCXUzMiBudW1fcG9ydHM7CiYjNDM7CXUzMiB0bXJfZGV2Zm47CiAJdm9pZCAoKnBoeWxpbmtfZ2V0X2NhcHMpKGludCBwb3J0LCBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyk7CiB9OwogCkBAIC02Niw5ICYjNDM7NjcsMjMgQEAgc3RydWN0IG5ldGNfcG9ydF9jYXBzIHsKIAl1MzIgcHNldWRvX2xpbms6MTsKIH07CiAKJiM0MztlbnVtIG5ldGNfcHRwX3R5cGUgewomIzQzOwlORVRDX1BUUF9MMiwKJiM0MzsJTkVUQ19QVFBfTDRfSVBWNF9FVkVOVCwKJiM0MzsJTkVUQ19QVFBfTDRfSVBWNF9HRU5FUkFMLAomIzQzOwlORVRDX1BUUF9MNF9JUFY2X0VWRU5ULAomIzQzOwlORVRDX1BUUF9MNF9JUFY2X0dFTkVSQUwsCiYjNDM7CU5FVENfUFRQX01BWCwKJiM0Mzt9OwomIzQzOwogZW51bSBuZXRjX2hvc3RfcmVhc29uIHsKIAkvKiBTb2Z0d2FyZSBkZWZpbmVkIGhvc3QgcmVhc29ucyAqLwogCU5FVENfSFJfSE9TVF9GTE9PRCA9IDgsCiYjNDM7CU5FVENfSFJfUFRQX1RSQVAgICA9IDksCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIG5ldGNfcG9ydF9mbGFncyB7CiYjNDM7CU5FVENfRkxBR19PTkVTVEVQX0lOX1BST0dSRVNTID0gMCwKIH07CiAKIHN0cnVjdCBuZXRjX3BvcnQgewpAQCAtODQsNyAmIzQzOzk5LDE5IEBAIHN0cnVjdCBuZXRjX3BvcnQgewogCXUxNiB1YzoxOwogCXUxNiBtYzoxOwogCXUxNiBwdmlkOwotCXN0cnVjdCBpcGZ0X2VudHJ5X2RhdGEgKmhvc3RfZmxvb2Q7CiYjNDM7CXUzMiBpcGZ0X2hmX2VpZDsKJiM0MzsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJLyogU2VyaWFsaXplIFBUUCBvcGVyYXRpb25zICovCiYjNDM7CXNwaW5sb2NrX3QgcHRwX2xvY2s7CiYjNDM7CS8qIHNrYiBxdWV1ZSBmb3IgdHdvLXN0ZXAgdGltZXN0YW1wIGZyYW1lcyAqLwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl90eHRzdGFtcF9xdWV1ZTsKJiM0MzsJLyogc2tiIHF1ZXVlIGZvciBvbmUtc3RlcCBzeW5jIGZyYW1lcyAqLwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9vbmVzdGVwX3F1ZXVlOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgb25lc3RlcF93b3JrOwomIzQzOwlpbnQgcHRwX3R4X3R5cGU7CiYjNDM7CWludCBwdHBfcnhfZmlsdGVyOwomIzQzOwl1MzIgcHRwX2lwZnRfZWlkW05FVENfUFRQX01BWF07CiB9OwogCiBzdHJ1Y3QgbmV0Y19zd2l0Y2hfcmVncyB7CkBAIC0xMzksNiAmIzQzOzE2Niw3IEBAIHN0cnVjdCBuZXRjX3N3aXRjaCB7CiAJdTMyIG51bV9icDsKIAogCXN0cnVjdCBicHRfY2ZnZV9kYXRhICpicHRfbGlzdDsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnRtcl9kZXY7IC8qIFRoZSBQVFAgVGltZXIgUENJIGRldmljZSAqLwogfTsKIAogI2RlZmluZSBORVRDX1BSSVYoZHMpCQkJKChzdHJ1Y3QgbmV0Y19zd2l0Y2ggKikoKGRzKS0mZ3Q7cHJpdikpCkBAIC0xODcsNiAmIzQzOzIxNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRjX2RlbF92bGFuX2VudHJ5KHN0cnVjdCBuZXRjX3ZsYW5fZW50cnkgKmVudHJ5KQogfQogCiBpbnQgbmV0Y19zd2l0Y2hfcGxhdGZvcm1fcHJvYmUoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KTsKJiM0Mzt2b2lkIG5ldGNfbWFjX3BvcnRfd3Ioc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsIHUzMiB2YWwpOwogCiAvKiBldGh0b29sIEFQSXMgKi8KIHZvaWQgbmV0Y19wb3J0X2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LApAQCAtMjAzLDQgJiM0MzsyMzIsMjIgQEAgdm9pZCBuZXRjX3BvcnRfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJCSAgIHUzMiBzc2V0LCB1OCAqZGF0YSk7CiB2b2lkIG5ldGNfcG9ydF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1NjQgKmRhdGEpOwogCiYjNDM7LyogUFRQIEFQSXMgKi8KJiM0MztpbnQgbmV0Y19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0X2lkLAomIzQzOwkJICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyk7CiYjNDM7aW50IG5ldGNfcG9ydF9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydF9pZCwKJiM0MzsJCQkgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLAomIzQzOwkJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiYjNDM7aW50IG5ldGNfcG9ydF9od3RzdGFtcF9nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydF9pZCwKJiM0MzsJCQkgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnKTsKJiM0Mzt2b2lkIG5ldGNfdHdvc3RlcF90c3RhbXBfaGFuZGxlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCQkgdTggdHNfcmVxX2lkLCB1NjQgdHMpOwomIzQzO2Jvb2wgbmV0Y19wb3J0X3J4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHR5cGUpOwomIzQzO3ZvaWQgbmV0Y19wb3J0X3R4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnRfaWQsCiYjNDM7CQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7dm9pZCBuZXRjX3BvcnRfb25lc3RlcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7c3RydWN0IHNrX2J1ZmYgKm5ldGNfb25lc3RlcF9zeW5jX2hhbmRsZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoX2h3LmggYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oCmluZGV4IDE0MDRhZTQxYzdiY2IuLjM3ZDFkZDdlYzJjN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoX2h3LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2hfaHcuaApAQCAtMjAzLDYgJiM0MzsyMDMsMTEgQEAgZW51bSBuZXRjX3N0Z19zdGFnZSB7CiAjZGVmaW5lICAgU1NQXzEwTQkJCTEKICNkZWZpbmUgICBTU1BfMUcJCQkyCiAKJiM0MzsjZGVmaW5lIE5FVENfUE1fU0lOR0xFX1NURVAoYSkJCSgweDEwYzAgJiM0MzsgKGEpICogMHg0MDApCiYjNDM7I2RlZmluZSAgUE1fU0lOR0xFX1NURVBfQ0gJCUJJVCg2KQomIzQzOyNkZWZpbmUgIFBNX1NJTkdMRV9TVEVQX09GRlNFVAkJR0VOTUFTSygxNSwgNykKJiM0MzsjZGVmaW5lICBQTV9TSU5HTEVfU1RFUF9FTgkJQklUKDMxKQomIzQzOwogLyogUG9ydCBNQUMgMC8xIFJlY2VpdmUgRXRoZXJuZXQgT2N0ZXRzIENvdW50ZXIgKi8KICNkZWZpbmUgTkVUQ19QTV9SRU9DVChhKQkJKDB4MTEwMCAmIzQzOyAoYSkgKiAweDQwMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX25ldGMuYyBiL2RyaXZlcnMvcHRwL3B0cF9uZXRjLmMKaW5kZXggOTRlOTUyZWU2OTkwMi4uZjJiNzdiZDVhZjAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wdHAvcHRwX25ldGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3B0cC9wdHBfbmV0Yy5jCkBAIC0xMjcsNiAmIzQzOzEyNywxNyBAQCBzdHJ1Y3QgbmV0Y190aW1lciB7CiAKICNkZWZpbmUgbmV0Y190aW1lcl9yZChwLCBvKQkJbmV0Y19yZWFkKChwKS0mZ3Q7YmFzZSAmIzQzOyAobykpCiAjZGVmaW5lIG5ldGNfdGltZXJfd3IocCwgbywgdikJCW5ldGNfd3JpdGUoKHApLSZndDtiYXNlICYjNDM7IChvKSwgdikKJiM0MzsKJiM0MzsvKiBUaGUgNjQtYml0IHRpbWVyIHJlZ2lzdGVycyBjb25zaXN0IG9mIGEgbG93IChMKSBhbmQgaGlnaCAoSCkgcmVnaXN0ZXIgcGFpci4KJiM0MzsgKiBIYXJkd2FyZSByZXF1aXJlcyBhIHN0cmljdCBhY2Nlc3Mgb3JkZXI6IGZvciB3cml0ZXMsIFRNUl94eHhfTCBtdXN0IGJlCiYjNDM7ICogd3JpdHRlbiBmaXJzdCwgd2hpY2ggbGF0Y2hlcyB0aGUgdmFsdWUgaW50byBhIHNoYWRvdyByZWdpc3RlcjsgdGhlIHdyaXRlCiYjNDM7ICogdG8gVE1SX3h4eF9IIHRoZW4gYXRvbWljYWxseSB0cmFuc2ZlcnMgYm90aCBzaGFkb3cgcmVnaXN0ZXJzIGludG8gdGhlIGxpdmUKJiM0MzsgKiBjb3VudGVyLiBGb3IgcmVhZHMsIFRNUl94eHhfTCBtdXN0IGJlIHJlYWQgZmlyc3QgdG8gY2FwdHVyZSBhIGNvaGVyZW50CiYjNDM7ICogc25hcHNob3QuIGlvd3JpdGU2NF9sb19oaSgpIGFuZCBpb3JlYWQ2NF9sb19oaSgpIGVuZm9yY2UgdGhpcyBMLWJlZm9yZS1ICiYjNDM7ICogb3JkZXJpbmcuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBuZXRjX3RpbWVyX3JkNjQocCwgbykJCWlvcmVhZDY0X2xvX2hpKChwKS0mZ3Q7YmFzZSAmIzQzOyAobykpCiYjNDM7I2RlZmluZSBuZXRjX3RpbWVyX3dyNjQocCwgbywgdikJaW93cml0ZTY0X2xvX2hpKHYsIChwKS0mZ3Q7YmFzZSAmIzQzOyAobykpCiAjZGVmaW5lIHB0cF90b19uZXRjX3RpbWVyKHB0cCkJCWNvbnRhaW5lcl9vZigocHRwKSwgc3RydWN0IG5ldGNfdGltZXIsIGNhcHMpCiAKIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0aW1lcl9jbGtfc3JjW10gPSB7CkBAIC0xMzYsNjYgJiM0MzsxNDcsNDUgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHRpbWVyX2Nsa19zcmNbXSA9IHsKIAogc3RhdGljIHZvaWQgbmV0Y190aW1lcl9jbnRfd3JpdGUoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsIHU2NCBucykKIHsKLQl1MzIgdG1yX2NudF9oID0gdXBwZXJfMzJfYml0cyhucyk7Ci0JdTMyIHRtcl9jbnRfbCA9IGxvd2VyXzMyX2JpdHMobnMpOwotCi0JLyogV3JpdGVzIHRvIHRoZSBUTVJfQ05UX0wgcmVnaXN0ZXIgY29waWVzIHRoZSB3cml0dGVuIHZhbHVlCi0JICogaW50byB0aGUgc2hhZG93IFRNUl9DTlRfTCByZWdpc3Rlci4gV3JpdGVzIHRvIHRoZSBUTVJfQ05UX0gKLQkgKiByZWdpc3RlciBjb3BpZXMgdGhlIHZhbHVlcyB3cml0dGVuIGludG8gdGhlIHNoYWRvdyBUTVJfQ05UX0gKLQkgKiByZWdpc3Rlci4gQ29udGVudHMgb2YgdGhlIHNoYWRvdyByZWdpc3RlcnMgYXJlIGNvcGllZCBpbnRvCi0JICogdGhlIFRNUl9DTlRfTCBhbmQgVE1SX0NOVF9IIHJlZ2lzdGVycyBmb2xsb3dpbmcgYSB3cml0ZSBpbnRvCi0JICogdGhlIFRNUl9DTlRfSCByZWdpc3Rlci4gU28gdGhlIHVzZXIgbXVzdCB3cml0ZXMgdG8gVE1SX0NOVF9MCi0JICogcmVnaXN0ZXIgZmlyc3QuIE90aGVyIEgvTCByZWdpc3RlcnMgc2hvdWxkIGhhdmUgdGhlIHNhbWUKLQkgKiBiZWhhdmlvci4KLQkgKi8KLQluZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX0NOVF9MLCB0bXJfY250X2wpOwotCW5ldGNfdGltZXJfd3IocHJpdiwgTkVUQ19UTVJfQ05UX0gsIHRtcl9jbnRfaCk7CiYjNDM7CW5ldGNfdGltZXJfd3I2NChwcml2LCBORVRDX1RNUl9DTlRfTCwgbnMpOwogfQogCiBzdGF0aWMgdTY0IG5ldGNfdGltZXJfb2Zmc2V0X3JlYWQoc3RydWN0IG5ldGNfdGltZXIgKnByaXYpCiB7Ci0JdTMyIHRtcl9vZmZfbCwgdG1yX29mZl9oOwotCXU2NCBvZmZzZXQ7Ci0KLQl0bXJfb2ZmX2wgPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX09GRl9MKTsKLQl0bXJfb2ZmX2ggPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX09GRl9IKTsKLQlvZmZzZXQgPSAoKCh1NjQpdG1yX29mZl9oKSAmbHQ7Jmx0OyAzMikgfCB0bXJfb2ZmX2w7Ci0KLQlyZXR1cm4gb2Zmc2V0OwomIzQzOwlyZXR1cm4gbmV0Y190aW1lcl9yZDY0KHByaXYsIE5FVENfVE1SX09GRl9MKTsKIH0KIAogc3RhdGljIHZvaWQgbmV0Y190aW1lcl9vZmZzZXRfd3JpdGUoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsIHU2NCBvZmZzZXQpCiB7Ci0JdTMyIHRtcl9vZmZfaCA9IHVwcGVyXzMyX2JpdHMob2Zmc2V0KTsKLQl1MzIgdG1yX29mZl9sID0gbG93ZXJfMzJfYml0cyhvZmZzZXQpOwotCi0JbmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9PRkZfTCwgdG1yX29mZl9sKTsKLQluZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX09GRl9ILCB0bXJfb2ZmX2gpOwomIzQzOwluZXRjX3RpbWVyX3dyNjQocHJpdiwgTkVUQ19UTVJfT0ZGX0wsIG9mZnNldCk7CiB9CiAKIHN0YXRpYyB1NjQgbmV0Y190aW1lcl9jdXJfdGltZV9yZWFkKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2KQogewotCXUzMiB0aW1lX2gsIHRpbWVfbDsKLQl1NjQgbnM7CiYjNDM7CXJldHVybiBuZXRjX3RpbWVyX3JkNjQocHJpdiwgTkVUQ19UTVJfQ1VSX1RJTUVfTCk7CiYjNDM7fQogCi0JLyogVGhlIHVzZXIgc2hvdWxkIHJlYWQgTkVUQ19UTVJfQ1VSX1RJTUVfTCBmaXJzdCB0bwotCSAqIGdldCBjb3JyZWN0IGN1cnJlbnQgdGltZS4KLQkgKi8KLQl0aW1lX2wgPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0NVUl9USU1FX0wpOwotCXRpbWVfaCA9IG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfQ1VSX1RJTUVfSCk7Ci0JbnMgPSAodTY0KXRpbWVfaCAmbHQ7Jmx0OyAzMiB8IHRpbWVfbDsKJiM0Mzt1NjQgbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGNfdGltZXIgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXU2NCBjdXJfdGltZTsKIAotCXJldHVybiBuczsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cHJpdi0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwljdXJfdGltZSA9IG5ldGNfdGltZXJfY3VyX3RpbWVfcmVhZChwcml2KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGN1cl90aW1lOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZSk7CiAKIHN0YXRpYyB2b2lkIG5ldGNfdGltZXJfYWxhcm1fd3JpdGUoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsCiAJCQkJICAgdTY0IGFsYXJtLCBpbnQgaW5kZXgpCiB7Ci0JdTMyIGFsYXJtX2ggPSB1cHBlcl8zMl9iaXRzKGFsYXJtKTsKLQl1MzIgYWxhcm1fbCA9IGxvd2VyXzMyX2JpdHMoYWxhcm0pOwotCi0JbmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9BTEFSTV9MKGluZGV4KSwgYWxhcm1fbCk7Ci0JbmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9BTEFSTV9IKGluZGV4KSwgYWxhcm1faCk7CiYjNDM7CW5ldGNfdGltZXJfd3I2NChwcml2LCBORVRDX1RNUl9BTEFSTV9MKGluZGV4KSwgYWxhcm0pOwogfQogCiBzdGF0aWMgdTMyIG5ldGNfdGltZXJfZ2V0X2ludGVncmFsX3BlcmlvZChzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdikKQEAgLTQ5NywyMiAmIzQzOzQ4NywxOSBAQCBzdGF0aWMgdm9pZCBuZXRjX3RpbWVyX2hhbmRsZV9ldHRzX2V2ZW50KHN0cnVjdCBuZXRjX3RpbWVyICpwcml2LCBpbnQgaW5kZXgsCiAJCQkJCSBib29sIHVwZGF0ZV9ldmVudCkKIHsKIAlzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50IGV2ZW50OwotCXUzMiBldHRzX2wgPSAwLCBldHRzX2ggPSAwOwomIzQzOwl1NjQgZXR0cyA9IDA7CiAKLQl3aGlsZSAobmV0Y190aW1lcl9yZChwcml2LCBORVRDX1RNUl9TVEFUKSAmYW1wOyBUTVJfU1RBVF9FVFNfVkxEKGluZGV4KSkgewotCQlldHRzX2wgPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0VUVFNfTChpbmRleCkpOwotCQlldHRzX2ggPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0VUVFNfSChpbmRleCkpOwotCX0KJiM0MzsJd2hpbGUgKG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfU1RBVCkgJmFtcDsgVE1SX1NUQVRfRVRTX1ZMRChpbmRleCkpCiYjNDM7CQlldHRzID0gbmV0Y190aW1lcl9yZDY0KHByaXYsIE5FVENfVE1SX0VUVFNfTChpbmRleCkpOwogCiAJLyogSW52YWxpZCB0aW1lIHN0YW1wICovCi0JaWYgKCFldHRzX2wgJmFtcDsmYW1wOyAhZXR0c19oKQomIzQzOwlpZiAoIWV0dHMpCiAJCXJldHVybjsKIAogCWlmICh1cGRhdGVfZXZlbnQpIHsKIAkJZXZlbnQudHlwZSA9IFBUUF9DTE9DS19FWFRUUzsKIAkJZXZlbnQuaW5kZXggPSBpbmRleDsKLQkJZXZlbnQudGltZXN0YW1wID0gKHU2NClldHRzX2ggJmx0OyZsdDsgMzI7Ci0JCWV2ZW50LnRpbWVzdGFtcCB8PSBldHRzX2w7CiYjNDM7CQlldmVudC50aW1lc3RhbXAgPSBldHRzOwogCQlwdHBfY2xvY2tfZXZlbnQocHJpdi0mZ3Q7Y2xvY2ssICZhbXA7ZXZlbnQpOwogCX0KIH0KQEAgLTgwMiw3ICYjNDM7Nzg5LDYgQEAgc3RhdGljIGludCBuZXRjX3RpbWVyX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcGNpZV9mbHIocGRldik7CiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCAmIzM0O0ZhaWxlZCB0byBlbmFibGUgZGV2aWNlXG4mIzM0Oyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RzYS90YWdfbmV0Yy5oIGIvaW5jbHVkZS9saW51eC9kc2EvdGFnX25ldGMuaAppbmRleCBmZTk2NDcyMmU1YjAzLi4yMjljNzBjYjdhOGFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RzYS90YWdfbmV0Yy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZHNhL3RhZ19uZXRjLmgKQEAgLTEwLDUgJiM0MzsxMCw0NyBAQAogI2luY2x1ZGUgJmx0O25ldC9kc2EuaCZndDsKIAogI2RlZmluZSBORVRDX1RBR19NQVhfTEVOCQkJMTQKJiM0MzsjZGVmaW5lIE5FVENfVEFHX1RTX1JFUV9JRAkJCUdFTk1BU0soMywgMCkKJiM0MzsjZGVmaW5lIE5FVENfUFRQX0ZMQUdfT05FU1RFUAkJCUJJVCgwKQomIzQzOyNkZWZpbmUgTkVUQ19QVFBfRkxBR19UV09TVEVQCQkJQklUKDEpCiYjNDM7CiYjNDM7c3RydWN0IG5ldGNfc2tiX2NiIHsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKmNsb25lOwomIzQzOwl1bnNpZ25lZCBsb25nIHB0cF90eF90aW1lOwomIzQzOwl1NjQgdHN0YW1wOwomIzQzOwl1OCBwdHBfZmxhZzsKJiM0MzsJdTggdHNfcmVxX2lkOwomIzQzOwkvKiBPbmUtc3RlcCBTeW5jIHBhcnNpbmcgcmVzdWx0cywgY29tcHV0ZWQgaW4gbmV0Y19wb3J0X3R4dHN0YW1wKCkKJiM0MzsJICogYW5kIHJldXNlZCBpbiB0aGUgdGFnZ2VyIHhtaXQgcGF0aCBhbmQgdGhlIGRlZmVycmVkIHdvcmssIHRvIGF2b2lkCiYjNDM7CSAqIHJlLXBhcnNpbmcgdGhlIFBUUCBoZWFkZXIuIFZhbGlkIG9ubHkgd2hpbGUKJiM0MzsJICogcHRwX2ZsYWcgPT0gTkVUQ19QVFBfRkxBR19PTkVTVEVQLgomIzQzOwkgKi8KJiM0MzsJdTE2IGNvcnJlY3Rpb25fb2Zmc2V0OwomIzQzOwl1MTYgdGltZXN0YW1wX29mZnNldDsKJiM0MzsJYm9vbCBpc191ZHA7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIE5FVENfU0tCX0NCKHNrYikJKChzdHJ1Y3QgbmV0Y19za2JfY2IgKikoKHNrYiktJmd0O2NiKSkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAtIE5FVEMgdGFnZ2VyL3N3aXRjaC1kcml2ZXIgc2hhcmVkIG9wZXJhdGlvbnMKJiM0MzsgKiBAdHdvc3RlcF90c3RhbXBfaGFuZGxlcjogQ2FsbGVkIGJ5IHRoZSB0YWdnZXIgd2hlbiBhIHR3by1zdGVwIHRyYW5zbWl0CiYjNDM7ICoJdGltZXN0YW1wIHJlc3BvbnNlIGlzIHJlY2VpdmVkLCB0byBkZWxpdmVyIHRoZSB0aW1lc3RhbXAgdG8gdGhlCiYjNDM7ICoJc3dpdGNoIGRyaXZlci4KJiM0MzsgKiBAb25lc3RlcF9zeW5jX2hhbmRsZXI6IENhbGxlZCBmcm9tIHRoZSB0YWdnZXIgeG1pdCBwYXRoIGZvciBhIG9uZS1zdGVwIFN5bmMKJiM0MzsgKglmcmFtZS4gUmV0dXJucyB0aGUgc2tiIGlmIGl0IGNhbiBiZSB0cmFuc21pdHRlZCBpbW1lZGlhdGVseSAodGhlCiYjNDM7ICoJaW4tZmxpZ2h0IHNsb3QgaGFzIGJlZW4gY2xhaW1lZCBhbmQgUE1fU0lOR0xFX1NURVAgcHJvZ3JhbW1lZCksIG9yIE5VTEwKJiM0MzsgKglpZiB0aGUgZnJhbWUgaGFzIGJlZW4gcXVldWVkIGZvciBkZWZlcnJlZCB0cmFuc21pc3Npb24gb3IgZHJvcHBlZC4KJiM0MzsgKiBAb25lc3RlcF9zeW5jX3htaXQ6IENhbGxlZCBieSB0aGUgc3dpdGNoIGRyaXZlciB0byB0cmFuc21pdCBhIGRlZmVycmVkCiYjNDM7ICoJb25lLXN0ZXAgU3luYyBmcmFtZSBkaXJlY3RseSB0byB0aGUgY29uZHVpdCwgYnlwYXNzaW5nIGRzYV91c2VyX3htaXQoKS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSB7CiYjNDM7CXZvaWQgKCp0d29zdGVwX3RzdGFtcF9oYW5kbGVyKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgICAgdTggdHNfcmVxX2lkLCB1NjQgdHMpOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqKCpvbmVzdGVwX3N5bmNfaGFuZGxlcikoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCQkJCWludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKJiM0MzsJbmV0ZGV2X3R4X3QgKCpvbmVzdGVwX3N5bmNfeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiYjNDM7fTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzbC9uZXRjX2dsb2JhbC5oIGIvaW5jbHVkZS9saW51eC9mc2wvbmV0Y19nbG9iYWwuaAppbmRleCA1YjhmZjUyOGQzNjk5Li45MTQ0MWNiMzViYzI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzbC9uZXRjX2dsb2JhbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnNsL25ldGNfZ2xvYmFsLmgKQEAgLTIyLDQgJiM0MzsyMiwxMyBAQCBzdGF0aWMgaW5saW5lIHU2NCBuZXRjX3JlYWQ2NCh2b2lkIF9faW9tZW0gKnJlZykKIAlyZXR1cm4gaW9yZWFkNjQocmVnKTsKIH0KIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19QVFBfTkVUQ19WNF9USU1FUikKJiM0Mzt1NjQgbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHN0cnVjdCBwY2lfZGV2ICp0aW1lcl9kZXYpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB1NjQgbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHN0cnVjdCBwY2lfZGV2ICp0aW1lcl9kZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9kc2EvdGFnX25ldGMuYyBiL25ldC9kc2EvdGFnX25ldGMuYwppbmRleCBkZjcyYTYxNzk2YWQ1Li45NGNjYTIwZmZjZGFkIDEwMDY0NAotLS0gYS9uZXQvZHNhL3RhZ19uZXRjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RzYS90YWdfbmV0Yy5jCkBAIC0xNiw2ICYjNDM7MTYsMTAgQEAKICNkZWZpbmUgTkVUQ19UQUdfVE9fUE9SVAkJMQogLyogU3ViVHlwZTA6IE5vIHJlcXVlc3QgdG8gcGVyZm9ybSB0aW1lc3RhbXBpbmcgKi8KICNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTAJCTAKJiM0MzsvKiBTdWJUeXBlMTogUmVxdWVzdCB0byBwZXJmb3JtIG9uZS1zdGVwIHRpbWVzdGFtcGluZyAqLwomIzQzOyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTEJCTEKJiM0MzsvKiBTdWJUeXBlMjogUmVxdWVzdCB0byBwZXJmb3JtIHR3by1zdGVwIHRpbWVzdGFtcGluZyAqLwomIzQzOyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTIJCTIKIAogLyogVG9fSG9zdCBOWFAgc3dpdGNoIHRhZyAqLwogI2RlZmluZSBORVRDX1RBR19UT19IT1NUCQkyCkBAIC0yOSw2ICYjNDM7MzMsOCBAQAogLyogTkVUQyBzd2l0Y2ggdGFnIGxlbmd0aHMgKi8KICNkZWZpbmUgTkVUQ19UQUdfRk9SV0FSRF9MRU4JCTYKICNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTBfTEVOCTYKJiM0MzsjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUxX0xFTgkxMAomIzQzOyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTJfTEVOCTYKICNkZWZpbmUgTkVUQ19UQUdfVEhfU1VCVFlQRTBfTEVOCTYKICNkZWZpbmUgTkVUQ19UQUdfVEhfU1VCVFlQRTFfTEVOCTE0CiAjZGVmaW5lIE5FVENfVEFHX1RIX1NVQlRZUEUyX0xFTgkxNApAQCAtNDAsNiAmIzQzOzQ2LDcgQEAKICNkZWZpbmUgTkVUQ19UQUdfSVBWCQkJR0VOTUFTSyg0LCAyKQogI2RlZmluZSBORVRDX1RBR19TV0lUQ0gJCQlHRU5NQVNLKDIsIDApCiAjZGVmaW5lIE5FVENfVEFHX1BPUlQJCQlHRU5NQVNLKDcsIDMpCiYjNDM7I2RlZmluZSBORVRDX1RBR19USU1FU1RBTVAJCUdFTk1BU0soMjksIDApCiAKIHN0cnVjdCBuZXRjX3RhZ19jbW4gewogCV9fYmUxNiB0cGlkOwpAQCAtNDgsNiAmIzQzOzU1LDI5IEBAIHN0cnVjdCBuZXRjX3RhZ19jbW4gewogCXU4IHN3aXRjaF9wb3J0OwogfSBfX3BhY2tlZDsKIAomIzQzO3N0cnVjdCBuZXRjX3RhZ190cF9zdWJ0eXBlMSB7CiYjNDM7CXN0cnVjdCBuZXRjX3RhZ19jbW4gY21uOwomIzQzOwl1OCByZXN2OwomIzQzOwlfX2JlMzIgdGltZXN0YW1wOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7c3RydWN0IG5ldGNfdGFnX3RwX3N1YnR5cGUyIHsKJiM0MzsJc3RydWN0IG5ldGNfdGFnX2NtbiBjbW47CiYjNDM7CXU4IHRzX3JlcV9pZDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzO3N0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMSB7CiYjNDM7CXN0cnVjdCBuZXRjX3RhZ19jbW4gY21uOwomIzQzOwl1OCBob3N0X3JlYXNvbjsKJiM0MzsJX19iZTY0IHRpbWVzdGFtcDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzO3N0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMiB7CiYjNDM7CXN0cnVjdCBuZXRjX3RhZ19jbW4gY21uOwomIzQzOwl1OCBocl90c3JlcV9pZDsKJiM0MzsJX19iZTY0IHRpbWVzdGFtcDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwogc3RhdGljIHZvaWQgbmV0Y19maWxsX2NvbW1vbl90YWcoc3RydWN0IG5ldGNfdGFnX2NtbiAqdGFnLCB1OCB0eXBlLAogCQkJCSB1OCBzdWJ0eXBlLCB1OCBzd19pZCwgdTggcG9ydCwgdTggaXB2KQogewpAQCAtOTcsMTUgJiM0MzsxMjcsMTIwIEBAIHN0YXRpYyB2b2lkIG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlORVRDX1RBR19UUF9TVUJUWVBFMF9MRU4pOwogfQogCi0vKiBDdXJyZW50bHkgb25seSBzdXBwb3J0IFRvX1BvcnQgdGFnLCBzdWJ0eXBlIDAgKi8KJiM0MztzdGF0aWMgdm9pZCBuZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUxKHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJdTMyIHRzID0gRklFTERfUFJFUChORVRDX1RBR19USU1FU1RBTVAsIE5FVENfU0tCX0NCKHNrYiktJmd0O3RzdGFtcCk7CiYjNDM7CXN0cnVjdCBuZXRjX3RhZ190cF9zdWJ0eXBlMSAqdGFnOwomIzQzOwomIzQzOwl0YWcgPSBuZXRjX2ZpbGxfY29tbW9uX3RwX3RhZyhza2IsIG5kZXYsIE5FVENfVEFHX1RQX1NVQlRZUEUxLAomIzQzOwkJCQkgICAgICBORVRDX1RBR19UUF9TVUJUWVBFMV9MRU4pOwomIzQzOwl0YWctJmd0O3RpbWVzdGFtcCA9IGh0b25sKHRzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpjbG9uZSA9IE5FVENfU0tCX0NCKHNrYiktJmd0O2Nsb25lOwomIzQzOwl1OCB0c19yZXFfaWQgPSBORVRDX1NLQl9DQihjbG9uZSktJmd0O3RzX3JlcV9pZDsKJiM0MzsJc3RydWN0IG5ldGNfdGFnX3RwX3N1YnR5cGUyICp0YWc7CiYjNDM7CiYjNDM7CXRhZyA9IG5ldGNfZmlsbF9jb21tb25fdHBfdGFnKHNrYiwgbmRldiwgTkVUQ19UQUdfVFBfU1VCVFlQRTIsCiYjNDM7CQkJCSAgICAgIE5FVENfVEFHX1RQX1NVQlRZUEUyX0xFTik7CiYjNDM7CXRhZy0mZ3Q7dHNfcmVxX2lkID0gRklFTERfUFJFUChORVRDX1RBR19UU19SRVFfSUQsIHRzX3JlcV9pZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBuZXRkZXZfdHhfdCBuZXRjX29uZXN0ZXBfc3luY194bWl0KHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwkvKiBUaGlzIGRlZmVycmVkIG9uZS1zdGVwIFN5bmMgZnJhbWUgYWxyZWFkeSB3ZW50IHRocm91Z2gKJiM0MzsJICogZHNhX3VzZXJfeG1pdCgpJiMzOTtzIHNrYl9lbnN1cmVfd3JpdGFibGVfaGVhZF90YWlsKCkgYW5kIGV0aF9za2JfcGFkKCkKJiM0MzsJICogYmVmb3JlIGl0IHdhcyBxdWV1ZWQgaW4gbmV0Y194bWl0KCksIGFuZCBub3RoaW5nIGhhcyBjbG9uZWQgaXQgb3IKJiM0MzsJICogc2hydW5rIGl0cyBoZWFkL3RhaWwgcm9vbSBzaW5jZS4gU28gdGhlIGhlYWQvdGFpbCByb29tIGlzIHN0aWxsCiYjNDM7CSAqIGd1YXJhbnRlZWQgYW5kIHRoZSBza2IgaXMgc3RpbGwgd3JpdGFibGU7IG9ubHkgdGhlIHRhZyBuZWVkcyB0byBiZQomIzQzOwkgKiBwdXNoZWQgYmVmb3JlIGhhbmRpbmcgaXQgZGlyZWN0bHkgdG8gdGhlIGNvbmR1aXQsIGJ5cGFzc2luZwomIzQzOwkgKiBkc2FfdXNlcl94bWl0KCkgc28gdGhhdCBkZXZfc3dfbmV0c3RhdHNfdHhfYWRkKCkgaXMgbm90IGludm9rZWQgYQomIzQzOwkgKiBzZWNvbmQgdGltZSBmb3IgdGhlIHNhbWUgZnJhbWUuCiYjNDM7CSAqLwomIzQzOwluZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUxKHNrYiwgZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRzYV9lbnF1ZXVlX3NrYihza2IsIGRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19vbmVzdGVwX3N5bmNfcHJvY2VzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdXNlcl90b19wb3J0KG5kZXYpOwomIzQzOwlzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7CiYjNDM7CXN0cnVjdCBza19idWZmICpuc2tiOwomIzQzOwomIzQzOwl0YWdnZXJfZGF0YSA9IGRwLSZndDtkcy0mZ3Q7dGFnZ2VyX2RhdGE7CiYjNDM7CWlmICh1bmxpa2VseSghdGFnZ2VyX2RhdGEtJmd0O29uZXN0ZXBfc3luY19oYW5kbGVyKSkgewomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBEZWNpZGUsIHVuZGVyIHB0cF9sb2NrLCB3aGV0aGVyIHRoaXMgb25lLXN0ZXAgU3luYyBjYW4gYmUgc2VudAomIzQzOwkgKiBub3cgb3IgbXVzdCBiZSBkZWZlcnJlZC4gUmV0dXJucyB0aGUgc2tiICh3aXRoIHRoZSBpbi1mbGlnaHQKJiM0MzsJICogc2xvdCBjbGFpbWVkIGFuZCBQTV9TSU5HTEVfU1RFUCBhbHJlYWR5IHByb2dyYW1tZWQpIGZvcgomIzQzOwkgKiBpbW1lZGlhdGUgdHJhbnNtaXNzaW9uLCBvciBOVUxMIGlmIGl0IHdhcyBxdWV1ZWQgZm9yIGRlZmVycmVkCiYjNDM7CSAqIHRyYW5zbWlzc2lvbiBvciBkcm9wcGVkLgomIzQzOwkgKi8KJiM0MzsJbnNrYiA9IHRhZ2dlcl9kYXRhLSZndDtvbmVzdGVwX3N5bmNfaGFuZGxlcihkcC0mZ3Q7ZHMsIGRwLSZndDtpbmRleCwgc2tiKTsKJiM0MzsJaWYgKHVubGlrZWx5KCFuc2tiKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gbnNrYjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKLQluZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUwKHNrYiwgbmRldik7CiYjNDM7CXU4IHB0cF9mbGFnID0gTkVUQ19TS0JfQ0Ioc2tiKS0mZ3Q7cHRwX2ZsYWc7CiYjNDM7CiYjNDM7CS8qIEZhc3QgcGF0aDogdGhlIG92ZXJ3aGVsbWluZyBtYWpvcml0eSBvZiBmcmFtZXMgYXJlIG5vdCBQVFAgZnJhbWVzICovCiYjNDM7CWlmIChsaWtlbHkoIXB0cF9mbGFnKSkgewomIzQzOwkJbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMChza2IsIG5kZXYpOwomIzQzOwkJcmV0dXJuIHNrYjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHRwX2ZsYWcgPT0gTkVUQ19QVFBfRkxBR19PTkVTVEVQKSB7CiYjNDM7CQlpZiAoIW5ldGNfb25lc3RlcF9zeW5jX3Byb2Nlc3Moc2tiLCBuZGV2KSkKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJCW5ldGNfZmlsbF90cF90YWdfc3VidHlwZTEoc2tiLCBuZGV2KTsKJiM0MzsJfSBlbHNlIGlmIChwdHBfZmxhZyA9PSBORVRDX1BUUF9GTEFHX1RXT1NURVApIHsKJiM0MzsJCW5ldGNfZmlsbF90cF90YWdfc3VidHlwZTIoc2tiLCBuZGV2KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KIAogCXJldHVybiBza2I7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZXRjX3J4X3RzdGFtcF9wcm9jZXNzKHN0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMSAqdGFnLAomIzQzOwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJdTY0IHRzID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZhbXA7dGFnLSZndDt0aW1lc3RhbXApOwomIzQzOwomIzQzOwlORVRDX1NLQl9DQihza2IpLSZndDt0c3RhbXAgPSB0czsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmV0Y190d29zdGVwX3RzdGFtcF9wcm9jZXNzKHN0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMiAqdGFnLAomIzQzOwkJCQkJc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQomIzQzO3sKJiM0MzsJdTggdHNfcmVxX2lkID0gRklFTERfR0VUKE5FVENfVEFHX1RTX1JFUV9JRCwgdGFnLSZndDtocl90c3JlcV9pZCk7CiYjNDM7CWludCBwb3J0ID0gRklFTERfR0VUKE5FVENfVEFHX1BPUlQsIHRhZy0mZ3Q7Y21uLnN3aXRjaF9wb3J0KTsKJiM0MzsJc3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEgKnRhZ2dlcl9kYXRhID0gZHMtJmd0O3RhZ2dlcl9kYXRhOwomIzQzOwl1NjQgdHMgPSBnZXRfdW5hbGlnbmVkX2JlNjQoJmFtcDt0YWctJmd0O3RpbWVzdGFtcCk7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghdGFnZ2VyX2RhdGEtJmd0O3R3b3N0ZXBfdHN0YW1wX2hhbmRsZXIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0YWdnZXJfZGF0YS0mZ3Q7dHdvc3RlcF90c3RhbXBfaGFuZGxlcihkcywgcG9ydCwgdHNfcmVxX2lkLCB0cyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuZXRjX2dldF9yeF90YWdfbGVuKGludCB0eXBlLCBpbnQgc3VidHlwZSkKIHsKIAkvKiBPbmx5IE5FVENfVEFHX1RPX0hPU1QgYW5kIE5FVENfVEFHX0ZPUldBUkQgYXJlIGV4cGVjdGVkIGluIFJYLApAQCAtMTI2LDE0ICYjNDM7MjYxLDE3IEBAIHN0YXRpYyBpbnQgbmV0Y19nZXRfcnhfdGFnX2xlbihpbnQgdHlwZSwgaW50IHN1YnR5cGUpCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHAgPSBuZGV2LSZndDtkc2FfcHRyOwogCXN0cnVjdCBuZXRjX3RhZ19jbW4gKnRhZ19jbW47CiAJaW50IHRhZ19sZW4sIHN3X2lkLCBwb3J0OwogCWludCB0eXBlLCBzdWJ0eXBlOwomIzQzOwl2b2lkICp0YWc7CiAKLQlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBORVRDX1RBR19NQVhfTEVOKSkpCiYjNDM7CWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIE5FVENfVEFHX01BWF9MRU4gLSAyKSkpCiAJCWdvdG8gZXJyX2ZyZWVfc2tiOwogCi0JdGFnX2NtbiA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7CiYjNDM7CXRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7CiYjNDM7CXRhZ19jbW4gPSB0YWc7CiAJaWYgKG50b2hzKHRhZ19jbW4tJmd0O3RwaWQpICE9IEVUSF9QX05YUF9ORVRDKSB7CiAJCWRldl93YXJuX3JhdGVsaW1pdGVkKCZhbXA7bmRldi0mZ3Q7ZGV2LCAmIzM0O1Vua25vd24gVFBJRCAweCUwNHhcbiYjMzQ7LAogCQkJCSAgICAgbnRvaHModGFnX2Ntbi0mZ3Q7dHBpZCkpOwpAQCAtMTYxLDEyICYjNDM7Mjk5LDI4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAodHlwZSA9PSBORVRDX1RBR19GT1JXQVJEKSB7CiAJCWRzYV9kZWZhdWx0X29mZmxvYWRfZndkX21hcmsoc2tiKTsKIAl9IGVsc2UgaWYgKHR5cGUgPT0gTkVUQ19UQUdfVE9fSE9TVCkgewotCQkvKiBDdXJyZW50bHkgb25seSBzdWJ0eXBlMCBzdXBwb3J0ZWQgKi8KLQkJaWYgKHN1YnR5cGUgIT0gTkVUQ19UQUdfVEhfU1VCVFlQRTApCiYjNDM7CQlzd2l0Y2ggKHN1YnR5cGUpIHsKJiM0MzsJCWNhc2UgTkVUQ19UQUdfVEhfU1VCVFlQRTA6CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIE5FVENfVEFHX1RIX1NVQlRZUEUxOgomIzQzOwkJCW5ldGNfcnhfdHN0YW1wX3Byb2Nlc3ModGFnLCBza2IpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBORVRDX1RBR19USF9TVUJUWVBFMjoKJiM0MzsJCQkvKiBUaGlzIHNrYiBpcyBhIGhhcmR3YXJlLWdlbmVyYXRlZCByZXNwb25zZSB0byBhCiYjNDM7CQkJICogdHdvLXN0ZXAgdHJhbnNtaXQgdGltZXN0YW1wIHJlcXVlc3QuIFRoZSB0YWcKJiM0MzsJCQkgKiBkcml2ZXIgbXVzdCBmcmVlIHRoZSBza2IgYWZ0ZXIgcHJvY2Vzc2luZy4KJiM0MzsJCQkgKi8KJiM0MzsJCQluZXRjX3R3b3N0ZXBfdHN0YW1wX3Byb2Nlc3ModGFnLCBkcC0mZ3Q7ZHMpOwomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfc2tiOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlkZXZfd2Fybl9yYXRlbGltaXRlZCgmYW1wO25kZXYtJmd0O2RldiwKJiM0MzsJCQkJCSAgICAgJiMzNDtVbnN1cHBvcnRlZCBUb19Ib3N0IHN1YnR5cGU6ICVkXG4mIzM0OywKJiM0MzsJCQkJCSAgICAgc3VidHlwZSk7CiAJCQlnb3RvIGVycl9mcmVlX3NrYjsKJiM0MzsJCX0KIAl9IGVsc2UgewogCQlkZXZfd2Fybl9yYXRlbGltaXRlZCgmYW1wO25kZXYtJmd0O2RldiwKLQkJCQkgICAgICYjMzQ7VW5leHBlY3RlZCAgdGFnIHR5cGUgJWRcbiYjMzQ7LCB0eXBlKTsKJiM0MzsJCQkJICAgICAmIzM0O1VuZXhwZWN0ZWQgdGFnIHR5cGUgJWRcbiYjMzQ7LCB0eXBlKTsKIAkJZ290byBlcnJfZnJlZV9za2I7CiAJfQogCkBAIC0yMDAsNiAmIzQzOzM1NCwyOCBAQCBzdGF0aWMgdm9pZCBuZXRjX2Zsb3dfZGlzc2VjdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgKnByb3RvLAogCSpwcm90byA9ICgoX19iZTE2ICopc2tiLSZndDtkYXRhKVsodGFnX2xlbiAvIDIpIC0gMV07CiB9CiAKJiM0MztzdGF0aWMgaW50IG5ldGNfY29ubmVjdChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7CiYjNDM7CiYjNDM7CXRhZ2dlcl9kYXRhID0ga3phbGxvY19vYmooKnRhZ2dlcl9kYXRhKTsKJiM0MzsJaWYgKCF0YWdnZXJfZGF0YSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwl0YWdnZXJfZGF0YS0mZ3Q7b25lc3RlcF9zeW5jX3htaXQgPSBuZXRjX29uZXN0ZXBfc3luY194bWl0OwomIzQzOwlkcy0mZ3Q7dGFnZ2VyX2RhdGEgPSB0YWdnZXJfZGF0YTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG5ldGNfZGlzY29ubmVjdChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGEgPSBkcy0mZ3Q7dGFnZ2VyX2RhdGE7CiYjNDM7CiYjNDM7CWtmcmVlKHRhZ2dlcl9kYXRhKTsKJiM0MzsJZHMtJmd0O3RhZ2dlcl9kYXRhID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIG5ldGNfbmV0ZGV2X29wcyA9IHsKIAkubmFtZQkJCT0gTkVUQ19OQU1FLAogCS5wcm90bwkJCT0gRFNBX1RBR19QUk9UT19ORVRDLApAQCAtMjA3LDYgJiM0MzszODMsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIG5ldGNfbmV0ZGV2X29wcyA9IHsKIAkucmN2CQkJPSBuZXRjX3JjdiwKIAkubmVlZGVkX2hlYWRyb29tCT0gTkVUQ19UQUdfTUFYX0xFTiwKIAkuZmxvd19kaXNzZWN0CQk9IG5ldGNfZmxvd19kaXNzZWN0LAomIzQzOwkuY29ubmVjdAkJPSBuZXRjX2Nvbm5lY3QsCiYjNDM7CS5kaXNjb25uZWN0CQk9IG5ldGNfZGlzY29ubmVjdCwKIH07CiAKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O0RTQSB0YWcgZHJpdmVyIGZvciBOWFAgTkVUQyBzd2l0Y2ggZmFtaWx5JiMzNDspOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI4MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFwcGxpY2FiaWxpdHkgb2YgdGhlIE5YUCBORVRDIFBUUCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgYWRkaW5nIFBUUCBzdXBwb3J0IHRvIHRoZSBOWFAgTkVUQyBzd2l0Y2ggZHJpdmVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IGlmIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzOiBgbmV0Y19wdHAuY2AsIGBuZXRjX21haW4uY2AsIGBuZXRjX3BsYXRmb3JtLmNgLCBzb21lIGhlYWRlciBmaWxlcywgYW5kIGEgZmV3IG90aGVycy4gUHJldHR5IGNvbXByZWhlbnNpdmUuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBjYW4gSSBldmVuICpyZWFjaCogdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IElzIHRoaXMgc29tZXRoaW5nIEkgY2FuIGVmZmVjdGl2ZWx5IGZ1eno/IEkgbmVlZCB0byBjaGVjayBpZiB0aGUgZHJpdmVyLCBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9kc2EvbmV0Yy9gLCBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgdXNlZCBieSBmdXp6ZXJzLiBJdCBkZXBlbmRzIG9uIGBORVRfRFNBX05FVENfU1dJVENIYCwgd2hpY2gsIGluIHR1cm4sIGRlcGVuZHMgb24gYEFSTTY0IHx8IENPTVBJTEVfVEVTVGAsIGBORVRfRFNBICZhbXA7JmFtcDsgUENJYCwgYW5kIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAuIFJpZ2h0LCBpdCBsb29rcyBsaWtlIGEgUENJIGRldmljZS4gQW5kIHRoaW5raW5nIGFib3V0IGl0LCBOWFAgTkVUQyBpcyBwcm9iYWJseSBhIHBoeXNpY2FsIGhhcmR3YXJlIGNvbXBvbmVudCwgaXNuJiMzOTt0IGl0PyBOZXR3b3JrIEVkZ2UgVGltZS1TZW5zaXRpdmUgTmV0d29ya2luZyBDb250cm9sbGVyLCB5ZXAsIFBDSSBtYWtlcyBzZW5zZS4KClNvLCB0aGUgbmV4dCBxdWVzdGlvbjogaXMgdGhpcyBoYXJkd2FyZSBlbXVsYXRlZCBpbiBRRU1VPyBUaGF0JiMzOTtzIHRoZSByZWFsIGJsb2NrZXIuIEkmIzM5O2QgdHlwaWNhbGx5IHNlYXJjaCB0aGUgUUVNVSBzb3VyY2UgZm9yICYjMzQ7TkVUQyYjMzQ7LCBidXQgSSBkb24mIzM5O3QgaGF2ZSBhY2Nlc3MgdG8gdGhhdCBoZXJlLiBUaGUgcHJvbXB0IGRvZXMgZ2l2ZSBhIGNsdWUsIG1lbnRpb25pbmcgdGhhdCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggZHJpdmVycywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBjYXJkcyBhcmVuJiMzOTt0IHVzdWFsbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhpbmdzIGxpa2UgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUsIHRoYXQgc29ydCBvZiB0aGluZy4gR2l2ZW4gdGhhdCB0aGlzIGlzIGFuIE5YUC1zcGVjaWZpYyBjb21wb25lbnQsIEkgc3VzcGVjdCBpdCYjMzk7cyB0aGUgc2FtZSBzaXR1YXRpb24uIFVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIG1hY2hpbmUgbW9kZWwgZm9yIGFuIGkuTVggYm9hcmQsIHRoZW4gTlhQIHNwZWNpZmljIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZC4KCkFscmlnaHQsIHRoZSBkcml2ZXIgcHJvYmUgZnVuY3Rpb24sIGBuZXRjX3N3aXRjaF9wcm9iZWAsIGNvbmZpcm1zIHRoaXMgaXMgYSBQQ0kgZHJpdmVyIGJlY2F1c2UgaXQgdGFrZXMgYSBgcGNpX2RldmAgYXJndW1lbnQuIEl0IGxvb2tzIGxpa2UgbXkgYXNzdW1wdGlvbiBvZiBwaHlzaWNhbCBoYXJkd2FyZSBpcyBjb3JyZWN0LiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uY2AgdG8gaWRlbnRpZnkgdGhlIFBDSSBJRHMuIElmIGl04oCZcyBub3QgZW11bGF0ZWQsIHRoZW4gZnV6emluZyBpcyBnb2luZyB0byBiZSBzaWduaWZpY2FudGx5IG1vcmUgZGlmZmljdWx0LCBpZiBub3QgaW1wb3NzaWJsZSwgd2l0aG91dCBhIGN1c3RvbSBRRU1VIHNldHVwIG9yIGFjY2VzcyB0byB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RldmljZV9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9uZXRjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0yNDk4PXN0YXRpYyBpbnQgbmV0Y19zd2l0Y2hfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoyNDk5Olx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMjUwMC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9MjU2MD1zdGF0aWMgdm9pZCBuZXRjX3N3aXRjaF9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0yNTcwLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6MjU3MTpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmV0Y19zd2l0Y2hfaWRzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0yNTcyLVx0eyBQQ0lfREVWSUNFKE5FVENfU1dJVENIX1ZFTkRPUl9JRCwgTkVUQ19TV0lUQ0hfREVWSUNFX0lEKSB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjEwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU3dpdGNoIElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25zdGFudHMsIGBORVRDX1NXSVRDSF9WRU5ET1JfSURgIGFuZCBgTkVUQ19TV0lUQ0hfREVWSUNFX0lEYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB3aGF0IHRoZXkgYWN0dWFsbHkgcmVwcmVzZW50LiBXZSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBleGFjdCB2ZW5kb3IgYW5kIGRldmljZSB0aGVzZSBjb25zdGFudHMgYXJlIG1lYW50IHRvIHBpbnBvaW50LiBJJiMzOTttIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gaG93IHRoZSBzeXN0ZW0gaWRlbnRpZmllcyBzcGVjaWZpYyBuZXR3b3JrIHN3aXRjaGVzIHdpdGhpbiBpdHMgcHVydmlldywgbGlrZWx5IHRocm91Z2ggc29tZSBraW5kIG9mIGhhcmR3YXJlIG9yIGZpcm13YXJlIGlkZW50aWZpY2F0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzb3VyY2Ugb2YgdGhlc2UgY29uc3RhbnRzLiBBcmUgdGhleSBkZWZpbmVkIGluIGEgZHJpdmVyLCBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgcGVyaGFwcyBkZXJpdmVkIGZyb20gc29tZSBraW5kIG9mIG5ldHdvcmsgZGlzY292ZXJ5IHByb3RvY29sPyBVbmRlcnN0YW5kaW5nIHRoZSBvcmlnaW4gd2lsbCBkaWN0YXRlIGhvdyBJJiMzOTtsbCBhcHByb2FjaCB0aGlzIGludmVzdGlnYXRpb24uIEtub3dpbmcgdGhlIGNvbnRleHQgd2lsbCBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGhhcmR3YXJlIHJlZ2lzdGVycyB3aGVyZSB0aGlzIGluZm9ybWF0aW9uIGlzIGJlaW5nIGZldGNoZWQuIFRoZSBnb2FsLCBjbGVhcmx5LCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRpZmZlcmVudGlhdGVzIGJldHdlZW4gdmFyaW91cyBzd2l0Y2ggbW9kZWxzIG9yIG1hbnVmYWN0dXJlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUQ19TV0lUQ0hfVkVORE9SX0lEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL25ldGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jPTI1NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5ldGNfc3dpdGNoX2lkc1tdID0ge1xuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6MjU3MjpcdHsgUENJX0RFVklDRShORVRDX1NXSVRDSF9WRU5ET1JfSUQsIE5FVENfU1dJVENIX0RFVklDRV9JRCkgfSxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTI1NzMtXHR7IH1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oLTEwLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2hfaHcuaDoxMTojZGVmaW5lIE5FVENfU1dJVENIX1ZFTkRPUl9JRFx0XHQweDExMzFcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoX2h3LmgtMTItI2RlZmluZSBORVRDX1NXSVRDSF9ERVZJQ0VfSURcdFx0MHhlZWYyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxMTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgVGhpcyBDb2RlKioKCk9rYXksIHNvIFZlbmRvciBJRCBgMHgxMTMxYCBpcyBOWFAsIGZvcm1lcmx5IFBoaWxpcHMgU2VtaWNvbmR1Y3RvcnMuIFRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciB0aGlzIFBDSSBkZXZpY2UsIHRoZSBOWFAgTkVUQyBzd2l0Y2gsIGlzIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIE15IGluaXRpYWwgYXNzZXNzbWVudCwgYmFzZWQgb24gZXhwZXJpZW5jZSwgaXMgbm8uIFN0YW5kYXJkIFFFTVUgc3RpY2tzIHRvIGVtdWxhdGluZyBnZW5lcmljIG5ldHdvcmsgZGV2aWNlcyBsaWtlIGUxMDAwLCB2aXJ0aW8tbmV0LCBvciBydGw4MTM5LiBWZW5kb3Itc3BlY2lmaWMgZGV2aWNlcywgc3VjaCBhcyB0aGUgTkVUQyBzd2l0Y2gsIGFyZSB0eXBpY2FsbHkgKm5vdCogZW11bGF0ZWQuCgpUaGVyZWZvcmUsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcsIHRoZSBjb2RlIHBhdGhzIGluIHRoaXMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgTkVUQyBzd2l0Y2gsIHNob3VsZCBiZSBlbnRpcmVseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGluc3RydWN0cyBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIHRhcmdldHMgb25seSB2ZW5kb3Itc3BlY2lmaWMgUENJIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHN1Y2ggYXMgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuIFRoaXMgc2VlbXMgdG8gYXBwbHkgZGlyZWN0bHkuCgpIb2xkIG9uLCBJIG5lZWQgdG8gY29uc2lkZXIgYSBwb3RlbnRpYWwgbG9vcGhvbGU6IHRoZSBEU0EgdGFnZ2VyIGNvbXBvbmVudCwgYG5ldC9kc2EvdGFnX25ldGMuY2AuIENhbiAqdGhhdCogYmUgcmVhY2hlZCB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgYmVjYXVzZSBEU0EgdGFnZ2VycyBhcmUgdHlwaWNhbGx5IGludm9sdmVkIGluIGhhbmRsaW5nIHBhY2tldHMgYmVpbmcgc2VudCBvciByZWNlaXZlZCBvbiBhIERTQSBtYXN0ZXIgbmV0d29yayBkZXZpY2U/IElmIHRoZSBzd2l0Y2ggaXNuJiMzOTt0IHByZXNlbnQsIHRoZSB0YWdnZXIgdHlwaWNhbGx5IGlzbiYjMzk7dCB1c2VkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBpc24mIzM5O3QsIGJ1dCBzeXprYWxsZXIgY2FuIHNvbWV0aW1lcyBjcmVhdGUgRFNBIHRyZWVzIHVzaW5nIGR1bW15IGRldmljZXMgb3Igd29ya2Fyb3VuZHMgaWYgaXQgY2FuIGJ5cGFzcyB0aGUgaGFyZHdhcmUgcHJvYmUuIEhvd2V2ZXIsIHRoYXQgdXN1YWxseSByZWxpZXMgb24gdGhlIHN3aXRjaCBkcml2ZXIgcHJvYmluZyBzdWNjZXNzZnVsbHkuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrLiBTeXprYWxsZXIgKmRvZXMqIGhhdmUgc29tZSBzdXBwb3J0IGZvciBpbmplY3RpbmcgcGFja2V0cyBpbnRvIERTQSBpbnRlcmZhY2VzLCBidXQgaXQgc3RpbGwgaGluZ2VzIG9uIHRoZSBEU0Egc3dpdGNoIGJlaW5nIHJlZ2lzdGVyZWQuIElmIHRoZSBtYWluIHN3aXRjaCBkcml2ZXIsIGBuZXRjX21haW4uY2AsIGNhbiYjMzk7dCBwcm9iZSB0aGUgUENJIGRldmljZSwgYmVjYXVzZSBpdCYjMzk7cyBtaXNzaW5nLCB0aGUgRFNBIHN3aXRjaCB3b24mIzM5O3QgYmUgcmVnaXN0ZXJlZCwgYW5kIGNvbnNlcXVlbnRseSwgdGhlIHRhZ2dlciBjb2RlIHdvbiYjMzk7dCBiZSBleGVjdXRlZC4KClNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gYmVjb21lczogSXMgdGhlcmUgKmFueSogcG9zc2libGUgd2F5IHRvIGluc3RhbnRpYXRlIG9yIHJlZ2lzdGVyIHRoZSBORVRDIERTQSBzd2l0Y2ggd2l0aG91dCB0aGUgcHJlc2VuY2Ugb2YgdGhlIFBDSSBoYXJkd2FyZT8gSSBuZWVkIHRvIGRldGVybWluZSBpZiBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9yIGFsdGVybmF0aXZlIGRyaXZlciBwYXRoIGV4aXN0cywgb3IgaWYgaXQmIzM5O3Mgc3RyaWN0bHkgZGVwZW5kZW50IG9uIHRoZSBQQ0kgZGV2aWNlLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbmV0Yy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9MjU3Nz1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmV0Y19zd2l0Y2hfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTI1ODMtfTtcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jOjI1ODQ6bW9kdWxlX3BjaV9kcml2ZXIobmV0Y19zd2l0Y2hfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTI1ODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxNjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0llIERyaXZlciBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIFBDSSBkcml2ZXIsIG5vdGhpbmcgbW9yZS4gQW5kIGJlY2F1c2UgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgdGhlIE5YUCBORVRDLCBpdCYjMzk7cyB0aWVkIGRpcmVjdGx5IHRvIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4gU3RhbmRhcmQgUUVNVSBqdXN0IGlzbiYjMzk7dCBnb2luZyB0byBjdXQgaXQ7IG5vIGVtdWxhdGlvbiBoZXJlLiBTbywgZnV6emluZyBpdCBpc24mIzM5O3QgZ29pbmcgdG8gYmUgd29ydGh3aGlsZTsgaXQmIzM5O3MgZ29pbmcgdG8gYmUgYSBkZWFkIGVuZC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgd2hldGhlciB0aGUgY29kZSBpbiBgdGFnX25ldGMuY2AgaXMgZXZlbiByZWFjaGFibGUuIExldCBtZSBjaGVjayB0aGUgRFNBIHRhZ2dlciByZWdpc3RyYXRpb247IGl0IGxvb2tzIGxpa2UgdGhhdCB1c2VzIGBtb2R1bGVfZHNhX3RhZ19kcml2ZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfZHNhX3RhZ19kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHNhL3RhZ19uZXRjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2RzYS90YWdfbmV0Yy5jPTM5Mz1NT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19ORVRDLCBORVRDX05BTUUpO1xubmV0L2RzYS90YWdfbmV0Yy5jOjM5NDptb2R1bGVfZHNhX3RhZ19kcml2ZXIobmV0Y19uZXRkZXZfb3BzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MTcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBUcmFpbiBvZiBUaG91Z2h0KioKCk9rYXksIHNvIHRoZSB0YWdnZXIgYmVpbmcgcmVnaXN0ZXJlZCBpc24mIzM5O3QgZW5vdWdoOyBpdCAqYWxzbyogbmVlZHMgYSBEU0Egc3dpdGNoIGNvbmZpZ3VyZWQgdG8gYWN0dWFsbHkgYmUgdXRpbGl6ZWQuIFRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgYSBxdWVzdGlvbiBwb3BzIGludG8gbXkgaGVhZDogY2FuIGEgdXNlciwgaW4gdGhlb3J5LCBqdXN0IHNldCB1cCBhIGR1bW15IERTQSBzd2l0Y2gsIGV2ZW4gb25lIHRoYXQmIzM5O3Mgbm90IGFjdHVhbGx5IGNvbm5lY3RlZCB0byBhbnl0aGluZywganVzdCB0byAqZW5hYmxlKiBhIHBhcnRpY3VsYXIgdGFnZ2VyLCBwZXJoYXBzIHNwZWNpZmljYWxseSB1c2luZyBgRFNBX1RBR19QUk9UT19ORVRDYD8gSW50ZXJlc3RpbmcgYW5nbGUuCgpUaGUgbmV4dCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgU3l6a2FsbGVyLiBJIHdvbmRlciwgY2FuIGl0IGJlIGxldmVyYWdlZCB0byB0ZXN0IHRoZXNlIHRhZ2dlcnM/IFNwZWNpZmljYWxseSwgY2FuIGl0IG1ha2UgdXNlIG9mIGBkc2FfbG9vcGAgb3IgYSBzaW1pbGFyIGNvbnN0cnVjdCBmb3IgdGhpcyBwdXJwb3NlPyBJdCBtYWtlcyBzZW5zZSB0aGF0IFN5emthbGxlciBpcyB0aGUgcmlnaHQgdG9vbC4gTGV0JiMzOTtzIHNlZSBpZiBgZHNhX2xvb3BgIHdvdWxkIGFsbG93IHVzIHRvIHRlc3QgYXJiaXRyYXJ5IHRhZ2dlcnMuCgpIb2xkIG9uLCBJIHNlZW0gdG8gcmVtZW1iZXIgdGhhdCBgZHNhX2xvb3BgICpnZW5lcmFsbHkqIHJlbGllcyBvbiBgRFNBX1RBR19QUk9UT19OT05FYCBvciB3aGF0ZXZlciB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgcHJvdG9jb2wgaXMuIE9rYXksIHdhaXQgYSBtaW51dGUsIEkgdGhpbmsgSSYjMzk7bSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZi4gU3l6a2FsbGVyICpkb2VzKiBoYXZlIHRoZSBhYmlsaXR5IHRvIHRlc3QgRFNBIHRhZ2dlcnMsIGVpdGhlciBieSBpbmplY3RpbmcgcGFja2V0cyBkaXJlY3RseSwgb3IgYnkgdXNpbmcgYGRzYV9sb29wYCBvciBzb21lIHJlbGF0ZWQgbWVjaGFuaXNtLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLiBMZXQmIzM5O3MganVzdCBjb25maXJtLCBmb3IgbXkgb3duIHBlYWNlIG9mIG1pbmQsIHRoYXQgU3l6a2FsbGVyICpzcGVjaWZpY2FsbHkqIHRlc3RzIGB0YWdfbmV0Yy5jYC4gVGhhdCB3b3VsZCBnaXZlIG1lIHRoZSBjb25maXJtYXRpb24gSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YWdfbmV0YyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvTWFrZWZpbGU9MzI9b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX01YTF9HU1cxWFgpICYjNDM7PSB0YWdfbXhsLWdzdzF4eC5vXG5uZXQvZHNhL01ha2VmaWxlOjMzOm9iai0kKENPTkZJR19ORVRfRFNBX1RBR19ORVRDKSAmIzQzOz0gdGFnX25ldGMub1xubmV0L2RzYS9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTk9ORSkgJiM0Mzs9IHRhZ19ub25lLm9cbi0tXG5uZXQvZHNhL3RhZ19uZXRjLmMtNS1cbm5ldC9kc2EvdGFnX25ldGMuYzo2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2RzYS90YWdfbmV0Yy5oXHUwMDNlXG5uZXQvZHNhL3RhZ19uZXRjLmMtNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxODQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBTeXprYWxsZXImIzM5O3MgRFNBIFRhZ2dlciBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBjb21wcmVoZW5zaXZlbHkgU3l6a2FsbGVyIGNvdmVycyBEU0EgdGFnZ2VyIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGVyZSBtaWdodCBiZSBhIGRlZGljYXRlZCBgc3l6X2RzYV9zZXR1cGAgY2FsbCBvciBhIHNpbWlsYXIgY29uc3RydWN0LCBzcGVjaWZpY2FsbHkgZm9yIGNvbmZpZ3VyaW5nIGFuZCB0ZXN0aW5nIHRoZXNlIHRhZ2dlcnMuIEJ1dCwgb24gZnVydGhlciByZWZsZWN0aW9uLCBJIGRvbiYjMzk7dCB0aGluayB0aGF0JiMzOTtzIHF1aXRlIHJpZ2h0LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgU3l6a2FsbGVyIGFwcHJvYWNoZXMgRFNBIHRlc3RpbmcgdGhyb3VnaCB2ZXRoIHBhaXJzLCB3aGljaCBpdCB0aGVuIGNvbm5lY3RzIHNvbWVob3cgdG8gYSBEU0Egc3dpdGNoLiBCdXQgd2FpdC4uLiBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQgaXQgZG9lc24mIzM5O3QgaGF2ZSBhIHRydWx5IGdlbmVyaWMgd2F5IHRvIGluc3RhbnRpYXRlIGFueSBhbmQgYWxsIERTQSB0YWdnZXJzLCBhdCBsZWFzdCB1bmxlc3MgdGhlcmUmIzM5O3MgYSB2aXJ0dWFsIGRyaXZlciBwcmVzZW50LiBJIG1lYW4sIHdpdGhvdXQgdGhhdCwgaXQgd291bGQgYmUgZGlmZmljdWx0IHRvIHRlc3QuCgpBaCwgdGhhdCYjMzk7cyBpdCEgVGhlIGBkc2FfbG9vcGAgZHJpdmVyLiBSaWdodC4gKlRoYXQmIzM5O3MqIHRoZSB2aXJ0dWFsIERTQSBzd2l0Y2ggZHJpdmVyIHVzZWQgc3BlY2lmaWNhbGx5IGZvciB0ZXN0aW5nIERTQSBmdW5jdGlvbmFsaXR5LiBUaGF0IGdpdmVzIGl0IHRoZSBwb3dlciB0byBjcmVhdGUgdGVzdCBzY2VuYXJpb3MgdGhhdCB3b3VsZCBiZSBkaWZmaWN1bHQgb3RoZXJ3aXNlLiBPa2F5LCBzbyBub3cgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSBpZiBgZHNhX2xvb3BgIGNhbiB1dGlsaXplIGBEU0FfVEFHX1BST1RPX05FVENgLiBJZiBpdCBjYW4sIHdlJiMzOTtsbCBzZWUgaWYgdGhlIGNvdmVyYWdlIGltcHJvdmVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEU0FfVEFHX1BST1RPX05FVEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9NjI9bmV0Y19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtNjQte1xuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6NjU6XHRyZXR1cm4gRFNBX1RBR19QUk9UT19ORVRDO1xuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtNjYtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jPTY4PXN0YXRpYyBpbnQgbmV0Y19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtNzItXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzo3MzpcdGlmIChwcm90byAhPSBEU0FfVEFHX1BST1RPX05FVEMpXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy03NC1cdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4tLVxuaW5jbHVkZS9uZXQvZHNhLmg9MjY9c3RydWN0IHRjX2FjdGlvbjtcbi0tXG5pbmNsdWRlL25ldC9kc2EuaC02MC0jZGVmaW5lIERTQV9UQUdfUFJPVE9fTVhMODYyX1ZBTFVFXHRcdDMyXG5pbmNsdWRlL25ldC9kc2EuaDo2MTojZGVmaW5lIERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRVx0XHQzM1xuaW5jbHVkZS9uZXQvZHNhLmgtNjItXG5pbmNsdWRlL25ldC9kc2EuaD02Mz1lbnVtIGRzYV90YWdfcHJvdG9jb2wge1xuLS1cbmluY2x1ZGUvbmV0L2RzYS5oLTk2LVx0RFNBX1RBR19QUk9UT19NWEw4NjJcdFx0PSBEU0FfVEFHX1BST1RPX01YTDg2Ml9WQUxVRSxcbmluY2x1ZGUvbmV0L2RzYS5oOjk3Olx0RFNBX1RBR19QUk9UT19ORVRDXHRcdD0gRFNBX1RBR19QUk9UT19ORVRDX1ZBTFVFLFxuaW5jbHVkZS9uZXQvZHNhLmgtOTgtfTtcbi0tXG5uZXQvZHNhL3RhZ19uZXRjLmM9Mzc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgbmV0Y19uZXRkZXZfb3BzID0ge1xubmV0L2RzYS90YWdfbmV0Yy5jLTM4MC1cdC5uYW1lXHRcdFx0PSBORVRDX05BTUUsXG5uZXQvZHNhL3RhZ19uZXRjLmM6MzgxOlx0LnByb3RvXHRcdFx0PSBEU0FfVEFHX1BST1RPX05FVEMsXG5uZXQvZHNhL3RhZ19uZXRjLmMtMzgyLVx0LnhtaXRcdFx0XHQ9IG5ldGNfeG1pdCxcbi0tXG5uZXQvZHNhL3RhZ19uZXRjLmM9MzkxPU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5uZXQvZHNhL3RhZ19uZXRjLmMtMzkyLVxubmV0L2RzYS90YWdfbmV0Yy5jOjM5MzpNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19ORVRDLCBORVRDX05BTUUpO1xubmV0L2RzYS90YWdfbmV0Yy5jLTM5NC1tb2R1bGVfZHNhX3RhZ19kcml2ZXIobmV0Y19uZXRkZXZfb3BzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyODQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFRhZ2dpbmcgRmxleGliaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIHdheSB0byBpbnRlcmFjdCB3aXRoIGBuZXRjX3htaXRgIG9yIGBuZXRjX3JjdmAgd2l0aGluIGBuZXQvZHNhL3RhZ19uZXRjLmNgIHdpdGhvdXQgYWN0dWFsbHkgbmVlZGluZyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgcHJlc2VudC4gVGhhdCYjMzk7cyB0aGUgY29yZSBxdWVzdGlvbi4gTXkgdGhpbmtpbmcgaXMsIGNhbiBJIHNpbXVsYXRlIG9yIHRlc3QgdGhlc2UgZnVuY3Rpb25zIGluIGEgbW9yZSBjb250cm9sbGVkIGVudmlyb25tZW50PwoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHdvbmRlcmluZyBpZiBhIHVzZXIsIHRocm91Z2ggc3lzZnMgb3IgbmV0bGluaywgY291bGQgKmR5bmFtaWNhbGx5KiBhbHRlciB0aGUgRFNBIHRhZyBwcm90b2NvbCBvZiBhbiBleGlzdGluZyBEU0Egc3dpdGNoLiBGb3IgaW5zdGFuY2UsIGNhbiBJIHRha2UgYSBzZXR1cCB1c2luZyBgZHNhX2xvb3BgIG9yIGV2ZW4gYGRzYV9tb2NrYCBhbmQgc29tZWhvdyByZWNvbmZpZ3VyZSBpdCB0byB1c2UgYERTQV9UQUdfUFJPVE9fTkVUQ2A/IFRoaXMgd291bGQgZ2l2ZSBtZSBhIHZhbHVhYmxlIHdpbmRvdyBpbnRvIGhvdyB0aGUgYE5FVENgIHRhZyBwcm90b2NvbCB3b3VsZCBmdW5jdGlvbiB1bmRlciBkaWZmZXJlbnQgY29uZGl0aW9ucywgYW5kIHBvdGVudGlhbGx5IGZhY2lsaXRhdGUgZWFzaWVyIGRlYnVnZ2luZyBhbmQgZXhwZXJpbWVudGF0aW9uLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyAqd2hldGhlciogRFNBJiMzOTtzIGFyY2hpdGVjdHVyZSBldmVuIHBlcm1pdHMgdGhpcyBraW5kIG9mIG9uLXRoZS1mbHkgdGFnIHByb3RvY29sIHN3aXRjaGluZy4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBEU0EgaW50ZXJuYWxzIGFuZCBmaW5kIG91dCBpZiBpdCBpcyBkZXNpZ25lZCB0byBoYW5kbGUgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhbmdlX3RhZ19wcm90b2NvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvZHNhLmM9NTY5PXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9zZXR1cF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbm5ldC9kc2EvZHNhLmMtNTc4LVx0cnRubF9sb2NrKCk7XG5uZXQvZHNhL2RzYS5jOjU3OTpcdGVyciA9IGRzLVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2VfdGFnX3Byb3RvY29sKGRzLCB0YWdfb3BzLVx1MDAzZXByb3RvKTtcbm5ldC9kc2EvZHNhLmMtNTgwLVx0cnRubF91bmxvY2soKTtcbi0tXG5uZXQvZHNhL2RzYS5jPTExNTQ9c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV9jcHUoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4tLVxubmV0L2RzYS9kc2EuYy0xMTc1LVx0aWYgKHVzZXJfcHJvdG9jb2wpIHtcbm5ldC9kc2EvZHNhLmM6MTE3NjpcdFx0aWYgKCFkcy1cdTAwM2VvcHMtXHUwMDNlY2hhbmdlX3RhZ19wcm90b2NvbCkge1xubmV0L2RzYS9kc2EuYy0xMTc3LVx0XHRcdGRldl9lcnIoZHMtXHUwMDNlZGV2LCBcJiMzNDtUYWcgcHJvdG9jb2wgY2Fubm90IGJlIG1vZGlmaWVkXFxuXCYjMzQ7KTtcbi0tXG5uZXQvZHNhL2RzYS5jLTEyMjktXHQgKiBkc2Ffc3dpdGNoX3NldHVwX3RhZ19wcm90b2NvbCBvbmNlIC5zZXR1cCBoYXMgcnVuIGFuZCB0aGVcbm5ldC9kc2EvZHNhLmM6MTIzMDpcdCAqIGRyaXZlciBpcyByZWFkeSB0byBhY2NlcHQgY2FsbHMgdG8gLmNoYW5nZV90YWdfcHJvdG9jb2wuIElmXG5uZXQvZHNhL2RzYS5jLTEyMzEtXHQgKiB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGN1c3RvbSBwcm90b2NvbCBhdCB0aGF0XG4tLVxubmV0L2RzYS9zd2l0Y2guYz04NzM9c3RhdGljIGludCBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbm5ldC9kc2Evc3dpdGNoLmMtODc5LVxubmV0L2RzYS9zd2l0Y2guYzo4ODA6XHRpZiAoIWRzLVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2VfdGFnX3Byb3RvY29sKVxubmV0L2RzYS9zd2l0Y2guYy04ODEtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvZHNhL3N3aXRjaC5jLTg4NC1cbm5ldC9kc2Evc3dpdGNoLmM6ODg1Olx0ZXJyID0gZHMtXHUwMDNlb3BzLVx1MDAzZWNoYW5nZV90YWdfcHJvdG9jb2woZHMsIHRhZ19vcHMtXHUwMDNlcHJvdG8pO1xubmV0L2RzYS9zd2l0Y2guYy04ODYtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTE5MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgcmVmbGVjdGlvbiwgYXMgaWYgSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIGl0IGFzIGFuIGV4cGVydDoKCioqRHluYW1pYyBUYWcgUHJvdG9jb2wgaW4gRFNBOiBWZXJpZmljYXRpb24gUmVxdWlyZWQqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgRFNBIOKAkyB0aGUgRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZS4gVGhlIGRvY3VtZW50YXRpb24gY2xlYXJseSBzdGF0ZXMgdGhhdCB0aGUgYGNoYW5nZV90YWdfcHJvdG9jb2xgIHN3aXRjaCBvcGVyYXRpb24gYWxsb3dzIGZvciBkeW5hbWljYWxseSBtb2RpZnlpbmcgdGhlIHRhZ2dpbmcgcHJvdG9jb2wgaW4gdXNlLiBUaGF0JiMzOTtzIGEga2V5IGZlYXR1cmUsIGFuZCBpdCBvZmZlcnMgYSBsb3Qgb2YgZmxleGliaWxpdHkgaW4gdmFyaW91cyBuZXR3b3JraW5nIHNjZW5hcmlvcy4KCkJ1dCwgaG9sZCBvbiBhIHNlY29uZOKApiBJIG5lZWQgdG8gZHJpbGwgZG93biBoZXJlLiBNeSBleHBlcmllbmNlIGlzIHRoYXQgYSBmZWF0dXJlJiMzOTtzIGF2YWlsYWJpbGl0eSBpcyBvbmx5IHRoZSAqc3RhcnQqIG9mIHRoZSBzdG9yeS4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgZG9lcyB0aGUgKnNwZWNpZmljKiBEU0EgZHJpdmVyIEkmIzM5O20gY29uc2lkZXJpbmcsIHNheSwgdGhlIGBkc2FfbG9vcGAgZHJpdmVyLCBhY3R1YWxseSBzdXBwb3J0IHRoaXMgYGNoYW5nZV90YWdfcHJvdG9jb2xgIGZlYXR1cmU/IEp1c3QgYmVjYXVzZSB0aGUgb3ZlcmFsbCBEU0EgYXJjaGl0ZWN0dXJlICphbGxvd3MqIGl0IGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgbWVhbiBldmVyeSBzaW5nbGUgZHJpdmVyICppbXBsZW1lbnRzKiBpdC4gSSYjMzk7dmUgYmVlbiBjYXVnaHQgb3V0IGJ5IHRoZXNlIHNvcnRzIG9mIGFzc3VtcHRpb25zIGJlZm9yZS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcGFydGljdWxhciBkcml2ZXImIzM5O3MgaW1wbGVtZW50YXRpb24gaXMgdHJ1bHkgY29tcGxpYW50IHdpdGggdGhhdCBhcmNoaXRlY3R1cmFsIGZlYXR1cmUuIEkgbmVlZCB0byBjaGVjayBpdHMgc291cmNlIGNvZGUsIG9yIGRvY3VtZW50YXRpb24sIG9yIHJ1biBzb21lIHRhcmdldGVkIHRlc3RpbmcgdG8gYmUgY2VydGFpbi4gT3RoZXJ3aXNlLCBJIG1pZ2h0IGJlIHNldHRpbmcgbXlzZWxmIHVwIGZvciB0cm91YmxlIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhbmdlX3RhZ19wcm90b2NvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1NTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEFic2VuY2Ugb2YgRnVuY3Rpb25hbGl0eSBhbmQgQ29uc2lkZXJpbmcgQWx0ZXJuYXRpdmVzKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGltcHJlc3Npb24gaXMgYSBuZWdhdGl2ZSBvbmUuIEVzc2VudGlhbGx5LCB3aGF0ZXZlciBzeXN0ZW0gb3IgZnVuY3Rpb24gSSB3YXMgZXhwZWN0aW5nIHRvIGZpbmQgaXMuLi4gbWlzc2luZy4gSXQmIzM5O3MgYSBub24tc3RhcnRlci4gVGhpcyBhYnNlbmNlIGlzIGEga2V5IGRhdGEgcG9pbnQ7IGl0IGhpZ2hsaWdodHMgYSBnYXAsIGVpdGhlciBpbiB0aGUgZGVzaWduLCB0aGUgaW1wbGVtZW50YXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gaW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZS4KCk15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gcG90ZW50aWFsIHdvcmthcm91bmRzIG9yIGFsdGVybmF0aXZlIGFwcHJvYWNoZXMuIExldCYjMzk7cyBzZWUuLi4gd2hhdCBhYm91dCB0aGUgcG9zc2liaWxpdHkgb2YgYSBgZHNhX21vY2tgPyBUaGUgZXhpc3RlbmNlIChvciBub24tZXhpc3RlbmNlKSBvZiBhIG1vY2sgZHJpdmVyIGJlY29tZXMgY3J1Y2lhbCBpbiBkZXRlcm1pbmluZyBob3cgYmVzdCB0byBwcm9jZWVkLiBJZiBvbmUgaXMgYXZhaWxhYmxlLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGdyZWF0bHksIGFsbG93aW5nIG1lIHRvIGlzb2xhdGUgYW5kIHRlc3QgZGlmZmVyZW50IGNvbXBvbmVudHMgd2l0aG91dCByZWx5aW5nIG9uIHRoZSBmdWxsIHN5c3RlbS4gSWYgaXQmIzM5O3MgKm5vdCogYXZhaWxhYmxlLCB0aGVuIHRoYXQgcmFpc2VzIGEgd2hvbGUgaG9zdCBvZiBmdXJ0aGVyIHF1ZXN0aW9ucyBhYm91dCB0ZXN0aW5nIHN0cmF0ZWd5IGFuZCBob3cgdG8gYmVzdCBjcmVhdGUgdGhlIG5lY2Vzc2FyeSB0ZXN0IGVudmlyb25tZW50LiBUaGUgbW9jayBkcml2ZXImIzM5O3MgYWJzZW5jZSBhbHNvIHRlbGxzIG1lIGFib3V0IHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCBsZXZlbCBvZiB0ZXN0YWJpbGl0eSBhbmQgdGhlIGRlZ3JlZSB0byB3aGljaCBpdCBtaWdodCBuZWVkIGZ1cnRoZXIgcmVmaW5lbWVudC4gVGhpcyBhYnNlbmNlIGFsc28gY2F1c2VzIG1lIHRvIHRoaW5rIGFib3V0IHdoZXJlIHN1Y2ggYSBtb2NrIG1pZ2h0IGZpdCwgYW5kIGlmIHN1Y2ggYSBtb2NrIGlzIGV2ZW4gcG9zc2libGUsIGdpdmVuIHRoZSBleGlzdGluZyBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoYW5nZV90YWdfcHJvdG9jb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTY2NDY9c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtdjg4ZTZ4eHhfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNjY1NC1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjY2NTU6c3RhdGljIGludCBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjU2LVx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTcxODc9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdjg4ZTZ4eHhfc3dpdGNoX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTcxODgtXHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBtdjg4ZTZ4eHhfZ2V0X3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjcxODk6XHQuY2hhbmdlX3RhZ19wcm90b2NvbFx0PSBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTcxOTAtXHQuc2V0dXBcdFx0XHQ9IG12ODhlNnh4eF9zZXR1cCxcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9NzMyPWZlbGl4X3RhZ19wcm90b19zZXR1cF9zaGFyZWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy03NTMtICovXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6NzU0OnN0YXRpYyBpbnQgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtNzU1LVx0XHRcdFx0ICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTE2OTY9c3RhdGljIGludCBmZWxpeF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTE3NTEtXHQgKi9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzoxNzUyOlx0ZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbChkcywgZmVsaXgtXHUwMDNldGFnX3Byb3RvKTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0xNzUzLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz0yMzA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZmVsaXhfc3dpdGNoX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0yMzA3LVx0LmdldF90YWdfcHJvdG9jb2xcdFx0PSBmZWxpeF9nZXRfdGFnX3Byb3RvY29sLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjIzMDg6XHQuY2hhbmdlX3RhZ19wcm90b2NvbFx0XHQ9IGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwOS1cdC5jb25uZWN0X3RhZ19wcm90b2NvbFx0XHQ9IGZlbGl4X2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmM9MjMwMz1zdGF0aWMgaW50IHJ0bDgzNjVtYl9jcHVfY29uZmlnKHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0yMzMxLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYzoyMzMyOnN0YXRpYyBpbnQgcnRsODM2NW1iX2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0yMzMzLVx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmM9MjY2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHJ0bDgzNjVtYl9zd2l0Y2hfb3BzID0ge1xuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0yNjY3LVx0LmdldF90YWdfcHJvdG9jb2wgPSBydGw4MzY1bWJfZ2V0X3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmM6MjY2ODpcdC5jaGFuZ2VfdGFnX3Byb3RvY29sID0gcnRsODM2NW1iX2NoYW5nZV90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jLTI2NjktXHQuc2V0dXAgPSBydGw4MzY1bWJfc2V0dXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDAwCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBQcm90b2NvbCBTdXBwb3J0IG9mIFN3aXRjaCBDaGlwcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgc3dpdGNoIGRyaXZlciBsYW5kc2NhcGUgYW5kIHNlZWluZyB3aGVyZSB3ZSBzdGFuZCB3aXRoIFZMQU4gdGFnZ2luZyBwcm90b2NvbHMuIEkga25vdyB0aGF0IGNoaXBzIGxpa2UgdGhlIGBtdjg4ZTZ4eHhgLCBgZmVsaXhgLCBhbmQgYHJ0bDgzNjVtYmAgc2VyaWVzICpkbyogb2ZmZXIgdGhpcyBraW5kIG9mIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSG93ZXZlciwgdGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkgZG9uJiMzOTt0IGhhdmUgYmxhbmtldCBzdXBwb3J0IGZvciBldmVyeSB0YWdnaW5nIHByb3RvY29sIHVuZGVyIHRoZSBzdW4uIEl0JiMzOTtzIGxvb2tpbmcgbGlrZSB0aGVpciBpbXBsZW1lbnRhdGlvbnMgYXJlIHByZXR0eSBzcGVjaWZpYy4KCkZvciBpbnN0YW5jZSwgdGhlIGBmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sYCBmdW5jdGlvbiBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGF0IGl0cyBzdXBwb3J0IGlzIHByb2JhYmx5IGxpbWl0ZWQgdG8sIGxldCYjMzk7cyBzYXksIGBEU0FfVEFHX1BST1RPX09DRUxPVGAgYW5kIGBEU0FfVEFHX1BST1RPX09DRUxPVF84MDIxUWAgcHJvdG9jb2xzLiBJdCBzZWVtcyBsaWtlIHRoZSBwcm90b2NvbCBpcyB2ZXJ5IGNoaXAtZGVwZW5kZW50LgoKVG8gZ2V0IGEgYmV0dGVyIHBpY3R1cmUsIEkgbmVlZCB0byBsb29rIGludG8gYG12ODhlNnh4eF9jaGFuZ2VfdGFnX3Byb3RvY29sYCBub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcHJvdG9jb2xzIGVhY2ggb2YgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFjdHVhbGx5IHN1cHBvcnRzLCBzbyBJIGNhbiBzdGFydCB0byBidWlsZCBhIGNsZWFyZXIsIG1vcmUgY29tcGxldGUgbW9kZWwgb2YgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIHRvIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTY2NDY9c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtdjg4ZTZ4eHhfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNjY1NC1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjY2NTU6c3RhdGljIGludCBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjU2LVx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTcxODc9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdjg4ZTZ4eHhfc3dpdGNoX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTcxODgtXHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBtdjg4ZTZ4eHhfZ2V0X3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjcxODk6XHQuY2hhbmdlX3RhZ19wcm90b2NvbFx0PSBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTcxOTAtXHQuc2V0dXBcdFx0XHQ9IG12ODhlNnh4eF9zZXR1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE3MzkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiBuZXR3b3JraW5nIGFuZCBrZXJuZWwgZGV2ZWxvcG1lbnQ6CgoqKkFuYWx5emluZyB0aGUgYG12ODhlNnh4eF9jaGFuZ2VfdGFnX3Byb3RvY29sYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aGUgbmV4dCB0YXNrIGlzIHRvIGRpdmUgaW50byBgbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2xgLiBTb3VuZHMgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBNYXJ2ZWxsIDg4RTZ4eHggc2VyaWVzIG9mIEV0aGVybmV0IHN3aXRjaGVzIOKAkyBhbmQgc3BlY2lmaWNhbGx5LCBob3cgdGhleSBoYW5kbGUgdGFnZ2VkIEV0aGVybmV0IGZyYW1lcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIHdheSB0aGUgc3dpdGNoIGludGVycHJldHMgb3IgaGFuZGxlcyB0aGUgdGFnZ2luZyBwcm90b2NvbC4KCkltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQga2luZCBvZiB0YWdnaW5nIHByb3RvY29scyBhcmUgd2UgdGFsa2luZyBhYm91dD8gVkxBTiB0YWdzICg4MDIuMVEpPyBQcm92aWRlciBCcmlkZ2UgdGFncyAoODAyLjFhZCk/IE1heWJlIHNvbWUgcHJvcHJpZXRhcnkgTWFydmVsbCBleHRlbnNpb25zPyBUaGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSBzaG91bGQgYmUgcHJldHR5IGNyaXRpY2FsIGluIGEgbG90IG9mIG5ldHdvcmtpbmcgc2NlbmFyaW9zLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGFyZ3VtZW50cy4gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBhc3NlZCBpbj8gQSBkZXZpY2Ugc3RydWN0dXJlIGxpa2VseSwgYW5kIGFsbW9zdCBjZXJ0YWlubHkgYSBwb2ludGVyIHRvIHNvbWUgc29ydCBvZiBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSByZWxhdGVkIHRvIHRoZSBzd2l0Y2gmIzM5O3MgcG9ydCBzZXR0aW5ncy4gSSBleHBlY3QgdG8gc2VlIHJlZ2lzdGVyIHdyaXRlcyBpbnZvbHZlZCwgbGlrZWx5IHRvIHRoZSBzd2l0Y2gmIzM5O3MgaW50ZXJuYWwgcmVnaXN0ZXJzIHRoYXQgY29udHJvbCB0aGUgdGFnZ2luZyBzZXR0aW5ncy4gVGhlIGZ1bmN0aW9uIGNvdWxkIGFsc28gYmUgaGFuZGxpbmcgdGhlIGludGVyYWN0aW9uIHdpdGggYW55IE1JSS9NRElPIGludGVyZmFjZSB0aGF0JiMzOTtzIGludm9sdmVkLgoKSSYjMzk7bGwga2VlcCBhIGNsb3NlIGV5ZSBvdXQgZm9yIGFueSBlcnJvciBoYW5kbGluZy4gSXMgdGhpcyBmdW5jdGlvbiByb2J1c3Q/IERvZXMgaXQgY2hlY2sgZm9yIHZhbGlkIHByb3RvY29sIElEcyBvciBwYXJhbWV0ZXIgcmFuZ2VzPyBBcmUgdGhlcmUgY2hlY2tzIGZvciBoYXJkd2FyZSBsaW1pdGF0aW9ucz8gQSBtaXNjb25maWd1cmF0aW9uIGhlcmUgY291bGQgZWFzaWx5IGNyZWF0ZSBpbnRlcm1pdHRlbnQgY29ubmVjdGl2aXR5IGlzc3Vlcywgb3IgZXZlbiBhIGZ1bGwgbmV0d29yayBvdXRhZ2UuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gcGlucG9pbnQgZXhhY3RseSAqaG93KiB0aGUgdGFnZ2luZyBwcm90b2NvbCBpcyBiZWluZyBjaGFuZ2VkLiBJcyBpdCBqdXN0IHRoZSBhZGRpdGlvbiBvZiBhIG5ldyBWTEFOIElEIG9yIGlzIGl0IGNoYW5naW5nIHRoZSBlbnRpcmUgdGFnZ2luZyBzY2hlbWUgZm9yIHRoZSBwb3J0PyBBZnRlciB0aGF0LCBJIHdpbGwgdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgaW50ZXJhY3Qgd2l0aCB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIHN3aXRjaCBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY2NTU6XHRzdGF0aWMgaW50IG12ODhlNnh4eF9jaGFuZ2VfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbjY2NTY6XHRcdFx0XHRcdFx0IGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcbjY2NTc6XHR7XG42NjU4Olx0XHRzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAgPSBkcy1cdTAwM2Vwcml2O1xuNjY1OTpcdFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIG9sZF9wcm90b2NvbDtcbjY2NjA6XHRcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xuNjY2MTpcdFx0aW50IGVycjtcbjY2NjI6XHRcbjY2NjM6XHRcdHN3aXRjaCAocHJvdG8pIHtcbjY2NjQ6XHRcdGNhc2UgRFNBX1RBR19QUk9UT19FRFNBOlxuNjY2NTpcdFx0XHRzd2l0Y2ggKGNoaXAtXHUwMDNlaW5mby1cdTAwM2VlZHNhX3N1cHBvcnQpIHtcbjY2NjY6XHRcdFx0Y2FzZSBNVjg4RTZYWFhfRURTQV9VTlNVUFBPUlRFRDpcbjY2Njc6XHRcdFx0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbjY2Njg6XHRcdFx0Y2FzZSBNVjg4RTZYWFhfRURTQV9VTkRPQ1VNRU5URUQ6XG42NjY5Olx0XHRcdFx0ZGV2X3dhcm4oY2hpcC1cdTAwM2VkZXYsIFwmIzM0O1JlbHlpbmcgb24gdW5kb2N1bWVudGVkIEVEU0EgdGFnZ2luZyBiZWhhdmlvclxcblwmIzM0Oyk7XG42NjcwOlx0XHRcdFx0ZmFsbHRocm91Z2g7XG42NjcxOlx0XHRcdGNhc2UgTVY4OEU2WFhYX0VEU0FfU1VQUE9SVEVEOlxuNjY3MjpcdFx0XHRcdGJyZWFrO1xuNjY3MzpcdFx0XHR9XG42Njc0Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjUyOAoJCQkJCQkJb3V0cHV0OiAxMTQKCQkJCQkJCXRob3VnaHRzOiA5NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBQYXRoczogTlhQIE5FVEMgRHJpdmVyIGFuZCBUYWdnZXIqKgoKT2theSwgc28gdGhlIGNvZGUgaW4gcXVlc3Rpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBOWFAgTkVUQyBkcml2ZXIgYW5kIGB0YWdfbmV0Yy5jYCwgcmVsaWVzIG9uIHNwZWNpZmljIGhhcmR3YXJlIHByb3RvY29scywgc3BlY2lmaWNhbGx5IHRoZSBOWFAgTkVUQyBQQ0kgaGFyZHdhcmUuIFRoZXJlJiMzOTtzIG5vIHdheSB0byByZWFjaCBgdGFnX25ldGMuY2AgZGlyZWN0bHkgd2l0aG91dCB0aGF0IGhhcmR3YXJlLCBhbmQgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIG5vdCB2aWEgYW55IHN0YW5kYXJkIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgdHJpY2tzIG9yIHBhY2tldCBpbmplY3Rpb24uIFN5emthbGxlciBpcyBvdXQsIGFzIGB0YWdfbmV0Yy5jYCBpcyBsaW5rZWQgdG8gYSBuZXR3b3JrIGludGVyZmFjZSBvbmx5IGlmIHRoZSBEU0Egc3dpdGNoIHVzaW5nIGBuZXRjX21haW4uY2AgaXMgY29uZmlndXJlZCwgd2hpY2ggaW4gdHVybiBkZW1hbmRzIHRoaXMgTlhQIE5FVEMgUENJIGhhcmR3YXJlLgoKSSB3YXMgaG9waW5nIG1heWJlIGEgRFNBIHN3aXRjaCBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgZGlmZmVyZW50bHksIGJ1dCBpdCBsb29rcyBsaWtlIGRyaXZlcnMgY2FsbCBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgdG8gZG8gc28sIGFuZCBgbmV0Y19tYWluLmNgIGlzIHRoZSBzb2xlIGRyaXZlciByZXR1cm5pbmcgYERTQV9UQUdfUFJPVE9fTkVUQ2AuICBUaGlzIGNvbmZpcm1zIGB0YWdfbmV0Yy5jYCBhbmQgYnkgZXh0ZW5zaW9uLCB0aGUgdXBkYXRlZCBjb2RlIGFyZSBkZXBlbmRlbnQgb24gdGhhdCBwaHlzaWNhbCBoYXJkd2FyZS4KCkkgY2hlY2tlZCBmb3Igb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cywgbGlrZSBgZHNhX2xvb3BgIG9yIGBkc2FfbW9ja2AuIGBkc2FfbG9vcGAgaXMgdGhlcmUsIGJ1dCB1c2VzIGBEU0FfVEFHX1BST1RPX05PTkVgLiAgYGRzYV9sb29wX2JkaW5mb2AgcmVnaXN0ZXJzIGBkc2FfbG9vcGAsIGJ1dCB0aGF0JiMzOTtzIG5vdCBoZWxwaW5nLiBCYXNpY2FsbHksIHVubGVzcyB0aGVyZSYjMzk7cyBleHBsaWNpdCB2aXJ0dWFsIGRyaXZlciBzdXBwb3J0IGZvciB0aGlzIHNwZWNpZmljIHRhZ2dlciwgaXQmIzM5O3MgdW5yZWFjaGFibGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuCgpHaXZlbiB0aGUgcHJvbXB0JiMzOTtzIGNyaXRlcmlhOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwmIzM0OyBJIGhhdmUgdG8gY29uY2x1ZGUgdGhhdCB0aGUgTlhQIE5FVEMgc3dpdGNoIGZpdHMgdGhhdCBkZXNjcmlwdGlvbi4gSXQmIzM5O3MgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZS4gVGhlIGRyaXZlciBpdHNlbGYsIHRoZSBQVFAgc3VwcG9ydCBhZGRlZCBpbiB0aGUgcGF0Y2gsIGFuZCB0aGUgYXNzb2NpYXRlZCB0YWdnZXIsIGFyZSBhbGwgdW5yZWFjaGFibGUgd2l0aG91dCB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLgoKSSYjMzk7dmUgdmVyaWZpZWQgdGhhdCBgbmV0Y19tYWluLmNgIHV0aWxpemVzIGBtb2R1bGVfcGNpX2RyaXZlcihuZXRjX3N3aXRjaF9kcml2ZXIpYCwgYW5kIGl0cyB2ZW5kb3IgSUQgKDB4MTEzMSwgTlhQKSBhbmQgZGV2aWNlIElEICgweGVlZjIpIGNvbmZpcm0gaXQmIzM5O3MgYSBwaHlzaWNhbCBoYXJkd2FyZSBjb21wb25lbnQuIFRoZSBQVFAgc3VwcG9ydCwgdGhlcmVmb3JlLCBpcyBlcXVhbGx5IGluYWNjZXNzaWJsZS4gSSB3YXMgY29uc2lkZXJpbmcgb3RoZXIgd2F5cyB0byBwb3NzaWJseSBhY3RpdmF0ZSBgdGFnX25ldGMuY2AgdGhyb3VnaCBEU0Egcm91dGluZyBydWxlcyBvciB0cmFmZmljIGNvbnRyb2wgKHRjKSAvIEJQRiwgYnV0IGB0YWdfbmV0Yy5jYCBpcyB0aWVkIHRvIHRoZSBgZHNhX2RldmljZV9vcHNgIHN0cnVjdCByZWdpc3RlcmVkIHZpYSBgbW9kdWxlX2RzYV90YWdfZHJpdmVyYC4gSXQmIzM5O3Mgc2VsZWN0ZWQgb25seSB3aGVuIHRoZSBEU0Egc3dpdGNoIGlzIHNldHVwLCBhbmQgb25seSBpZiB0aGUgc3dpdGNoLCB0aHJvdWdoIGl0cyBgZ2V0X3RhZ19wcm90b2NvbGAgb3IgYGNoYW5nZV90YWdfcHJvdG9jb2xgIG9wcywgcmVxdWVzdHMgYERTQV9UQUdfUFJPVE9fTkVUQ2AsIHdoaWNoIG5vIHZpcnR1YWwgc3dpdGNoIGRvZXMuCgpUaGVyZWZvcmUsIHRoZSBlbnRpcmUgcGF0Y2gmIzM5O3MgY29kZSBwYXRocyBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4gTXkgcmVhc29uaW5nIGxlYWRzIG1lIHRvIGBzZXQtcmVzdWx0c2Agd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBzdXBwb3J0IHRvIHRoZSBOWFAgTkVUQyBzd2l0Y2ggZHJpdmVyIGFuZCBpdHMgYXNzb2NpYXRlZCBEU0EgdGFnZ2VyLiBUaGUgTkVUQyBzd2l0Y2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBkZXZpY2UgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyByZXF1aXJlZCB0byBwcm9iZSB0aGUgZHJpdmVyIGFuZCBpbnN0YW50aWF0ZSB0aGUgRFNBIHN3aXRjaCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW4gYm90aCB0aGUgZHJpdmVyIGFuZCB0aGUgdGFnZ2VyIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBzdXBwb3J0IHRvIHRoZSBOWFAgTkVUQyBzd2l0Y2ggZHJpdmVyIGFuZCBpdHMgYXNzb2NpYXRlZCBEU0EgdGFnZ2VyLiBUaGUgTkVUQyBzd2l0Y2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBkZXZpY2UgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyByZXF1aXJlZCB0byBwcm9iZSB0aGUgZHJpdmVyIGFuZCBpbnN0YW50aWF0ZSB0aGUgRFNBIHN3aXRjaCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW4gYm90aCB0aGUgZHJpdmVyIGFuZCB0aGUgdGFnZ2VyIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTU6NTcuOTA2ODcyNDMyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcxOTk2NzIxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIHN1cHBvcnQgdG8gdGhlIE5YUCBORVRDIHN3aXRjaCBkcml2ZXIgYW5kIGl0cyBhc3NvY2lhdGVkIERTQSB0YWdnZXIuIFRoZSBORVRDIHN3aXRjaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGhhcmR3YXJlIGRldmljZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gU2luY2UgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIHJlcXVpcmVkIHRvIHByb2JlIHRoZSBkcml2ZXIgYW5kIGluc3RhbnRpYXRlIHRoZSBEU0Egc3dpdGNoLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbiBib3RoIHRoZSBkcml2ZXIgYW5kIHRoZSB0YWdnZXIgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA3OjU1OjU3LjkwNjg5NzAxMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxMDk4OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmQ5MzIzZjYzODY2MGI5MjI0ZDk3ZDJmOTAzYTE0MzRiYzJkZDdhY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyOSAwNzo1NTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZ1xcbmluZGV4IDc5M2Y3NjkxYTI0ZjMuLjU1YjFmMTMzOGE4NzggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWdcXG5AQCAtNCw2ICs0LDcgQEAgY29uZmlnIE5FVF9EU0FfTkVUQ19TV0lUQ0hcXG4gXFx0ZGVwZW5kcyBvbiBBUk02NCB8fCBDT01QSUxFX1RFU1RcXG4gXFx0ZGVwZW5kcyBvbiBORVRfRFNBIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiBcXHRkZXBlbmRzIG9uIE5FVF9WRU5ET1JfRlJFRVNDQUxFXFxuK1xcdGRlcGVuZHMgb24gUFRQX05FVENfVjRfVElNRVIgfHwgUFRQX05FVENfVjRfVElNRVI9blxcbiBcXHRzZWxlY3QgTkVUX0RTQV9UQUdfTkVUQ1xcbiBcXHRzZWxlY3QgRlNMX0VORVRDX01ESU9cXG4gXFx0c2VsZWN0IE5YUF9OVE1QXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvTWFrZWZpbGVcXG5pbmRleCBmNDBiMTNjNzAyZTA3Li41NzJiODMzYWQ4MGZjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvTWFrZWZpbGVcXG5AQCAtMSwzICsxLDQgQEBcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuIG9iai0kKENPTkZJR19ORVRfRFNBX05FVENfU1dJVENIKSArPSBueHAtbmV0Yy1zd2l0Y2gub1xcbi1ueHAtbmV0Yy1zd2l0Y2gtb2JqcyA6PSBuZXRjX21haW4ubyBuZXRjX3BsYXRmb3JtLm8gbmV0Y19ldGh0b29sLm9cXG4rbnhwLW5ldGMtc3dpdGNoLW9ianMgOj0gbmV0Y19tYWluLm8gbmV0Y19wbGF0Zm9ybS5vIG5ldGNfZXRodG9vbC5vIFxcXFxcXG4rXFx0XFx0XFx0bmV0Y19wdHAub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jXFxuaW5kZXggNzcwNzczNTJjMWE1Ny4uOTg1NWUwMmI0NzI2NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jXFxuQEAgLTY1LDYgKzY1LDIxIEBAIG5ldGNfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRyZXR1cm4gRFNBX1RBR19QUk9UT19ORVRDO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG5ldGNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHRcXHQgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7XFxuK1xcbitcXHRpZiAocHJvdG8gIT0gRFNBX1RBR19QUk9UT19ORVRDKVxcbitcXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG4rXFxuK1xcdHRhZ2dlcl9kYXRhID0gZHMtXFx1MDAzZXRhZ2dlcl9kYXRhO1xcbitcXHR0YWdnZXJfZGF0YS1cXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIgPSBuZXRjX29uZXN0ZXBfc3luY19oYW5kbGVyO1xcbitcXHR0YWdnZXJfZGF0YS1cXHUwMDNldHdvc3RlcF90c3RhbXBfaGFuZGxlciA9IG5ldGNfdHdvc3RlcF90c3RhbXBfaGFuZGxlcjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBuZXRjX3BvcnRfcm13KHN0cnVjdCBuZXRjX3BvcnQgKm5wLCB1MzIgcmVnLFxcbiBcXHRcXHRcXHQgIHUzMiBtYXNrLCB1MzIgdmFsKVxcbiB7XFxuQEAgLTgwLDcgKzk1LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3JtdyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIHJlZyxcXG4gXFx0bmV0Y19wb3J0X3dyKG5wLCByZWcsIG5ldyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG5ldGNfbWFjX3BvcnRfd3Ioc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3ZvaWQgbmV0Y19tYWNfcG9ydF93cihzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIHJlZywgdTMyIHZhbClcXG4ge1xcbiBcXHRpZiAoaXNfbmV0Y19wc2V1ZG9fcG9ydChucCkpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjM4LDYgKzI1MywxNSBAQCBzdGF0aWMgdm9pZCBuZXRjX2dldF9zd2l0Y2hfY2FwYWJpbGl0aWVzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcXG4gXFx0cHJpdi1cXHUwMDNlbnVtX2JwID0gRklFTERfR0VUKEJQQ0FQUl9OVU1fQlAsIHZhbCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9pbml0X3B0cF9pcGZ0X2VpZChzdHJ1Y3QgbmV0Y19wb3J0ICpucClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgdG8gaW52YWxpZCBlbnRyeSBJRHMgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5FVENfUFRQX01BWDsgaSsrKVxcbitcXHRcXHRucC1cXHUwMDNlcHRwX2lwZnRfZWlkW2ldID0gTlRNUF9OVUxMX0VOVFJZX0lEO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG5ldGNfaW5pdF9hbGxfcG9ydHMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtXFx1MDAzZWRldjtcXG5AQCAtMjg2LDYgKzMxMCwxNyBAQCBzdGF0aWMgaW50IG5ldGNfaW5pdF9hbGxfcG9ydHMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxcbiBcXHRcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBjcmVhdGUgTURJTyBidXNcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHQvKiBUaGUgaXBmdF9oZl9laWQgaXMgaW5pdGlhbGl6ZWQgdG8gYW4gaW52YWxpZCBlbnRyeVxcbitcXHRcXHRcXHQgKiBJRCBiZWNhdXNlIHRoZSBob3N0IGZsb29kIHJ1bGUgKElQRlQgZW50cnkpIGhhcyBub3RcXG4rXFx0XFx0XFx0ICogYmVlbiBjcmVhdGVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0bnAtXFx1MDAzZWlwZnRfaGZfZWlkID0gTlRNUF9OVUxMX0VOVFJZX0lEO1xcbitcXHRcXHRcXHRuZXRjX3BvcnRfaW5pdF9wdHBfaXBmdF9laWQobnApO1xcbitcXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bnAtXFx1MDAzZXB0cF9sb2NrKTtcXG4rXFx0XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZucC1cXHUwMDNlc2tiX3R4dHN0YW1wX3F1ZXVlKTtcXG4rXFx0XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZucC1cXHUwMDNlc2tiX29uZXN0ZXBfcXVldWUpO1xcbitcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNm5wLVxcdTAwM2VvbmVzdGVwX3dvcmssIG5ldGNfcG9ydF9vbmVzdGVwX3dvcmspO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTU0OSw2ICs1ODQsMTIgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X2ZpeGVkX2NvbmZpZyhzdHJ1Y3QgbmV0Y19wb3J0ICpucClcXG4gXFx0bmV0Y19wb3J0X3JtdyhucCwgTkVUQ19QQ1IsIFBDUl9MMkRPU0UgfCBQQ1JfTDNET1NFLFxcbiBcXHRcXHQgICAgICBQQ1JfTDJET1NFIHwgUENSX0wzRE9TRSk7XFxuIFxcbitcXHQvKiBFbmFibGUgaW5ncmVzcyBwb3J0IGZpbHRlciB0YWJsZSBsb29rdXAsIGlmIG5vIG1hdGNoIGlzIGZvdW5kLFxcbitcXHQgKiB0aGUgZnJhbWUgaXMgYWxsb3dlZCBhbmQgcGFzc2VkIHRvIHRoZSBuZXh0IGZyYW1lIHByb2Nlc3NpbmdcXG4rXFx0ICogZnVuY3Rpb24uXFxuK1xcdCAqL1xcbitcXHRuZXRjX3BvcnRfd3IobnAsIE5FVENfUElQRkNSLCBQSVBGQ1JfRU4pO1xcbitcXG4gXFx0LyogU2V0IHRoZSBxdWFudGEgdmFsdWUgb2YgVFggUEFVU0UgZnJhbWUgKi9cXG4gXFx0bmV0Y19tYWNfcG9ydF93cihucCwgTkVUQ19QTV9QQVVTRV9RVUFOVEEoMCksIE5FVENfUEFVU0VfUVVBTlRBKTtcXG4gXFxuQEAgLTg2OSw2ICs5MTAsMTUgQEAgc3RhdGljIGludCBuZXRjX3N3aXRjaF9icHRfZGVmYXVsdF9jb25maWcoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpuZXRjX2dldF9wdHBfdGltZXIoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfYnVzICpidXMgPSBwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VidXM7XFxuK1xcdHUzMiBkZXZmbiA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXRtcl9kZXZmbjtcXG4rXFxuK1xcdHJldHVybiBwY2lfZ2V0X2RvbWFpbl9idXNfYW5kX3Nsb3QocGNpX2RvbWFpbl9ucihidXMpLFxcbitcXHRcXHRcXHRcXHRcXHQgICBidXMtXFx1MDAzZW51bWJlciwgZGV2Zm4pO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG5ldGNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbkBAIC04ODksNiArOTM5LDE2IEBAIHN0YXRpYyBpbnQgbmV0Y19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbitcXHQvKiBUaGUgUFRQIHRpbWVyIHNpdHMgb24gdGhlIHNhbWUgUENJIGJ1cyBhcyB0aGUgc3dpdGNoLiBQQ0kgY3JlYXRlc1xcbitcXHQgKiBldmVyeSBmdW5jdGlvbidzIHBjaV9kZXYgZHVyaW5nIGJ1cyBlbnVtZXJhdGlvbiwgYmVmb3JlIGFueSBkcml2ZXJcXG4rXFx0ICogcHJvYmVzLCBzbyB3ZSBjYW4gZ3JhYiB0aGUgdGltZXIncyBwY2lfZGV2IGhlcmUgZXZlbiBpZiB0aGUgdGltZXJcXG4rXFx0ICogZHJpdmVyIGhhcyBub3QgcHJvYmVkIHlldC5cXG4rXFx0ICovXFxuK1xcdHByaXYtXFx1MDAzZXRtcl9kZXYgPSBuZXRjX2dldF9wdHBfdGltZXIocHJpdik7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNldG1yX2RldilcXG4rXFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIlBUUCB0aW1lciBQQ0kgZGV2aWNlIG5vdCBmb3VuZFxcXFxuXFxcIik7XFxuK1xcbiBcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNnByaXYtXFx1MDAzZWZkYl9saXN0KTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlZmRidF9sb2NrKTtcXG4gXFx0cHJpdi1cXHUwMDNlZmRidF9hZ2VpbmdfZGVsYXkgPSBORVRDX0ZEQlRfQUdFSU5HX0RFTEFZO1xcbkBAIC05MjUsNiArOTg1LDcgQEAgc3RhdGljIGludCBuZXRjX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0ICovXFxuIFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnByaXYtXFx1MDAzZWZkYnRfbG9jayk7XFxuIFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnByaXYtXFx1MDAzZXZmdF9sb2NrKTtcXG4rXFx0cGNpX2Rldl9wdXQocHJpdi1cXHUwMDNldG1yX2Rldik7XFxuIFxcdG5ldGNfZnJlZV9udG1wX3VzZXIocHJpdik7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC05MzgsMjAgKzk5OSwyMyBAQCBzdGF0aWMgdm9pZCBuZXRjX2Rlc3Ryb3lfYWxsX2xpc3RzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cHJpdi1cXHUwMDNldmZ0X2xvY2spO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBuZXRjX2ZyZWVfaG9zdF9mbG9vZF9ydWxlcyhzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpXFxuK3N0YXRpYyB2b2lkIG5ldGNfZnJlZV9wb3J0c19yZXNvdXJjZXMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxcbiB7XFxuIFxcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuIFxcbi1cXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgcHJpdi1cXHUwMDNlZHMpIHtcXG4rXFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9hdmFpbGFibGVfcG9ydChkcCwgcHJpdi1cXHUwMDNlZHMpIHtcXG4gXFx0XFx0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBwcml2LVxcdTAwM2Vwb3J0c1tkcC1cXHUwMDNlaW5kZXhdO1xcbiBcXG4tXFx0XFx0LyogTm8gbmVlZCB0byBjbGVhciB0aGUgaGFyZHdhcmUgSVBGVCBlbnRyeS4gQmVjYXVzZSBQQ0llXFxuLVxcdFxcdCAqIEZMUiB3aWxsIGJlIHBlcmZvcm1lZCB3aGVuIHRoZSBzd2l0Y2ggaXMgcmUtcmVnaXN0ZXJlZCxcXG4tXFx0XFx0ICogaXQgd2lsbCByZXNldCBoYXJkd2FyZSBzdGF0ZS4gU28gb25seSBuZWVkIHRvIGZyZWUgdGhlXFxuLVxcdFxcdCAqIG1lbW9yeSB0byBhdm9pZCBtZW1vcnkgbGVhay5cXG4rXFx0XFx0aWYgKCFkc2FfcG9ydF9pc191c2VyKGRwKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBObyBuZXcgU0tCcyBjYW4gYmUgZW5xdWV1ZWQgZHVyaW5nIHRlYXJkb3duLiBQdXJnZSB3aXRob3V0XFxuK1xcdFxcdCAqIHRoZSBzcGlubG9jayB0byBhdm9pZCBjYWxsaW5nIGtmcmVlX3NrYigpIHdpdGggYSBkZXN0cnVjdG9yXFxuK1xcdFxcdCAqIChzb2NrX2VmcmVlKSB3aGlsZSBob2xkaW5nIGEgc3BpbmxvY2suXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRrZnJlZShucC1cXHUwMDNlaG9zdF9mbG9vZCk7XFxuLVxcdFxcdG5wLVxcdTAwM2Vob3N0X2Zsb29kID0gTlVMTDtcXG4rXFx0XFx0X19za2JfcXVldWVfcHVyZ2UoXFx1MDAyNm5wLVxcdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUpO1xcbitcXHRcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZucC1cXHUwMDNlb25lc3RlcF93b3JrKTtcXG4rXFx0XFx0X19za2JfcXVldWVfcHVyZ2UoXFx1MDAyNm5wLVxcdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtOTYxLDggKzEwMjUsOSBAQCBzdGF0aWMgdm9pZCBuZXRjX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFxuIFxcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZWZkYnRfYWdlaW5nX3dvcmspO1xcbiBcXHRuZXRjX2Rlc3Ryb3lfYWxsX2xpc3RzKHByaXYpO1xcbi1cXHRuZXRjX2ZyZWVfaG9zdF9mbG9vZF9ydWxlcyhwcml2KTtcXG4rXFx0cGNpX2Rldl9wdXQocHJpdi1cXHUwMDNldG1yX2Rldik7XFxuIFxcdG5ldGNfZnJlZV9udG1wX3VzZXIocHJpdik7XFxuK1xcdG5ldGNfZnJlZV9wb3J0c19yZXNvdXJjZXMocHJpdik7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG5ldGNfcG9ydF9pc19lbWRpb19jb25zdW1lcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuQEAgLTE3MjAsOCArMTc4NSw2IEBAIHN0YXRpYyBpbnQgbmV0Y19wb3J0X2FkZF9ob3N0X2Zsb29kX3J1bGUoc3RydWN0IG5ldGNfcG9ydCAqbnAsXFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRpZiAoIXVjIFxcdTAwMjZcXHUwMDI2ICFtYykge1xcbi1cXHRcXHQvKiBEaXNhYmxlIGluZ3Jlc3MgcG9ydCBmaWx0ZXIgdGFibGUgbG9va3VwICovXFxuLVxcdFxcdG5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIDApO1xcbiBcXHRcXHRucC1cXHUwMDNldWMgPSBmYWxzZTtcXG4gXFx0XFx0bnAtXFx1MDAzZW1jID0gZmFsc2U7XFxuIFxcbkBAIC0xNzU5LDQwICsxODIyLDM2IEBAIHN0YXRpYyBpbnQgbmV0Y19wb3J0X2FkZF9ob3N0X2Zsb29kX3J1bGUoc3RydWN0IG5ldGNfcG9ydCAqbnAsXFxuIFxcdGNmZ2UtXFx1MDAzZWNmZyA9IGNwdV90b19sZTMyKGNmZyk7XFxuIFxcbiBcXHRlcnIgPSBudG1wX2lwZnRfYWRkX2VudHJ5KFxcdTAwMjZwcml2LVxcdTAwM2VudG1wLCBob3N0X2Zsb29kKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRrZnJlZShob3N0X2Zsb29kKTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGZyZWVfaG9zdF9mbG9vZDtcXG4gXFxuIFxcdG5wLVxcdTAwM2V1YyA9IHVjO1xcbiBcXHRucC1cXHUwMDNlbWMgPSBtYztcXG4tXFx0bnAtXFx1MDAzZWhvc3RfZmxvb2QgPSBob3N0X2Zsb29kO1xcbi1cXHQvKiBFbmFibGUgaW5ncmVzcyBwb3J0IGZpbHRlciB0YWJsZSBsb29rdXAgKi9cXG4tXFx0bmV0Y19wb3J0X3dyKG5wLCBORVRDX1BJUEZDUiwgUElQRkNSX0VOKTtcXG4rXFx0bnAtXFx1MDAzZWlwZnRfaGZfZWlkID0gaG9zdF9mbG9vZC1cXHUwMDNlZW50cnlfaWQ7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rZnJlZV9ob3N0X2Zsb29kOlxcbitcXHRrZnJlZShob3N0X2Zsb29kKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlwZnRfZW50cnlfZGF0YSAqaG9zdF9mbG9vZClcXG4rc3RhdGljIHZvaWQgbmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKHN0cnVjdCBuZXRjX3BvcnQgKm5wLCB1MzIgZW50cnlfaWQpXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtXFx1MDAzZXN3aXRjaF9wcml2O1xcbiBcXHRib29sIGRpc2FibGVfaG9zdF9mbG9vZCA9IGZhbHNlO1xcbiBcXG4tXFx0aWYgKCFob3N0X2Zsb29kKVxcbitcXHRpZiAoZW50cnlfaWQgPT0gTlRNUF9OVUxMX0VOVFJZX0lEKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZiAobnAtXFx1MDAzZWhvc3RfZmxvb2QgPT0gaG9zdF9mbG9vZClcXG4rXFx0aWYgKG5wLVxcdTAwM2VpcGZ0X2hmX2VpZCA9PSBlbnRyeV9pZClcXG4gXFx0XFx0ZGlzYWJsZV9ob3N0X2Zsb29kID0gdHJ1ZTtcXG4gXFxuLVxcdG50bXBfaXBmdF9kZWxldGVfZW50cnkoXFx1MDAyNnByaXYtXFx1MDAzZW50bXAsIGhvc3RfZmxvb2QtXFx1MDAzZWVudHJ5X2lkKTtcXG4tXFx0a2ZyZWUoaG9zdF9mbG9vZCk7XFxuK1xcdG50bXBfaXBmdF9kZWxldGVfZW50cnkoXFx1MDAyNnByaXYtXFx1MDAzZW50bXAsIGVudHJ5X2lkKTtcXG4gXFxuIFxcdGlmIChkaXNhYmxlX2hvc3RfZmxvb2QpIHtcXG4tXFx0XFx0bnAtXFx1MDAzZWhvc3RfZmxvb2QgPSBOVUxMO1xcbitcXHRcXHRucC1cXHUwMDNlaXBmdF9oZl9laWQgPSBOVE1QX05VTExfRU5UUllfSUQ7XFxuIFxcdFxcdG5wLVxcdTAwM2V1YyA9IGZhbHNlO1xcbiBcXHRcXHRucC1cXHUwMDNlbWMgPSBmYWxzZTtcXG4tXFx0XFx0bmV0Y19wb3J0X3dyKG5wLCBORVRDX1BJUEZDUiwgMCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMTgwMCw3ICsxODU5LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3NldF9ob3N0X2Zsb29kKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdFxcdFxcdCAgICAgYm9vbCB1YywgYm9vbCBtYylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XFxuLVxcdHN0cnVjdCBpcGZ0X2VudHJ5X2RhdGEgKm9sZF9ob3N0X2Zsb29kO1xcbitcXHR1MzIgb2xkX2VudHJ5X2lkO1xcbiBcXG4gXFx0LyogRG8gbm90IGFkZCBob3N0IGZsb29kIHJ1bGUgdG8gaW5ncmVzcyBwb3J0IGZpbHRlciB0YWJsZSB3aGVuXFxuIFxcdCAqIHRoZSBwb3J0IGhhcyBqb2luZWQgYSBicmlkZ2UuIE90aGVyd2lzZSwgdGhlIGluZ3Jlc3MgZnJhbWVzXFxuQEAgLTE4MDgsNyArMTg2Nyw3IEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9zZXRfaG9zdF9mbG9vZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHQgKiB3aWxsIGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHkgdG8gdGhlIENQVSBwb3J0LlxcbiBcXHQgKi9cXG4gXFx0aWYgKGRzYV9wb3J0X2JyaWRnZV9kZXZfZ2V0KG5wLVxcdTAwM2VkcCkpIHtcXG4tXFx0XFx0bmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBucC1cXHUwMDNlaG9zdF9mbG9vZCk7XFxuK1xcdFxcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgbnAtXFx1MDAzZWlwZnRfaGZfZWlkKTtcXG4gXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbkBAIC0xODE4LDIwICsxODc3LDE4IEBAIHN0YXRpYyB2b2lkIG5ldGNfcG9ydF9zZXRfaG9zdF9mbG9vZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXG4gXFx0LyogSVBGVCBkb2VzIG5vdCBzdXBwb3J0IGluLXBsYWNlIHVwZGF0ZXMgdG8gdGhlIEtFWUUgZWxlbWVudCxcXG4gXFx0ICogd2UgbmVlZCB0byBhZGQgYSBuZXcgZW50cnkgYW5kIHRoZW4gZGVsZXRlIHRoZSBvbGQgb25lLiBTb1xcbi1cXHQgKiBzYXZlIHRoZSBvbGQgZW50cnkgZmlyc3QuXFxuK1xcdCAqIHNhdmUgdGhlIG9sZCBlbnRyeSBJRCBmaXJzdC5cXG4gXFx0ICovXFxuLVxcdG9sZF9ob3N0X2Zsb29kID0gbnAtXFx1MDAzZWhvc3RfZmxvb2Q7XFxuLVxcdG5wLVxcdTAwM2Vob3N0X2Zsb29kID0gTlVMTDtcXG4rXFx0b2xkX2VudHJ5X2lkID0gbnAtXFx1MDAzZWlwZnRfaGZfZWlkO1xcbiBcXG4gXFx0aWYgKG5ldGNfcG9ydF9hZGRfaG9zdF9mbG9vZF9ydWxlKG5wLCB1YywgbWMpKSB7XFxuLVxcdFxcdG5wLVxcdTAwM2Vob3N0X2Zsb29kID0gb2xkX2hvc3RfZmxvb2Q7XFxuIFxcdFxcdGRldl9lcnIoZHMtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byBhZGQgaG9zdCBmbG9vZCBydWxlIG9uIHBvcnQgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHBvcnQpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFJlbW92ZSB0aGUgb2xkIGhvc3QgZmxvb2QgZW50cnkgKi9cXG4tXFx0bmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBvbGRfaG9zdF9mbG9vZCk7XFxuK1xcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgb2xkX2VudHJ5X2lkKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZXRjX3NpbmdsZV92bGFuX2F3YXJlX2JyaWRnZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuQEAgLTIwMjAsNyArMjA3Nyw3IEBAIHN0YXRpYyBpbnQgbmV0Y19wb3J0X2JyaWRnZV9qb2luKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdG5ldGNfcG9ydF9zZXRfcHZpZChucCwgdmxhbl91bmF3YXJlX3B2aWQpO1xcbiBcXG4gb3V0Olxcbi1cXHRuZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2QobnAsIG5wLVxcdTAwM2Vob3N0X2Zsb29kKTtcXG4rXFx0bmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBucC1cXHUwMDNlaXBmdF9oZl9laWQpO1xcbiBcXG4gXFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZwcml2LVxcdTAwM2Vicl9jbnQpID09IDEpXFxuIFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cHJpdi1cXHUwMDNlZmRidF9hZ2Vpbmdfd29yayxcXG5AQCAtMjQwMiw2ICsyNDU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgbmV0Y19waHlsaW5rX21hY19vcHMgPSB7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG5ldGNfc3dpdGNoX29wcyA9IHtcXG4gXFx0LmdldF90YWdfcHJvdG9jb2xcXHRcXHQ9IG5ldGNfZ2V0X3RhZ19wcm90b2NvbCxcXG4rXFx0LmNvbm5lY3RfdGFnX3Byb3RvY29sXFx0XFx0PSBuZXRjX2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxcbiBcXHQuc2V0dXBcXHRcXHRcXHRcXHQ9IG5ldGNfc2V0dXAsXFxuIFxcdC50ZWFyZG93blxcdFxcdFxcdD0gbmV0Y190ZWFyZG93bixcXG4gXFx0LnBoeWxpbmtfZ2V0X2NhcHNcXHRcXHQ9IG5ldGNfcGh5bGlua19nZXRfY2FwcyxcXG5AQCAtMjQzMCw2ICsyNDg4LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbmV0Y19zd2l0Y2hfb3BzID0ge1xcbiBcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHRcXHQ9IG5ldGNfcG9ydF9nZXRfc3NldF9jb3VudCxcXG4gXFx0LmdldF9zdHJpbmdzXFx0XFx0XFx0PSBuZXRjX3BvcnRfZ2V0X3N0cmluZ3MsXFxuIFxcdC5nZXRfZXRodG9vbF9zdGF0c1xcdFxcdD0gbmV0Y19wb3J0X2dldF9ldGh0b29sX3N0YXRzLFxcbitcXHQuZ2V0X3RzX2luZm9cXHRcXHRcXHQ9IG5ldGNfZ2V0X3RzX2luZm8sXFxuK1xcdC5wb3J0X2h3dHN0YW1wX3NldFxcdFxcdD0gbmV0Y19wb3J0X2h3dHN0YW1wX3NldCxcXG4rXFx0LnBvcnRfaHd0c3RhbXBfZ2V0XFx0XFx0PSBuZXRjX3BvcnRfaHd0c3RhbXBfZ2V0LFxcbitcXHQucG9ydF9yeHRzdGFtcFxcdFxcdFxcdD0gbmV0Y19wb3J0X3J4dHN0YW1wLFxcbitcXHQucG9ydF90eHRzdGFtcFxcdFxcdFxcdD0gbmV0Y19wb3J0X3R4dHN0YW1wLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBuZXRjX3N3aXRjaF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wbGF0Zm9ybS5jIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wbGF0Zm9ybS5jXFxuaW5kZXggMzRhZWI2ZmNlYjNjYi4uNGZkMGNlNjc3MGMzMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3BsYXRmb3JtLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3BsYXRmb3JtLmNcXG5AQCAtNTAsNiArNTAsNyBAQCBzdGF0aWMgdm9pZCBpbXg5NF9zd2l0Y2hfcGh5bGlua19nZXRfY2FwcyhpbnQgcG9ydCxcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0Y19zd2l0Y2hfaW5mbyBpbXg5NF9pbmZvID0ge1xcbiBcXHQubnVtX3BvcnRzID0gNCxcXG4rXFx0LnRtcl9kZXZmbiA9IFBDSV9ERVZGTigwLCAxKSxcXG4gXFx0LnBoeWxpbmtfZ2V0X2NhcHMgPSBpbXg5NF9zd2l0Y2hfcGh5bGlua19nZXRfY2FwcyxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcHRwLmMgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3B0cC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mZjdkOGU1ZTY4ZDIzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcHRwLmNcXG5AQCAtMCwwICsxLDY2MyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIEJTRC0zLUNsYXVzZSlcXG4rLypcXG4rICogTlhQIE5FVEMgc3dpdGNoIGRyaXZlclxcbisgKiBDb3B5cmlnaHQgMjAyNS0yMDI2IE5YUFxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xhc3NpZnkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJuZXRjX3N3aXRjaC5oXFxcIlxcbitcXG4rI2RlZmluZSBORVRDX1RTX1JFUV9JRF9OVU1cXHRcXHQoTkVUQ19UQUdfVFNfUkVRX0lEICsgMSlcXG4rI2RlZmluZSBORVRDX1BUUF9UWF9UU1RBTVBfVElNRU9VVFxcdCg1ICogSFopXFxuK1xcbitzdGF0aWMgaW50IG5ldGNfZ2V0X3BoY19pbmRleChzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpXFxuK3tcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2V0bXJfZGV2KVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHJldHVybiBwdHBfY2xvY2tfaW5kZXhfYnlfZGV2KFxcdTAwMjZwcml2LVxcdTAwM2V0bXJfZGV2LVxcdTAwM2VkZXYpO1xcbit9XFxuK1xcbitpbnQgbmV0Y19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHQgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aW5mby1cXHUwMDNlc29fdGltZXN0YW1waW5nID0gU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSB8XFxuK1xcdFxcdFxcdFxcdFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgfFxcbitcXHRcXHRcXHRcXHRTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFO1xcbitcXG4rXFx0aW5mby1cXHUwMDNlcGhjX2luZGV4ID0gbmV0Y19nZXRfcGhjX2luZGV4KHByaXYpO1xcbitcXHRpZiAoaW5mby1cXHUwMDNlcGhjX2luZGV4IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpbmZvLVxcdTAwM2Vzb190aW1lc3RhbXBpbmcgfD0gU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSB8XFxuK1xcdFxcdFxcdFxcdCBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFIHxcXG4rXFx0XFx0XFx0XFx0IFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFO1xcbitcXG4rXFx0aW5mby1cXHUwMDNldHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT0ZGKSB8IEJJVChIV1RTVEFNUF9UWF9PTikgfFxcbitcXHRcXHRcXHQgQklUKEhXVFNUQU1QX1RYX09ORVNURVBfU1lOQyk7XFxuK1xcbitcXHRpbmZvLVxcdTAwM2VyeF9maWx0ZXJzID0gQklUKEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8XFxuK1xcdFxcdFxcdCAgIEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UKSB8XFxuK1xcdFxcdFxcdCAgIEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKSB8XFxuK1xcdFxcdFxcdCAgIEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnApXFxuK3tcXG4rXFx0c3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtXFx1MDAzZXN3aXRjaF9wcml2O1xcbitcXHR1MzIgZW50cnlfaWQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5FVENfUFRQX01BWDsgaSsrKSB7XFxuK1xcdFxcdGVudHJ5X2lkID0gbnAtXFx1MDAzZXB0cF9pcGZ0X2VpZFtpXTtcXG4rXFx0XFx0aWYgKGVudHJ5X2lkICE9IE5UTVBfTlVMTF9FTlRSWV9JRCkge1xcbitcXHRcXHRcXHRudG1wX2lwZnRfZGVsZXRlX2VudHJ5KFxcdTAwMjZwcml2LVxcdTAwM2VudG1wLCBlbnRyeV9pZCk7XFxuK1xcdFxcdFxcdG5wLVxcdTAwM2VwdHBfaXBmdF9laWRbaV0gPSBOVE1QX05VTExfRU5UUllfSUQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IG5ldGNfYnVpbGRfcHRwX2lwZnRfa2V5ZShzdHJ1Y3QgaXBmdF9rZXllX2RhdGEgKmtleWUsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgZW51bSBuZXRjX3B0cF90eXBlIHR5cGUpXFxuK3tcXG4rXFx0dTE2IHNyY19wb3J0LCBmcm1fYXR0cl9mbGFncztcXG4rXFxuK1xcdGtleWUtXFx1MDAzZXByZWNlZGVuY2UgPSBjcHVfdG9fbGUxNigweGYwMDApO1xcbitcXHRzcmNfcG9ydCA9IEZJRUxEX1BSRVAoSVBGVF9TUkNfUE9SVCwgcG9ydCk7XFxuK1xcdHNyY19wb3J0IHw9IElQRlRfU1JDX1BPUlRfTUFTSztcXG4rXFx0a2V5ZS1cXHUwMDNlc3JjX3BvcnQgPSBjcHVfdG9fbGUxNihzcmNfcG9ydCk7XFxuK1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBORVRDX1BUUF9MMjpcXG4rXFx0XFx0a2V5ZS1cXHUwMDNlZXRoZXJ0eXBlID0gaHRvbnMoRVRIX1BfMTU4OCk7XFxuK1xcdFxcdGtleWUtXFx1MDAzZWV0aGVydHlwZV9tYXNrID0gaHRvbnMoMHhmZmZmKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTkVUQ19QVFBfTDRfSVBWNF9FVkVOVDpcXG4rXFx0Y2FzZSBORVRDX1BUUF9MNF9JUFY0X0dFTkVSQUw6XFxuK1xcdGNhc2UgTkVUQ19QVFBfTDRfSVBWNl9FVkVOVDpcXG4rXFx0Y2FzZSBORVRDX1BUUF9MNF9JUFY2X0dFTkVSQUw6XFxuK1xcdFxcdGZybV9hdHRyX2ZsYWdzID0gSVBGVF9GQUZfSVBfSERSIHwgRklFTERfUFJFUChJUEZUX0ZBRl9MNF9DT0RFLFxcbitcXHRcXHRcXHRcXHQgSVBGVF9GQUZfVURQX0hEUik7XFxuK1xcdFxcdGlmICh0eXBlID09IE5FVENfUFRQX0w0X0lQVjZfRVZFTlQgfHxcXG4rXFx0XFx0ICAgIHR5cGUgPT0gTkVUQ19QVFBfTDRfSVBWNl9HRU5FUkFMKVxcbitcXHRcXHRcXHRmcm1fYXR0cl9mbGFncyB8PSBJUEZUX0ZBRl9JUF9WRVI2O1xcbitcXG4rXFx0XFx0a2V5ZS1cXHUwMDNlZnJtX2F0dHJfZmxhZ3MgPSBjcHVfdG9fbGUxNihmcm1fYXR0cl9mbGFncyk7XFxuK1xcdFxcdGtleWUtXFx1MDAzZWZybV9hdHRyX2ZsYWdzX21hc2sgPSBrZXllLVxcdTAwM2Vmcm1fYXR0cl9mbGFncztcXG4rXFx0XFx0a2V5ZS1cXHUwMDNlaXBfcHJvdG9jb2wgPSBJUFBST1RPX1VEUDtcXG4rXFx0XFx0a2V5ZS1cXHUwMDNlaXBfcHJvdG9jb2xfbWFzayA9IDB4ZmY7XFxuK1xcbitcXHRcXHRpZiAodHlwZSA9PSBORVRDX1BUUF9MNF9JUFY0X0VWRU5UIHx8XFxuK1xcdFxcdCAgICB0eXBlID09IE5FVENfUFRQX0w0X0lQVjZfRVZFTlQpXFxuK1xcdFxcdFxcdGtleWUtXFx1MDAzZWw0X2RzdF9wb3J0ID0gaHRvbnMoUFRQX0VWX1BPUlQpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGtleWUtXFx1MDAzZWw0X2RzdF9wb3J0ID0gaHRvbnMoUFRQX0dFTl9QT1JUKTtcXG4rXFxuK1xcdFxcdGtleWUtXFx1MDAzZWw0X2RzdF9wb3J0X21hc2sgPSBodG9ucygweGZmZmYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkoc3RydWN0IG5ldGNfcG9ydCAqbnAsXFxuK1xcdFxcdFxcdFxcdFxcdGVudW0gbmV0Y19wdHBfdHlwZSB0eXBlKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IG5wLVxcdTAwM2Vzd2l0Y2hfcHJpdjtcXG4rXFx0c3RydWN0IGlwZnRfZW50cnlfZGF0YSAqZW50cnk7XFxuK1xcdHN0cnVjdCBpcGZ0X2tleWVfZGF0YSAqa2V5ZTtcXG4rXFx0dTMyIGNmZztcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVudHJ5ID0ga3phbGxvY19vYmooKmVudHJ5KTtcXG4rXFx0aWYgKCFlbnRyeSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRrZXllID0gXFx1MDAyNmVudHJ5LVxcdTAwM2VrZXllO1xcbitcXHRlcnIgPSBuZXRjX2J1aWxkX3B0cF9pcGZ0X2tleWUoa2V5ZSwgbnAtXFx1MDAzZWRwLVxcdTAwM2VpbmRleCwgdHlwZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZnJlZV9lbnRyeTtcXG4rXFxuK1xcdGNmZyA9IEZJRUxEX1BSRVAoSVBGVF9GTFRGQSwgSVBGVF9GTFRGQV9SRURJUkVDVCk7XFxuK1xcdGNmZyB8PSBGSUVMRF9QUkVQKElQRlRfSFIsIE5FVENfSFJfUFRQX1RSQVApO1xcbitcXHRjZmcgfD0gSVBGVF9USU1FQ0FQRSB8IElQRlRfUlJUO1xcbitcXHRlbnRyeS1cXHUwMDNlY2ZnZS5jZmcgPSBjcHVfdG9fbGUzMihjZmcpO1xcbitcXG4rXFx0ZXJyID0gbnRtcF9pcGZ0X2FkZF9lbnRyeShcXHUwMDI2cHJpdi1cXHUwMDNlbnRtcCwgZW50cnkpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGZyZWVfZW50cnk7XFxuK1xcbitcXHRucC1cXHUwMDNlcHRwX2lwZnRfZWlkW3R5cGVdID0gZW50cnktXFx1MDAzZWVudHJ5X2lkO1xcbitcXG4rZnJlZV9lbnRyeTpcXG4rXFx0a2ZyZWUoZW50cnkpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2wyX3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnApXFxuK3tcXG4rXFx0cmV0dXJuIG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0wyKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2w0X3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnApXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjRfRVZFTlQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gbmV0Y19wb3J0X2FkZF9pcGZ0X3B0cF9lbnRyeShucCwgTkVUQ19QVFBfTDRfSVBWNF9HRU5FUkFMKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBkZWxfcHRwX2ZpbHRlcjtcXG4rXFxuK1xcdGVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjZfRVZFTlQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGRlbF9wdHBfZmlsdGVyO1xcbitcXG4rXFx0ZXJyID0gbmV0Y19wb3J0X2FkZF9pcGZ0X3B0cF9lbnRyeShucCwgTkVUQ19QVFBfTDRfSVBWNl9HRU5FUkFMKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBkZWxfcHRwX2ZpbHRlcjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZGVsX3B0cF9maWx0ZXI6XFxuK1xcdG5ldGNfcG9ydF9kZWxfcHRwX2ZpbHRlcihucCk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfbDJfbDRfcHRwX2ZpbHRlcihzdHJ1Y3QgbmV0Y19wb3J0ICpucClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gbmV0Y19wb3J0X2FkZF9sMl9wdHBfZmlsdGVyKG5wKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVyciA9IG5ldGNfcG9ydF9hZGRfbDRfcHRwX2ZpbHRlcihucCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZGVsX3B0cF9maWx0ZXI7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2RlbF9wdHBfZmlsdGVyOlxcbitcXHRuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIobnApO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBuZXRjX3BvcnRfc2V0X3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnAsIGludCByeF9maWx0ZXIpXFxuK3tcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAobnAtXFx1MDAzZXB0cF9yeF9maWx0ZXIgPT0gcnhfZmlsdGVyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChucC1cXHUwMDNlcHRwX3J4X2ZpbHRlciAhPSBIV1RTVEFNUF9GSUxURVJfTk9ORSB8fFxcbitcXHQgICAgcnhfZmlsdGVyID09IEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB7XFxuK1xcdFxcdG5ldGNfcG9ydF9kZWxfcHRwX2ZpbHRlcihucCk7XFxuK1xcdFxcdG5wLVxcdTAwM2VwdHBfcnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAocnhfZmlsdGVyKSB7XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ6XFxuK1xcdFxcdGVyciA9IG5ldGNfcG9ydF9hZGRfbDJfcHRwX2ZpbHRlcihucCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfRVZFTlQ6XFxuK1xcdFxcdGVyciA9IG5ldGNfcG9ydF9hZGRfbDRfcHRwX2ZpbHRlcihucCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6XFxuK1xcdFxcdGVyciA9IG5ldGNfcG9ydF9hZGRfbDJfbDRfcHRwX2ZpbHRlcihucCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRlcnIgPSAtRVJBTkdFO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0bnAtXFx1MDAzZXB0cF9yeF9maWx0ZXIgPSByeF9maWx0ZXI7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IG5ldGNfcG9ydF9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRjX3BvcnQgKm5wID0gTkVUQ19QT1JUKGRzLCBwb3J0KTtcXG4rXFx0c3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdGludCByeF9maWx0ZXIsIGVycjtcXG4rXFxuK1xcdHN3aXRjaCAoY29uZmlnLVxcdTAwM2V0eF90eXBlKSB7XFxuK1xcdGNhc2UgSFdUU1RBTVBfVFhfT046XFxuK1xcdGNhc2UgSFdUU1RBTVBfVFhfT0ZGOlxcbitcXHRcXHRucC1cXHUwMDNlcHRwX3R4X3R5cGUgPSBjb25maWctXFx1MDAzZXR4X3R5cGU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhXVFNUQU1QX1RYX09ORVNURVBfU1lOQzpcXG4rXFx0XFx0aWYgKCFwcml2LVxcdTAwM2V0bXJfZGV2KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdFxcdG5wLVxcdTAwM2VwdHBfdHhfdHlwZSA9IGNvbmZpZy1cXHUwMDNldHhfdHlwZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRVJBTkdFO1xcbitcXHR9XFxuK1xcbitcXHRzd2l0Y2ggKGNvbmZpZy1cXHUwMDNlcnhfZmlsdGVyKSB7XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6XFxuK1xcdFxcdHJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9OT05FO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfU1lOQzpcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0RFTEFZX1JFUTpcXG4rXFx0XFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDpcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX1NZTkM6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9ERUxBWV9SRVE6XFxuK1xcdFxcdHJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9TWU5DOlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVROlxcbitcXHRcXHRyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG5ldGNfcG9ydF9zZXRfcHRwX2ZpbHRlcihucCwgcnhfZmlsdGVyKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIHNldCBQVFAgZmlsdGVyXFxcIik7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGNvbmZpZy1cXHUwMDNlcnhfZmlsdGVyID0gcnhfZmlsdGVyO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCBuZXRjX3BvcnRfaHd0c3RhbXBfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBORVRDX1BPUlQoZHMsIHBvcnQpO1xcbitcXG4rXFx0Y29uZmlnLVxcdTAwM2V0eF90eXBlID0gbnAtXFx1MDAzZXB0cF90eF90eXBlO1xcbitcXHRjb25maWctXFx1MDAzZXJ4X2ZpbHRlciA9IG5wLVxcdTAwM2VwdHBfcnhfZmlsdGVyO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbmV0Y19wb3J0X3R4dHN0YW1wX3R3b3N0ZXAoc3RydWN0IG5ldGNfcG9ydCAqbnAsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpjbG9uZSlcXG4re1xcbitcXHRERUNMQVJFX0JJVE1BUCh0c19yZXFfaWRfYml0bWFwLCBORVRDX1RTX1JFUV9JRF9OVU0pO1xcbitcXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBucC1cXHUwMDNlc3dpdGNoX3ByaXY7XFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWQgZnJlZV9saXN0O1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqc2tiX3RtcDtcXG4rXFx0dW5zaWduZWQgbG9uZyB0c19yZXFfaWQ7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0Yml0bWFwX3plcm8odHNfcmVxX2lkX2JpdG1hcCwgTkVUQ19UU19SRVFfSURfTlVNKTtcXG4rXFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZmcmVlX2xpc3QpO1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5wLVxcdTAwM2VwdHBfbG9jayk7XFxuK1xcbitcXHRza2JfcXVldWVfd2Fsa19zYWZlKFxcdTAwMjZucC1cXHUwMDNlc2tiX3R4dHN0YW1wX3F1ZXVlLCBza2IsIHNrYl90bXApIHtcXG4rXFx0XFx0aWYgKHRpbWVfYmVmb3JlKE5FVENfU0tCX0NCKHNrYiktXFx1MDAzZXB0cF90eF90aW1lICtcXG4rXFx0XFx0XFx0XFx0TkVUQ19QVFBfVFhfVFNUQU1QX1RJTUVPVVQsIGppZmZpZXMpKSB7XFxuK1xcdFxcdFxcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFxcIlBvcnQgJWQgdHNfcmVxX2lkICV1IHdoaWNoIHNlZW1zIGxvc3RcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBucC1cXHUwMDNlZHAtXFx1MDAzZWluZGV4LCBORVRDX1NLQl9DQihza2IpLVxcdTAwM2V0c19yZXFfaWQpO1xcbitcXG4rXFx0XFx0XFx0X19za2JfdW5saW5rKHNrYiwgXFx1MDAyNm5wLVxcdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUpO1xcbitcXHRcXHRcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZmcmVlX2xpc3QsIHNrYik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdF9fc2V0X2JpdChORVRDX1NLQl9DQihza2IpLVxcdTAwM2V0c19yZXFfaWQsIHRzX3JlcV9pZF9iaXRtYXApO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHRzX3JlcV9pZCA9IGZpbmRfZmlyc3RfemVyb19iaXQodHNfcmVxX2lkX2JpdG1hcCwgTkVUQ19UU19SRVFfSURfTlVNKTtcXG4rXFx0aWYgKHRzX3JlcV9pZCA9PSBORVRDX1RTX1JFUV9JRF9OVU0pIHtcXG4rXFx0XFx0ZXJyID0gLUVCVVNZO1xcbitcXHRcXHRnb3RvIHVubG9ja19wdHA7XFxuK1xcdH1cXG4rXFxuK1xcdE5FVENfU0tCX0NCKGNsb25lKS1cXHUwMDNldHNfcmVxX2lkID0gdHNfcmVxX2lkO1xcbitcXHRORVRDX1NLQl9DQihjbG9uZSktXFx1MDAzZXB0cF90eF90aW1lID0gamlmZmllcztcXG4rXFx0c2tiX3NoaW5mbyhjbG9uZSktXFx1MDAzZXR4X2ZsYWdzIHw9IFNLQlRYX0lOX1BST0dSRVNTO1xcbitcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZucC1cXHUwMDNlc2tiX3R4dHN0YW1wX3F1ZXVlLCBjbG9uZSk7XFxuK1xcbit1bmxvY2tfcHRwOlxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnAtXFx1MDAzZXB0cF9sb2NrKTtcXG4rXFxuK1xcdC8qIEZyZWUgdGltZWQtb3V0IFNLQnMgb3V0c2lkZSB0aGUgc3BpbmxvY2sgdG8gYXZvaWQgY2FsbGluZ1xcbitcXHQgKiBrZnJlZV9za2IoKSB3aXRoIGEgZGVzdHJ1Y3RvciAoc29ja19lZnJlZSkgdW5kZXIgYSBzcGlubG9jay5cXG4rXFx0ICovXFxuK1xcdF9fc2tiX3F1ZXVlX3B1cmdlKFxcdTAwMjZmcmVlX2xpc3QpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rdm9pZCBuZXRjX3R3b3N0ZXBfdHN0YW1wX2hhbmRsZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0IHU4IHRzX3JlcV9pZCwgdTY0IHRzKVxcbit7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2IsICpza2JfdG1wLCAqc2tiX21hdGNoID0gTlVMTDtcXG4rXFx0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBORVRDX1BPUlQoZHMsIHBvcnQpO1xcbitcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgaHd0c3RhbXBzO1xcbitcXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2bnAtXFx1MDAzZXB0cF9sb2NrKTtcXG4rXFx0c2tiX3F1ZXVlX3dhbGtfc2FmZShcXHUwMDI2bnAtXFx1MDAzZXNrYl90eHRzdGFtcF9xdWV1ZSwgc2tiLCBza2JfdG1wKSB7XFxuK1xcdFxcdGlmIChORVRDX1NLQl9DQihza2IpLVxcdTAwM2V0c19yZXFfaWQgIT0gdHNfcmVxX2lkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdF9fc2tiX3VubGluayhza2IsIFxcdTAwMjZucC1cXHUwMDNlc2tiX3R4dHN0YW1wX3F1ZXVlKTtcXG4rXFx0XFx0c2tiX21hdGNoID0gc2tiO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnAtXFx1MDAzZXB0cF9sb2NrKTtcXG4rXFxuK1xcdGlmICghc2tiX21hdGNoKSB7XFxuK1xcdFxcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIlBvcnQgJWQgcmVjZWl2ZWQgYW4gZXhwaXJlZCBUeCB0aW1lc3RhbXAgcmVzcG9uc2UgKHRzX3JlcV9pZCAldSlcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgcG9ydCwgdHNfcmVxX2lkKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRod3RzdGFtcHMuaHd0c3RhbXAgPSBuc190b19rdGltZSh0cyk7XFxuK1xcdHNrYl9jb21wbGV0ZV90eF90aW1lc3RhbXAoc2tiX21hdGNoLCBcXHUwMDI2aHd0c3RhbXBzKTtcXG4rfVxcbitcXG4rYm9vbCBuZXRjX3BvcnRfcnh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHR5cGUpXFxuK3tcXG4rXFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod3RzdGFtcHMgPSBza2JfaHd0c3RhbXBzKHNrYik7XFxuK1xcdHU2NCB0cyA9IE5FVENfU0tCX0NCKHNrYiktXFx1MDAzZXRzdGFtcDtcXG4rXFxuK1xcdGh3dHN0YW1wcy1cXHUwMDNlaHd0c3RhbXAgPSBuc190b19rdGltZSh0cyk7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9wcmVwYXJlX29uZXN0ZXBfc3luYyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdTMyIHB0cF9jbGFzcywgYm9vbCAqdHdvc3RlcClcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBucC1cXHUwMDNlc3dpdGNoX3ByaXY7XFxuK1xcdHUxNiBjb3JyZWN0aW9uX29mZnNldCwgdGltZXN0YW1wX29mZnNldDtcXG4rXFx0c3RydWN0IHB0cF9oZWFkZXIgKnB0cF9oZHI7XFxuK1xcdHU4IG1zZ190eXBlLCB0d29zdGVwX2ZsYWc7XFxuK1xcdGJvb2wgaXNfdWRwID0gZmFsc2U7XFxuK1xcdHUzMiBwa3RfdHlwZTtcXG4rXFx0dTggKnBrdF9oZHI7XFxuK1xcbitcXHRwdHBfaGRyID0gcHRwX3BhcnNlX2hlYWRlcihza2IsIHB0cF9jbGFzcyk7XFxuK1xcdGlmICghcHRwX2hkcikge1xcbitcXHRcXHRkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJQb3J0ICVkIGZhaWxlZCB0byBwYXJzZSBTeW5jIGhlYWRlclxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIG5wLVxcdTAwM2VkcC1cXHUwMDNlaW5kZXgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHBrdF9oZHIgPSBza2JfbWFjX2hlYWRlcihza2IpO1xcbitcXHRjb3JyZWN0aW9uX29mZnNldCA9ICh1OCAqKVxcdTAwMjZwdHBfaGRyLVxcdTAwM2Vjb3JyZWN0aW9uIC0gcGt0X2hkcjtcXG4rXFx0dGltZXN0YW1wX29mZnNldCA9ICh1OCAqKXB0cF9oZHIgKyBzaXplb2YoKnB0cF9oZHIpIC0gcGt0X2hkcjtcXG4rXFxuK1xcdC8qIEVuc3VyZSB0aGF0IHRoZSBlbnRpcmUgb3JpZ2luVGltZXN0YW1wIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlXFxuK1xcdCAqIGxpbmVhciBidWZmZXIgb2YgdGhlIHNrYi5cXG4rXFx0ICovXFxuK1xcdGlmIChwa3RfaGRyICsgdGltZXN0YW1wX29mZnNldCArIDEwIFxcdTAwM2Ugc2tiLVxcdTAwM2VkYXRhICsgc2tiX2hlYWRsZW4oc2tiKSkge1xcbitcXHRcXHRkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJQb3J0ICVkIFN5bmMgaGVhZGVyIG5vdCBpbiBsaW5lYXIgYXJlYVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIG5wLVxcdTAwM2VkcC1cXHUwMDNlaW5kZXgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdG1zZ190eXBlID0gcHRwX2dldF9tc2d0eXBlKHB0cF9oZHIsIHB0cF9jbGFzcyk7XFxuK1xcdHR3b3N0ZXBfZmxhZyA9IHB0cF9oZHItXFx1MDAzZWZsYWdfZmllbGRbMF0gXFx1MDAyNiAweDI7XFxuK1xcbitcXHQvKiBPbmx5IGEgU3luYyBmcmFtZSB3aXRoIHRoZSB0d29TdGVwRmxhZyBjbGVhcmVkIGNhbiB1c2Ugb25lLXN0ZXBcXG4rXFx0ICogdGltZXN0YW1waW5nLiBBIGZyYW1lIHRoYXQgcmVxdWVzdHMgdHdvLXN0ZXAgKG9yIGlzIG5vdCBhIFN5bmMpXFxuK1xcdCAqIGNhcnJpZXMgZGlmZmVyZW50IG9uLXdpcmUgZmllbGRzLCBzbyB0aGlzIGlzIGEgcmVhbCBjbGFzc2lmaWNhdGlvbjtcXG4rXFx0ICogcmVwb3J0IGl0IHRocm91Z2ggKnR3b3N0ZXAgc28gdGhlIGNhbGxlciBmYWxscyBiYWNrIHRvIHRoZSB0d28tc3RlcFxcbitcXHQgKiBwYXRoLlxcbitcXHQgKi9cXG4rXFx0aWYgKG1zZ190eXBlICE9IFBUUF9NU0dUWVBFX1NZTkMgfHwgdHdvc3RlcF9mbGFnICE9IDApIHtcXG4rXFx0XFx0KnR3b3N0ZXAgPSB0cnVlO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoaXMgaXMgYSBnZW51aW5lIG9uZS1zdGVwIFN5bmMgZnJhbWUuIHNrYl9zaGluZm8oKS1cXHUwMDNlZGVzdHJ1Y3Rvcl9hcmdcXG4rXFx0ICogaXMgbGF0ZXIgdXNlZCB0byBwYXNzIHRoZSBuZXRjX3BvcnQgcG9pbnRlciB0b1xcbitcXHQgKiBuZXRjX29uZXN0ZXBfc2tiX2Rlc3RydWN0b3IoKSBmb3IgVFggY29tcGxldGlvbiBub3RpZmljYXRpb24uXFxuK1xcdCAqIE1TR19aRVJPQ09QWSBhbHNvIHVzZXMgZGVzdHJ1Y3Rvcl9hcmcgKHZpYSBza2JfemNvcHlfaW5pdCgpKSB0b1xcbitcXHQgKiB0cmFjayB1c2VyLXNwYWNlIHBhZ2UgcmVmZXJlbmNlcy4gT3ZlcndyaXRpbmcgaXQgaW4gdGhhdCBjYXNlIHdvdWxkXFxuK1xcdCAqIGxlYWsgdGhlIHVidWZfaW5mbyByZWZlcmVuY2UgYW5kIHByZXZlbnQgdXNlciBwYWdlcyBmcm9tIGJlaW5nXFxuK1xcdCAqIHJlbGVhc2VkLiBQVFAgYXBwbGljYXRpb25zIGRvIG5vdCB1c2UgTVNHX1pFUk9DT1BZLCBidXQgZ3VhcmRcXG4rXFx0ICogYWdhaW5zdCBpdCBkZWZlbnNpdmVseS5cXG4rXFx0ICovXFxuK1xcdGlmIChza2JfemNvcHkoc2tiKSkge1xcbitcXHRcXHRkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJQb3J0ICVkIG9uZS1zdGVwIFN5bmMgbm90IHN1cHBvcnRlZCBvbiB6ZXJvY29weSBza2JcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBucC1cXHUwMDNlZHAtXFx1MDAzZWluZGV4KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRwa3RfdHlwZSA9IHB0cF9jbGFzcyBcXHUwMDI2IFBUUF9DTEFTU19QTUFTSztcXG4rXFx0aWYgKHBrdF90eXBlID09IFBUUF9DTEFTU19JUFY0IHx8IHBrdF90eXBlID09IFBUUF9DTEFTU19JUFY2KVxcbitcXHRcXHRpc191ZHAgPSB0cnVlO1xcbitcXG4rXFx0LyogQ2FjaGUgdGhlIHBhcnNpbmcgcmVzdWx0cyBzbyB0aGUgdGFnZ2VyIHhtaXQgcGF0aCBhbmQgdGhlIGRlZmVycmVkXFxuK1xcdCAqIHdvcmsgZG8gbm90IG5lZWQgdG8gcmUtcGFyc2UgdGhlIFBUUCBoZWFkZXIsIGFuZCBzbyB0aGF0XFxuK1xcdCAqIG5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAoKSBjYW4gZGVyaXZlIHRoZXNlIHBhcmFtZXRlcnMgZnJvbSB0aGVcXG4rXFx0ICogc2tiLlxcbitcXHQgKi9cXG4rXFx0TkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNlY29ycmVjdGlvbl9vZmZzZXQgPSBjb3JyZWN0aW9uX29mZnNldDtcXG4rXFx0TkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNldGltZXN0YW1wX29mZnNldCA9IHRpbWVzdGFtcF9vZmZzZXQ7XFxuK1xcdE5FVENfU0tCX0NCKHNrYiktXFx1MDAzZWlzX3VkcCA9IGlzX3VkcDtcXG4rXFx0TkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNlcHRwX2ZsYWcgPSBORVRDX1BUUF9GTEFHX09ORVNURVA7XFxuK31cXG4rXFxuK3ZvaWQgbmV0Y19wb3J0X3R4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBORVRDX1BPUlQoZHMsIHBvcnQpO1xcbitcXHRib29sIHR3b3N0ZXAgPSBmYWxzZTtcXG4rXFx0dTMyIHB0cF9jbGFzcztcXG4rXFxuK1xcdE5FVENfU0tCX0NCKHNrYiktXFx1MDAzZXB0cF9mbGFnID0gMDtcXG4rXFx0cHRwX2NsYXNzID0gcHRwX2NsYXNzaWZ5X3Jhdyhza2IpO1xcbitcXHRpZiAocHRwX2NsYXNzID09IFBUUF9DTEFTU19OT05FKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAobnAtXFx1MDAzZXB0cF90eF90eXBlID09IEhXVFNUQU1QX1RYX09ORVNURVBfU1lOQylcXG4rXFx0XFx0bmV0Y19wb3J0X3ByZXBhcmVfb25lc3RlcF9zeW5jKG5wLCBza2IsIHB0cF9jbGFzcywgXFx1MDAyNnR3b3N0ZXApO1xcbitcXG4rXFx0aWYgKG5wLVxcdTAwM2VwdHBfdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTiB8fCB0d29zdGVwKSB7XFxuK1xcdFxcdHN0cnVjdCBza19idWZmICpjbG9uZSA9IHNrYl9jbG9uZV9zayhza2IpO1xcbitcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFjbG9uZSkpXFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdFxcdGlmIChuZXRjX3BvcnRfdHh0c3RhbXBfdHdvc3RlcChucCwgY2xvbmUpKSB7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYihjbG9uZSk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0TkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNlY2xvbmUgPSBjbG9uZTtcXG4rXFx0XFx0TkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNlcHRwX2ZsYWcgPSBORVRDX1BUUF9GTEFHX1RXT1NURVA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbmV0Y19wb3J0X3NldF9vbmVzdGVwX2NvbnRyb2woc3RydWN0IG5ldGNfcG9ydCAqbnAsIGJvb2wgdWRwLFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCBvZmZzZXQpXFxuK3tcXG4rXFx0dTMyIHZhbDtcXG4rXFxuK1xcdHZhbCA9IFBNX1NJTkdMRV9TVEVQX0VOIHwgRklFTERfUFJFUChQTV9TSU5HTEVfU1RFUF9PRkZTRVQsIG9mZnNldCk7XFxuK1xcdGlmICh1ZHApXFxuK1xcdFxcdHZhbCB8PSBQTV9TSU5HTEVfU1RFUF9DSDtcXG4rXFx0bmV0Y19tYWNfcG9ydF93cihucCwgTkVUQ19QTV9TSU5HTEVfU1RFUCgwKSwgdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbmV0Y19vbmVzdGVwX3NrYl9kZXN0cnVjdG9yKHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnO1xcbitcXG4rXFx0Lyogc2tiIGhhcyBiZWVuIHRyYW5zbWl0dGVkIGJ5IGhhcmR3YXJlLCBzY2hlZHVsZSB3b3JrIHRvIHNlbmRcXG4rXFx0ICogdGhlIG5leHQgcXVldWVkIG9uZS1zdGVwIFN5bmMgcGFja2V0LlxcbitcXHQgKi9cXG4rXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bnAtXFx1MDAzZW9uZXN0ZXBfd29yayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAoc3RydWN0IG5ldGNfcG9ydCAqbnAsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHU2NCB0c3RhbXApXFxuK3tcXG4rXFx0dTE2IGNvcnJlY3Rpb25fb2Zmc2V0ID0gTkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNlY29ycmVjdGlvbl9vZmZzZXQ7XFxuK1xcdHUxNiB0aW1lc3RhbXBfb2Zmc2V0ID0gTkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNldGltZXN0YW1wX29mZnNldDtcXG4rXFx0Ym9vbCBpc191ZHAgPSBORVRDX1NLQl9DQihza2IpLVxcdTAwM2Vpc191ZHA7XFxuK1xcdHU4ICpwa3RfaGRyID0gc2tiX21hY19oZWFkZXIoc2tiKTtcXG4rXFx0dTY0IHNlYztcXG4rXFx0dTMyIG5zO1xcbitcXG4rXFx0TkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNldHN0YW1wID0gdHN0YW1wO1xcbitcXHRORVRDX1NLQl9DQihza2IpLVxcdTAwM2VwdHBfZmxhZyA9IE5FVENfUFRQX0ZMQUdfT05FU1RFUDtcXG4rXFxuK1xcdC8qIFVwZGF0ZSBvcmlnaW5UaW1lc3RhbXAgZmllbGQgb2YgU3luYyBwYWNrZXRcXG4rXFx0ICogLSA0OCBiaXRzIHNlY29uZHMgZmllbGRcXG4rXFx0ICogLSAzMiBiaXRzIG5hbm9zZWNvbmRzIGZpZWxkXFxuK1xcdCAqL1xcbitcXHRzZWMgPSBkaXZfdTY0X3JlbSh0c3RhbXAsIE5TRUNfUEVSX1NFQywgXFx1MDAyNm5zKTtcXG4rXFx0cHV0X3VuYWxpZ25lZF9iZTE2KChzZWMgXFx1MDAzZVxcdTAwM2UgMzIpIFxcdTAwMjYgMHhmZmZmLCBwa3RfaGRyICsgdGltZXN0YW1wX29mZnNldCk7XFxuK1xcdHB1dF91bmFsaWduZWRfYmUzMihzZWMgXFx1MDAyNiAweGZmZmZmZmZmLCBwa3RfaGRyICsgdGltZXN0YW1wX29mZnNldCArIDIpO1xcbitcXHRwdXRfdW5hbGlnbmVkX2JlMzIobnMsIHBrdF9oZHIgKyB0aW1lc3RhbXBfb2Zmc2V0ICsgNik7XFxuK1xcbitcXHRuZXRjX3BvcnRfc2V0X29uZXN0ZXBfY29udHJvbChucCwgaXNfdWRwLCBjb3JyZWN0aW9uX29mZnNldCk7XFxuK1xcbitcXHQvKiBPcnBoYW4gdGhlIHNrYiB0byByZWxlYXNlIHRoZSBzb2NrZXQgc2VuZCBidWZmZXIgcXVvdGEgaW1tZWRpYXRlbHkuXFxuK1xcdCAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIHNvY2tfd2ZyZWUoKSBvbmx5IHVwZGF0ZXMgc2tfd21lbV9hbGxvYyBhbmRcXG4rXFx0ICogZG9lcyBub3QgdG91Y2ggc2tiLVxcdTAwM2VkYXRhLiBBZnRlciBza2Jfb3JwaGFuKCksIHdlIGluc3RhbGwgb3VyIG93blxcbitcXHQgKiBkZXN0cnVjdG9yIHNvIHRoYXQgd2hlbiB0aGUgY29uZHVpdCBkcml2ZXIgZnJlZXMgdGhlIHNrYiBhZnRlciBUWFxcbitcXHQgKiBjb21wbGV0aW9uLCB3ZSBnZXQgbm90aWZpZWQgdG8gc2VuZCB0aGUgbmV4dCBxdWV1ZWQgU3luYyBwYWNrZXQuXFxuK1xcdCAqL1xcbitcXHRza2Jfb3JwaGFuKHNrYik7XFxuK1xcdHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGVzdHJ1Y3Rvcl9hcmcgPSBucDtcXG4rXFx0c2tiLVxcdTAwM2VkZXN0cnVjdG9yID0gbmV0Y19vbmVzdGVwX3NrYl9kZXN0cnVjdG9yO1xcbit9XFxuK1xcbit2b2lkIG5ldGNfcG9ydF9vbmVzdGVwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRjX3BvcnQgKm5wID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjX3BvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBvbmVzdGVwX3dvcmspO1xcbitcXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBucC1cXHUwMDNlc3dpdGNoX3ByaXY7XFxuK1xcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YTtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0dTY0IHRzdGFtcDtcXG4rXFxuK1xcdC8qIERlcXVldWUgdGhlIG5leHQgcGVuZGluZyBza2Igd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgaW4tZmxpZ2h0IHNsb3QsXFxuK1xcdCAqIHNvIGEgbmV3bHkgYXJyaXZpbmcgb25lLXN0ZXAgU3luYyBjYW5ub3QganVtcCBhaGVhZCBvZiBpdC4gT25seVxcbitcXHQgKiByZWxlYXNlIHRoZSBzbG90IHdoZW4gdGhlIHF1ZXVlIGlzIGVtcHR5LiBUaGlzIGtlZXBzIG9yZGVyaW5nIGFuZFxcbitcXHQgKiBjbG9zZXMgdGhlIGVucXVldWUvd2FrZXVwIHJhY2UuXFxuK1xcdCAqL1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5wLVxcdTAwM2VwdHBfbG9jayk7XFxuK1xcdHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNm5wLVxcdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSk7XFxuK1xcdGlmICghc2tiKSB7XFxuK1xcdFxcdF9fY2xlYXJfYml0KE5FVENfRkxBR19PTkVTVEVQX0lOX1BST0dSRVNTLCBcXHUwMDI2bnAtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5wLVxcdTAwM2VwdHBfbG9jayk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnAtXFx1MDAzZXB0cF9sb2NrKTtcXG4rXFxuK1xcdHRzdGFtcCA9IG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZShwcml2LVxcdTAwM2V0bXJfZGV2KTtcXG4rXFx0aWYgKCF0c3RhbXApIHtcXG4rXFx0XFx0LyogVGhlIFBUUCB0aW1lciBpcyBub3QgYXZhaWxhYmxlLCBzbyB0aGVyZSBpcyBubyBjb3JyZWN0XFxuK1xcdFxcdCAqIHRpbWVzdGFtcCB0byBwcm9ncmFtLiBEcm9wIHRoaXMgZnJhbWUgYW5kIHJlLWtpY2sgdG9cXG4rXFx0XFx0ICogcHJvY2VzcyB0aGUgcmVtYWluaW5nIHF1ZXVlZCBmcmFtZXMgKG9yIHJlbGVhc2UgdGhlIHNsb3QpLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKCkgaGFzIG5vdCBydW4gZm9yIHRoaXMgc2tiIHlldCwgc29cXG4rXFx0XFx0ICogbmV0Y19vbmVzdGVwX3NrYl9kZXN0cnVjdG9yKCkgaXMgbm90IGluc3RhbGxlZCBvbiBpdC4gRnJlZWluZ1xcbitcXHRcXHQgKiBpdCB0aGVyZWZvcmUgZG9lcyBub3QgcmVzY2hlZHVsZSBvbmVzdGVwX3dvcmssIHNvIHRoZSB3b3JrXFxuK1xcdFxcdCAqIG11c3QgYmUgcmVzY2hlZHVsZWQgZXhwbGljaXRseSB0byBrZWVwIGRyYWluaW5nIHRoZSBxdWV1ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIlBvcnQgJWQgUFRQIHRpbWVyIHVuYXZhaWxhYmxlLCBkcm9wIFN5bmNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBucC1cXHUwMDNlZHAtXFx1MDAzZWluZGV4KTtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNm5wLVxcdTAwM2VvbmVzdGVwX3dvcmspO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFJldXNlIHRoZSBvZmZzZXRzIGNhY2hlZCBhdCBlbnF1ZXVlIHRpbWU7IG9ubHkgdGhlIHRpbWVzdGFtcCBpc1xcbitcXHQgKiByZWFkIGZyZXNoIHNvIGl0IHJlZmxlY3RzIHRoZSBhY3R1YWwgVFggbW9tZW50LlxcbitcXHQgKi9cXG4rXFx0bmV0Y19wb3J0X3Byb2dyYW1fb25lc3RlcChucCwgc2tiLCB0c3RhbXApO1xcbitcXG4rXFx0LyogVGFnIGFuZCBoYW5kIHRoZSBmcmFtZSBkaXJlY3RseSB0byB0aGUgY29uZHVpdCB2aWEgdGhlIHRhZ2dlcixcXG4rXFx0ICogYnlwYXNzaW5nIGRzYV91c2VyX3htaXQoKSBzbyB0aGUgVFggc3RhdHMgYXJlIG5vdCBjb3VudGVkIHR3aWNlLlxcbitcXHQgKi9cXG4rXFx0dGFnZ2VyX2RhdGEgPSBwcml2LVxcdTAwM2Vkcy1cXHUwMDNldGFnZ2VyX2RhdGE7XFxuK1xcdHRhZ2dlcl9kYXRhLVxcdTAwM2VvbmVzdGVwX3N5bmNfeG1pdChza2IsIG5wLVxcdTAwM2VkcC1cXHUwMDNldXNlcik7XFxuK31cXG4rXFxuK3N0cnVjdCBza19idWZmICpuZXRjX29uZXN0ZXBfc3luY19oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XFxuK1xcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHR1NjQgdHN0YW1wO1xcbitcXG4rXFx0LyogU2VyaWFsaXplIG9uZS1zdGVwIFN5bmMgcGFja2V0czogb25seSBvbmUgY2FuIGJlIGluLWZsaWdodCBhdCBhXFxuK1xcdCAqIHRpbWUgYmVjYXVzZSB0aGUgU0lOR0xFX1NURVAgcmVnaXN0ZXIgaXMgc2hhcmVkIGFuZCBtdXN0IG1hdGNoIHRoZVxcbitcXHQgKiBwYWNrZXQgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkLiBDbGFpbSB0aGUgaW4tZmxpZ2h0IHNsb3QgdW5kZXJcXG4rXFx0ICogcHRwX2xvY2suIElmIGFub3RoZXIgb25lLXN0ZXAgU3luYyBpcyBhbHJlYWR5IGluLWZsaWdodCwgcXVldWUgdGhpc1xcbitcXHQgKiBza2IgYW5kIHJldHVybiBOVUxMOyBvd25lcnNoaXAgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHF1ZXVlLCBzbyBub1xcbitcXHQgKiBleHRyYSByZWZlcmVuY2UgaXMgbmVlZGVkIGFuZCBuZXRjX3htaXQoKSBzdG9wcyBwcm9jZXNzaW5nIGl0LlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZucC1cXHUwMDNlcHRwX2xvY2spO1xcbitcXHRpZiAodGVzdF9iaXQoTkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MsIFxcdTAwMjZucC1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5wLVxcdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSwgc2tiKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5wLVxcdTAwM2VwdHBfbG9jayk7XFxuK1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0dHN0YW1wID0gbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHByaXYtXFx1MDAzZXRtcl9kZXYpO1xcbitcXHRpZiAoIXRzdGFtcCkge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnAtXFx1MDAzZXB0cF9sb2NrKTtcXG4rXFxuK1xcdFxcdC8qIFRoaXMgaXMgYSB2YWxpZCBvbmUtc3RlcCBTeW5jIGZyYW1lLCBidXQgdGhlIFBUUCB0aW1lciBpc1xcbitcXHRcXHQgKiBub3QgYXZhaWxhYmxlLCBzbyB0aGVyZSBpcyBubyBjb3JyZWN0IHRpbWVzdGFtcCB0byBwcm9ncmFtLlxcbitcXHRcXHQgKiBEcm9wIHRoZSBmcmFtZSByYXRoZXIgdGhhbiB0cmFuc21pdCBhIFN5bmMgd2l0aCBhIGJvZ3VzXFxuK1xcdFxcdCAqIGNvcnJlY3Rpb24gZmllbGQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJQb3J0ICVkIFBUUCB0aW1lciB1bmF2YWlsYWJsZSwgZHJvcCBTeW5jXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgbnAtXFx1MDAzZWRwLVxcdTAwM2VpbmRleCk7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdF9fc2V0X2JpdChORVRDX0ZMQUdfT05FU1RFUF9JTl9QUk9HUkVTUywgXFx1MDAyNm5wLVxcdTAwM2VmbGFncyk7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZucC1cXHUwMDNlcHRwX2xvY2spO1xcbitcXG4rXFx0LyogV2Ugb3duIHRoZSBpbi1mbGlnaHQgc2xvdC4gUHJvZ3JhbSB0aGUgcmVnaXN0ZXIgYW5kIGluc3RhbGwgdGhlXFxuK1xcdCAqIGRlc3RydWN0b3IuXFxuK1xcdCAqL1xcbitcXHRuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKG5wLCBza2IsIHRzdGFtcCk7XFxuK1xcbitcXHRyZXR1cm4gc2tiO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoLmggYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaC5oXFxuaW5kZXggMzA1ZjJhOTJlMmY5YS4uMjk2ZGYxZDcyMzMzZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2guaFxcbkBAIC01Nyw2ICs1Nyw3IEBAIHN0cnVjdCBuZXRjX3N3aXRjaDtcXG4gXFxuIHN0cnVjdCBuZXRjX3N3aXRjaF9pbmZvIHtcXG4gXFx0dTMyIG51bV9wb3J0cztcXG4rXFx0dTMyIHRtcl9kZXZmbjtcXG4gXFx0dm9pZCAoKnBoeWxpbmtfZ2V0X2NhcHMpKGludCBwb3J0LCBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyk7XFxuIH07XFxuIFxcbkBAIC02Niw5ICs2NywyMyBAQCBzdHJ1Y3QgbmV0Y19wb3J0X2NhcHMge1xcbiBcXHR1MzIgcHNldWRvX2xpbms6MTtcXG4gfTtcXG4gXFxuK2VudW0gbmV0Y19wdHBfdHlwZSB7XFxuK1xcdE5FVENfUFRQX0wyLFxcbitcXHRORVRDX1BUUF9MNF9JUFY0X0VWRU5ULFxcbitcXHRORVRDX1BUUF9MNF9JUFY0X0dFTkVSQUwsXFxuK1xcdE5FVENfUFRQX0w0X0lQVjZfRVZFTlQsXFxuK1xcdE5FVENfUFRQX0w0X0lQVjZfR0VORVJBTCxcXG4rXFx0TkVUQ19QVFBfTUFYLFxcbit9O1xcbitcXG4gZW51bSBuZXRjX2hvc3RfcmVhc29uIHtcXG4gXFx0LyogU29mdHdhcmUgZGVmaW5lZCBob3N0IHJlYXNvbnMgKi9cXG4gXFx0TkVUQ19IUl9IT1NUX0ZMT09EID0gOCxcXG4rXFx0TkVUQ19IUl9QVFBfVFJBUCAgID0gOSxcXG4rfTtcXG4rXFxuK2VudW0gbmV0Y19wb3J0X2ZsYWdzIHtcXG4rXFx0TkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MgPSAwLFxcbiB9O1xcbiBcXG4gc3RydWN0IG5ldGNfcG9ydCB7XFxuQEAgLTg0LDcgKzk5LDE5IEBAIHN0cnVjdCBuZXRjX3BvcnQge1xcbiBcXHR1MTYgdWM6MTtcXG4gXFx0dTE2IG1jOjE7XFxuIFxcdHUxNiBwdmlkO1xcbi1cXHRzdHJ1Y3QgaXBmdF9lbnRyeV9kYXRhICpob3N0X2Zsb29kO1xcbitcXHR1MzIgaXBmdF9oZl9laWQ7XFxuK1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHQvKiBTZXJpYWxpemUgUFRQIG9wZXJhdGlvbnMgKi9cXG4rXFx0c3BpbmxvY2tfdCBwdHBfbG9jaztcXG4rXFx0Lyogc2tiIHF1ZXVlIGZvciB0d28tc3RlcCB0aW1lc3RhbXAgZnJhbWVzICovXFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWQgc2tiX3R4dHN0YW1wX3F1ZXVlO1xcbitcXHQvKiBza2IgcXVldWUgZm9yIG9uZS1zdGVwIHN5bmMgZnJhbWVzICovXFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWQgc2tiX29uZXN0ZXBfcXVldWU7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdCBvbmVzdGVwX3dvcms7XFxuK1xcdGludCBwdHBfdHhfdHlwZTtcXG4rXFx0aW50IHB0cF9yeF9maWx0ZXI7XFxuK1xcdHUzMiBwdHBfaXBmdF9laWRbTkVUQ19QVFBfTUFYXTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBuZXRjX3N3aXRjaF9yZWdzIHtcXG5AQCAtMTM5LDYgKzE2Niw3IEBAIHN0cnVjdCBuZXRjX3N3aXRjaCB7XFxuIFxcdHUzMiBudW1fYnA7XFxuIFxcbiBcXHRzdHJ1Y3QgYnB0X2NmZ2VfZGF0YSAqYnB0X2xpc3Q7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICp0bXJfZGV2OyAvKiBUaGUgUFRQIFRpbWVyIFBDSSBkZXZpY2UgKi9cXG4gfTtcXG4gXFxuICNkZWZpbmUgTkVUQ19QUklWKGRzKVxcdFxcdFxcdCgoc3RydWN0IG5ldGNfc3dpdGNoICopKChkcyktXFx1MDAzZXByaXYpKVxcbkBAIC0xODcsNiArMjE1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG5ldGNfZGVsX3ZsYW5fZW50cnkoc3RydWN0IG5ldGNfdmxhbl9lbnRyeSAqZW50cnkpXFxuIH1cXG4gXFxuIGludCBuZXRjX3N3aXRjaF9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpO1xcbit2b2lkIG5ldGNfbWFjX3BvcnRfd3Ioc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsIHUzMiB2YWwpO1xcbiBcXG4gLyogZXRodG9vbCBBUElzICovXFxuIHZvaWQgbmV0Y19wb3J0X2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbkBAIC0yMDMsNCArMjMyLDIyIEBAIHZvaWQgbmV0Y19wb3J0X2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdFxcdCAgIHUzMiBzc2V0LCB1OCAqZGF0YSk7XFxuIHZvaWQgbmV0Y19wb3J0X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU2NCAqZGF0YSk7XFxuIFxcbisvKiBQVFAgQVBJcyAqL1xcbitpbnQgbmV0Y19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0X2lkLFxcbitcXHRcXHQgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKTtcXG4raW50IG5ldGNfcG9ydF9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydF9pZCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4raW50IG5ldGNfcG9ydF9od3RzdGFtcF9nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydF9pZCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyk7XFxuK3ZvaWQgbmV0Y190d29zdGVwX3RzdGFtcF9oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCB1OCB0c19yZXFfaWQsIHU2NCB0cyk7XFxuK2Jvb2wgbmV0Y19wb3J0X3J4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0eXBlKTtcXG4rdm9pZCBuZXRjX3BvcnRfdHh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydF9pZCxcXG4rXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK3ZvaWQgbmV0Y19wb3J0X29uZXN0ZXBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbitzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19vbmVzdGVwX3N5bmNfaGFuZGxlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpO1xcbitcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoX2h3LmggYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oXFxuaW5kZXggMTQwNGFlNDFjN2JjYi4uMzdkMWRkN2VjMmM3ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2hfaHcuaFxcbkBAIC0yMDMsNiArMjAzLDExIEBAIGVudW0gbmV0Y19zdGdfc3RhZ2Uge1xcbiAjZGVmaW5lICAgU1NQXzEwTVxcdFxcdFxcdDFcXG4gI2RlZmluZSAgIFNTUF8xR1xcdFxcdFxcdDJcXG4gXFxuKyNkZWZpbmUgTkVUQ19QTV9TSU5HTEVfU1RFUChhKVxcdFxcdCgweDEwYzAgKyAoYSkgKiAweDQwMClcXG4rI2RlZmluZSAgUE1fU0lOR0xFX1NURVBfQ0hcXHRcXHRCSVQoNilcXG4rI2RlZmluZSAgUE1fU0lOR0xFX1NURVBfT0ZGU0VUXFx0XFx0R0VOTUFTSygxNSwgNylcXG4rI2RlZmluZSAgUE1fU0lOR0xFX1NURVBfRU5cXHRcXHRCSVQoMzEpXFxuK1xcbiAvKiBQb3J0IE1BQyAwLzEgUmVjZWl2ZSBFdGhlcm5ldCBPY3RldHMgQ291bnRlciAqL1xcbiAjZGVmaW5lIE5FVENfUE1fUkVPQ1QoYSlcXHRcXHQoMHgxMTAwICsgKGEpICogMHg0MDApXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9wdHBfbmV0Yy5jIGIvZHJpdmVycy9wdHAvcHRwX25ldGMuY1xcbmluZGV4IDk0ZTk1MmVlNjk5MDIuLmYyYjc3YmQ1YWYwMTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX25ldGMuY1xcbisrKyBiL2RyaXZlcnMvcHRwL3B0cF9uZXRjLmNcXG5AQCAtMTI3LDYgKzEyNywxNyBAQCBzdHJ1Y3QgbmV0Y190aW1lciB7XFxuIFxcbiAjZGVmaW5lIG5ldGNfdGltZXJfcmQocCwgbylcXHRcXHRuZXRjX3JlYWQoKHApLVxcdTAwM2ViYXNlICsgKG8pKVxcbiAjZGVmaW5lIG5ldGNfdGltZXJfd3IocCwgbywgdilcXHRcXHRuZXRjX3dyaXRlKChwKS1cXHUwMDNlYmFzZSArIChvKSwgdilcXG4rXFxuKy8qIFRoZSA2NC1iaXQgdGltZXIgcmVnaXN0ZXJzIGNvbnNpc3Qgb2YgYSBsb3cgKEwpIGFuZCBoaWdoIChIKSByZWdpc3RlciBwYWlyLlxcbisgKiBIYXJkd2FyZSByZXF1aXJlcyBhIHN0cmljdCBhY2Nlc3Mgb3JkZXI6IGZvciB3cml0ZXMsIFRNUl94eHhfTCBtdXN0IGJlXFxuKyAqIHdyaXR0ZW4gZmlyc3QsIHdoaWNoIGxhdGNoZXMgdGhlIHZhbHVlIGludG8gYSBzaGFkb3cgcmVnaXN0ZXI7IHRoZSB3cml0ZVxcbisgKiB0byBUTVJfeHh4X0ggdGhlbiBhdG9taWNhbGx5IHRyYW5zZmVycyBib3RoIHNoYWRvdyByZWdpc3RlcnMgaW50byB0aGUgbGl2ZVxcbisgKiBjb3VudGVyLiBGb3IgcmVhZHMsIFRNUl94eHhfTCBtdXN0IGJlIHJlYWQgZmlyc3QgdG8gY2FwdHVyZSBhIGNvaGVyZW50XFxuKyAqIHNuYXBzaG90LiBpb3dyaXRlNjRfbG9faGkoKSBhbmQgaW9yZWFkNjRfbG9faGkoKSBlbmZvcmNlIHRoaXMgTC1iZWZvcmUtSFxcbisgKiBvcmRlcmluZy5cXG4rICovXFxuKyNkZWZpbmUgbmV0Y190aW1lcl9yZDY0KHAsIG8pXFx0XFx0aW9yZWFkNjRfbG9faGkoKHApLVxcdTAwM2ViYXNlICsgKG8pKVxcbisjZGVmaW5lIG5ldGNfdGltZXJfd3I2NChwLCBvLCB2KVxcdGlvd3JpdGU2NF9sb19oaSh2LCAocCktXFx1MDAzZWJhc2UgKyAobykpXFxuICNkZWZpbmUgcHRwX3RvX25ldGNfdGltZXIocHRwKVxcdFxcdGNvbnRhaW5lcl9vZigocHRwKSwgc3RydWN0IG5ldGNfdGltZXIsIGNhcHMpXFxuIFxcbiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGltZXJfY2xrX3NyY1tdID0ge1xcbkBAIC0xMzYsNjYgKzE0Nyw0NSBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGltZXJfY2xrX3NyY1tdID0ge1xcbiBcXG4gc3RhdGljIHZvaWQgbmV0Y190aW1lcl9jbnRfd3JpdGUoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsIHU2NCBucylcXG4ge1xcbi1cXHR1MzIgdG1yX2NudF9oID0gdXBwZXJfMzJfYml0cyhucyk7XFxuLVxcdHUzMiB0bXJfY250X2wgPSBsb3dlcl8zMl9iaXRzKG5zKTtcXG4tXFxuLVxcdC8qIFdyaXRlcyB0byB0aGUgVE1SX0NOVF9MIHJlZ2lzdGVyIGNvcGllcyB0aGUgd3JpdHRlbiB2YWx1ZVxcbi1cXHQgKiBpbnRvIHRoZSBzaGFkb3cgVE1SX0NOVF9MIHJlZ2lzdGVyLiBXcml0ZXMgdG8gdGhlIFRNUl9DTlRfSFxcbi1cXHQgKiByZWdpc3RlciBjb3BpZXMgdGhlIHZhbHVlcyB3cml0dGVuIGludG8gdGhlIHNoYWRvdyBUTVJfQ05UX0hcXG4tXFx0ICogcmVnaXN0ZXIuIENvbnRlbnRzIG9mIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIGFyZSBjb3BpZWQgaW50b1xcbi1cXHQgKiB0aGUgVE1SX0NOVF9MIGFuZCBUTVJfQ05UX0ggcmVnaXN0ZXJzIGZvbGxvd2luZyBhIHdyaXRlIGludG9cXG4tXFx0ICogdGhlIFRNUl9DTlRfSCByZWdpc3Rlci4gU28gdGhlIHVzZXIgbXVzdCB3cml0ZXMgdG8gVE1SX0NOVF9MXFxuLVxcdCAqIHJlZ2lzdGVyIGZpcnN0LiBPdGhlciBIL0wgcmVnaXN0ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lXFxuLVxcdCAqIGJlaGF2aW9yLlxcbi1cXHQgKi9cXG4tXFx0bmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9DTlRfTCwgdG1yX2NudF9sKTtcXG4tXFx0bmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9DTlRfSCwgdG1yX2NudF9oKTtcXG4rXFx0bmV0Y190aW1lcl93cjY0KHByaXYsIE5FVENfVE1SX0NOVF9MLCBucyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB1NjQgbmV0Y190aW1lcl9vZmZzZXRfcmVhZChzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdilcXG4ge1xcbi1cXHR1MzIgdG1yX29mZl9sLCB0bXJfb2ZmX2g7XFxuLVxcdHU2NCBvZmZzZXQ7XFxuLVxcbi1cXHR0bXJfb2ZmX2wgPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX09GRl9MKTtcXG4tXFx0dG1yX29mZl9oID0gbmV0Y190aW1lcl9yZChwcml2LCBORVRDX1RNUl9PRkZfSCk7XFxuLVxcdG9mZnNldCA9ICgoKHU2NCl0bXJfb2ZmX2gpIFxcdTAwM2NcXHUwMDNjIDMyKSB8IHRtcl9vZmZfbDtcXG4tXFxuLVxcdHJldHVybiBvZmZzZXQ7XFxuK1xcdHJldHVybiBuZXRjX3RpbWVyX3JkNjQocHJpdiwgTkVUQ19UTVJfT0ZGX0wpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuZXRjX3RpbWVyX29mZnNldF93cml0ZShzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdiwgdTY0IG9mZnNldClcXG4ge1xcbi1cXHR1MzIgdG1yX29mZl9oID0gdXBwZXJfMzJfYml0cyhvZmZzZXQpO1xcbi1cXHR1MzIgdG1yX29mZl9sID0gbG93ZXJfMzJfYml0cyhvZmZzZXQpO1xcbi1cXG4tXFx0bmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9PRkZfTCwgdG1yX29mZl9sKTtcXG4tXFx0bmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9PRkZfSCwgdG1yX29mZl9oKTtcXG4rXFx0bmV0Y190aW1lcl93cjY0KHByaXYsIE5FVENfVE1SX09GRl9MLCBvZmZzZXQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdTY0IG5ldGNfdGltZXJfY3VyX3RpbWVfcmVhZChzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdilcXG4ge1xcbi1cXHR1MzIgdGltZV9oLCB0aW1lX2w7XFxuLVxcdHU2NCBucztcXG4rXFx0cmV0dXJuIG5ldGNfdGltZXJfcmQ2NChwcml2LCBORVRDX1RNUl9DVVJfVElNRV9MKTtcXG4rfVxcbiBcXG4tXFx0LyogVGhlIHVzZXIgc2hvdWxkIHJlYWQgTkVUQ19UTVJfQ1VSX1RJTUVfTCBmaXJzdCB0b1xcbi1cXHQgKiBnZXQgY29ycmVjdCBjdXJyZW50IHRpbWUuXFxuLVxcdCAqL1xcbi1cXHR0aW1lX2wgPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0NVUl9USU1FX0wpO1xcbi1cXHR0aW1lX2ggPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0NVUl9USU1FX0gpO1xcbi1cXHRucyA9ICh1NjQpdGltZV9oIFxcdTAwM2NcXHUwMDNjIDMyIHwgdGltZV9sO1xcbit1NjQgbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBuZXRjX3RpbWVyICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHR1NjQgY3VyX3RpbWU7XFxuIFxcbi1cXHRyZXR1cm4gbnM7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRjdXJfdGltZSA9IG5ldGNfdGltZXJfY3VyX3RpbWVfcmVhZChwcml2KTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIGN1cl90aW1lO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZSk7XFxuIFxcbiBzdGF0aWMgdm9pZCBuZXRjX3RpbWVyX2FsYXJtX3dyaXRlKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2LFxcbiBcXHRcXHRcXHRcXHQgICB1NjQgYWxhcm0sIGludCBpbmRleClcXG4ge1xcbi1cXHR1MzIgYWxhcm1faCA9IHVwcGVyXzMyX2JpdHMoYWxhcm0pO1xcbi1cXHR1MzIgYWxhcm1fbCA9IGxvd2VyXzMyX2JpdHMoYWxhcm0pO1xcbi1cXG4tXFx0bmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9BTEFSTV9MKGluZGV4KSwgYWxhcm1fbCk7XFxuLVxcdG5ldGNfdGltZXJfd3IocHJpdiwgTkVUQ19UTVJfQUxBUk1fSChpbmRleCksIGFsYXJtX2gpO1xcbitcXHRuZXRjX3RpbWVyX3dyNjQocHJpdiwgTkVUQ19UTVJfQUxBUk1fTChpbmRleCksIGFsYXJtKTtcXG4gfVxcbiBcXG4gc3RhdGljIHUzMiBuZXRjX3RpbWVyX2dldF9pbnRlZ3JhbF9wZXJpb2Qoc3RydWN0IG5ldGNfdGltZXIgKnByaXYpXFxuQEAgLTQ5NywyMiArNDg3LDE5IEBAIHN0YXRpYyB2b2lkIG5ldGNfdGltZXJfaGFuZGxlX2V0dHNfZXZlbnQoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsIGludCBpbmRleCxcXG4gXFx0XFx0XFx0XFx0XFx0IGJvb2wgdXBkYXRlX2V2ZW50KVxcbiB7XFxuIFxcdHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgZXZlbnQ7XFxuLVxcdHUzMiBldHRzX2wgPSAwLCBldHRzX2ggPSAwO1xcbitcXHR1NjQgZXR0cyA9IDA7XFxuIFxcbi1cXHR3aGlsZSAobmV0Y190aW1lcl9yZChwcml2LCBORVRDX1RNUl9TVEFUKSBcXHUwMDI2IFRNUl9TVEFUX0VUU19WTEQoaW5kZXgpKSB7XFxuLVxcdFxcdGV0dHNfbCA9IG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfRVRUU19MKGluZGV4KSk7XFxuLVxcdFxcdGV0dHNfaCA9IG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfRVRUU19IKGluZGV4KSk7XFxuLVxcdH1cXG4rXFx0d2hpbGUgKG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfU1RBVCkgXFx1MDAyNiBUTVJfU1RBVF9FVFNfVkxEKGluZGV4KSlcXG4rXFx0XFx0ZXR0cyA9IG5ldGNfdGltZXJfcmQ2NChwcml2LCBORVRDX1RNUl9FVFRTX0woaW5kZXgpKTtcXG4gXFxuIFxcdC8qIEludmFsaWQgdGltZSBzdGFtcCAqL1xcbi1cXHRpZiAoIWV0dHNfbCBcXHUwMDI2XFx1MDAyNiAhZXR0c19oKVxcbitcXHRpZiAoIWV0dHMpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmICh1cGRhdGVfZXZlbnQpIHtcXG4gXFx0XFx0ZXZlbnQudHlwZSA9IFBUUF9DTE9DS19FWFRUUztcXG4gXFx0XFx0ZXZlbnQuaW5kZXggPSBpbmRleDtcXG4tXFx0XFx0ZXZlbnQudGltZXN0YW1wID0gKHU2NClldHRzX2ggXFx1MDAzY1xcdTAwM2MgMzI7XFxuLVxcdFxcdGV2ZW50LnRpbWVzdGFtcCB8PSBldHRzX2w7XFxuK1xcdFxcdGV2ZW50LnRpbWVzdGFtcCA9IGV0dHM7XFxuIFxcdFxcdHB0cF9jbG9ja19ldmVudChwcml2LVxcdTAwM2VjbG9jaywgXFx1MDAyNmV2ZW50KTtcXG4gXFx0fVxcbiB9XFxuQEAgLTgwMiw3ICs3ODksNiBAQCBzdGF0aWMgaW50IG5ldGNfdGltZXJfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRpZiAoIXByaXYpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0cGNpZV9mbHIocGRldik7XFxuIFxcdGVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFxcXCJGYWlsZWQgdG8gZW5hYmxlIGRldmljZVxcXFxuXFxcIik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHNhL3RhZ19uZXRjLmggYi9pbmNsdWRlL2xpbnV4L2RzYS90YWdfbmV0Yy5oXFxuaW5kZXggZmU5NjQ3MjJlNWIwMy4uMjI5YzcwY2I3YThhYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RzYS90YWdfbmV0Yy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9kc2EvdGFnX25ldGMuaFxcbkBAIC0xMCw1ICsxMCw0NyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBORVRDX1RBR19NQVhfTEVOXFx0XFx0XFx0MTRcXG4rI2RlZmluZSBORVRDX1RBR19UU19SRVFfSURcXHRcXHRcXHRHRU5NQVNLKDMsIDApXFxuKyNkZWZpbmUgTkVUQ19QVFBfRkxBR19PTkVTVEVQXFx0XFx0XFx0QklUKDApXFxuKyNkZWZpbmUgTkVUQ19QVFBfRkxBR19UV09TVEVQXFx0XFx0XFx0QklUKDEpXFxuK1xcbitzdHJ1Y3QgbmV0Y19za2JfY2Ige1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcHRwX3R4X3RpbWU7XFxuK1xcdHU2NCB0c3RhbXA7XFxuK1xcdHU4IHB0cF9mbGFnO1xcbitcXHR1OCB0c19yZXFfaWQ7XFxuK1xcdC8qIE9uZS1zdGVwIFN5bmMgcGFyc2luZyByZXN1bHRzLCBjb21wdXRlZCBpbiBuZXRjX3BvcnRfdHh0c3RhbXAoKVxcbitcXHQgKiBhbmQgcmV1c2VkIGluIHRoZSB0YWdnZXIgeG1pdCBwYXRoIGFuZCB0aGUgZGVmZXJyZWQgd29yaywgdG8gYXZvaWRcXG4rXFx0ICogcmUtcGFyc2luZyB0aGUgUFRQIGhlYWRlci4gVmFsaWQgb25seSB3aGlsZVxcbitcXHQgKiBwdHBfZmxhZyA9PSBORVRDX1BUUF9GTEFHX09ORVNURVAuXFxuK1xcdCAqL1xcbitcXHR1MTYgY29ycmVjdGlvbl9vZmZzZXQ7XFxuK1xcdHUxNiB0aW1lc3RhbXBfb2Zmc2V0O1xcbitcXHRib29sIGlzX3VkcDtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgTkVUQ19TS0JfQ0Ioc2tiKVxcdCgoc3RydWN0IG5ldGNfc2tiX2NiICopKChza2IpLVxcdTAwM2VjYikpXFxuK1xcbisvKipcXG4rICogc3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEgLSBORVRDIHRhZ2dlci9zd2l0Y2gtZHJpdmVyIHNoYXJlZCBvcGVyYXRpb25zXFxuKyAqIEB0d29zdGVwX3RzdGFtcF9oYW5kbGVyOiBDYWxsZWQgYnkgdGhlIHRhZ2dlciB3aGVuIGEgdHdvLXN0ZXAgdHJhbnNtaXRcXG4rICpcXHR0aW1lc3RhbXAgcmVzcG9uc2UgaXMgcmVjZWl2ZWQsIHRvIGRlbGl2ZXIgdGhlIHRpbWVzdGFtcCB0byB0aGVcXG4rICpcXHRzd2l0Y2ggZHJpdmVyLlxcbisgKiBAb25lc3RlcF9zeW5jX2hhbmRsZXI6IENhbGxlZCBmcm9tIHRoZSB0YWdnZXIgeG1pdCBwYXRoIGZvciBhIG9uZS1zdGVwIFN5bmNcXG4rICpcXHRmcmFtZS4gUmV0dXJucyB0aGUgc2tiIGlmIGl0IGNhbiBiZSB0cmFuc21pdHRlZCBpbW1lZGlhdGVseSAodGhlXFxuKyAqXFx0aW4tZmxpZ2h0IHNsb3QgaGFzIGJlZW4gY2xhaW1lZCBhbmQgUE1fU0lOR0xFX1NURVAgcHJvZ3JhbW1lZCksIG9yIE5VTExcXG4rICpcXHRpZiB0aGUgZnJhbWUgaGFzIGJlZW4gcXVldWVkIGZvciBkZWZlcnJlZCB0cmFuc21pc3Npb24gb3IgZHJvcHBlZC5cXG4rICogQG9uZXN0ZXBfc3luY194bWl0OiBDYWxsZWQgYnkgdGhlIHN3aXRjaCBkcml2ZXIgdG8gdHJhbnNtaXQgYSBkZWZlcnJlZFxcbisgKlxcdG9uZS1zdGVwIFN5bmMgZnJhbWUgZGlyZWN0bHkgdG8gdGhlIGNvbmR1aXQsIGJ5cGFzc2luZyBkc2FfdXNlcl94bWl0KCkuXFxuKyAqL1xcbitzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSB7XFxuK1xcdHZvaWQgKCp0d29zdGVwX3RzdGFtcF9oYW5kbGVyKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgdTggdHNfcmVxX2lkLCB1NjQgdHMpO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqKCpvbmVzdGVwX3N5bmNfaGFuZGxlcikoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRpbnQgcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK1xcdG5ldGRldl90eF90ICgqb25lc3RlcF9zeW5jX3htaXQpKHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuK307XFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2wvbmV0Y19nbG9iYWwuaCBiL2luY2x1ZGUvbGludXgvZnNsL25ldGNfZ2xvYmFsLmhcXG5pbmRleCA1YjhmZjUyOGQzNjk5Li45MTQ0MWNiMzViYzI4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnNsL25ldGNfZ2xvYmFsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzbC9uZXRjX2dsb2JhbC5oXFxuQEAgLTIyLDQgKzIyLDEzIEBAIHN0YXRpYyBpbmxpbmUgdTY0IG5ldGNfcmVhZDY0KHZvaWQgX19pb21lbSAqcmVnKVxcbiBcXHRyZXR1cm4gaW9yZWFkNjQocmVnKTtcXG4gfVxcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX1BUUF9ORVRDX1Y0X1RJTUVSKVxcbit1NjQgbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHN0cnVjdCBwY2lfZGV2ICp0aW1lcl9kZXYpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHU2NCBuZXRjX3RpbWVyX2dldF9jdXJyZW50X3RpbWUoc3RydWN0IHBjaV9kZXYgKnRpbWVyX2RldilcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19uZXRjLmMgYi9uZXQvZHNhL3RhZ19uZXRjLmNcXG5pbmRleCBkZjcyYTYxNzk2YWQ1Li45NGNjYTIwZmZjZGFkIDEwMDY0NFxcbi0tLSBhL25ldC9kc2EvdGFnX25ldGMuY1xcbisrKyBiL25ldC9kc2EvdGFnX25ldGMuY1xcbkBAIC0xNiw2ICsxNiwxMCBAQFxcbiAjZGVmaW5lIE5FVENfVEFHX1RPX1BPUlRcXHRcXHQxXFxuIC8qIFN1YlR5cGUwOiBObyByZXF1ZXN0IHRvIHBlcmZvcm0gdGltZXN0YW1waW5nICovXFxuICNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTBcXHRcXHQwXFxuKy8qIFN1YlR5cGUxOiBSZXF1ZXN0IHRvIHBlcmZvcm0gb25lLXN0ZXAgdGltZXN0YW1waW5nICovXFxuKyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTFcXHRcXHQxXFxuKy8qIFN1YlR5cGUyOiBSZXF1ZXN0IHRvIHBlcmZvcm0gdHdvLXN0ZXAgdGltZXN0YW1waW5nICovXFxuKyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTJcXHRcXHQyXFxuIFxcbiAvKiBUb19Ib3N0IE5YUCBzd2l0Y2ggdGFnICovXFxuICNkZWZpbmUgTkVUQ19UQUdfVE9fSE9TVFxcdFxcdDJcXG5AQCAtMjksNiArMzMsOCBAQFxcbiAvKiBORVRDIHN3aXRjaCB0YWcgbGVuZ3RocyAqL1xcbiAjZGVmaW5lIE5FVENfVEFHX0ZPUldBUkRfTEVOXFx0XFx0NlxcbiAjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUwX0xFTlxcdDZcXG4rI2RlZmluZSBORVRDX1RBR19UUF9TVUJUWVBFMV9MRU5cXHQxMFxcbisjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUyX0xFTlxcdDZcXG4gI2RlZmluZSBORVRDX1RBR19USF9TVUJUWVBFMF9MRU5cXHQ2XFxuICNkZWZpbmUgTkVUQ19UQUdfVEhfU1VCVFlQRTFfTEVOXFx0MTRcXG4gI2RlZmluZSBORVRDX1RBR19USF9TVUJUWVBFMl9MRU5cXHQxNFxcbkBAIC00MCw2ICs0Niw3IEBAXFxuICNkZWZpbmUgTkVUQ19UQUdfSVBWXFx0XFx0XFx0R0VOTUFTSyg0LCAyKVxcbiAjZGVmaW5lIE5FVENfVEFHX1NXSVRDSFxcdFxcdFxcdEdFTk1BU0soMiwgMClcXG4gI2RlZmluZSBORVRDX1RBR19QT1JUXFx0XFx0XFx0R0VOTUFTSyg3LCAzKVxcbisjZGVmaW5lIE5FVENfVEFHX1RJTUVTVEFNUFxcdFxcdEdFTk1BU0soMjksIDApXFxuIFxcbiBzdHJ1Y3QgbmV0Y190YWdfY21uIHtcXG4gXFx0X19iZTE2IHRwaWQ7XFxuQEAgLTQ4LDYgKzU1LDI5IEBAIHN0cnVjdCBuZXRjX3RhZ19jbW4ge1xcbiBcXHR1OCBzd2l0Y2hfcG9ydDtcXG4gfSBfX3BhY2tlZDtcXG4gXFxuK3N0cnVjdCBuZXRjX3RhZ190cF9zdWJ0eXBlMSB7XFxuK1xcdHN0cnVjdCBuZXRjX3RhZ19jbW4gY21uO1xcbitcXHR1OCByZXN2O1xcbitcXHRfX2JlMzIgdGltZXN0YW1wO1xcbit9IF9fcGFja2VkO1xcbitcXG4rc3RydWN0IG5ldGNfdGFnX3RwX3N1YnR5cGUyIHtcXG4rXFx0c3RydWN0IG5ldGNfdGFnX2NtbiBjbW47XFxuK1xcdHU4IHRzX3JlcV9pZDtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuK3N0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMSB7XFxuK1xcdHN0cnVjdCBuZXRjX3RhZ19jbW4gY21uO1xcbitcXHR1OCBob3N0X3JlYXNvbjtcXG4rXFx0X19iZTY0IHRpbWVzdGFtcDtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuK3N0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMiB7XFxuK1xcdHN0cnVjdCBuZXRjX3RhZ19jbW4gY21uO1xcbitcXHR1OCBocl90c3JlcV9pZDtcXG4rXFx0X19iZTY0IHRpbWVzdGFtcDtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuIHN0YXRpYyB2b2lkIG5ldGNfZmlsbF9jb21tb25fdGFnKHN0cnVjdCBuZXRjX3RhZ19jbW4gKnRhZywgdTggdHlwZSxcXG4gXFx0XFx0XFx0XFx0IHU4IHN1YnR5cGUsIHU4IHN3X2lkLCB1OCBwb3J0LCB1OCBpcHYpXFxuIHtcXG5AQCAtOTcsMTUgKzEyNywxMjAgQEAgc3RhdGljIHZvaWQgbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHRORVRDX1RBR19UUF9TVUJUWVBFMF9MRU4pO1xcbiB9XFxuIFxcbi0vKiBDdXJyZW50bHkgb25seSBzdXBwb3J0IFRvX1BvcnQgdGFnLCBzdWJ0eXBlIDAgKi9cXG4rc3RhdGljIHZvaWQgbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHR1MzIgdHMgPSBGSUVMRF9QUkVQKE5FVENfVEFHX1RJTUVTVEFNUCwgTkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNldHN0YW1wKTtcXG4rXFx0c3RydWN0IG5ldGNfdGFnX3RwX3N1YnR5cGUxICp0YWc7XFxuK1xcbitcXHR0YWcgPSBuZXRjX2ZpbGxfY29tbW9uX3RwX3RhZyhza2IsIG5kZXYsIE5FVENfVEFHX1RQX1NVQlRZUEUxLFxcbitcXHRcXHRcXHRcXHQgICAgICBORVRDX1RBR19UUF9TVUJUWVBFMV9MRU4pO1xcbitcXHR0YWctXFx1MDAzZXRpbWVzdGFtcCA9IGh0b25sKHRzKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmUgPSBORVRDX1NLQl9DQihza2IpLVxcdTAwM2VjbG9uZTtcXG4rXFx0dTggdHNfcmVxX2lkID0gTkVUQ19TS0JfQ0IoY2xvbmUpLVxcdTAwM2V0c19yZXFfaWQ7XFxuK1xcdHN0cnVjdCBuZXRjX3RhZ190cF9zdWJ0eXBlMiAqdGFnO1xcbitcXG4rXFx0dGFnID0gbmV0Y19maWxsX2NvbW1vbl90cF90YWcoc2tiLCBuZGV2LCBORVRDX1RBR19UUF9TVUJUWVBFMixcXG4rXFx0XFx0XFx0XFx0ICAgICAgTkVUQ19UQUdfVFBfU1VCVFlQRTJfTEVOKTtcXG4rXFx0dGFnLVxcdTAwM2V0c19yZXFfaWQgPSBGSUVMRF9QUkVQKE5FVENfVEFHX1RTX1JFUV9JRCwgdHNfcmVxX2lkKTtcXG4rfVxcbitcXG4rc3RhdGljIG5ldGRldl90eF90IG5ldGNfb25lc3RlcF9zeW5jX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdC8qIFRoaXMgZGVmZXJyZWQgb25lLXN0ZXAgU3luYyBmcmFtZSBhbHJlYWR5IHdlbnQgdGhyb3VnaFxcbitcXHQgKiBkc2FfdXNlcl94bWl0KCkncyBza2JfZW5zdXJlX3dyaXRhYmxlX2hlYWRfdGFpbCgpIGFuZCBldGhfc2tiX3BhZCgpXFxuK1xcdCAqIGJlZm9yZSBpdCB3YXMgcXVldWVkIGluIG5ldGNfeG1pdCgpLCBhbmQgbm90aGluZyBoYXMgY2xvbmVkIGl0IG9yXFxuK1xcdCAqIHNocnVuayBpdHMgaGVhZC90YWlsIHJvb20gc2luY2UuIFNvIHRoZSBoZWFkL3RhaWwgcm9vbSBpcyBzdGlsbFxcbitcXHQgKiBndWFyYW50ZWVkIGFuZCB0aGUgc2tiIGlzIHN0aWxsIHdyaXRhYmxlOyBvbmx5IHRoZSB0YWcgbmVlZHMgdG8gYmVcXG4rXFx0ICogcHVzaGVkIGJlZm9yZSBoYW5kaW5nIGl0IGRpcmVjdGx5IHRvIHRoZSBjb25kdWl0LCBieXBhc3NpbmdcXG4rXFx0ICogZHNhX3VzZXJfeG1pdCgpIHNvIHRoYXQgZGV2X3N3X25ldHN0YXRzX3R4X2FkZCgpIGlzIG5vdCBpbnZva2VkIGFcXG4rXFx0ICogc2Vjb25kIHRpbWUgZm9yIHRoZSBzYW1lIGZyYW1lLlxcbitcXHQgKi9cXG4rXFx0bmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMShza2IsIGRldik7XFxuK1xcbitcXHRyZXR1cm4gZHNhX2VucXVldWVfc2tiKHNrYiwgZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjX29uZXN0ZXBfc3luY19wcm9jZXNzKHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChuZGV2KTtcXG4rXFx0c3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEgKnRhZ2dlcl9kYXRhO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcXG4rXFxuK1xcdHRhZ2dlcl9kYXRhID0gZHAtXFx1MDAzZWRzLVxcdTAwM2V0YWdnZXJfZGF0YTtcXG4rXFx0aWYgKHVubGlrZWx5KCF0YWdnZXJfZGF0YS1cXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIpKSB7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogRGVjaWRlLCB1bmRlciBwdHBfbG9jaywgd2hldGhlciB0aGlzIG9uZS1zdGVwIFN5bmMgY2FuIGJlIHNlbnRcXG4rXFx0ICogbm93IG9yIG11c3QgYmUgZGVmZXJyZWQuIFJldHVybnMgdGhlIHNrYiAod2l0aCB0aGUgaW4tZmxpZ2h0XFxuK1xcdCAqIHNsb3QgY2xhaW1lZCBhbmQgUE1fU0lOR0xFX1NURVAgYWxyZWFkeSBwcm9ncmFtbWVkKSBmb3JcXG4rXFx0ICogaW1tZWRpYXRlIHRyYW5zbWlzc2lvbiwgb3IgTlVMTCBpZiBpdCB3YXMgcXVldWVkIGZvciBkZWZlcnJlZFxcbitcXHQgKiB0cmFuc21pc3Npb24gb3IgZHJvcHBlZC5cXG4rXFx0ICovXFxuK1xcdG5za2IgPSB0YWdnZXJfZGF0YS1cXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIoZHAtXFx1MDAzZWRzLCBkcC1cXHUwMDNlaW5kZXgsIHNrYik7XFxuK1xcdGlmICh1bmxpa2VseSghbnNrYikpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIG5za2I7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y194bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbi1cXHRuZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUwKHNrYiwgbmRldik7XFxuK1xcdHU4IHB0cF9mbGFnID0gTkVUQ19TS0JfQ0Ioc2tiKS1cXHUwMDNlcHRwX2ZsYWc7XFxuK1xcbitcXHQvKiBGYXN0IHBhdGg6IHRoZSBvdmVyd2hlbG1pbmcgbWFqb3JpdHkgb2YgZnJhbWVzIGFyZSBub3QgUFRQIGZyYW1lcyAqL1xcbitcXHRpZiAobGlrZWx5KCFwdHBfZmxhZykpIHtcXG4rXFx0XFx0bmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMChza2IsIG5kZXYpO1xcbitcXHRcXHRyZXR1cm4gc2tiO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHRwX2ZsYWcgPT0gTkVUQ19QVFBfRkxBR19PTkVTVEVQKSB7XFxuK1xcdFxcdGlmICghbmV0Y19vbmVzdGVwX3N5bmNfcHJvY2Vzcyhza2IsIG5kZXYpKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdFxcdG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTEoc2tiLCBuZGV2KTtcXG4rXFx0fSBlbHNlIGlmIChwdHBfZmxhZyA9PSBORVRDX1BUUF9GTEFHX1RXT1NURVApIHtcXG4rXFx0XFx0bmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMihza2IsIG5kZXYpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiBza2I7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5ldGNfcnhfdHN0YW1wX3Byb2Nlc3Moc3RydWN0IG5ldGNfdGFnX3RoX3N1YnR5cGUxICp0YWcsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0dTY0IHRzID0gZ2V0X3VuYWxpZ25lZF9iZTY0KFxcdTAwMjZ0YWctXFx1MDAzZXRpbWVzdGFtcCk7XFxuK1xcbitcXHRORVRDX1NLQl9DQihza2IpLVxcdTAwM2V0c3RhbXAgPSB0cztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbmV0Y190d29zdGVwX3RzdGFtcF9wcm9jZXNzKHN0cnVjdCBuZXRjX3RhZ190aF9zdWJ0eXBlMiAqdGFnLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuK3tcXG4rXFx0dTggdHNfcmVxX2lkID0gRklFTERfR0VUKE5FVENfVEFHX1RTX1JFUV9JRCwgdGFnLVxcdTAwM2Vocl90c3JlcV9pZCk7XFxuK1xcdGludCBwb3J0ID0gRklFTERfR0VUKE5FVENfVEFHX1BPUlQsIHRhZy1cXHUwMDNlY21uLnN3aXRjaF9wb3J0KTtcXG4rXFx0c3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEgKnRhZ2dlcl9kYXRhID0gZHMtXFx1MDAzZXRhZ2dlcl9kYXRhO1xcbitcXHR1NjQgdHMgPSBnZXRfdW5hbGlnbmVkX2JlNjQoXFx1MDAyNnRhZy1cXHUwMDNldGltZXN0YW1wKTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghdGFnZ2VyX2RhdGEtXFx1MDAzZXR3b3N0ZXBfdHN0YW1wX2hhbmRsZXIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0YWdnZXJfZGF0YS1cXHUwMDNldHdvc3RlcF90c3RhbXBfaGFuZGxlcihkcywgcG9ydCwgdHNfcmVxX2lkLCB0cyk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbmV0Y19nZXRfcnhfdGFnX2xlbihpbnQgdHlwZSwgaW50IHN1YnR5cGUpXFxuIHtcXG4gXFx0LyogT25seSBORVRDX1RBR19UT19IT1NUIGFuZCBORVRDX1RBR19GT1JXQVJEIGFyZSBleHBlY3RlZCBpbiBSWCxcXG5AQCAtMTI2LDE0ICsyNjEsMTcgQEAgc3RhdGljIGludCBuZXRjX2dldF9yeF90YWdfbGVuKGludCB0eXBlLCBpbnQgc3VidHlwZSlcXG4gc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gbmRldi1cXHUwMDNlZHNhX3B0cjtcXG4gXFx0c3RydWN0IG5ldGNfdGFnX2NtbiAqdGFnX2NtbjtcXG4gXFx0aW50IHRhZ19sZW4sIHN3X2lkLCBwb3J0O1xcbiBcXHRpbnQgdHlwZSwgc3VidHlwZTtcXG4rXFx0dm9pZCAqdGFnO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgTkVUQ19UQUdfTUFYX0xFTikpKVxcbitcXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBORVRDX1RBR19NQVhfTEVOIC0gMikpKVxcbiBcXHRcXHRnb3RvIGVycl9mcmVlX3NrYjtcXG4gXFxuLVxcdHRhZ19jbW4gPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc19yeChza2IpO1xcbitcXHR0YWcgPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc19yeChza2IpO1xcbitcXHR0YWdfY21uID0gdGFnO1xcbiBcXHRpZiAobnRvaHModGFnX2Ntbi1cXHUwMDNldHBpZCkgIT0gRVRIX1BfTlhQX05FVEMpIHtcXG4gXFx0XFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoXFx1MDAyNm5kZXYtXFx1MDAzZWRldiwgXFxcIlVua25vd24gVFBJRCAweCUwNHhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCAgICAgbnRvaHModGFnX2Ntbi1cXHUwMDNldHBpZCkpO1xcbkBAIC0xNjEsMTIgKzI5OSwyOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5ldGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmICh0eXBlID09IE5FVENfVEFHX0ZPUldBUkQpIHtcXG4gXFx0XFx0ZHNhX2RlZmF1bHRfb2ZmbG9hZF9md2RfbWFyayhza2IpO1xcbiBcXHR9IGVsc2UgaWYgKHR5cGUgPT0gTkVUQ19UQUdfVE9fSE9TVCkge1xcbi1cXHRcXHQvKiBDdXJyZW50bHkgb25seSBzdWJ0eXBlMCBzdXBwb3J0ZWQgKi9cXG4tXFx0XFx0aWYgKHN1YnR5cGUgIT0gTkVUQ19UQUdfVEhfU1VCVFlQRTApXFxuK1xcdFxcdHN3aXRjaCAoc3VidHlwZSkge1xcbitcXHRcXHRjYXNlIE5FVENfVEFHX1RIX1NVQlRZUEUwOlxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBORVRDX1RBR19USF9TVUJUWVBFMTpcXG4rXFx0XFx0XFx0bmV0Y19yeF90c3RhbXBfcHJvY2Vzcyh0YWcsIHNrYik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIE5FVENfVEFHX1RIX1NVQlRZUEUyOlxcbitcXHRcXHRcXHQvKiBUaGlzIHNrYiBpcyBhIGhhcmR3YXJlLWdlbmVyYXRlZCByZXNwb25zZSB0byBhXFxuK1xcdFxcdFxcdCAqIHR3by1zdGVwIHRyYW5zbWl0IHRpbWVzdGFtcCByZXF1ZXN0LiBUaGUgdGFnXFxuK1xcdFxcdFxcdCAqIGRyaXZlciBtdXN0IGZyZWUgdGhlIHNrYiBhZnRlciBwcm9jZXNzaW5nLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0bmV0Y190d29zdGVwX3RzdGFtcF9wcm9jZXNzKHRhZywgZHAtXFx1MDAzZWRzKTtcXG4rXFx0XFx0XFx0Z290byBlcnJfZnJlZV9za2I7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKFxcdTAwMjZuZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlVuc3VwcG9ydGVkIFRvX0hvc3Qgc3VidHlwZTogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3VidHlwZSk7XFxuIFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfc2tiO1xcbitcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKFxcdTAwMjZuZGV2LVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFxcIlVuZXhwZWN0ZWQgIHRhZyB0eXBlICVkXFxcXG5cXFwiLCB0eXBlKTtcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiVW5leHBlY3RlZCB0YWcgdHlwZSAlZFxcXFxuXFxcIiwgdHlwZSk7XFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfc2tiO1xcbiBcXHR9XFxuIFxcbkBAIC0yMDAsNiArMzU0LDI4IEBAIHN0YXRpYyB2b2lkIG5ldGNfZmxvd19kaXNzZWN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8sXFxuIFxcdCpwcm90byA9ICgoX19iZTE2ICopc2tiLVxcdTAwM2VkYXRhKVsodGFnX2xlbiAvIDIpIC0gMV07XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbmV0Y19jb25uZWN0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGE7XFxuK1xcbitcXHR0YWdnZXJfZGF0YSA9IGt6YWxsb2Nfb2JqKCp0YWdnZXJfZGF0YSk7XFxuK1xcdGlmICghdGFnZ2VyX2RhdGEpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0dGFnZ2VyX2RhdGEtXFx1MDAzZW9uZXN0ZXBfc3luY194bWl0ID0gbmV0Y19vbmVzdGVwX3N5bmNfeG1pdDtcXG4rXFx0ZHMtXFx1MDAzZXRhZ2dlcl9kYXRhID0gdGFnZ2VyX2RhdGE7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbmV0Y19kaXNjb25uZWN0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAqdGFnZ2VyX2RhdGEgPSBkcy1cXHUwMDNldGFnZ2VyX2RhdGE7XFxuK1xcbitcXHRrZnJlZSh0YWdnZXJfZGF0YSk7XFxuK1xcdGRzLVxcdTAwM2V0YWdnZXJfZGF0YSA9IE5VTEw7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgbmV0Y19uZXRkZXZfb3BzID0ge1xcbiBcXHQubmFtZVxcdFxcdFxcdD0gTkVUQ19OQU1FLFxcbiBcXHQucHJvdG9cXHRcXHRcXHQ9IERTQV9UQUdfUFJPVE9fTkVUQyxcXG5AQCAtMjA3LDYgKzM4Myw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgbmV0Y19uZXRkZXZfb3BzID0ge1xcbiBcXHQucmN2XFx0XFx0XFx0PSBuZXRjX3JjdixcXG4gXFx0Lm5lZWRlZF9oZWFkcm9vbVxcdD0gTkVUQ19UQUdfTUFYX0xFTixcXG4gXFx0LmZsb3dfZGlzc2VjdFxcdFxcdD0gbmV0Y19mbG93X2Rpc3NlY3QsXFxuK1xcdC5jb25uZWN0XFx0XFx0PSBuZXRjX2Nvbm5lY3QsXFxuK1xcdC5kaXNjb25uZWN0XFx0XFx0PSBuZXRjX2Rpc2Nvbm5lY3QsXFxuIH07XFxuIFxcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkRTQSB0YWcgZHJpdmVyIGZvciBOWFAgTkVUQyBzd2l0Y2ggZmFtaWx5XFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA3OjU1OjU4LjQzODg4NDQ4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc2NjY3NjU0NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBzdXBwb3J0IHRvIHRoZSBOWFAgTkVUQyBzd2l0Y2ggZHJpdmVyIGFuZCBpdHMgYXNzb2NpYXRlZCBEU0EgdGFnZ2VyLiBUaGUgTkVUQyBzd2l0Y2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBkZXZpY2UgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyByZXF1aXJlZCB0byBwcm9iZSB0aGUgZHJpdmVyIGFuZCBpbnN0YW50aWF0ZSB0aGUgRFNBIHN3aXRjaCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW4gYm90aCB0aGUgZHJpdmVyIGFuZCB0aGUgdGFnZ2VyIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZDkzMjNmNjM4NjYwYjkyMjRkOTdkMmY5MDNhMTQzNGJjMmRkN2FjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDc6NTU6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZ1xuaW5kZXggNzkzZjc2OTFhMjRmMy4uNTViMWYxMzM4YTg3OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWdcbkBAIC00LDYgKzQsNyBAQCBjb25maWcgTkVUX0RTQV9ORVRDX1NXSVRDSFxuIFx0ZGVwZW5kcyBvbiBBUk02NCB8fCBDT01QSUxFX1RFU1RcbiBcdGRlcGVuZHMgb24gTkVUX0RTQSBcdTAwMjZcdTAwMjYgUENJXG4gXHRkZXBlbmRzIG9uIE5FVF9WRU5ET1JfRlJFRVNDQUxFXG4rXHRkZXBlbmRzIG9uIFBUUF9ORVRDX1Y0X1RJTUVSIHx8IFBUUF9ORVRDX1Y0X1RJTUVSPW5cbiBcdHNlbGVjdCBORVRfRFNBX1RBR19ORVRDXG4gXHRzZWxlY3QgRlNMX0VORVRDX01ESU9cbiBcdHNlbGVjdCBOWFBfTlRNUFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvTWFrZWZpbGVcbmluZGV4IGY0MGIxM2M3MDJlMDcuLjU3MmI4MzNhZDgwZmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvTWFrZWZpbGVcbkBAIC0xLDMgKzEsNCBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIG9iai0kKENPTkZJR19ORVRfRFNBX05FVENfU1dJVENIKSArPSBueHAtbmV0Yy1zd2l0Y2gub1xuLW54cC1uZXRjLXN3aXRjaC1vYmpzIDo9IG5ldGNfbWFpbi5vIG5ldGNfcGxhdGZvcm0ubyBuZXRjX2V0aHRvb2wub1xuK254cC1uZXRjLXN3aXRjaC1vYmpzIDo9IG5ldGNfbWFpbi5vIG5ldGNfcGxhdGZvcm0ubyBuZXRjX2V0aHRvb2wubyBcXFxuK1x0XHRcdG5ldGNfcHRwLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jXG5pbmRleCA3NzA3NzM1MmMxYTU3Li45ODU1ZTAyYjQ3MjY2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jXG5AQCAtNjUsNiArNjUsMjEgQEAgbmV0Y19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRyZXR1cm4gRFNBX1RBR19QUk9UT19ORVRDO1xuIH1cbiBcbitzdGF0aWMgaW50IG5ldGNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdFx0ICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG4re1xuK1x0c3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEgKnRhZ2dlcl9kYXRhO1xuK1xuK1x0aWYgKHByb3RvICE9IERTQV9UQUdfUFJPVE9fTkVUQylcbitcdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4rXG4rXHR0YWdnZXJfZGF0YSA9IGRzLVx1MDAzZXRhZ2dlcl9kYXRhO1xuK1x0dGFnZ2VyX2RhdGEtXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIgPSBuZXRjX29uZXN0ZXBfc3luY19oYW5kbGVyO1xuK1x0dGFnZ2VyX2RhdGEtXHUwMDNldHdvc3RlcF90c3RhbXBfaGFuZGxlciA9IG5ldGNfdHdvc3RlcF90c3RhbXBfaGFuZGxlcjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCBuZXRjX3BvcnRfcm13KHN0cnVjdCBuZXRjX3BvcnQgKm5wLCB1MzIgcmVnLFxuIFx0XHRcdCAgdTMyIG1hc2ssIHUzMiB2YWwpXG4ge1xuQEAgLTgwLDcgKzk1LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3JtdyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIHJlZyxcbiBcdG5ldGNfcG9ydF93cihucCwgcmVnLCBuZXcpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZXRjX21hY19wb3J0X3dyKHN0cnVjdCBuZXRjX3BvcnQgKm5wLCB1MzIgcmVnLCB1MzIgdmFsKVxuK3ZvaWQgbmV0Y19tYWNfcG9ydF93cihzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgdTMyIHJlZywgdTMyIHZhbClcbiB7XG4gXHRpZiAoaXNfbmV0Y19wc2V1ZG9fcG9ydChucCkpXG4gXHRcdHJldHVybjtcbkBAIC0yMzgsNiArMjUzLDE1IEBAIHN0YXRpYyB2b2lkIG5ldGNfZ2V0X3N3aXRjaF9jYXBhYmlsaXRpZXMoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KVxuIFx0cHJpdi1cdTAwM2VudW1fYnAgPSBGSUVMRF9HRVQoQlBDQVBSX05VTV9CUCwgdmFsKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbmV0Y19wb3J0X2luaXRfcHRwX2lwZnRfZWlkKHN0cnVjdCBuZXRjX3BvcnQgKm5wKVxuK3tcbitcdGludCBpO1xuK1xuK1x0LyogSW5pdGlhbGl6ZSB0byBpbnZhbGlkIGVudHJ5IElEcyAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTkVUQ19QVFBfTUFYOyBpKyspXG4rXHRcdG5wLVx1MDAzZXB0cF9pcGZ0X2VpZFtpXSA9IE5UTVBfTlVMTF9FTlRSWV9JRDtcbit9XG4rXG4gc3RhdGljIGludCBuZXRjX2luaXRfYWxsX3BvcnRzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LVx1MDAzZWRldjtcbkBAIC0yODYsNiArMzEwLDE3IEBAIHN0YXRpYyBpbnQgbmV0Y19pbml0X2FsbF9wb3J0cyhzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpXG4gXHRcdFx0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gY3JlYXRlIE1ESU8gYnVzXFxuXCIpO1xuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHR9XG4rXG4rXHRcdFx0LyogVGhlIGlwZnRfaGZfZWlkIGlzIGluaXRpYWxpemVkIHRvIGFuIGludmFsaWQgZW50cnlcbitcdFx0XHQgKiBJRCBiZWNhdXNlIHRoZSBob3N0IGZsb29kIHJ1bGUgKElQRlQgZW50cnkpIGhhcyBub3RcbitcdFx0XHQgKiBiZWVuIGNyZWF0ZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0bnAtXHUwMDNlaXBmdF9oZl9laWQgPSBOVE1QX05VTExfRU5UUllfSUQ7XG4rXHRcdFx0bmV0Y19wb3J0X2luaXRfcHRwX2lwZnRfZWlkKG5wKTtcbitcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4rXHRcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm5wLVx1MDAzZXNrYl90eHRzdGFtcF9xdWV1ZSk7XG4rXHRcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm5wLVx1MDAzZXNrYl9vbmVzdGVwX3F1ZXVlKTtcbitcdFx0XHRJTklUX1dPUksoXHUwMDI2bnAtXHUwMDNlb25lc3RlcF93b3JrLCBuZXRjX3BvcnRfb25lc3RlcF93b3JrKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTU0OSw2ICs1ODQsMTIgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X2ZpeGVkX2NvbmZpZyhzdHJ1Y3QgbmV0Y19wb3J0ICpucClcbiBcdG5ldGNfcG9ydF9ybXcobnAsIE5FVENfUENSLCBQQ1JfTDJET1NFIHwgUENSX0wzRE9TRSxcbiBcdFx0ICAgICAgUENSX0wyRE9TRSB8IFBDUl9MM0RPU0UpO1xuIFxuK1x0LyogRW5hYmxlIGluZ3Jlc3MgcG9ydCBmaWx0ZXIgdGFibGUgbG9va3VwLCBpZiBubyBtYXRjaCBpcyBmb3VuZCxcbitcdCAqIHRoZSBmcmFtZSBpcyBhbGxvd2VkIGFuZCBwYXNzZWQgdG8gdGhlIG5leHQgZnJhbWUgcHJvY2Vzc2luZ1xuK1x0ICogZnVuY3Rpb24uXG4rXHQgKi9cbitcdG5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIFBJUEZDUl9FTik7XG4rXG4gXHQvKiBTZXQgdGhlIHF1YW50YSB2YWx1ZSBvZiBUWCBQQVVTRSBmcmFtZSAqL1xuIFx0bmV0Y19tYWNfcG9ydF93cihucCwgTkVUQ19QTV9QQVVTRV9RVUFOVEEoMCksIE5FVENfUEFVU0VfUVVBTlRBKTtcbiBcbkBAIC04NjksNiArOTEwLDE1IEBAIHN0YXRpYyBpbnQgbmV0Y19zd2l0Y2hfYnB0X2RlZmF1bHRfY29uZmlnKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKm5ldGNfZ2V0X3B0cF90aW1lcihzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYpXG4re1xuK1x0c3RydWN0IHBjaV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlcGRldi1cdTAwM2VidXM7XG4rXHR1MzIgZGV2Zm4gPSBwcml2LVx1MDAzZWluZm8tXHUwMDNldG1yX2RldmZuO1xuK1xuK1x0cmV0dXJuIHBjaV9nZXRfZG9tYWluX2J1c19hbmRfc2xvdChwY2lfZG9tYWluX25yKGJ1cyksXG4rXHRcdFx0XHRcdCAgIGJ1cy1cdTAwM2VudW1iZXIsIGRldmZuKTtcbit9XG4rXG4gc3RhdGljIGludCBuZXRjX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuQEAgLTg4OSw2ICs5MzksMTYgQEAgc3RhdGljIGludCBuZXRjX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHQvKiBUaGUgUFRQIHRpbWVyIHNpdHMgb24gdGhlIHNhbWUgUENJIGJ1cyBhcyB0aGUgc3dpdGNoLiBQQ0kgY3JlYXRlc1xuK1x0ICogZXZlcnkgZnVuY3Rpb24ncyBwY2lfZGV2IGR1cmluZyBidXMgZW51bWVyYXRpb24sIGJlZm9yZSBhbnkgZHJpdmVyXG4rXHQgKiBwcm9iZXMsIHNvIHdlIGNhbiBncmFiIHRoZSB0aW1lcidzIHBjaV9kZXYgaGVyZSBldmVuIGlmIHRoZSB0aW1lclxuK1x0ICogZHJpdmVyIGhhcyBub3QgcHJvYmVkIHlldC5cbitcdCAqL1xuK1x0cHJpdi1cdTAwM2V0bXJfZGV2ID0gbmV0Y19nZXRfcHRwX3RpbWVyKHByaXYpO1xuK1x0aWYgKCFwcml2LVx1MDAzZXRtcl9kZXYpXG4rXHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2LFxuK1x0XHRcdCBcIlBUUCB0aW1lciBQQ0kgZGV2aWNlIG5vdCBmb3VuZFxcblwiKTtcbitcbiBcdElOSVRfSExJU1RfSEVBRChcdTAwMjZwcml2LVx1MDAzZWZkYl9saXN0KTtcbiBcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VmZGJ0X2xvY2spO1xuIFx0cHJpdi1cdTAwM2VmZGJ0X2FnZWluZ19kZWxheSA9IE5FVENfRkRCVF9BR0VJTkdfREVMQVk7XG5AQCAtOTI1LDYgKzk4NSw3IEBAIHN0YXRpYyBpbnQgbmV0Y19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHQgKi9cbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2VmZGJ0X2xvY2spO1xuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZXZmdF9sb2NrKTtcbitcdHBjaV9kZXZfcHV0KHByaXYtXHUwMDNldG1yX2Rldik7XG4gXHRuZXRjX2ZyZWVfbnRtcF91c2VyKHByaXYpO1xuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC05MzgsMjAgKzk5OSwyMyBAQCBzdGF0aWMgdm9pZCBuZXRjX2Rlc3Ryb3lfYWxsX2xpc3RzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2V2ZnRfbG9jayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG5ldGNfZnJlZV9ob3N0X2Zsb29kX3J1bGVzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbitzdGF0aWMgdm9pZCBuZXRjX2ZyZWVfcG9ydHNfcmVzb3VyY2VzKHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuIFxuLVx0ZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIHByaXYtXHUwMDNlZHMpIHtcbitcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfYXZhaWxhYmxlX3BvcnQoZHAsIHByaXYtXHUwMDNlZHMpIHtcbiBcdFx0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBwcml2LVx1MDAzZXBvcnRzW2RwLVx1MDAzZWluZGV4XTtcbiBcbi1cdFx0LyogTm8gbmVlZCB0byBjbGVhciB0aGUgaGFyZHdhcmUgSVBGVCBlbnRyeS4gQmVjYXVzZSBQQ0llXG4tXHRcdCAqIEZMUiB3aWxsIGJlIHBlcmZvcm1lZCB3aGVuIHRoZSBzd2l0Y2ggaXMgcmUtcmVnaXN0ZXJlZCxcbi1cdFx0ICogaXQgd2lsbCByZXNldCBoYXJkd2FyZSBzdGF0ZS4gU28gb25seSBuZWVkIHRvIGZyZWUgdGhlXG4tXHRcdCAqIG1lbW9yeSB0byBhdm9pZCBtZW1vcnkgbGVhay5cbitcdFx0aWYgKCFkc2FfcG9ydF9pc191c2VyKGRwKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogTm8gbmV3IFNLQnMgY2FuIGJlIGVucXVldWVkIGR1cmluZyB0ZWFyZG93bi4gUHVyZ2Ugd2l0aG91dFxuK1x0XHQgKiB0aGUgc3BpbmxvY2sgdG8gYXZvaWQgY2FsbGluZyBrZnJlZV9za2IoKSB3aXRoIGEgZGVzdHJ1Y3RvclxuK1x0XHQgKiAoc29ja19lZnJlZSkgd2hpbGUgaG9sZGluZyBhIHNwaW5sb2NrLlxuIFx0XHQgKi9cbi1cdFx0a2ZyZWUobnAtXHUwMDNlaG9zdF9mbG9vZCk7XG4tXHRcdG5wLVx1MDAzZWhvc3RfZmxvb2QgPSBOVUxMO1xuK1x0XHRfX3NrYl9xdWV1ZV9wdXJnZShcdTAwMjZucC1cdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUpO1xuK1x0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5wLVx1MDAzZW9uZXN0ZXBfd29yayk7XG4rXHRcdF9fc2tiX3F1ZXVlX3B1cmdlKFx1MDAyNm5wLVx1MDAzZXNrYl9vbmVzdGVwX3F1ZXVlKTtcbiBcdH1cbiB9XG4gXG5AQCAtOTYxLDggKzEwMjUsOSBAQCBzdGF0aWMgdm9pZCBuZXRjX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcbiBcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VmZGJ0X2FnZWluZ193b3JrKTtcbiBcdG5ldGNfZGVzdHJveV9hbGxfbGlzdHMocHJpdik7XG4tXHRuZXRjX2ZyZWVfaG9zdF9mbG9vZF9ydWxlcyhwcml2KTtcbitcdHBjaV9kZXZfcHV0KHByaXYtXHUwMDNldG1yX2Rldik7XG4gXHRuZXRjX2ZyZWVfbnRtcF91c2VyKHByaXYpO1xuK1x0bmV0Y19mcmVlX3BvcnRzX3Jlc291cmNlcyhwcml2KTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbmV0Y19wb3J0X2lzX2VtZGlvX2NvbnN1bWVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbkBAIC0xNzIwLDggKzE3ODUsNiBAQCBzdGF0aWMgaW50IG5ldGNfcG9ydF9hZGRfaG9zdF9mbG9vZF9ydWxlKHN0cnVjdCBuZXRjX3BvcnQgKm5wLFxuIFx0aW50IGVycjtcbiBcbiBcdGlmICghdWMgXHUwMDI2XHUwMDI2ICFtYykge1xuLVx0XHQvKiBEaXNhYmxlIGluZ3Jlc3MgcG9ydCBmaWx0ZXIgdGFibGUgbG9va3VwICovXG4tXHRcdG5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIDApO1xuIFx0XHRucC1cdTAwM2V1YyA9IGZhbHNlO1xuIFx0XHRucC1cdTAwM2VtYyA9IGZhbHNlO1xuIFxuQEAgLTE3NTksNDAgKzE4MjIsMzYgQEAgc3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2hvc3RfZmxvb2RfcnVsZShzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcbiBcdGNmZ2UtXHUwMDNlY2ZnID0gY3B1X3RvX2xlMzIoY2ZnKTtcbiBcbiBcdGVyciA9IG50bXBfaXBmdF9hZGRfZW50cnkoXHUwMDI2cHJpdi1cdTAwM2VudG1wLCBob3N0X2Zsb29kKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0a2ZyZWUoaG9zdF9mbG9vZCk7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGZyZWVfaG9zdF9mbG9vZDtcbiBcbiBcdG5wLVx1MDAzZXVjID0gdWM7XG4gXHRucC1cdTAwM2VtYyA9IG1jO1xuLVx0bnAtXHUwMDNlaG9zdF9mbG9vZCA9IGhvc3RfZmxvb2Q7XG4tXHQvKiBFbmFibGUgaW5ncmVzcyBwb3J0IGZpbHRlciB0YWJsZSBsb29rdXAgKi9cbi1cdG5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIFBJUEZDUl9FTik7XG4rXHRucC1cdTAwM2VpcGZ0X2hmX2VpZCA9IGhvc3RfZmxvb2QtXHUwMDNlZW50cnlfaWQ7XG4gXG4tXHRyZXR1cm4gMDtcbitmcmVlX2hvc3RfZmxvb2Q6XG4rXHRrZnJlZShob3N0X2Zsb29kKTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcbi1cdFx0XHRcdFx0c3RydWN0IGlwZnRfZW50cnlfZGF0YSAqaG9zdF9mbG9vZClcbitzdGF0aWMgdm9pZCBuZXRjX3BvcnRfcmVtb3ZlX2hvc3RfZmxvb2Qoc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiBlbnRyeV9pZClcbiB7XG4gXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBucC1cdTAwM2Vzd2l0Y2hfcHJpdjtcbiBcdGJvb2wgZGlzYWJsZV9ob3N0X2Zsb29kID0gZmFsc2U7XG4gXG4tXHRpZiAoIWhvc3RfZmxvb2QpXG4rXHRpZiAoZW50cnlfaWQgPT0gTlRNUF9OVUxMX0VOVFJZX0lEKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAobnAtXHUwMDNlaG9zdF9mbG9vZCA9PSBob3N0X2Zsb29kKVxuK1x0aWYgKG5wLVx1MDAzZWlwZnRfaGZfZWlkID09IGVudHJ5X2lkKVxuIFx0XHRkaXNhYmxlX2hvc3RfZmxvb2QgPSB0cnVlO1xuIFxuLVx0bnRtcF9pcGZ0X2RlbGV0ZV9lbnRyeShcdTAwMjZwcml2LVx1MDAzZW50bXAsIGhvc3RfZmxvb2QtXHUwMDNlZW50cnlfaWQpO1xuLVx0a2ZyZWUoaG9zdF9mbG9vZCk7XG4rXHRudG1wX2lwZnRfZGVsZXRlX2VudHJ5KFx1MDAyNnByaXYtXHUwMDNlbnRtcCwgZW50cnlfaWQpO1xuIFxuIFx0aWYgKGRpc2FibGVfaG9zdF9mbG9vZCkge1xuLVx0XHRucC1cdTAwM2Vob3N0X2Zsb29kID0gTlVMTDtcbitcdFx0bnAtXHUwMDNlaXBmdF9oZl9laWQgPSBOVE1QX05VTExfRU5UUllfSUQ7XG4gXHRcdG5wLVx1MDAzZXVjID0gZmFsc2U7XG4gXHRcdG5wLVx1MDAzZW1jID0gZmFsc2U7XG4tXHRcdG5ldGNfcG9ydF93cihucCwgTkVUQ19QSVBGQ1IsIDApO1xuIFx0fVxuIH1cbiBcbkBAIC0xODAwLDcgKzE4NTksNyBAQCBzdGF0aWMgdm9pZCBuZXRjX3BvcnRfc2V0X2hvc3RfZmxvb2Qoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHRcdCAgICAgYm9vbCB1YywgYm9vbCBtYylcbiB7XG4gXHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XG4tXHRzdHJ1Y3QgaXBmdF9lbnRyeV9kYXRhICpvbGRfaG9zdF9mbG9vZDtcbitcdHUzMiBvbGRfZW50cnlfaWQ7XG4gXG4gXHQvKiBEbyBub3QgYWRkIGhvc3QgZmxvb2QgcnVsZSB0byBpbmdyZXNzIHBvcnQgZmlsdGVyIHRhYmxlIHdoZW5cbiBcdCAqIHRoZSBwb3J0IGhhcyBqb2luZWQgYSBicmlkZ2UuIE90aGVyd2lzZSwgdGhlIGluZ3Jlc3MgZnJhbWVzXG5AQCAtMTgwOCw3ICsxODY3LDcgQEAgc3RhdGljIHZvaWQgbmV0Y19wb3J0X3NldF9ob3N0X2Zsb29kKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHQgKiB3aWxsIGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHkgdG8gdGhlIENQVSBwb3J0LlxuIFx0ICovXG4gXHRpZiAoZHNhX3BvcnRfYnJpZGdlX2Rldl9nZXQobnAtXHUwMDNlZHApKSB7XG4tXHRcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgbnAtXHUwMDNlaG9zdF9mbG9vZCk7XG4rXHRcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgbnAtXHUwMDNlaXBmdF9oZl9laWQpO1xuIFxuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMTgxOCwyMCArMTg3NywxOCBAQCBzdGF0aWMgdm9pZCBuZXRjX3BvcnRfc2V0X2hvc3RfZmxvb2Qoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcbiBcdC8qIElQRlQgZG9lcyBub3Qgc3VwcG9ydCBpbi1wbGFjZSB1cGRhdGVzIHRvIHRoZSBLRVlFIGVsZW1lbnQsXG4gXHQgKiB3ZSBuZWVkIHRvIGFkZCBhIG5ldyBlbnRyeSBhbmQgdGhlbiBkZWxldGUgdGhlIG9sZCBvbmUuIFNvXG4tXHQgKiBzYXZlIHRoZSBvbGQgZW50cnkgZmlyc3QuXG4rXHQgKiBzYXZlIHRoZSBvbGQgZW50cnkgSUQgZmlyc3QuXG4gXHQgKi9cbi1cdG9sZF9ob3N0X2Zsb29kID0gbnAtXHUwMDNlaG9zdF9mbG9vZDtcbi1cdG5wLVx1MDAzZWhvc3RfZmxvb2QgPSBOVUxMO1xuK1x0b2xkX2VudHJ5X2lkID0gbnAtXHUwMDNlaXBmdF9oZl9laWQ7XG4gXG4gXHRpZiAobmV0Y19wb3J0X2FkZF9ob3N0X2Zsb29kX3J1bGUobnAsIHVjLCBtYykpIHtcbi1cdFx0bnAtXHUwMDNlaG9zdF9mbG9vZCA9IG9sZF9ob3N0X2Zsb29kO1xuIFx0XHRkZXZfZXJyKGRzLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gYWRkIGhvc3QgZmxvb2QgcnVsZSBvbiBwb3J0ICVkXFxuXCIsXG4gXHRcdFx0cG9ydCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdC8qIFJlbW92ZSB0aGUgb2xkIGhvc3QgZmxvb2QgZW50cnkgKi9cbi1cdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgb2xkX2hvc3RfZmxvb2QpO1xuK1x0bmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBvbGRfZW50cnlfaWQpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG5ldGNfc2luZ2xlX3ZsYW5fYXdhcmVfYnJpZGdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbkBAIC0yMDIwLDcgKzIwNzcsNyBAQCBzdGF0aWMgaW50IG5ldGNfcG9ydF9icmlkZ2Vfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0bmV0Y19wb3J0X3NldF9wdmlkKG5wLCB2bGFuX3VuYXdhcmVfcHZpZCk7XG4gXG4gb3V0OlxuLVx0bmV0Y19wb3J0X3JlbW92ZV9ob3N0X2Zsb29kKG5wLCBucC1cdTAwM2Vob3N0X2Zsb29kKTtcbitcdG5ldGNfcG9ydF9yZW1vdmVfaG9zdF9mbG9vZChucCwgbnAtXHUwMDNlaXBmdF9oZl9laWQpO1xuIFxuIFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNnByaXYtXHUwMDNlYnJfY250KSA9PSAxKVxuIFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cHJpdi1cdTAwM2VmZGJ0X2FnZWluZ193b3JrLFxuQEAgLTI0MDIsNiArMjQ1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIG5ldGNfcGh5bGlua19tYWNfb3BzID0ge1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbmV0Y19zd2l0Y2hfb3BzID0ge1xuIFx0LmdldF90YWdfcHJvdG9jb2xcdFx0PSBuZXRjX2dldF90YWdfcHJvdG9jb2wsXG4rXHQuY29ubmVjdF90YWdfcHJvdG9jb2xcdFx0PSBuZXRjX2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxuIFx0LnNldHVwXHRcdFx0XHQ9IG5ldGNfc2V0dXAsXG4gXHQudGVhcmRvd25cdFx0XHQ9IG5ldGNfdGVhcmRvd24sXG4gXHQucGh5bGlua19nZXRfY2Fwc1x0XHQ9IG5ldGNfcGh5bGlua19nZXRfY2FwcyxcbkBAIC0yNDMwLDYgKzI0ODgsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBuZXRjX3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3NzZXRfY291bnRcdFx0XHQ9IG5ldGNfcG9ydF9nZXRfc3NldF9jb3VudCxcbiBcdC5nZXRfc3RyaW5nc1x0XHRcdD0gbmV0Y19wb3J0X2dldF9zdHJpbmdzLFxuIFx0LmdldF9ldGh0b29sX3N0YXRzXHRcdD0gbmV0Y19wb3J0X2dldF9ldGh0b29sX3N0YXRzLFxuK1x0LmdldF90c19pbmZvXHRcdFx0PSBuZXRjX2dldF90c19pbmZvLFxuK1x0LnBvcnRfaHd0c3RhbXBfc2V0XHRcdD0gbmV0Y19wb3J0X2h3dHN0YW1wX3NldCxcbitcdC5wb3J0X2h3dHN0YW1wX2dldFx0XHQ9IG5ldGNfcG9ydF9od3RzdGFtcF9nZXQsXG4rXHQucG9ydF9yeHRzdGFtcFx0XHRcdD0gbmV0Y19wb3J0X3J4dHN0YW1wLFxuK1x0LnBvcnRfdHh0c3RhbXBcdFx0XHQ9IG5ldGNfcG9ydF90eHRzdGFtcCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbmV0Y19zd2l0Y2hfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wbGF0Zm9ybS5jIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wbGF0Zm9ybS5jXG5pbmRleCAzNGFlYjZmY2ViM2NiLi40ZmQwY2U2NzcwYzMzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wbGF0Zm9ybS5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3BsYXRmb3JtLmNcbkBAIC01MCw2ICs1MCw3IEBAIHN0YXRpYyB2b2lkIGlteDk0X3N3aXRjaF9waHlsaW5rX2dldF9jYXBzKGludCBwb3J0LFxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0Y19zd2l0Y2hfaW5mbyBpbXg5NF9pbmZvID0ge1xuIFx0Lm51bV9wb3J0cyA9IDQsXG4rXHQudG1yX2RldmZuID0gUENJX0RFVkZOKDAsIDEpLFxuIFx0LnBoeWxpbmtfZ2V0X2NhcHMgPSBpbXg5NF9zd2l0Y2hfcGh5bGlua19nZXRfY2FwcyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfcHRwLmMgYi9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3B0cC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmY3ZDhlNWU2OGQyM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19wdHAuY1xuQEAgLTAsMCArMSw2NjMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIEJTRC0zLUNsYXVzZSlcbisvKlxuKyAqIE5YUCBORVRDIHN3aXRjaCBkcml2ZXJcbisgKiBDb3B5cmlnaHQgMjAyNS0yMDI2IE5YUFxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbGFzc2lmeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJuZXRjX3N3aXRjaC5oXCJcbitcbisjZGVmaW5lIE5FVENfVFNfUkVRX0lEX05VTVx0XHQoTkVUQ19UQUdfVFNfUkVRX0lEICsgMSlcbisjZGVmaW5lIE5FVENfUFRQX1RYX1RTVEFNUF9USU1FT1VUXHQoNSAqIEhaKVxuK1xuK3N0YXRpYyBpbnQgbmV0Y19nZXRfcGhjX2luZGV4KHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbit7XG4rXHRpZiAoIXByaXYtXHUwMDNldG1yX2RldilcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRyZXR1cm4gcHRwX2Nsb2NrX2luZGV4X2J5X2RldihcdTAwMjZwcml2LVx1MDAzZXRtcl9kZXYtXHUwMDNlZGV2KTtcbit9XG4rXG4raW50IG5ldGNfZ2V0X3RzX2luZm8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0ICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1xuK1x0aW5mby1cdTAwM2Vzb190aW1lc3RhbXBpbmcgPSBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHxcbitcdFx0XHRcdFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgfFxuK1x0XHRcdFx0U09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRTtcbitcbitcdGluZm8tXHUwMDNlcGhjX2luZGV4ID0gbmV0Y19nZXRfcGhjX2luZGV4KHByaXYpO1xuK1x0aWYgKGluZm8tXHUwMDNlcGhjX2luZGV4IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxuK1x0XHRcdFx0IFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgfFxuK1x0XHRcdFx0IFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFO1xuK1xuK1x0aW5mby1cdTAwM2V0eF90eXBlcyA9IEJJVChIV1RTVEFNUF9UWF9PRkYpIHwgQklUKEhXVFNUQU1QX1RYX09OKSB8XG4rXHRcdFx0IEJJVChIV1RTVEFNUF9UWF9PTkVTVEVQX1NZTkMpO1xuK1xuK1x0aW5mby1cdTAwM2VyeF9maWx0ZXJzID0gQklUKEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8XG4rXHRcdFx0ICAgQklUKEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQpIHxcbitcdFx0XHQgICBCSVQoSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVCkgfFxuK1x0XHRcdCAgIEJJVChIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnApXG4re1xuK1x0c3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtXHUwMDNlc3dpdGNoX3ByaXY7XG4rXHR1MzIgZW50cnlfaWQ7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5FVENfUFRQX01BWDsgaSsrKSB7XG4rXHRcdGVudHJ5X2lkID0gbnAtXHUwMDNlcHRwX2lwZnRfZWlkW2ldO1xuK1x0XHRpZiAoZW50cnlfaWQgIT0gTlRNUF9OVUxMX0VOVFJZX0lEKSB7XG4rXHRcdFx0bnRtcF9pcGZ0X2RlbGV0ZV9lbnRyeShcdTAwMjZwcml2LVx1MDAzZW50bXAsIGVudHJ5X2lkKTtcbitcdFx0XHRucC1cdTAwM2VwdHBfaXBmdF9laWRbaV0gPSBOVE1QX05VTExfRU5UUllfSUQ7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBuZXRjX2J1aWxkX3B0cF9pcGZ0X2tleWUoc3RydWN0IGlwZnRfa2V5ZV9kYXRhICprZXllLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICBlbnVtIG5ldGNfcHRwX3R5cGUgdHlwZSlcbit7XG4rXHR1MTYgc3JjX3BvcnQsIGZybV9hdHRyX2ZsYWdzO1xuK1xuK1x0a2V5ZS1cdTAwM2VwcmVjZWRlbmNlID0gY3B1X3RvX2xlMTYoMHhmMDAwKTtcbitcdHNyY19wb3J0ID0gRklFTERfUFJFUChJUEZUX1NSQ19QT1JULCBwb3J0KTtcbitcdHNyY19wb3J0IHw9IElQRlRfU1JDX1BPUlRfTUFTSztcbitcdGtleWUtXHUwMDNlc3JjX3BvcnQgPSBjcHVfdG9fbGUxNihzcmNfcG9ydCk7XG4rXG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgTkVUQ19QVFBfTDI6XG4rXHRcdGtleWUtXHUwMDNlZXRoZXJ0eXBlID0gaHRvbnMoRVRIX1BfMTU4OCk7XG4rXHRcdGtleWUtXHUwMDNlZXRoZXJ0eXBlX21hc2sgPSBodG9ucygweGZmZmYpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTkVUQ19QVFBfTDRfSVBWNF9FVkVOVDpcbitcdGNhc2UgTkVUQ19QVFBfTDRfSVBWNF9HRU5FUkFMOlxuK1x0Y2FzZSBORVRDX1BUUF9MNF9JUFY2X0VWRU5UOlxuK1x0Y2FzZSBORVRDX1BUUF9MNF9JUFY2X0dFTkVSQUw6XG4rXHRcdGZybV9hdHRyX2ZsYWdzID0gSVBGVF9GQUZfSVBfSERSIHwgRklFTERfUFJFUChJUEZUX0ZBRl9MNF9DT0RFLFxuK1x0XHRcdFx0IElQRlRfRkFGX1VEUF9IRFIpO1xuK1x0XHRpZiAodHlwZSA9PSBORVRDX1BUUF9MNF9JUFY2X0VWRU5UIHx8XG4rXHRcdCAgICB0eXBlID09IE5FVENfUFRQX0w0X0lQVjZfR0VORVJBTClcbitcdFx0XHRmcm1fYXR0cl9mbGFncyB8PSBJUEZUX0ZBRl9JUF9WRVI2O1xuK1xuK1x0XHRrZXllLVx1MDAzZWZybV9hdHRyX2ZsYWdzID0gY3B1X3RvX2xlMTYoZnJtX2F0dHJfZmxhZ3MpO1xuK1x0XHRrZXllLVx1MDAzZWZybV9hdHRyX2ZsYWdzX21hc2sgPSBrZXllLVx1MDAzZWZybV9hdHRyX2ZsYWdzO1xuK1x0XHRrZXllLVx1MDAzZWlwX3Byb3RvY29sID0gSVBQUk9UT19VRFA7XG4rXHRcdGtleWUtXHUwMDNlaXBfcHJvdG9jb2xfbWFzayA9IDB4ZmY7XG4rXG4rXHRcdGlmICh0eXBlID09IE5FVENfUFRQX0w0X0lQVjRfRVZFTlQgfHxcbitcdFx0ICAgIHR5cGUgPT0gTkVUQ19QVFBfTDRfSVBWNl9FVkVOVClcbitcdFx0XHRrZXllLVx1MDAzZWw0X2RzdF9wb3J0ID0gaHRvbnMoUFRQX0VWX1BPUlQpO1xuK1x0XHRlbHNlXG4rXHRcdFx0a2V5ZS1cdTAwM2VsNF9kc3RfcG9ydCA9IGh0b25zKFBUUF9HRU5fUE9SVCk7XG4rXG4rXHRcdGtleWUtXHUwMDNlbDRfZHN0X3BvcnRfbWFzayA9IGh0b25zKDB4ZmZmZik7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2lwZnRfcHRwX2VudHJ5KHN0cnVjdCBuZXRjX3BvcnQgKm5wLFxuK1x0XHRcdFx0XHRlbnVtIG5ldGNfcHRwX3R5cGUgdHlwZSlcbit7XG4rXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBucC1cdTAwM2Vzd2l0Y2hfcHJpdjtcbitcdHN0cnVjdCBpcGZ0X2VudHJ5X2RhdGEgKmVudHJ5O1xuK1x0c3RydWN0IGlwZnRfa2V5ZV9kYXRhICprZXllO1xuK1x0dTMyIGNmZztcbitcdGludCBlcnI7XG4rXG4rXHRlbnRyeSA9IGt6YWxsb2Nfb2JqKCplbnRyeSk7XG4rXHRpZiAoIWVudHJ5KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGtleWUgPSBcdTAwMjZlbnRyeS1cdTAwM2VrZXllO1xuK1x0ZXJyID0gbmV0Y19idWlsZF9wdHBfaXBmdF9rZXllKGtleWUsIG5wLVx1MDAzZWRwLVx1MDAzZWluZGV4LCB0eXBlKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZnJlZV9lbnRyeTtcbitcbitcdGNmZyA9IEZJRUxEX1BSRVAoSVBGVF9GTFRGQSwgSVBGVF9GTFRGQV9SRURJUkVDVCk7XG4rXHRjZmcgfD0gRklFTERfUFJFUChJUEZUX0hSLCBORVRDX0hSX1BUUF9UUkFQKTtcbitcdGNmZyB8PSBJUEZUX1RJTUVDQVBFIHwgSVBGVF9SUlQ7XG4rXHRlbnRyeS1cdTAwM2VjZmdlLmNmZyA9IGNwdV90b19sZTMyKGNmZyk7XG4rXG4rXHRlcnIgPSBudG1wX2lwZnRfYWRkX2VudHJ5KFx1MDAyNnByaXYtXHUwMDNlbnRtcCwgZW50cnkpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBmcmVlX2VudHJ5O1xuK1xuK1x0bnAtXHUwMDNlcHRwX2lwZnRfZWlkW3R5cGVdID0gZW50cnktXHUwMDNlZW50cnlfaWQ7XG4rXG4rZnJlZV9lbnRyeTpcbitcdGtmcmVlKGVudHJ5KTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbmV0Y19wb3J0X2FkZF9sMl9wdHBfZmlsdGVyKHN0cnVjdCBuZXRjX3BvcnQgKm5wKVxuK3tcbitcdHJldHVybiBuZXRjX3BvcnRfYWRkX2lwZnRfcHRwX2VudHJ5KG5wLCBORVRDX1BUUF9MMik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbmV0Y19wb3J0X2FkZF9sNF9wdHBfZmlsdGVyKHN0cnVjdCBuZXRjX3BvcnQgKm5wKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBuZXRjX3BvcnRfYWRkX2lwZnRfcHRwX2VudHJ5KG5wLCBORVRDX1BUUF9MNF9JUFY0X0VWRU5UKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRlcnIgPSBuZXRjX3BvcnRfYWRkX2lwZnRfcHRwX2VudHJ5KG5wLCBORVRDX1BUUF9MNF9JUFY0X0dFTkVSQUwpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBkZWxfcHRwX2ZpbHRlcjtcbitcbitcdGVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjZfRVZFTlQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBkZWxfcHRwX2ZpbHRlcjtcbitcbitcdGVyciA9IG5ldGNfcG9ydF9hZGRfaXBmdF9wdHBfZW50cnkobnAsIE5FVENfUFRQX0w0X0lQVjZfR0VORVJBTCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGRlbF9wdHBfZmlsdGVyO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZGVsX3B0cF9maWx0ZXI6XG4rXHRuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIobnApO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBuZXRjX3BvcnRfYWRkX2wyX2w0X3B0cF9maWx0ZXIoc3RydWN0IG5ldGNfcG9ydCAqbnApXG4re1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IG5ldGNfcG9ydF9hZGRfbDJfcHRwX2ZpbHRlcihucCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZXJyID0gbmV0Y19wb3J0X2FkZF9sNF9wdHBfZmlsdGVyKG5wKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZGVsX3B0cF9maWx0ZXI7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitkZWxfcHRwX2ZpbHRlcjpcbitcdG5ldGNfcG9ydF9kZWxfcHRwX2ZpbHRlcihucCk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG5ldGNfcG9ydF9zZXRfcHRwX2ZpbHRlcihzdHJ1Y3QgbmV0Y19wb3J0ICpucCwgaW50IHJ4X2ZpbHRlcilcbit7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGlmIChucC1cdTAwM2VwdHBfcnhfZmlsdGVyID09IHJ4X2ZpbHRlcilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobnAtXHUwMDNlcHRwX3J4X2ZpbHRlciAhPSBIV1RTVEFNUF9GSUxURVJfTk9ORSB8fFxuK1x0ICAgIHJ4X2ZpbHRlciA9PSBIV1RTVEFNUF9GSUxURVJfTk9ORSkge1xuK1x0XHRuZXRjX3BvcnRfZGVsX3B0cF9maWx0ZXIobnApO1xuK1x0XHRucC1cdTAwM2VwdHBfcnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XG4rXHR9XG4rXG4rXHRzd2l0Y2ggKHJ4X2ZpbHRlcikge1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ6XG4rXHRcdGVyciA9IG5ldGNfcG9ydF9hZGRfbDJfcHRwX2ZpbHRlcihucCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOlxuK1x0XHRlcnIgPSBuZXRjX3BvcnRfYWRkX2w0X3B0cF9maWx0ZXIobnApO1xuK1x0XHRicmVhaztcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDpcbitcdFx0ZXJyID0gbmV0Y19wb3J0X2FkZF9sMl9sNF9wdHBfZmlsdGVyKG5wKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRlcnIgPSAtRVJBTkdFO1xuK1x0fVxuK1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdG5wLVx1MDAzZXB0cF9yeF9maWx0ZXIgPSByeF9maWx0ZXI7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IG5ldGNfcG9ydF9od3RzdGFtcF9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHQgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY29uZmlnLFxuK1x0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XG4rXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1x0aW50IHJ4X2ZpbHRlciwgZXJyO1xuK1xuK1x0c3dpdGNoIChjb25maWctXHUwMDNldHhfdHlwZSkge1xuK1x0Y2FzZSBIV1RTVEFNUF9UWF9PTjpcbitcdGNhc2UgSFdUU1RBTVBfVFhfT0ZGOlxuK1x0XHRucC1cdTAwM2VwdHBfdHhfdHlwZSA9IGNvbmZpZy1cdTAwM2V0eF90eXBlO1xuK1x0XHRicmVhaztcbitcdGNhc2UgSFdUU1RBTVBfVFhfT05FU1RFUF9TWU5DOlxuK1x0XHRpZiAoIXByaXYtXHUwMDNldG1yX2RldilcbitcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbitcbitcdFx0bnAtXHUwMDNlcHRwX3R4X3R5cGUgPSBjb25maWctXHUwMDNldHhfdHlwZTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdHN3aXRjaCAoY29uZmlnLVx1MDAzZXJ4X2ZpbHRlcikge1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbitcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX05PTkU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X1NZTkM6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVROlxuK1x0XHRyeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UO1xuK1x0XHRicmVhaztcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9TWU5DOlxuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0RFTEFZX1JFUTpcbitcdFx0cnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfU1lOQzpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6XG4rXHRcdHJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHR9XG4rXG4rXHRlcnIgPSBuZXRjX3BvcnRfc2V0X3B0cF9maWx0ZXIobnAsIHJ4X2ZpbHRlcik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiRmFpbGVkIHRvIHNldCBQVFAgZmlsdGVyXCIpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0Y29uZmlnLVx1MDAzZXJ4X2ZpbHRlciA9IHJ4X2ZpbHRlcjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgbmV0Y19wb3J0X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdCAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpXG4re1xuK1x0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBORVRDX1BPUlQoZHMsIHBvcnQpO1xuK1xuK1x0Y29uZmlnLVx1MDAzZXR4X3R5cGUgPSBucC1cdTAwM2VwdHBfdHhfdHlwZTtcbitcdGNvbmZpZy1cdTAwM2VyeF9maWx0ZXIgPSBucC1cdTAwM2VwdHBfcnhfZmlsdGVyO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbmV0Y19wb3J0X3R4dHN0YW1wX3R3b3N0ZXAoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmUpXG4re1xuK1x0REVDTEFSRV9CSVRNQVAodHNfcmVxX2lkX2JpdG1hcCwgTkVUQ19UU19SRVFfSURfTlVNKTtcbitcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IG5wLVx1MDAzZXN3aXRjaF9wcml2O1xuK1x0c3RydWN0IHNrX2J1ZmZfaGVhZCBmcmVlX2xpc3Q7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqc2tiX3RtcDtcbitcdHVuc2lnbmVkIGxvbmcgdHNfcmVxX2lkO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRiaXRtYXBfemVybyh0c19yZXFfaWRfYml0bWFwLCBORVRDX1RTX1JFUV9JRF9OVU0pO1xuK1x0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmZyZWVfbGlzdCk7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1xuK1x0c2tiX3F1ZXVlX3dhbGtfc2FmZShcdTAwMjZucC1cdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUsIHNrYiwgc2tiX3RtcCkge1xuK1x0XHRpZiAodGltZV9iZWZvcmUoTkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2VwdHBfdHhfdGltZSArXG4rXHRcdFx0XHRORVRDX1BUUF9UWF9UU1RBTVBfVElNRU9VVCwgamlmZmllcykpIHtcbitcdFx0XHRkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHQgICAgXCJQb3J0ICVkIHRzX3JlcV9pZCAldSB3aGljaCBzZWVtcyBsb3N0XFxuXCIsXG4rXHRcdFx0XHRcdCAgICBucC1cdTAwM2VkcC1cdTAwM2VpbmRleCwgTkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2V0c19yZXFfaWQpO1xuK1xuK1x0XHRcdF9fc2tiX3VubGluayhza2IsIFx1MDAyNm5wLVx1MDAzZXNrYl90eHRzdGFtcF9xdWV1ZSk7XG4rXHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZmcmVlX2xpc3QsIHNrYik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0X19zZXRfYml0KE5FVENfU0tCX0NCKHNrYiktXHUwMDNldHNfcmVxX2lkLCB0c19yZXFfaWRfYml0bWFwKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0dHNfcmVxX2lkID0gZmluZF9maXJzdF96ZXJvX2JpdCh0c19yZXFfaWRfYml0bWFwLCBORVRDX1RTX1JFUV9JRF9OVU0pO1xuK1x0aWYgKHRzX3JlcV9pZCA9PSBORVRDX1RTX1JFUV9JRF9OVU0pIHtcbitcdFx0ZXJyID0gLUVCVVNZO1xuK1x0XHRnb3RvIHVubG9ja19wdHA7XG4rXHR9XG4rXG4rXHRORVRDX1NLQl9DQihjbG9uZSktXHUwMDNldHNfcmVxX2lkID0gdHNfcmVxX2lkO1xuK1x0TkVUQ19TS0JfQ0IoY2xvbmUpLVx1MDAzZXB0cF90eF90aW1lID0gamlmZmllcztcbitcdHNrYl9zaGluZm8oY2xvbmUpLVx1MDAzZXR4X2ZsYWdzIHw9IFNLQlRYX0lOX1BST0dSRVNTO1xuK1x0X19za2JfcXVldWVfdGFpbChcdTAwMjZucC1cdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUsIGNsb25lKTtcbitcbit1bmxvY2tfcHRwOlxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1xuK1x0LyogRnJlZSB0aW1lZC1vdXQgU0tCcyBvdXRzaWRlIHRoZSBzcGlubG9jayB0byBhdm9pZCBjYWxsaW5nXG4rXHQgKiBrZnJlZV9za2IoKSB3aXRoIGEgZGVzdHJ1Y3RvciAoc29ja19lZnJlZSkgdW5kZXIgYSBzcGlubG9jay5cbitcdCAqL1xuK1x0X19za2JfcXVldWVfcHVyZ2UoXHUwMDI2ZnJlZV9saXN0KTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3ZvaWQgbmV0Y190d29zdGVwX3RzdGFtcF9oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0XHQgdTggdHNfcmVxX2lkLCB1NjQgdHMpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnNrYl90bXAsICpza2JfbWF0Y2ggPSBOVUxMO1xuK1x0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBORVRDX1BPUlQoZHMsIHBvcnQpO1xuK1x0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIGh3dHN0YW1wcztcbitcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1x0c2tiX3F1ZXVlX3dhbGtfc2FmZShcdTAwMjZucC1cdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUsIHNrYiwgc2tiX3RtcCkge1xuK1x0XHRpZiAoTkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2V0c19yZXFfaWQgIT0gdHNfcmVxX2lkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRfX3NrYl91bmxpbmsoc2tiLCBcdTAwMjZucC1cdTAwM2Vza2JfdHh0c3RhbXBfcXVldWUpO1xuK1x0XHRza2JfbWF0Y2ggPSBza2I7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1xuK1x0aWYgKCFza2JfbWF0Y2gpIHtcbitcdFx0ZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcIlBvcnQgJWQgcmVjZWl2ZWQgYW4gZXhwaXJlZCBUeCB0aW1lc3RhbXAgcmVzcG9uc2UgKHRzX3JlcV9pZCAldSlcIixcbitcdFx0XHRcdCAgICBwb3J0LCB0c19yZXFfaWQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRod3RzdGFtcHMuaHd0c3RhbXAgPSBuc190b19rdGltZSh0cyk7XG4rXHRza2JfY29tcGxldGVfdHhfdGltZXN0YW1wKHNrYl9tYXRjaCwgXHUwMDI2aHd0c3RhbXBzKTtcbit9XG4rXG4rYm9vbCBuZXRjX3BvcnRfcnh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdHlwZSlcbit7XG4rXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHN0YW1wcyA9IHNrYl9od3RzdGFtcHMoc2tiKTtcbitcdHU2NCB0cyA9IE5FVENfU0tCX0NCKHNrYiktXHUwMDNldHN0YW1wO1xuK1xuK1x0aHd0c3RhbXBzLVx1MDAzZWh3dHN0YW1wID0gbnNfdG9fa3RpbWUodHMpO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZXRjX3BvcnRfcHJlcGFyZV9vbmVzdGVwX3N5bmMoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCAgIHUzMiBwdHBfY2xhc3MsIGJvb2wgKnR3b3N0ZXApXG4re1xuK1x0c3RydWN0IG5ldGNfc3dpdGNoICpwcml2ID0gbnAtXHUwMDNlc3dpdGNoX3ByaXY7XG4rXHR1MTYgY29ycmVjdGlvbl9vZmZzZXQsIHRpbWVzdGFtcF9vZmZzZXQ7XG4rXHRzdHJ1Y3QgcHRwX2hlYWRlciAqcHRwX2hkcjtcbitcdHU4IG1zZ190eXBlLCB0d29zdGVwX2ZsYWc7XG4rXHRib29sIGlzX3VkcCA9IGZhbHNlO1xuK1x0dTMyIHBrdF90eXBlO1xuK1x0dTggKnBrdF9oZHI7XG4rXG4rXHRwdHBfaGRyID0gcHRwX3BhcnNlX2hlYWRlcihza2IsIHB0cF9jbGFzcyk7XG4rXHRpZiAoIXB0cF9oZHIpIHtcbitcdFx0ZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcIlBvcnQgJWQgZmFpbGVkIHRvIHBhcnNlIFN5bmMgaGVhZGVyXFxuXCIsXG4rXHRcdFx0XHQgICAgbnAtXHUwMDNlZHAtXHUwMDNlaW5kZXgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwa3RfaGRyID0gc2tiX21hY19oZWFkZXIoc2tiKTtcbitcdGNvcnJlY3Rpb25fb2Zmc2V0ID0gKHU4ICopXHUwMDI2cHRwX2hkci1cdTAwM2Vjb3JyZWN0aW9uIC0gcGt0X2hkcjtcbitcdHRpbWVzdGFtcF9vZmZzZXQgPSAodTggKilwdHBfaGRyICsgc2l6ZW9mKCpwdHBfaGRyKSAtIHBrdF9oZHI7XG4rXG4rXHQvKiBFbnN1cmUgdGhhdCB0aGUgZW50aXJlIG9yaWdpblRpbWVzdGFtcCBmaWVsZCBpcyBwcmVzZW50IGluIHRoZVxuK1x0ICogbGluZWFyIGJ1ZmZlciBvZiB0aGUgc2tiLlxuK1x0ICovXG4rXHRpZiAocGt0X2hkciArIHRpbWVzdGFtcF9vZmZzZXQgKyAxMCBcdTAwM2Ugc2tiLVx1MDAzZWRhdGEgKyBza2JfaGVhZGxlbihza2IpKSB7XG4rXHRcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgXCJQb3J0ICVkIFN5bmMgaGVhZGVyIG5vdCBpbiBsaW5lYXIgYXJlYVxcblwiLFxuK1x0XHRcdFx0ICAgIG5wLVx1MDAzZWRwLVx1MDAzZWluZGV4KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0bXNnX3R5cGUgPSBwdHBfZ2V0X21zZ3R5cGUocHRwX2hkciwgcHRwX2NsYXNzKTtcbitcdHR3b3N0ZXBfZmxhZyA9IHB0cF9oZHItXHUwMDNlZmxhZ19maWVsZFswXSBcdTAwMjYgMHgyO1xuK1xuK1x0LyogT25seSBhIFN5bmMgZnJhbWUgd2l0aCB0aGUgdHdvU3RlcEZsYWcgY2xlYXJlZCBjYW4gdXNlIG9uZS1zdGVwXG4rXHQgKiB0aW1lc3RhbXBpbmcuIEEgZnJhbWUgdGhhdCByZXF1ZXN0cyB0d28tc3RlcCAob3IgaXMgbm90IGEgU3luYylcbitcdCAqIGNhcnJpZXMgZGlmZmVyZW50IG9uLXdpcmUgZmllbGRzLCBzbyB0aGlzIGlzIGEgcmVhbCBjbGFzc2lmaWNhdGlvbjtcbitcdCAqIHJlcG9ydCBpdCB0aHJvdWdoICp0d29zdGVwIHNvIHRoZSBjYWxsZXIgZmFsbHMgYmFjayB0byB0aGUgdHdvLXN0ZXBcbitcdCAqIHBhdGguXG4rXHQgKi9cbitcdGlmIChtc2dfdHlwZSAhPSBQVFBfTVNHVFlQRV9TWU5DIHx8IHR3b3N0ZXBfZmxhZyAhPSAwKSB7XG4rXHRcdCp0d29zdGVwID0gdHJ1ZTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogVGhpcyBpcyBhIGdlbnVpbmUgb25lLXN0ZXAgU3luYyBmcmFtZS4gc2tiX3NoaW5mbygpLVx1MDAzZWRlc3RydWN0b3JfYXJnXG4rXHQgKiBpcyBsYXRlciB1c2VkIHRvIHBhc3MgdGhlIG5ldGNfcG9ydCBwb2ludGVyIHRvXG4rXHQgKiBuZXRjX29uZXN0ZXBfc2tiX2Rlc3RydWN0b3IoKSBmb3IgVFggY29tcGxldGlvbiBub3RpZmljYXRpb24uXG4rXHQgKiBNU0dfWkVST0NPUFkgYWxzbyB1c2VzIGRlc3RydWN0b3JfYXJnICh2aWEgc2tiX3pjb3B5X2luaXQoKSkgdG9cbitcdCAqIHRyYWNrIHVzZXItc3BhY2UgcGFnZSByZWZlcmVuY2VzLiBPdmVyd3JpdGluZyBpdCBpbiB0aGF0IGNhc2Ugd291bGRcbitcdCAqIGxlYWsgdGhlIHVidWZfaW5mbyByZWZlcmVuY2UgYW5kIHByZXZlbnQgdXNlciBwYWdlcyBmcm9tIGJlaW5nXG4rXHQgKiByZWxlYXNlZC4gUFRQIGFwcGxpY2F0aW9ucyBkbyBub3QgdXNlIE1TR19aRVJPQ09QWSwgYnV0IGd1YXJkXG4rXHQgKiBhZ2FpbnN0IGl0IGRlZmVuc2l2ZWx5LlxuK1x0ICovXG4rXHRpZiAoc2tiX3pjb3B5KHNrYikpIHtcbitcdFx0ZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcIlBvcnQgJWQgb25lLXN0ZXAgU3luYyBub3Qgc3VwcG9ydGVkIG9uIHplcm9jb3B5IHNrYlxcblwiLFxuK1x0XHRcdFx0ICAgIG5wLVx1MDAzZWRwLVx1MDAzZWluZGV4KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cGt0X3R5cGUgPSBwdHBfY2xhc3MgXHUwMDI2IFBUUF9DTEFTU19QTUFTSztcbitcdGlmIChwa3RfdHlwZSA9PSBQVFBfQ0xBU1NfSVBWNCB8fCBwa3RfdHlwZSA9PSBQVFBfQ0xBU1NfSVBWNilcbitcdFx0aXNfdWRwID0gdHJ1ZTtcbitcbitcdC8qIENhY2hlIHRoZSBwYXJzaW5nIHJlc3VsdHMgc28gdGhlIHRhZ2dlciB4bWl0IHBhdGggYW5kIHRoZSBkZWZlcnJlZFxuK1x0ICogd29yayBkbyBub3QgbmVlZCB0byByZS1wYXJzZSB0aGUgUFRQIGhlYWRlciwgYW5kIHNvIHRoYXRcbitcdCAqIG5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAoKSBjYW4gZGVyaXZlIHRoZXNlIHBhcmFtZXRlcnMgZnJvbSB0aGVcbitcdCAqIHNrYi5cbitcdCAqL1xuK1x0TkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2Vjb3JyZWN0aW9uX29mZnNldCA9IGNvcnJlY3Rpb25fb2Zmc2V0O1xuK1x0TkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2V0aW1lc3RhbXBfb2Zmc2V0ID0gdGltZXN0YW1wX29mZnNldDtcbitcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlaXNfdWRwID0gaXNfdWRwO1xuK1x0TkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2VwdHBfZmxhZyA9IE5FVENfUFRQX0ZMQUdfT05FU1RFUDtcbit9XG4rXG4rdm9pZCBuZXRjX3BvcnRfdHh0c3RhbXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XG4rXHRib29sIHR3b3N0ZXAgPSBmYWxzZTtcbitcdHUzMiBwdHBfY2xhc3M7XG4rXG4rXHRORVRDX1NLQl9DQihza2IpLVx1MDAzZXB0cF9mbGFnID0gMDtcbitcdHB0cF9jbGFzcyA9IHB0cF9jbGFzc2lmeV9yYXcoc2tiKTtcbitcdGlmIChwdHBfY2xhc3MgPT0gUFRQX0NMQVNTX05PTkUpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChucC1cdTAwM2VwdHBfdHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTkVTVEVQX1NZTkMpXG4rXHRcdG5ldGNfcG9ydF9wcmVwYXJlX29uZXN0ZXBfc3luYyhucCwgc2tiLCBwdHBfY2xhc3MsIFx1MDAyNnR3b3N0ZXApO1xuK1xuK1x0aWYgKG5wLVx1MDAzZXB0cF90eF90eXBlID09IEhXVFNUQU1QX1RYX09OIHx8IHR3b3N0ZXApIHtcbitcdFx0c3RydWN0IHNrX2J1ZmYgKmNsb25lID0gc2tiX2Nsb25lX3NrKHNrYik7XG4rXG4rXHRcdGlmICh1bmxpa2VseSghY2xvbmUpKVxuK1x0XHRcdHJldHVybjtcbitcbitcdFx0aWYgKG5ldGNfcG9ydF90eHRzdGFtcF90d29zdGVwKG5wLCBjbG9uZSkpIHtcbitcdFx0XHRrZnJlZV9za2IoY2xvbmUpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuK1x0XHRORVRDX1NLQl9DQihza2IpLVx1MDAzZWNsb25lID0gY2xvbmU7XG4rXHRcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNlcHRwX2ZsYWcgPSBORVRDX1BUUF9GTEFHX1RXT1NURVA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9zZXRfb25lc3RlcF9jb250cm9sKHN0cnVjdCBuZXRjX3BvcnQgKm5wLCBib29sIHVkcCxcbitcdFx0XHRcdFx0ICBpbnQgb2Zmc2V0KVxuK3tcbitcdHUzMiB2YWw7XG4rXG4rXHR2YWwgPSBQTV9TSU5HTEVfU1RFUF9FTiB8IEZJRUxEX1BSRVAoUE1fU0lOR0xFX1NURVBfT0ZGU0VULCBvZmZzZXQpO1xuK1x0aWYgKHVkcClcbitcdFx0dmFsIHw9IFBNX1NJTkdMRV9TVEVQX0NIO1xuK1x0bmV0Y19tYWNfcG9ydF93cihucCwgTkVUQ19QTV9TSU5HTEVfU1RFUCgwKSwgdmFsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbmV0Y19vbmVzdGVwX3NrYl9kZXN0cnVjdG9yKHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IG5ldGNfcG9ydCAqbnAgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGVzdHJ1Y3Rvcl9hcmc7XG4rXG4rXHQvKiBza2IgaGFzIGJlZW4gdHJhbnNtaXR0ZWQgYnkgaGFyZHdhcmUsIHNjaGVkdWxlIHdvcmsgdG8gc2VuZFxuK1x0ICogdGhlIG5leHQgcXVldWVkIG9uZS1zdGVwIFN5bmMgcGFja2V0LlxuK1x0ICovXG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNm5wLVx1MDAzZW9uZXN0ZXBfd29yayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAoc3RydWN0IG5ldGNfcG9ydCAqbnAsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgICAgdTY0IHRzdGFtcClcbit7XG4rXHR1MTYgY29ycmVjdGlvbl9vZmZzZXQgPSBORVRDX1NLQl9DQihza2IpLVx1MDAzZWNvcnJlY3Rpb25fb2Zmc2V0O1xuK1x0dTE2IHRpbWVzdGFtcF9vZmZzZXQgPSBORVRDX1NLQl9DQihza2IpLVx1MDAzZXRpbWVzdGFtcF9vZmZzZXQ7XG4rXHRib29sIGlzX3VkcCA9IE5FVENfU0tCX0NCKHNrYiktXHUwMDNlaXNfdWRwO1xuK1x0dTggKnBrdF9oZHIgPSBza2JfbWFjX2hlYWRlcihza2IpO1xuK1x0dTY0IHNlYztcbitcdHUzMiBucztcbitcbitcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNldHN0YW1wID0gdHN0YW1wO1xuK1x0TkVUQ19TS0JfQ0Ioc2tiKS1cdTAwM2VwdHBfZmxhZyA9IE5FVENfUFRQX0ZMQUdfT05FU1RFUDtcbitcbitcdC8qIFVwZGF0ZSBvcmlnaW5UaW1lc3RhbXAgZmllbGQgb2YgU3luYyBwYWNrZXRcbitcdCAqIC0gNDggYml0cyBzZWNvbmRzIGZpZWxkXG4rXHQgKiAtIDMyIGJpdHMgbmFub3NlY29uZHMgZmllbGRcbitcdCAqL1xuK1x0c2VjID0gZGl2X3U2NF9yZW0odHN0YW1wLCBOU0VDX1BFUl9TRUMsIFx1MDAyNm5zKTtcbitcdHB1dF91bmFsaWduZWRfYmUxNigoc2VjIFx1MDAzZVx1MDAzZSAzMikgXHUwMDI2IDB4ZmZmZiwgcGt0X2hkciArIHRpbWVzdGFtcF9vZmZzZXQpO1xuK1x0cHV0X3VuYWxpZ25lZF9iZTMyKHNlYyBcdTAwMjYgMHhmZmZmZmZmZiwgcGt0X2hkciArIHRpbWVzdGFtcF9vZmZzZXQgKyAyKTtcbitcdHB1dF91bmFsaWduZWRfYmUzMihucywgcGt0X2hkciArIHRpbWVzdGFtcF9vZmZzZXQgKyA2KTtcbitcbitcdG5ldGNfcG9ydF9zZXRfb25lc3RlcF9jb250cm9sKG5wLCBpc191ZHAsIGNvcnJlY3Rpb25fb2Zmc2V0KTtcbitcbitcdC8qIE9ycGhhbiB0aGUgc2tiIHRvIHJlbGVhc2UgdGhlIHNvY2tldCBzZW5kIGJ1ZmZlciBxdW90YSBpbW1lZGlhdGVseS5cbitcdCAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIHNvY2tfd2ZyZWUoKSBvbmx5IHVwZGF0ZXMgc2tfd21lbV9hbGxvYyBhbmRcbitcdCAqIGRvZXMgbm90IHRvdWNoIHNrYi1cdTAwM2VkYXRhLiBBZnRlciBza2Jfb3JwaGFuKCksIHdlIGluc3RhbGwgb3VyIG93blxuK1x0ICogZGVzdHJ1Y3RvciBzbyB0aGF0IHdoZW4gdGhlIGNvbmR1aXQgZHJpdmVyIGZyZWVzIHRoZSBza2IgYWZ0ZXIgVFhcbitcdCAqIGNvbXBsZXRpb24sIHdlIGdldCBub3RpZmllZCB0byBzZW5kIHRoZSBuZXh0IHF1ZXVlZCBTeW5jIHBhY2tldC5cbitcdCAqL1xuK1x0c2tiX29ycGhhbihza2IpO1xuK1x0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWRlc3RydWN0b3JfYXJnID0gbnA7XG4rXHRza2ItXHUwMDNlZGVzdHJ1Y3RvciA9IG5ldGNfb25lc3RlcF9za2JfZGVzdHJ1Y3Rvcjtcbit9XG4rXG4rdm9pZCBuZXRjX3BvcnRfb25lc3RlcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0Y19wb3J0LFxuK1x0XHRcdFx0XHQgICAgb25lc3RlcF93b3JrKTtcbitcdHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdiA9IG5wLVx1MDAzZXN3aXRjaF9wcml2O1xuK1x0c3RydWN0IG5ldGNfdGFnZ2VyX2RhdGEgKnRhZ2dlcl9kYXRhO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHU2NCB0c3RhbXA7XG4rXG4rXHQvKiBEZXF1ZXVlIHRoZSBuZXh0IHBlbmRpbmcgc2tiIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGluLWZsaWdodCBzbG90LFxuK1x0ICogc28gYSBuZXdseSBhcnJpdmluZyBvbmUtc3RlcCBTeW5jIGNhbm5vdCBqdW1wIGFoZWFkIG9mIGl0LiBPbmx5XG4rXHQgKiByZWxlYXNlIHRoZSBzbG90IHdoZW4gdGhlIHF1ZXVlIGlzIGVtcHR5LiBUaGlzIGtlZXBzIG9yZGVyaW5nIGFuZFxuK1x0ICogY2xvc2VzIHRoZSBlbnF1ZXVlL3dha2V1cCByYWNlLlxuK1x0ICovXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1x0c2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZucC1cdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSk7XG4rXHRpZiAoIXNrYikge1xuK1x0XHRfX2NsZWFyX2JpdChORVRDX0ZMQUdfT05FU1RFUF9JTl9QUk9HUkVTUywgXHUwMDI2bnAtXHUwMDNlZmxhZ3MpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZucC1cdTAwM2VwdHBfbG9jayk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5wLVx1MDAzZXB0cF9sb2NrKTtcbitcbitcdHRzdGFtcCA9IG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZShwcml2LVx1MDAzZXRtcl9kZXYpO1xuK1x0aWYgKCF0c3RhbXApIHtcbitcdFx0LyogVGhlIFBUUCB0aW1lciBpcyBub3QgYXZhaWxhYmxlLCBzbyB0aGVyZSBpcyBubyBjb3JyZWN0XG4rXHRcdCAqIHRpbWVzdGFtcCB0byBwcm9ncmFtLiBEcm9wIHRoaXMgZnJhbWUgYW5kIHJlLWtpY2sgdG9cbitcdFx0ICogcHJvY2VzcyB0aGUgcmVtYWluaW5nIHF1ZXVlZCBmcmFtZXMgKG9yIHJlbGVhc2UgdGhlIHNsb3QpLlxuK1x0XHQgKlxuK1x0XHQgKiBuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKCkgaGFzIG5vdCBydW4gZm9yIHRoaXMgc2tiIHlldCwgc29cbitcdFx0ICogbmV0Y19vbmVzdGVwX3NrYl9kZXN0cnVjdG9yKCkgaXMgbm90IGluc3RhbGxlZCBvbiBpdC4gRnJlZWluZ1xuK1x0XHQgKiBpdCB0aGVyZWZvcmUgZG9lcyBub3QgcmVzY2hlZHVsZSBvbmVzdGVwX3dvcmssIHNvIHRoZSB3b3JrXG4rXHRcdCAqIG11c3QgYmUgcmVzY2hlZHVsZWQgZXhwbGljaXRseSB0byBrZWVwIGRyYWluaW5nIHRoZSBxdWV1ZS5cbitcdFx0ICovXG4rXHRcdGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgXCJQb3J0ICVkIFBUUCB0aW1lciB1bmF2YWlsYWJsZSwgZHJvcCBTeW5jXFxuXCIsXG4rXHRcdFx0XHQgICAgbnAtXHUwMDNlZHAtXHUwMDNlaW5kZXgpO1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZucC1cdTAwM2VvbmVzdGVwX3dvcmspO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKiBSZXVzZSB0aGUgb2Zmc2V0cyBjYWNoZWQgYXQgZW5xdWV1ZSB0aW1lOyBvbmx5IHRoZSB0aW1lc3RhbXAgaXNcbitcdCAqIHJlYWQgZnJlc2ggc28gaXQgcmVmbGVjdHMgdGhlIGFjdHVhbCBUWCBtb21lbnQuXG4rXHQgKi9cbitcdG5ldGNfcG9ydF9wcm9ncmFtX29uZXN0ZXAobnAsIHNrYiwgdHN0YW1wKTtcbitcbitcdC8qIFRhZyBhbmQgaGFuZCB0aGUgZnJhbWUgZGlyZWN0bHkgdG8gdGhlIGNvbmR1aXQgdmlhIHRoZSB0YWdnZXIsXG4rXHQgKiBieXBhc3NpbmcgZHNhX3VzZXJfeG1pdCgpIHNvIHRoZSBUWCBzdGF0cyBhcmUgbm90IGNvdW50ZWQgdHdpY2UuXG4rXHQgKi9cbitcdHRhZ2dlcl9kYXRhID0gcHJpdi1cdTAwM2Vkcy1cdTAwM2V0YWdnZXJfZGF0YTtcbitcdHRhZ2dlcl9kYXRhLVx1MDAzZW9uZXN0ZXBfc3luY194bWl0KHNrYiwgbnAtXHUwMDNlZHAtXHUwMDNldXNlcik7XG4rfVxuK1xuK3N0cnVjdCBza19idWZmICpuZXRjX29uZXN0ZXBfc3luY19oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgbmV0Y19wb3J0ICpucCA9IE5FVENfUE9SVChkcywgcG9ydCk7XG4rXHRzdHJ1Y3QgbmV0Y19zd2l0Y2ggKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1x0dTY0IHRzdGFtcDtcbitcbitcdC8qIFNlcmlhbGl6ZSBvbmUtc3RlcCBTeW5jIHBhY2tldHM6IG9ubHkgb25lIGNhbiBiZSBpbi1mbGlnaHQgYXQgYVxuK1x0ICogdGltZSBiZWNhdXNlIHRoZSBTSU5HTEVfU1RFUCByZWdpc3RlciBpcyBzaGFyZWQgYW5kIG11c3QgbWF0Y2ggdGhlXG4rXHQgKiBwYWNrZXQgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkLiBDbGFpbSB0aGUgaW4tZmxpZ2h0IHNsb3QgdW5kZXJcbitcdCAqIHB0cF9sb2NrLiBJZiBhbm90aGVyIG9uZS1zdGVwIFN5bmMgaXMgYWxyZWFkeSBpbi1mbGlnaHQsIHF1ZXVlIHRoaXNcbitcdCAqIHNrYiBhbmQgcmV0dXJuIE5VTEw7IG93bmVyc2hpcCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcXVldWUsIHNvIG5vXG4rXHQgKiBleHRyYSByZWZlcmVuY2UgaXMgbmVlZGVkIGFuZCBuZXRjX3htaXQoKSBzdG9wcyBwcm9jZXNzaW5nIGl0LlxuK1x0ICovXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1x0aWYgKHRlc3RfYml0KE5FVENfRkxBR19PTkVTVEVQX0lOX1BST0dSRVNTLCBcdTAwMjZucC1cdTAwM2VmbGFncykpIHtcbitcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZucC1cdTAwM2Vza2Jfb25lc3RlcF9xdWV1ZSwgc2tiKTtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHRzdGFtcCA9IG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZShwcml2LVx1MDAzZXRtcl9kZXYpO1xuK1x0aWYgKCF0c3RhbXApIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1xuK1x0XHQvKiBUaGlzIGlzIGEgdmFsaWQgb25lLXN0ZXAgU3luYyBmcmFtZSwgYnV0IHRoZSBQVFAgdGltZXIgaXNcbitcdFx0ICogbm90IGF2YWlsYWJsZSwgc28gdGhlcmUgaXMgbm8gY29ycmVjdCB0aW1lc3RhbXAgdG8gcHJvZ3JhbS5cbitcdFx0ICogRHJvcCB0aGUgZnJhbWUgcmF0aGVyIHRoYW4gdHJhbnNtaXQgYSBTeW5jIHdpdGggYSBib2d1c1xuK1x0XHQgKiBjb3JyZWN0aW9uIGZpZWxkLlxuK1x0XHQgKi9cbitcdFx0ZGV2X2RiZ19yYXRlbGltaXRlZChwcml2LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcIlBvcnQgJWQgUFRQIHRpbWVyIHVuYXZhaWxhYmxlLCBkcm9wIFN5bmNcXG5cIixcbitcdFx0XHRcdCAgICBucC1cdTAwM2VkcC1cdTAwM2VpbmRleCk7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdF9fc2V0X2JpdChORVRDX0ZMQUdfT05FU1RFUF9JTl9QUk9HUkVTUywgXHUwMDI2bnAtXHUwMDNlZmxhZ3MpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnAtXHUwMDNlcHRwX2xvY2spO1xuK1xuK1x0LyogV2Ugb3duIHRoZSBpbi1mbGlnaHQgc2xvdC4gUHJvZ3JhbSB0aGUgcmVnaXN0ZXIgYW5kIGluc3RhbGwgdGhlXG4rXHQgKiBkZXN0cnVjdG9yLlxuK1x0ICovXG4rXHRuZXRjX3BvcnRfcHJvZ3JhbV9vbmVzdGVwKG5wLCBza2IsIHRzdGFtcCk7XG4rXG4rXHRyZXR1cm4gc2tiO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaC5oIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2guaFxuaW5kZXggMzA1ZjJhOTJlMmY5YS4uMjk2ZGYxZDcyMzMzZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoLmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoLmhcbkBAIC01Nyw2ICs1Nyw3IEBAIHN0cnVjdCBuZXRjX3N3aXRjaDtcbiBcbiBzdHJ1Y3QgbmV0Y19zd2l0Y2hfaW5mbyB7XG4gXHR1MzIgbnVtX3BvcnRzO1xuK1x0dTMyIHRtcl9kZXZmbjtcbiBcdHZvaWQgKCpwaHlsaW5rX2dldF9jYXBzKShpbnQgcG9ydCwgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpO1xuIH07XG4gXG5AQCAtNjYsOSArNjcsMjMgQEAgc3RydWN0IG5ldGNfcG9ydF9jYXBzIHtcbiBcdHUzMiBwc2V1ZG9fbGluazoxO1xuIH07XG4gXG4rZW51bSBuZXRjX3B0cF90eXBlIHtcbitcdE5FVENfUFRQX0wyLFxuK1x0TkVUQ19QVFBfTDRfSVBWNF9FVkVOVCxcbitcdE5FVENfUFRQX0w0X0lQVjRfR0VORVJBTCxcbitcdE5FVENfUFRQX0w0X0lQVjZfRVZFTlQsXG4rXHRORVRDX1BUUF9MNF9JUFY2X0dFTkVSQUwsXG4rXHRORVRDX1BUUF9NQVgsXG4rfTtcbitcbiBlbnVtIG5ldGNfaG9zdF9yZWFzb24ge1xuIFx0LyogU29mdHdhcmUgZGVmaW5lZCBob3N0IHJlYXNvbnMgKi9cbiBcdE5FVENfSFJfSE9TVF9GTE9PRCA9IDgsXG4rXHRORVRDX0hSX1BUUF9UUkFQICAgPSA5LFxuK307XG4rXG4rZW51bSBuZXRjX3BvcnRfZmxhZ3Mge1xuK1x0TkVUQ19GTEFHX09ORVNURVBfSU5fUFJPR1JFU1MgPSAwLFxuIH07XG4gXG4gc3RydWN0IG5ldGNfcG9ydCB7XG5AQCAtODQsNyArOTksMTkgQEAgc3RydWN0IG5ldGNfcG9ydCB7XG4gXHR1MTYgdWM6MTtcbiBcdHUxNiBtYzoxO1xuIFx0dTE2IHB2aWQ7XG4tXHRzdHJ1Y3QgaXBmdF9lbnRyeV9kYXRhICpob3N0X2Zsb29kO1xuK1x0dTMyIGlwZnRfaGZfZWlkO1xuK1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdC8qIFNlcmlhbGl6ZSBQVFAgb3BlcmF0aW9ucyAqL1xuK1x0c3BpbmxvY2tfdCBwdHBfbG9jaztcbitcdC8qIHNrYiBxdWV1ZSBmb3IgdHdvLXN0ZXAgdGltZXN0YW1wIGZyYW1lcyAqL1xuK1x0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfdHh0c3RhbXBfcXVldWU7XG4rXHQvKiBza2IgcXVldWUgZm9yIG9uZS1zdGVwIHN5bmMgZnJhbWVzICovXG4rXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9vbmVzdGVwX3F1ZXVlO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IG9uZXN0ZXBfd29yaztcbitcdGludCBwdHBfdHhfdHlwZTtcbitcdGludCBwdHBfcnhfZmlsdGVyO1xuK1x0dTMyIHB0cF9pcGZ0X2VpZFtORVRDX1BUUF9NQVhdO1xuIH07XG4gXG4gc3RydWN0IG5ldGNfc3dpdGNoX3JlZ3Mge1xuQEAgLTEzOSw2ICsxNjYsNyBAQCBzdHJ1Y3QgbmV0Y19zd2l0Y2gge1xuIFx0dTMyIG51bV9icDtcbiBcbiBcdHN0cnVjdCBicHRfY2ZnZV9kYXRhICpicHRfbGlzdDtcbitcdHN0cnVjdCBwY2lfZGV2ICp0bXJfZGV2OyAvKiBUaGUgUFRQIFRpbWVyIFBDSSBkZXZpY2UgKi9cbiB9O1xuIFxuICNkZWZpbmUgTkVUQ19QUklWKGRzKVx0XHRcdCgoc3RydWN0IG5ldGNfc3dpdGNoICopKChkcyktXHUwMDNlcHJpdikpXG5AQCAtMTg3LDYgKzIxNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRjX2RlbF92bGFuX2VudHJ5KHN0cnVjdCBuZXRjX3ZsYW5fZW50cnkgKmVudHJ5KVxuIH1cbiBcbiBpbnQgbmV0Y19zd2l0Y2hfcGxhdGZvcm1fcHJvYmUoc3RydWN0IG5ldGNfc3dpdGNoICpwcml2KTtcbit2b2lkIG5ldGNfbWFjX3BvcnRfd3Ioc3RydWN0IG5ldGNfcG9ydCAqbnAsIHUzMiByZWcsIHUzMiB2YWwpO1xuIFxuIC8qIGV0aHRvb2wgQVBJcyAqL1xuIHZvaWQgbmV0Y19wb3J0X2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuQEAgLTIwMyw0ICsyMzIsMjIgQEAgdm9pZCBuZXRjX3BvcnRfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHQgICB1MzIgc3NldCwgdTggKmRhdGEpO1xuIHZvaWQgbmV0Y19wb3J0X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU2NCAqZGF0YSk7XG4gXG4rLyogUFRQIEFQSXMgKi9cbitpbnQgbmV0Y19nZXRfdHNfaW5mbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0X2lkLFxuK1x0XHQgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKTtcbitpbnQgbmV0Y19wb3J0X2h3dHN0YW1wX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0X2lkLFxuK1x0XHRcdCAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4rXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitpbnQgbmV0Y19wb3J0X2h3dHN0YW1wX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0X2lkLFxuK1x0XHRcdCAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcpO1xuK3ZvaWQgbmV0Y190d29zdGVwX3RzdGFtcF9oYW5kbGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0XHQgdTggdHNfcmVxX2lkLCB1NjQgdHMpO1xuK2Jvb2wgbmV0Y19wb3J0X3J4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHR5cGUpO1xuK3ZvaWQgbmV0Y19wb3J0X3R4dHN0YW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnRfaWQsXG4rXHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rdm9pZCBuZXRjX3BvcnRfb25lc3RlcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4rc3RydWN0IHNrX2J1ZmYgKm5ldGNfb25lc3RlcF9zeW5jX2hhbmRsZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oIGIvZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2hfaHcuaFxuaW5kZXggMTQwNGFlNDFjN2JjYi4uMzdkMWRkN2VjMmM3ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoX2h3LmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfc3dpdGNoX2h3LmhcbkBAIC0yMDMsNiArMjAzLDExIEBAIGVudW0gbmV0Y19zdGdfc3RhZ2Uge1xuICNkZWZpbmUgICBTU1BfMTBNXHRcdFx0MVxuICNkZWZpbmUgICBTU1BfMUdcdFx0XHQyXG4gXG4rI2RlZmluZSBORVRDX1BNX1NJTkdMRV9TVEVQKGEpXHRcdCgweDEwYzAgKyAoYSkgKiAweDQwMClcbisjZGVmaW5lICBQTV9TSU5HTEVfU1RFUF9DSFx0XHRCSVQoNilcbisjZGVmaW5lICBQTV9TSU5HTEVfU1RFUF9PRkZTRVRcdFx0R0VOTUFTSygxNSwgNylcbisjZGVmaW5lICBQTV9TSU5HTEVfU1RFUF9FTlx0XHRCSVQoMzEpXG4rXG4gLyogUG9ydCBNQUMgMC8xIFJlY2VpdmUgRXRoZXJuZXQgT2N0ZXRzIENvdW50ZXIgKi9cbiAjZGVmaW5lIE5FVENfUE1fUkVPQ1QoYSlcdFx0KDB4MTEwMCArIChhKSAqIDB4NDAwKVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9uZXRjLmMgYi9kcml2ZXJzL3B0cC9wdHBfbmV0Yy5jXG5pbmRleCA5NGU5NTJlZTY5OTAyLi5mMmI3N2JkNWFmMDE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX25ldGMuY1xuKysrIGIvZHJpdmVycy9wdHAvcHRwX25ldGMuY1xuQEAgLTEyNyw2ICsxMjcsMTcgQEAgc3RydWN0IG5ldGNfdGltZXIge1xuIFxuICNkZWZpbmUgbmV0Y190aW1lcl9yZChwLCBvKVx0XHRuZXRjX3JlYWQoKHApLVx1MDAzZWJhc2UgKyAobykpXG4gI2RlZmluZSBuZXRjX3RpbWVyX3dyKHAsIG8sIHYpXHRcdG5ldGNfd3JpdGUoKHApLVx1MDAzZWJhc2UgKyAobyksIHYpXG4rXG4rLyogVGhlIDY0LWJpdCB0aW1lciByZWdpc3RlcnMgY29uc2lzdCBvZiBhIGxvdyAoTCkgYW5kIGhpZ2ggKEgpIHJlZ2lzdGVyIHBhaXIuXG4rICogSGFyZHdhcmUgcmVxdWlyZXMgYSBzdHJpY3QgYWNjZXNzIG9yZGVyOiBmb3Igd3JpdGVzLCBUTVJfeHh4X0wgbXVzdCBiZVxuKyAqIHdyaXR0ZW4gZmlyc3QsIHdoaWNoIGxhdGNoZXMgdGhlIHZhbHVlIGludG8gYSBzaGFkb3cgcmVnaXN0ZXI7IHRoZSB3cml0ZVxuKyAqIHRvIFRNUl94eHhfSCB0aGVuIGF0b21pY2FsbHkgdHJhbnNmZXJzIGJvdGggc2hhZG93IHJlZ2lzdGVycyBpbnRvIHRoZSBsaXZlXG4rICogY291bnRlci4gRm9yIHJlYWRzLCBUTVJfeHh4X0wgbXVzdCBiZSByZWFkIGZpcnN0IHRvIGNhcHR1cmUgYSBjb2hlcmVudFxuKyAqIHNuYXBzaG90LiBpb3dyaXRlNjRfbG9faGkoKSBhbmQgaW9yZWFkNjRfbG9faGkoKSBlbmZvcmNlIHRoaXMgTC1iZWZvcmUtSFxuKyAqIG9yZGVyaW5nLlxuKyAqL1xuKyNkZWZpbmUgbmV0Y190aW1lcl9yZDY0KHAsIG8pXHRcdGlvcmVhZDY0X2xvX2hpKChwKS1cdTAwM2ViYXNlICsgKG8pKVxuKyNkZWZpbmUgbmV0Y190aW1lcl93cjY0KHAsIG8sIHYpXHRpb3dyaXRlNjRfbG9faGkodiwgKHApLVx1MDAzZWJhc2UgKyAobykpXG4gI2RlZmluZSBwdHBfdG9fbmV0Y190aW1lcihwdHApXHRcdGNvbnRhaW5lcl9vZigocHRwKSwgc3RydWN0IG5ldGNfdGltZXIsIGNhcHMpXG4gXG4gc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHRpbWVyX2Nsa19zcmNbXSA9IHtcbkBAIC0xMzYsNjYgKzE0Nyw0NSBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdGltZXJfY2xrX3NyY1tdID0ge1xuIFxuIHN0YXRpYyB2b2lkIG5ldGNfdGltZXJfY250X3dyaXRlKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2LCB1NjQgbnMpXG4ge1xuLVx0dTMyIHRtcl9jbnRfaCA9IHVwcGVyXzMyX2JpdHMobnMpO1xuLVx0dTMyIHRtcl9jbnRfbCA9IGxvd2VyXzMyX2JpdHMobnMpO1xuLVxuLVx0LyogV3JpdGVzIHRvIHRoZSBUTVJfQ05UX0wgcmVnaXN0ZXIgY29waWVzIHRoZSB3cml0dGVuIHZhbHVlXG4tXHQgKiBpbnRvIHRoZSBzaGFkb3cgVE1SX0NOVF9MIHJlZ2lzdGVyLiBXcml0ZXMgdG8gdGhlIFRNUl9DTlRfSFxuLVx0ICogcmVnaXN0ZXIgY29waWVzIHRoZSB2YWx1ZXMgd3JpdHRlbiBpbnRvIHRoZSBzaGFkb3cgVE1SX0NOVF9IXG4tXHQgKiByZWdpc3Rlci4gQ29udGVudHMgb2YgdGhlIHNoYWRvdyByZWdpc3RlcnMgYXJlIGNvcGllZCBpbnRvXG4tXHQgKiB0aGUgVE1SX0NOVF9MIGFuZCBUTVJfQ05UX0ggcmVnaXN0ZXJzIGZvbGxvd2luZyBhIHdyaXRlIGludG9cbi1cdCAqIHRoZSBUTVJfQ05UX0ggcmVnaXN0ZXIuIFNvIHRoZSB1c2VyIG11c3Qgd3JpdGVzIHRvIFRNUl9DTlRfTFxuLVx0ICogcmVnaXN0ZXIgZmlyc3QuIE90aGVyIEgvTCByZWdpc3RlcnMgc2hvdWxkIGhhdmUgdGhlIHNhbWVcbi1cdCAqIGJlaGF2aW9yLlxuLVx0ICovXG4tXHRuZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX0NOVF9MLCB0bXJfY250X2wpO1xuLVx0bmV0Y190aW1lcl93cihwcml2LCBORVRDX1RNUl9DTlRfSCwgdG1yX2NudF9oKTtcbitcdG5ldGNfdGltZXJfd3I2NChwcml2LCBORVRDX1RNUl9DTlRfTCwgbnMpO1xuIH1cbiBcbiBzdGF0aWMgdTY0IG5ldGNfdGltZXJfb2Zmc2V0X3JlYWQoc3RydWN0IG5ldGNfdGltZXIgKnByaXYpXG4ge1xuLVx0dTMyIHRtcl9vZmZfbCwgdG1yX29mZl9oO1xuLVx0dTY0IG9mZnNldDtcbi1cbi1cdHRtcl9vZmZfbCA9IG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfT0ZGX0wpO1xuLVx0dG1yX29mZl9oID0gbmV0Y190aW1lcl9yZChwcml2LCBORVRDX1RNUl9PRkZfSCk7XG4tXHRvZmZzZXQgPSAoKCh1NjQpdG1yX29mZl9oKSBcdTAwM2NcdTAwM2MgMzIpIHwgdG1yX29mZl9sO1xuLVxuLVx0cmV0dXJuIG9mZnNldDtcbitcdHJldHVybiBuZXRjX3RpbWVyX3JkNjQocHJpdiwgTkVUQ19UTVJfT0ZGX0wpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZXRjX3RpbWVyX29mZnNldF93cml0ZShzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdiwgdTY0IG9mZnNldClcbiB7XG4tXHR1MzIgdG1yX29mZl9oID0gdXBwZXJfMzJfYml0cyhvZmZzZXQpO1xuLVx0dTMyIHRtcl9vZmZfbCA9IGxvd2VyXzMyX2JpdHMob2Zmc2V0KTtcbi1cbi1cdG5ldGNfdGltZXJfd3IocHJpdiwgTkVUQ19UTVJfT0ZGX0wsIHRtcl9vZmZfbCk7XG4tXHRuZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX09GRl9ILCB0bXJfb2ZmX2gpO1xuK1x0bmV0Y190aW1lcl93cjY0KHByaXYsIE5FVENfVE1SX09GRl9MLCBvZmZzZXQpO1xuIH1cbiBcbiBzdGF0aWMgdTY0IG5ldGNfdGltZXJfY3VyX3RpbWVfcmVhZChzdHJ1Y3QgbmV0Y190aW1lciAqcHJpdilcbiB7XG4tXHR1MzIgdGltZV9oLCB0aW1lX2w7XG4tXHR1NjQgbnM7XG4rXHRyZXR1cm4gbmV0Y190aW1lcl9yZDY0KHByaXYsIE5FVENfVE1SX0NVUl9USU1FX0wpO1xuK31cbiBcbi1cdC8qIFRoZSB1c2VyIHNob3VsZCByZWFkIE5FVENfVE1SX0NVUl9USU1FX0wgZmlyc3QgdG9cbi1cdCAqIGdldCBjb3JyZWN0IGN1cnJlbnQgdGltZS5cbi1cdCAqL1xuLVx0dGltZV9sID0gbmV0Y190aW1lcl9yZChwcml2LCBORVRDX1RNUl9DVVJfVElNRV9MKTtcbi1cdHRpbWVfaCA9IG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfQ1VSX1RJTUVfSCk7XG4tXHRucyA9ICh1NjQpdGltZV9oIFx1MDAzY1x1MDAzYyAzMiB8IHRpbWVfbDtcbit1NjQgbmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHN0cnVjdCBuZXRjX3RpbWVyICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHU2NCBjdXJfdGltZTtcbiBcbi1cdHJldHVybiBucztcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGN1cl90aW1lID0gbmV0Y190aW1lcl9jdXJfdGltZV9yZWFkKHByaXYpO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiBjdXJfdGltZTtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwobmV0Y190aW1lcl9nZXRfY3VycmVudF90aW1lKTtcbiBcbiBzdGF0aWMgdm9pZCBuZXRjX3RpbWVyX2FsYXJtX3dyaXRlKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2LFxuIFx0XHRcdFx0ICAgdTY0IGFsYXJtLCBpbnQgaW5kZXgpXG4ge1xuLVx0dTMyIGFsYXJtX2ggPSB1cHBlcl8zMl9iaXRzKGFsYXJtKTtcbi1cdHUzMiBhbGFybV9sID0gbG93ZXJfMzJfYml0cyhhbGFybSk7XG4tXG4tXHRuZXRjX3RpbWVyX3dyKHByaXYsIE5FVENfVE1SX0FMQVJNX0woaW5kZXgpLCBhbGFybV9sKTtcbi1cdG5ldGNfdGltZXJfd3IocHJpdiwgTkVUQ19UTVJfQUxBUk1fSChpbmRleCksIGFsYXJtX2gpO1xuK1x0bmV0Y190aW1lcl93cjY0KHByaXYsIE5FVENfVE1SX0FMQVJNX0woaW5kZXgpLCBhbGFybSk7XG4gfVxuIFxuIHN0YXRpYyB1MzIgbmV0Y190aW1lcl9nZXRfaW50ZWdyYWxfcGVyaW9kKHN0cnVjdCBuZXRjX3RpbWVyICpwcml2KVxuQEAgLTQ5NywyMiArNDg3LDE5IEBAIHN0YXRpYyB2b2lkIG5ldGNfdGltZXJfaGFuZGxlX2V0dHNfZXZlbnQoc3RydWN0IG5ldGNfdGltZXIgKnByaXYsIGludCBpbmRleCxcbiBcdFx0XHRcdFx0IGJvb2wgdXBkYXRlX2V2ZW50KVxuIHtcbiBcdHN0cnVjdCBwdHBfY2xvY2tfZXZlbnQgZXZlbnQ7XG4tXHR1MzIgZXR0c19sID0gMCwgZXR0c19oID0gMDtcbitcdHU2NCBldHRzID0gMDtcbiBcbi1cdHdoaWxlIChuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX1NUQVQpIFx1MDAyNiBUTVJfU1RBVF9FVFNfVkxEKGluZGV4KSkge1xuLVx0XHRldHRzX2wgPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0VUVFNfTChpbmRleCkpO1xuLVx0XHRldHRzX2ggPSBuZXRjX3RpbWVyX3JkKHByaXYsIE5FVENfVE1SX0VUVFNfSChpbmRleCkpO1xuLVx0fVxuK1x0d2hpbGUgKG5ldGNfdGltZXJfcmQocHJpdiwgTkVUQ19UTVJfU1RBVCkgXHUwMDI2IFRNUl9TVEFUX0VUU19WTEQoaW5kZXgpKVxuK1x0XHRldHRzID0gbmV0Y190aW1lcl9yZDY0KHByaXYsIE5FVENfVE1SX0VUVFNfTChpbmRleCkpO1xuIFxuIFx0LyogSW52YWxpZCB0aW1lIHN0YW1wICovXG4tXHRpZiAoIWV0dHNfbCBcdTAwMjZcdTAwMjYgIWV0dHNfaClcbitcdGlmICghZXR0cylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHVwZGF0ZV9ldmVudCkge1xuIFx0XHRldmVudC50eXBlID0gUFRQX0NMT0NLX0VYVFRTO1xuIFx0XHRldmVudC5pbmRleCA9IGluZGV4O1xuLVx0XHRldmVudC50aW1lc3RhbXAgPSAodTY0KWV0dHNfaCBcdTAwM2NcdTAwM2MgMzI7XG4tXHRcdGV2ZW50LnRpbWVzdGFtcCB8PSBldHRzX2w7XG4rXHRcdGV2ZW50LnRpbWVzdGFtcCA9IGV0dHM7XG4gXHRcdHB0cF9jbG9ja19ldmVudChwcml2LVx1MDAzZWNsb2NrLCBcdTAwMjZldmVudCk7XG4gXHR9XG4gfVxuQEAgLTgwMiw3ICs3ODksNiBAQCBzdGF0aWMgaW50IG5ldGNfdGltZXJfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0aWYgKCFwcml2KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHBjaWVfZmxyKHBkZXYpO1xuIFx0ZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwiRmFpbGVkIHRvIGVuYWJsZSBkZXZpY2VcXG5cIik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kc2EvdGFnX25ldGMuaCBiL2luY2x1ZGUvbGludXgvZHNhL3RhZ19uZXRjLmhcbmluZGV4IGZlOTY0NzIyZTViMDMuLjIyOWM3MGNiN2E4YWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RzYS90YWdfbmV0Yy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RzYS90YWdfbmV0Yy5oXG5AQCAtMTAsNSArMTAsNDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiBcbiAjZGVmaW5lIE5FVENfVEFHX01BWF9MRU5cdFx0XHQxNFxuKyNkZWZpbmUgTkVUQ19UQUdfVFNfUkVRX0lEXHRcdFx0R0VOTUFTSygzLCAwKVxuKyNkZWZpbmUgTkVUQ19QVFBfRkxBR19PTkVTVEVQXHRcdFx0QklUKDApXG4rI2RlZmluZSBORVRDX1BUUF9GTEFHX1RXT1NURVBcdFx0XHRCSVQoMSlcbitcbitzdHJ1Y3QgbmV0Y19za2JfY2Ige1xuK1x0c3RydWN0IHNrX2J1ZmYgKmNsb25lO1xuK1x0dW5zaWduZWQgbG9uZyBwdHBfdHhfdGltZTtcbitcdHU2NCB0c3RhbXA7XG4rXHR1OCBwdHBfZmxhZztcbitcdHU4IHRzX3JlcV9pZDtcbitcdC8qIE9uZS1zdGVwIFN5bmMgcGFyc2luZyByZXN1bHRzLCBjb21wdXRlZCBpbiBuZXRjX3BvcnRfdHh0c3RhbXAoKVxuK1x0ICogYW5kIHJldXNlZCBpbiB0aGUgdGFnZ2VyIHhtaXQgcGF0aCBhbmQgdGhlIGRlZmVycmVkIHdvcmssIHRvIGF2b2lkXG4rXHQgKiByZS1wYXJzaW5nIHRoZSBQVFAgaGVhZGVyLiBWYWxpZCBvbmx5IHdoaWxlXG4rXHQgKiBwdHBfZmxhZyA9PSBORVRDX1BUUF9GTEFHX09ORVNURVAuXG4rXHQgKi9cbitcdHUxNiBjb3JyZWN0aW9uX29mZnNldDtcbitcdHUxNiB0aW1lc3RhbXBfb2Zmc2V0O1xuK1x0Ym9vbCBpc191ZHA7XG4rfTtcbitcbisjZGVmaW5lIE5FVENfU0tCX0NCKHNrYilcdCgoc3RydWN0IG5ldGNfc2tiX2NiICopKChza2IpLVx1MDAzZWNiKSlcbitcbisvKipcbisgKiBzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSAtIE5FVEMgdGFnZ2VyL3N3aXRjaC1kcml2ZXIgc2hhcmVkIG9wZXJhdGlvbnNcbisgKiBAdHdvc3RlcF90c3RhbXBfaGFuZGxlcjogQ2FsbGVkIGJ5IHRoZSB0YWdnZXIgd2hlbiBhIHR3by1zdGVwIHRyYW5zbWl0XG4rICpcdHRpbWVzdGFtcCByZXNwb25zZSBpcyByZWNlaXZlZCwgdG8gZGVsaXZlciB0aGUgdGltZXN0YW1wIHRvIHRoZVxuKyAqXHRzd2l0Y2ggZHJpdmVyLlxuKyAqIEBvbmVzdGVwX3N5bmNfaGFuZGxlcjogQ2FsbGVkIGZyb20gdGhlIHRhZ2dlciB4bWl0IHBhdGggZm9yIGEgb25lLXN0ZXAgU3luY1xuKyAqXHRmcmFtZS4gUmV0dXJucyB0aGUgc2tiIGlmIGl0IGNhbiBiZSB0cmFuc21pdHRlZCBpbW1lZGlhdGVseSAodGhlXG4rICpcdGluLWZsaWdodCBzbG90IGhhcyBiZWVuIGNsYWltZWQgYW5kIFBNX1NJTkdMRV9TVEVQIHByb2dyYW1tZWQpLCBvciBOVUxMXG4rICpcdGlmIHRoZSBmcmFtZSBoYXMgYmVlbiBxdWV1ZWQgZm9yIGRlZmVycmVkIHRyYW5zbWlzc2lvbiBvciBkcm9wcGVkLlxuKyAqIEBvbmVzdGVwX3N5bmNfeG1pdDogQ2FsbGVkIGJ5IHRoZSBzd2l0Y2ggZHJpdmVyIHRvIHRyYW5zbWl0IGEgZGVmZXJyZWRcbisgKlx0b25lLXN0ZXAgU3luYyBmcmFtZSBkaXJlY3RseSB0byB0aGUgY29uZHVpdCwgYnlwYXNzaW5nIGRzYV91c2VyX3htaXQoKS5cbisgKi9cbitzdHJ1Y3QgbmV0Y190YWdnZXJfZGF0YSB7XG4rXHR2b2lkICgqdHdvc3RlcF90c3RhbXBfaGFuZGxlcikoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgICAgICB1OCB0c19yZXFfaWQsIHU2NCB0cyk7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqKCpvbmVzdGVwX3N5bmNfaGFuZGxlcikoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdFx0XHRcdGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitcdG5ldGRldl90eF90ICgqb25lc3RlcF9zeW5jX3htaXQpKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4rfTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzbC9uZXRjX2dsb2JhbC5oIGIvaW5jbHVkZS9saW51eC9mc2wvbmV0Y19nbG9iYWwuaFxuaW5kZXggNWI4ZmY1MjhkMzY5OS4uOTE0NDFjYjM1YmMyOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnNsL25ldGNfZ2xvYmFsLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnNsL25ldGNfZ2xvYmFsLmhcbkBAIC0yMiw0ICsyMiwxMyBAQCBzdGF0aWMgaW5saW5lIHU2NCBuZXRjX3JlYWQ2NCh2b2lkIF9faW9tZW0gKnJlZylcbiBcdHJldHVybiBpb3JlYWQ2NChyZWcpO1xuIH1cbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfUFRQX05FVENfVjRfVElNRVIpXG4rdTY0IG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZShzdHJ1Y3QgcGNpX2RldiAqdGltZXJfZGV2KTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdTY0IG5ldGNfdGltZXJfZ2V0X2N1cnJlbnRfdGltZShzdHJ1Y3QgcGNpX2RldiAqdGltZXJfZGV2KVxuK3tcbitcdHJldHVybiAwO1xuK31cbisjZW5kaWZcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19uZXRjLmMgYi9uZXQvZHNhL3RhZ19uZXRjLmNcbmluZGV4IGRmNzJhNjE3OTZhZDUuLjk0Y2NhMjBmZmNkYWQgMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL3RhZ19uZXRjLmNcbisrKyBiL25ldC9kc2EvdGFnX25ldGMuY1xuQEAgLTE2LDYgKzE2LDEwIEBAXG4gI2RlZmluZSBORVRDX1RBR19UT19QT1JUXHRcdDFcbiAvKiBTdWJUeXBlMDogTm8gcmVxdWVzdCB0byBwZXJmb3JtIHRpbWVzdGFtcGluZyAqL1xuICNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTBcdFx0MFxuKy8qIFN1YlR5cGUxOiBSZXF1ZXN0IHRvIHBlcmZvcm0gb25lLXN0ZXAgdGltZXN0YW1waW5nICovXG4rI2RlZmluZSBORVRDX1RBR19UUF9TVUJUWVBFMVx0XHQxXG4rLyogU3ViVHlwZTI6IFJlcXVlc3QgdG8gcGVyZm9ybSB0d28tc3RlcCB0aW1lc3RhbXBpbmcgKi9cbisjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUyXHRcdDJcbiBcbiAvKiBUb19Ib3N0IE5YUCBzd2l0Y2ggdGFnICovXG4gI2RlZmluZSBORVRDX1RBR19UT19IT1NUXHRcdDJcbkBAIC0yOSw2ICszMyw4IEBAXG4gLyogTkVUQyBzd2l0Y2ggdGFnIGxlbmd0aHMgKi9cbiAjZGVmaW5lIE5FVENfVEFHX0ZPUldBUkRfTEVOXHRcdDZcbiAjZGVmaW5lIE5FVENfVEFHX1RQX1NVQlRZUEUwX0xFTlx0NlxuKyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTFfTEVOXHQxMFxuKyNkZWZpbmUgTkVUQ19UQUdfVFBfU1VCVFlQRTJfTEVOXHQ2XG4gI2RlZmluZSBORVRDX1RBR19USF9TVUJUWVBFMF9MRU5cdDZcbiAjZGVmaW5lIE5FVENfVEFHX1RIX1NVQlRZUEUxX0xFTlx0MTRcbiAjZGVmaW5lIE5FVENfVEFHX1RIX1NVQlRZUEUyX0xFTlx0MTRcbkBAIC00MCw2ICs0Niw3IEBAXG4gI2RlZmluZSBORVRDX1RBR19JUFZcdFx0XHRHRU5NQVNLKDQsIDIpXG4gI2RlZmluZSBORVRDX1RBR19TV0lUQ0hcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBORVRDX1RBR19QT1JUXHRcdFx0R0VOTUFTSyg3LCAzKVxuKyNkZWZpbmUgTkVUQ19UQUdfVElNRVNUQU1QXHRcdEdFTk1BU0soMjksIDApXG4gXG4gc3RydWN0IG5ldGNfdGFnX2NtbiB7XG4gXHRfX2JlMTYgdHBpZDtcbkBAIC00OCw2ICs1NSwyOSBAQCBzdHJ1Y3QgbmV0Y190YWdfY21uIHtcbiBcdHU4IHN3aXRjaF9wb3J0O1xuIH0gX19wYWNrZWQ7XG4gXG4rc3RydWN0IG5ldGNfdGFnX3RwX3N1YnR5cGUxIHtcbitcdHN0cnVjdCBuZXRjX3RhZ19jbW4gY21uO1xuK1x0dTggcmVzdjtcbitcdF9fYmUzMiB0aW1lc3RhbXA7XG4rfSBfX3BhY2tlZDtcbitcbitzdHJ1Y3QgbmV0Y190YWdfdHBfc3VidHlwZTIge1xuK1x0c3RydWN0IG5ldGNfdGFnX2NtbiBjbW47XG4rXHR1OCB0c19yZXFfaWQ7XG4rfSBfX3BhY2tlZDtcbitcbitzdHJ1Y3QgbmV0Y190YWdfdGhfc3VidHlwZTEge1xuK1x0c3RydWN0IG5ldGNfdGFnX2NtbiBjbW47XG4rXHR1OCBob3N0X3JlYXNvbjtcbitcdF9fYmU2NCB0aW1lc3RhbXA7XG4rfSBfX3BhY2tlZDtcbitcbitzdHJ1Y3QgbmV0Y190YWdfdGhfc3VidHlwZTIge1xuK1x0c3RydWN0IG5ldGNfdGFnX2NtbiBjbW47XG4rXHR1OCBocl90c3JlcV9pZDtcbitcdF9fYmU2NCB0aW1lc3RhbXA7XG4rfSBfX3BhY2tlZDtcbitcbiBzdGF0aWMgdm9pZCBuZXRjX2ZpbGxfY29tbW9uX3RhZyhzdHJ1Y3QgbmV0Y190YWdfY21uICp0YWcsIHU4IHR5cGUsXG4gXHRcdFx0XHQgdTggc3VidHlwZSwgdTggc3dfaWQsIHU4IHBvcnQsIHU4IGlwdilcbiB7XG5AQCAtOTcsMTUgKzEyNywxMjAgQEAgc3RhdGljIHZvaWQgbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0TkVUQ19UQUdfVFBfU1VCVFlQRTBfTEVOKTtcbiB9XG4gXG4tLyogQ3VycmVudGx5IG9ubHkgc3VwcG9ydCBUb19Qb3J0IHRhZywgc3VidHlwZSAwICovXG4rc3RhdGljIHZvaWQgbmV0Y19maWxsX3RwX3RhZ19zdWJ0eXBlMShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0dTMyIHRzID0gRklFTERfUFJFUChORVRDX1RBR19USU1FU1RBTVAsIE5FVENfU0tCX0NCKHNrYiktXHUwMDNldHN0YW1wKTtcbitcdHN0cnVjdCBuZXRjX3RhZ190cF9zdWJ0eXBlMSAqdGFnO1xuK1xuK1x0dGFnID0gbmV0Y19maWxsX2NvbW1vbl90cF90YWcoc2tiLCBuZGV2LCBORVRDX1RBR19UUF9TVUJUWVBFMSxcbitcdFx0XHRcdCAgICAgIE5FVENfVEFHX1RQX1NVQlRZUEUxX0xFTik7XG4rXHR0YWctXHUwMDNldGltZXN0YW1wID0gaHRvbmwodHMpO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUyKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmUgPSBORVRDX1NLQl9DQihza2IpLVx1MDAzZWNsb25lO1xuK1x0dTggdHNfcmVxX2lkID0gTkVUQ19TS0JfQ0IoY2xvbmUpLVx1MDAzZXRzX3JlcV9pZDtcbitcdHN0cnVjdCBuZXRjX3RhZ190cF9zdWJ0eXBlMiAqdGFnO1xuK1xuK1x0dGFnID0gbmV0Y19maWxsX2NvbW1vbl90cF90YWcoc2tiLCBuZGV2LCBORVRDX1RBR19UUF9TVUJUWVBFMixcbitcdFx0XHRcdCAgICAgIE5FVENfVEFHX1RQX1NVQlRZUEUyX0xFTik7XG4rXHR0YWctXHUwMDNldHNfcmVxX2lkID0gRklFTERfUFJFUChORVRDX1RBR19UU19SRVFfSUQsIHRzX3JlcV9pZCk7XG4rfVxuK1xuK3N0YXRpYyBuZXRkZXZfdHhfdCBuZXRjX29uZXN0ZXBfc3luY194bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHQvKiBUaGlzIGRlZmVycmVkIG9uZS1zdGVwIFN5bmMgZnJhbWUgYWxyZWFkeSB3ZW50IHRocm91Z2hcbitcdCAqIGRzYV91c2VyX3htaXQoKSdzIHNrYl9lbnN1cmVfd3JpdGFibGVfaGVhZF90YWlsKCkgYW5kIGV0aF9za2JfcGFkKClcbitcdCAqIGJlZm9yZSBpdCB3YXMgcXVldWVkIGluIG5ldGNfeG1pdCgpLCBhbmQgbm90aGluZyBoYXMgY2xvbmVkIGl0IG9yXG4rXHQgKiBzaHJ1bmsgaXRzIGhlYWQvdGFpbCByb29tIHNpbmNlLiBTbyB0aGUgaGVhZC90YWlsIHJvb20gaXMgc3RpbGxcbitcdCAqIGd1YXJhbnRlZWQgYW5kIHRoZSBza2IgaXMgc3RpbGwgd3JpdGFibGU7IG9ubHkgdGhlIHRhZyBuZWVkcyB0byBiZVxuK1x0ICogcHVzaGVkIGJlZm9yZSBoYW5kaW5nIGl0IGRpcmVjdGx5IHRvIHRoZSBjb25kdWl0LCBieXBhc3NpbmdcbitcdCAqIGRzYV91c2VyX3htaXQoKSBzbyB0aGF0IGRldl9zd19uZXRzdGF0c190eF9hZGQoKSBpcyBub3QgaW52b2tlZCBhXG4rXHQgKiBzZWNvbmQgdGltZSBmb3IgdGhlIHNhbWUgZnJhbWUuXG4rXHQgKi9cbitcdG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTEoc2tiLCBkZXYpO1xuK1xuK1x0cmV0dXJuIGRzYV9lbnF1ZXVlX3NrYihza2IsIGRldik7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19vbmVzdGVwX3N5bmNfcHJvY2VzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3VzZXJfdG9fcG9ydChuZGV2KTtcbitcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YTtcbitcdHN0cnVjdCBza19idWZmICpuc2tiO1xuK1xuK1x0dGFnZ2VyX2RhdGEgPSBkcC1cdTAwM2Vkcy1cdTAwM2V0YWdnZXJfZGF0YTtcbitcdGlmICh1bmxpa2VseSghdGFnZ2VyX2RhdGEtXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIpKSB7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdC8qIERlY2lkZSwgdW5kZXIgcHRwX2xvY2ssIHdoZXRoZXIgdGhpcyBvbmUtc3RlcCBTeW5jIGNhbiBiZSBzZW50XG4rXHQgKiBub3cgb3IgbXVzdCBiZSBkZWZlcnJlZC4gUmV0dXJucyB0aGUgc2tiICh3aXRoIHRoZSBpbi1mbGlnaHRcbitcdCAqIHNsb3QgY2xhaW1lZCBhbmQgUE1fU0lOR0xFX1NURVAgYWxyZWFkeSBwcm9ncmFtbWVkKSBmb3JcbitcdCAqIGltbWVkaWF0ZSB0cmFuc21pc3Npb24sIG9yIE5VTEwgaWYgaXQgd2FzIHF1ZXVlZCBmb3IgZGVmZXJyZWRcbitcdCAqIHRyYW5zbWlzc2lvbiBvciBkcm9wcGVkLlxuK1x0ICovXG4rXHRuc2tiID0gdGFnZ2VyX2RhdGEtXHUwMDNlb25lc3RlcF9zeW5jX2hhbmRsZXIoZHAtXHUwMDNlZHMsIGRwLVx1MDAzZWluZGV4LCBza2IpO1xuK1x0aWYgKHVubGlrZWx5KCFuc2tiKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gbnNrYjtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4tXHRuZXRjX2ZpbGxfdHBfdGFnX3N1YnR5cGUwKHNrYiwgbmRldik7XG4rXHR1OCBwdHBfZmxhZyA9IE5FVENfU0tCX0NCKHNrYiktXHUwMDNlcHRwX2ZsYWc7XG4rXG4rXHQvKiBGYXN0IHBhdGg6IHRoZSBvdmVyd2hlbG1pbmcgbWFqb3JpdHkgb2YgZnJhbWVzIGFyZSBub3QgUFRQIGZyYW1lcyAqL1xuK1x0aWYgKGxpa2VseSghcHRwX2ZsYWcpKSB7XG4rXHRcdG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTAoc2tiLCBuZGV2KTtcbitcdFx0cmV0dXJuIHNrYjtcbitcdH1cbitcbitcdGlmIChwdHBfZmxhZyA9PSBORVRDX1BUUF9GTEFHX09ORVNURVApIHtcbitcdFx0aWYgKCFuZXRjX29uZXN0ZXBfc3luY19wcm9jZXNzKHNrYiwgbmRldikpXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRcdG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTEoc2tiLCBuZGV2KTtcbitcdH0gZWxzZSBpZiAocHRwX2ZsYWcgPT0gTkVUQ19QVFBfRkxBR19UV09TVEVQKSB7XG4rXHRcdG5ldGNfZmlsbF90cF90YWdfc3VidHlwZTIoc2tiLCBuZGV2KTtcbitcdH0gZWxzZSB7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbiBcbiBcdHJldHVybiBza2I7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5ldGNfcnhfdHN0YW1wX3Byb2Nlc3Moc3RydWN0IG5ldGNfdGFnX3RoX3N1YnR5cGUxICp0YWcsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHU2NCB0cyA9IGdldF91bmFsaWduZWRfYmU2NChcdTAwMjZ0YWctXHUwMDNldGltZXN0YW1wKTtcbitcbitcdE5FVENfU0tCX0NCKHNrYiktXHUwMDNldHN0YW1wID0gdHM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG5ldGNfdHdvc3RlcF90c3RhbXBfcHJvY2VzcyhzdHJ1Y3QgbmV0Y190YWdfdGhfc3VidHlwZTIgKnRhZyxcbitcdFx0XHRcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuK3tcbitcdHU4IHRzX3JlcV9pZCA9IEZJRUxEX0dFVChORVRDX1RBR19UU19SRVFfSUQsIHRhZy1cdTAwM2Vocl90c3JlcV9pZCk7XG4rXHRpbnQgcG9ydCA9IEZJRUxEX0dFVChORVRDX1RBR19QT1JULCB0YWctXHUwMDNlY21uLnN3aXRjaF9wb3J0KTtcbitcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YSA9IGRzLVx1MDAzZXRhZ2dlcl9kYXRhO1xuK1x0dTY0IHRzID0gZ2V0X3VuYWxpZ25lZF9iZTY0KFx1MDAyNnRhZy1cdTAwM2V0aW1lc3RhbXApO1xuK1xuK1x0aWYgKHVubGlrZWx5KCF0YWdnZXJfZGF0YS1cdTAwM2V0d29zdGVwX3RzdGFtcF9oYW5kbGVyKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0dGFnZ2VyX2RhdGEtXHUwMDNldHdvc3RlcF90c3RhbXBfaGFuZGxlcihkcywgcG9ydCwgdHNfcmVxX2lkLCB0cyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbmV0Y19nZXRfcnhfdGFnX2xlbihpbnQgdHlwZSwgaW50IHN1YnR5cGUpXG4ge1xuIFx0LyogT25seSBORVRDX1RBR19UT19IT1NUIGFuZCBORVRDX1RBR19GT1JXQVJEIGFyZSBleHBlY3RlZCBpbiBSWCxcbkBAIC0xMjYsMTQgKzI2MSwxNyBAQCBzdGF0aWMgaW50IG5ldGNfZ2V0X3J4X3RhZ19sZW4oaW50IHR5cGUsIGludCBzdWJ0eXBlKVxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBuZGV2LVx1MDAzZWRzYV9wdHI7XG4gXHRzdHJ1Y3QgbmV0Y190YWdfY21uICp0YWdfY21uO1xuIFx0aW50IHRhZ19sZW4sIHN3X2lkLCBwb3J0O1xuIFx0aW50IHR5cGUsIHN1YnR5cGU7XG4rXHR2b2lkICp0YWc7XG4gXG4tXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBORVRDX1RBR19NQVhfTEVOKSkpXG4rXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBORVRDX1RBR19NQVhfTEVOIC0gMikpKVxuIFx0XHRnb3RvIGVycl9mcmVlX3NrYjtcbiBcbi1cdHRhZ19jbW4gPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc19yeChza2IpO1xuK1x0dGFnID0gZHNhX2V0eXBlX2hlYWRlcl9wb3Nfcngoc2tiKTtcbitcdHRhZ19jbW4gPSB0YWc7XG4gXHRpZiAobnRvaHModGFnX2Ntbi1cdTAwM2V0cGlkKSAhPSBFVEhfUF9OWFBfTkVUQykge1xuIFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChcdTAwMjZuZGV2LVx1MDAzZWRldiwgXCJVbmtub3duIFRQSUQgMHglMDR4XFxuXCIsXG4gXHRcdFx0XHQgICAgIG50b2hzKHRhZ19jbW4tXHUwMDNldHBpZCkpO1xuQEAgLTE2MSwxMiArMjk5LDI4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICh0eXBlID09IE5FVENfVEFHX0ZPUldBUkQpIHtcbiBcdFx0ZHNhX2RlZmF1bHRfb2ZmbG9hZF9md2RfbWFyayhza2IpO1xuIFx0fSBlbHNlIGlmICh0eXBlID09IE5FVENfVEFHX1RPX0hPU1QpIHtcbi1cdFx0LyogQ3VycmVudGx5IG9ubHkgc3VidHlwZTAgc3VwcG9ydGVkICovXG4tXHRcdGlmIChzdWJ0eXBlICE9IE5FVENfVEFHX1RIX1NVQlRZUEUwKVxuK1x0XHRzd2l0Y2ggKHN1YnR5cGUpIHtcbitcdFx0Y2FzZSBORVRDX1RBR19USF9TVUJUWVBFMDpcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBORVRDX1RBR19USF9TVUJUWVBFMTpcbitcdFx0XHRuZXRjX3J4X3RzdGFtcF9wcm9jZXNzKHRhZywgc2tiKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBORVRDX1RBR19USF9TVUJUWVBFMjpcbitcdFx0XHQvKiBUaGlzIHNrYiBpcyBhIGhhcmR3YXJlLWdlbmVyYXRlZCByZXNwb25zZSB0byBhXG4rXHRcdFx0ICogdHdvLXN0ZXAgdHJhbnNtaXQgdGltZXN0YW1wIHJlcXVlc3QuIFRoZSB0YWdcbitcdFx0XHQgKiBkcml2ZXIgbXVzdCBmcmVlIHRoZSBza2IgYWZ0ZXIgcHJvY2Vzc2luZy5cbitcdFx0XHQgKi9cbitcdFx0XHRuZXRjX3R3b3N0ZXBfdHN0YW1wX3Byb2Nlc3ModGFnLCBkcC1cdTAwM2Vkcyk7XG4rXHRcdFx0Z290byBlcnJfZnJlZV9za2I7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoXHUwMDI2bmRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCAgICAgXCJVbnN1cHBvcnRlZCBUb19Ib3N0IHN1YnR5cGU6ICVkXFxuXCIsXG4rXHRcdFx0XHRcdCAgICAgc3VidHlwZSk7XG4gXHRcdFx0Z290byBlcnJfZnJlZV9za2I7XG4rXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKFx1MDAyNm5kZXYtXHUwMDNlZGV2LFxuLVx0XHRcdFx0ICAgICBcIlVuZXhwZWN0ZWQgIHRhZyB0eXBlICVkXFxuXCIsIHR5cGUpO1xuK1x0XHRcdFx0ICAgICBcIlVuZXhwZWN0ZWQgdGFnIHR5cGUgJWRcXG5cIiwgdHlwZSk7XG4gXHRcdGdvdG8gZXJyX2ZyZWVfc2tiO1xuIFx0fVxuIFxuQEAgLTIwMCw2ICszNTQsMjggQEAgc3RhdGljIHZvaWQgbmV0Y19mbG93X2Rpc3NlY3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2ICpwcm90byxcbiBcdCpwcm90byA9ICgoX19iZTE2ICopc2tiLVx1MDAzZWRhdGEpWyh0YWdfbGVuIC8gMikgLSAxXTtcbiB9XG4gXG4rc3RhdGljIGludCBuZXRjX2Nvbm5lY3Qoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuK3tcbitcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YTtcbitcbitcdHRhZ2dlcl9kYXRhID0ga3phbGxvY19vYmooKnRhZ2dlcl9kYXRhKTtcbitcdGlmICghdGFnZ2VyX2RhdGEpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0dGFnZ2VyX2RhdGEtXHUwMDNlb25lc3RlcF9zeW5jX3htaXQgPSBuZXRjX29uZXN0ZXBfc3luY194bWl0O1xuK1x0ZHMtXHUwMDNldGFnZ2VyX2RhdGEgPSB0YWdnZXJfZGF0YTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZXRjX2Rpc2Nvbm5lY3Qoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuK3tcbitcdHN0cnVjdCBuZXRjX3RhZ2dlcl9kYXRhICp0YWdnZXJfZGF0YSA9IGRzLVx1MDAzZXRhZ2dlcl9kYXRhO1xuK1xuK1x0a2ZyZWUodGFnZ2VyX2RhdGEpO1xuK1x0ZHMtXHUwMDNldGFnZ2VyX2RhdGEgPSBOVUxMO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIG5ldGNfbmV0ZGV2X29wcyA9IHtcbiBcdC5uYW1lXHRcdFx0PSBORVRDX05BTUUsXG4gXHQucHJvdG9cdFx0XHQ9IERTQV9UQUdfUFJPVE9fTkVUQyxcbkBAIC0yMDcsNiArMzgzLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyBuZXRjX25ldGRldl9vcHMgPSB7XG4gXHQucmN2XHRcdFx0PSBuZXRjX3JjdixcbiBcdC5uZWVkZWRfaGVhZHJvb21cdD0gTkVUQ19UQUdfTUFYX0xFTixcbiBcdC5mbG93X2Rpc3NlY3RcdFx0PSBuZXRjX2Zsb3dfZGlzc2VjdCxcbitcdC5jb25uZWN0XHRcdD0gbmV0Y19jb25uZWN0LFxuK1x0LmRpc2Nvbm5lY3RcdFx0PSBuZXRjX2Rpc2Nvbm5lY3QsXG4gfTtcbiBcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJEU0EgdGFnIGRyaXZlciBmb3IgTlhQIE5FVEMgc3dpdGNoIGZhbWlseVwiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA3OjU1OjU4LjQzODg4NjU2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4OTg3NjIyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBcHBsaWNhYmlsaXR5IG9mIHRoZSBOWFAgTkVUQyBQVFAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBhZGRpbmcgUFRQIHN1cHBvcnQgdG8gdGhlIE5YUCBORVRDIHN3aXRjaCBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGBuZXRjX3B0cC5jYCwgYG5ldGNfbWFpbi5jYCwgYG5ldGNfcGxhdGZvcm0uY2AsIHNvbWUgaGVhZGVyIGZpbGVzLCBhbmQgYSBmZXcgb3RoZXJzLiBQcmV0dHkgY29tcHJlaGVuc2l2ZS5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgY2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJcyB0aGlzIHNvbWV0aGluZyBJIGNhbiBlZmZlY3RpdmVseSBmdXp6PyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGRyaXZlciwgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvZHNhL25ldGMvYCwgaXMgYnVpbHQgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIHVzZWQgYnkgZnV6emVycy4gSXQgZGVwZW5kcyBvbiBgTkVUX0RTQV9ORVRDX1NXSVRDSGAsIHdoaWNoLCBpbiB0dXJuLCBkZXBlbmRzIG9uIGBBUk02NCB8fCBDT01QSUxFX1RFU1RgLCBgTkVUX0RTQSBcdTAwMjZcdTAwMjYgUENJYCwgYW5kIGBORVRfVkVORE9SX0ZSRUVTQ0FMRWAuIFJpZ2h0LCBpdCBsb29rcyBsaWtlIGEgUENJIGRldmljZS4gQW5kIHRoaW5raW5nIGFib3V0IGl0LCBOWFAgTkVUQyBpcyBwcm9iYWJseSBhIHBoeXNpY2FsIGhhcmR3YXJlIGNvbXBvbmVudCwgaXNuJ3QgaXQ/IE5ldHdvcmsgRWRnZSBUaW1lLVNlbnNpdGl2ZSBOZXR3b3JraW5nIENvbnRyb2xsZXIsIHllcCwgUENJIG1ha2VzIHNlbnNlLlxuXG5TbywgdGhlIG5leHQgcXVlc3Rpb246IGlzIHRoaXMgaGFyZHdhcmUgZW11bGF0ZWQgaW4gUUVNVT8gVGhhdCdzIHRoZSByZWFsIGJsb2NrZXIuIEknZCB0eXBpY2FsbHkgc2VhcmNoIHRoZSBRRU1VIHNvdXJjZSBmb3IgXCJORVRDXCIsIGJ1dCBJIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoYXQgaGVyZS4gVGhlIHByb21wdCBkb2VzIGdpdmUgYSBjbHVlLCBtZW50aW9uaW5nIHRoYXQgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGRyaXZlcnMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHNwZWNpZmljIFBDSWUgaGFyZHdhcmUgY2FyZHMgYXJlbid0IHVzdWFsbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhpbmdzIGxpa2UgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUsIHRoYXQgc29ydCBvZiB0aGluZy4gR2l2ZW4gdGhhdCB0aGlzIGlzIGFuIE5YUC1zcGVjaWZpYyBjb21wb25lbnQsIEkgc3VzcGVjdCBpdCdzIHRoZSBzYW1lIHNpdHVhdGlvbi4gVW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBtYWNoaW5lIG1vZGVsIGZvciBhbiBpLk1YIGJvYXJkLCB0aGVuIE5YUCBzcGVjaWZpYyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQuXG5cbkFscmlnaHQsIHRoZSBkcml2ZXIgcHJvYmUgZnVuY3Rpb24sIGBuZXRjX3N3aXRjaF9wcm9iZWAsIGNvbmZpcm1zIHRoaXMgaXMgYSBQQ0kgZHJpdmVyIGJlY2F1c2UgaXQgdGFrZXMgYSBgcGNpX2RldmAgYXJndW1lbnQuIEl0IGxvb2tzIGxpa2UgbXkgYXNzdW1wdGlvbiBvZiBwaHlzaWNhbCBoYXJkd2FyZSBpcyBjb3JyZWN0LiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jYCB0byBpZGVudGlmeSB0aGUgUENJIElEcy4gSWYgaXTigJlzIG5vdCBlbXVsYXRlZCwgdGhlbiBmdXp6aW5nIGlzIGdvaW5nIHRvIGJlIHNpZ25pZmljYW50bHkgbW9yZSBkaWZmaWN1bHQsIGlmIG5vdCBpbXBvc3NpYmxlLCB3aXRob3V0IGEgY3VzdG9tIFFFTVUgc2V0dXAgb3IgYWNjZXNzIHRvIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyODMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NjowNy4zMzc2NTMwOTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwNzM2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX2RldmljZV9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbmV0Yy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9MjQ5OD1zdGF0aWMgaW50IG5ldGNfc3dpdGNoX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jOjI0OTk6XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMjUwMC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0yNTYwPXN0YXRpYyB2b2lkIG5ldGNfc3dpdGNoX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMjU3MC1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoyNTcxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZXRjX3N3aXRjaF9pZHNbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0yNTcyLVxcdHsgUENJX0RFVklDRShORVRDX1NXSVRDSF9WRU5ET1JfSUQsIE5FVENfU1dJVENIX0RFVklDRV9JRCkgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6MDcuMzk3NzM0ODUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxNTk0NTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU3dpdGNoIElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uc3RhbnRzLCBgTkVUQ19TV0lUQ0hfVkVORE9SX0lEYCBhbmQgYE5FVENfU1dJVENIX0RFVklDRV9JRGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gd2hhdCB0aGV5IGFjdHVhbGx5IHJlcHJlc2VudC4gV2UgbmVlZCB0byBpZGVudGlmeSB0aGUgZXhhY3QgdmVuZG9yIGFuZCBkZXZpY2UgdGhlc2UgY29uc3RhbnRzIGFyZSBtZWFudCB0byBwaW5wb2ludC4gSSdtIGFzc3VtaW5nLCBvZiBjb3Vyc2UsIHRoYXQgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gaG93IHRoZSBzeXN0ZW0gaWRlbnRpZmllcyBzcGVjaWZpYyBuZXR3b3JrIHN3aXRjaGVzIHdpdGhpbiBpdHMgcHVydmlldywgbGlrZWx5IHRocm91Z2ggc29tZSBraW5kIG9mIGhhcmR3YXJlIG9yIGZpcm13YXJlIGlkZW50aWZpY2F0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzb3VyY2Ugb2YgdGhlc2UgY29uc3RhbnRzLiBBcmUgdGhleSBkZWZpbmVkIGluIGEgZHJpdmVyLCBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgcGVyaGFwcyBkZXJpdmVkIGZyb20gc29tZSBraW5kIG9mIG5ldHdvcmsgZGlzY292ZXJ5IHByb3RvY29sPyBVbmRlcnN0YW5kaW5nIHRoZSBvcmlnaW4gd2lsbCBkaWN0YXRlIGhvdyBJJ2xsIGFwcHJvYWNoIHRoaXMgaW52ZXN0aWdhdGlvbi4gS25vd2luZyB0aGUgY29udGV4dCB3aWxsIHBvaW50IG1lIHRvIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgb3IgaGFyZHdhcmUgcmVnaXN0ZXJzIHdoZXJlIHRoaXMgaW5mb3JtYXRpb24gaXMgYmVpbmcgZmV0Y2hlZC4gVGhlIGdvYWwsIGNsZWFybHksIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiB2YXJpb3VzIHN3aXRjaCBtb2RlbHMgb3IgbWFudWZhY3R1cmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NjoxMi4wMTM2ODM4MzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNzk3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUQ19TV0lUQ0hfVkVORE9SX0lEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9uZXRjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0yNTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZXRjX3N3aXRjaF9pZHNbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoyNTcyOlxcdHsgUENJX0RFVklDRShORVRDX1NXSVRDSF9WRU5ET1JfSUQsIE5FVENfU1dJVENIX0RFVklDRV9JRCkgfSxcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0yNTczLVxcdHsgfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2hfaHcuaC0xMC1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX3N3aXRjaF9ody5oOjExOiNkZWZpbmUgTkVUQ19TV0lUQ0hfVkVORE9SX0lEXFx0XFx0MHgxMTMxXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19zd2l0Y2hfaHcuaC0xMi0jZGVmaW5lIE5FVENfU1dJVENIX0RFVklDRV9JRFxcdFxcdDB4ZWVmMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NjoxMi4wNjQ5Njk5MzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ3NTA4NTMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBUaGlzIENvZGUqKlxuXG5Pa2F5LCBzbyBWZW5kb3IgSUQgYDB4MTEzMWAgaXMgTlhQLCBmb3JtZXJseSBQaGlsaXBzIFNlbWljb25kdWN0b3JzLiBUaGUgY29yZSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgdGhpcyBQQ0kgZGV2aWNlLCB0aGUgTlhQIE5FVEMgc3dpdGNoLCBpcyBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIGlzIG5vLiBTdGFuZGFyZCBRRU1VIHN0aWNrcyB0byBlbXVsYXRpbmcgZ2VuZXJpYyBuZXR3b3JrIGRldmljZXMgbGlrZSBlMTAwMCwgdmlydGlvLW5ldCwgb3IgcnRsODEzOS4gVmVuZG9yLXNwZWNpZmljIGRldmljZXMsIHN1Y2ggYXMgdGhlIE5FVEMgc3dpdGNoLCBhcmUgdHlwaWNhbGx5ICpub3QqIGVtdWxhdGVkLlxuXG5UaGVyZWZvcmUsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcsIHRoZSBjb2RlIHBhdGhzIGluIHRoaXMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgTkVUQyBzd2l0Y2gsIHNob3VsZCBiZSBlbnRpcmVseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHQ0UuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGluc3RydWN0cyBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIHRhcmdldHMgb25seSB2ZW5kb3Itc3BlY2lmaWMgUENJIGhhcmR3YXJlIHRoYXQgaXNuJ3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgc3VjaCBhcyBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4gVGhpcyBzZWVtcyB0byBhcHBseSBkaXJlY3RseS5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGNvbnNpZGVyIGEgcG90ZW50aWFsIGxvb3Bob2xlOiB0aGUgRFNBIHRhZ2dlciBjb21wb25lbnQsIGBuZXQvZHNhL3RhZ19uZXRjLmNgLiBDYW4gKnRoYXQqIGJlIHJlYWNoZWQgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIGJlY2F1c2UgRFNBIHRhZ2dlcnMgYXJlIHR5cGljYWxseSBpbnZvbHZlZCBpbiBoYW5kbGluZyBwYWNrZXRzIGJlaW5nIHNlbnQgb3IgcmVjZWl2ZWQgb24gYSBEU0EgbWFzdGVyIG5ldHdvcmsgZGV2aWNlPyBJZiB0aGUgc3dpdGNoIGlzbid0IHByZXNlbnQsIHRoZSB0YWdnZXIgdHlwaWNhbGx5IGlzbid0IHVzZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IGlzbid0LCBidXQgc3l6a2FsbGVyIGNhbiBzb21ldGltZXMgY3JlYXRlIERTQSB0cmVlcyB1c2luZyBkdW1teSBkZXZpY2VzIG9yIHdvcmthcm91bmRzIGlmIGl0IGNhbiBieXBhc3MgdGhlIGhhcmR3YXJlIHByb2JlLiBIb3dldmVyLCB0aGF0IHVzdWFsbHkgcmVsaWVzIG9uIHRoZSBzd2l0Y2ggZHJpdmVyIHByb2Jpbmcgc3VjY2Vzc2Z1bGx5LlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2suIFN5emthbGxlciAqZG9lcyogaGF2ZSBzb21lIHN1cHBvcnQgZm9yIGluamVjdGluZyBwYWNrZXRzIGludG8gRFNBIGludGVyZmFjZXMsIGJ1dCBpdCBzdGlsbCBoaW5nZXMgb24gdGhlIERTQSBzd2l0Y2ggYmVpbmcgcmVnaXN0ZXJlZC4gSWYgdGhlIG1haW4gc3dpdGNoIGRyaXZlciwgYG5ldGNfbWFpbi5jYCwgY2FuJ3QgcHJvYmUgdGhlIFBDSSBkZXZpY2UsIGJlY2F1c2UgaXQncyBtaXNzaW5nLCB0aGUgRFNBIHN3aXRjaCB3b24ndCBiZSByZWdpc3RlcmVkLCBhbmQgY29uc2VxdWVudGx5LCB0aGUgdGFnZ2VyIGNvZGUgd29uJ3QgYmUgZXhlY3V0ZWQuXG5cblNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gYmVjb21lczogSXMgdGhlcmUgKmFueSogcG9zc2libGUgd2F5IHRvIGluc3RhbnRpYXRlIG9yIHJlZ2lzdGVyIHRoZSBORVRDIERTQSBzd2l0Y2ggd2l0aG91dCB0aGUgcHJlc2VuY2Ugb2YgdGhlIFBDSSBoYXJkd2FyZT8gSSBuZWVkIHRvIGRldGVybWluZSBpZiBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9yIGFsdGVybmF0aXZlIGRyaXZlciBwYXRoIGV4aXN0cywgb3IgaWYgaXQncyBzdHJpY3RseSBkZXBlbmRlbnQgb24gdGhlIFBDSSBkZXZpY2UuIEknbSBnb2luZyB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTExMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NjoyMi41NDAwNTk5NjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0NTk3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL25ldGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jPTI1Nzc9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5ldGNfc3dpdGNoX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTI1ODMtfTtcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoyNTg0Om1vZHVsZV9wY2lfZHJpdmVyKG5ldGNfc3dpdGNoX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMjU4NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6MjIuNTkyNTI3MTY0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNjExMjc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQQ0llIERyaXZlciBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgUENJIGRyaXZlciwgbm90aGluZyBtb3JlLiBBbmQgYmVjYXVzZSBpdCdzIHNwZWNpZmljYWxseSBmb3IgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIHRoZSBOWFAgTkVUQywgaXQncyB0aWVkIGRpcmVjdGx5IHRvIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4gU3RhbmRhcmQgUUVNVSBqdXN0IGlzbid0IGdvaW5nIHRvIGN1dCBpdDsgbm8gZW11bGF0aW9uIGhlcmUuIFNvLCBmdXp6aW5nIGl0IGlzbid0IGdvaW5nIHRvIGJlIHdvcnRod2hpbGU7IGl0J3MgZ29pbmcgdG8gYmUgYSBkZWFkIGVuZC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgc2hvdWxkIHZlcmlmeSB3aGV0aGVyIHRoZSBjb2RlIGluIGB0YWdfbmV0Yy5jYCBpcyBldmVuIHJlYWNoYWJsZS4gTGV0IG1lIGNoZWNrIHRoZSBEU0EgdGFnZ2VyIHJlZ2lzdHJhdGlvbjsgaXQgbG9va3MgbGlrZSB0aGF0IHVzZXMgYG1vZHVsZV9kc2FfdGFnX2RyaXZlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTY2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6MjYuMzE4NjQzOTQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQ1Nzc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfZHNhX3RhZ19kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYS90YWdfbmV0Yy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2EvdGFnX25ldGMuYz0zOTM9TU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fTkVUQywgTkVUQ19OQU1FKTtcXG5uZXQvZHNhL3RhZ19uZXRjLmM6Mzk0Om1vZHVsZV9kc2FfdGFnX2RyaXZlcihuZXRjX25ldGRldl9vcHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NjoyNi4zNzAxMTAyNDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk3Mzc0NjYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IFRyYWluIG9mIFRob3VnaHQqKlxuXG5Pa2F5LCBzbyB0aGUgdGFnZ2VyIGJlaW5nIHJlZ2lzdGVyZWQgaXNuJ3QgZW5vdWdoOyBpdCAqYWxzbyogbmVlZHMgYSBEU0Egc3dpdGNoIGNvbmZpZ3VyZWQgdG8gYWN0dWFsbHkgYmUgdXRpbGl6ZWQuIFRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgYSBxdWVzdGlvbiBwb3BzIGludG8gbXkgaGVhZDogY2FuIGEgdXNlciwgaW4gdGhlb3J5LCBqdXN0IHNldCB1cCBhIGR1bW15IERTQSBzd2l0Y2gsIGV2ZW4gb25lIHRoYXQncyBub3QgYWN0dWFsbHkgY29ubmVjdGVkIHRvIGFueXRoaW5nLCBqdXN0IHRvICplbmFibGUqIGEgcGFydGljdWxhciB0YWdnZXIsIHBlcmhhcHMgc3BlY2lmaWNhbGx5IHVzaW5nIGBEU0FfVEFHX1BST1RPX05FVENgPyBJbnRlcmVzdGluZyBhbmdsZS5cblxuVGhlIG5leHQgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIFN5emthbGxlci4gSSB3b25kZXIsIGNhbiBpdCBiZSBsZXZlcmFnZWQgdG8gdGVzdCB0aGVzZSB0YWdnZXJzPyBTcGVjaWZpY2FsbHksIGNhbiBpdCBtYWtlIHVzZSBvZiBgZHNhX2xvb3BgIG9yIGEgc2ltaWxhciBjb25zdHJ1Y3QgZm9yIHRoaXMgcHVycG9zZT8gSXQgbWFrZXMgc2Vuc2UgdGhhdCBTeXprYWxsZXIgaXMgdGhlIHJpZ2h0IHRvb2wuIExldCdzIHNlZSBpZiBgZHNhX2xvb3BgIHdvdWxkIGFsbG93IHVzIHRvIHRlc3QgYXJiaXRyYXJ5IHRhZ2dlcnMuXG5cbkhvbGQgb24sIEkgc2VlbSB0byByZW1lbWJlciB0aGF0IGBkc2FfbG9vcGAgKmdlbmVyYWxseSogcmVsaWVzIG9uIGBEU0FfVEFHX1BST1RPX05PTkVgIG9yIHdoYXRldmVyIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBwcm90b2NvbCBpcy4gT2theSwgd2FpdCBhIG1pbnV0ZSwgSSB0aGluayBJJ20gZ2V0dGluZyBhaGVhZCBvZiBteXNlbGYuIFN5emthbGxlciAqZG9lcyogaGF2ZSB0aGUgYWJpbGl0eSB0byB0ZXN0IERTQSB0YWdnZXJzLCBlaXRoZXIgYnkgaW5qZWN0aW5nIHBhY2tldHMgZGlyZWN0bHksIG9yIGJ5IHVzaW5nIGBkc2FfbG9vcGAgb3Igc29tZSByZWxhdGVkIG1lY2hhbmlzbS4gVGhhdCdzIGEgZ29vZCBzaWduLiBMZXQncyBqdXN0IGNvbmZpcm0sIGZvciBteSBvd24gcGVhY2Ugb2YgbWluZCwgdGhhdCBTeXprYWxsZXIgKnNwZWNpZmljYWxseSogdGVzdHMgYHRhZ19uZXRjLmNgLiBUaGF0IHdvdWxkIGdpdmUgbWUgdGhlIGNvbmZpcm1hdGlvbiBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTE3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA3OjU2OjMyLjM0Mzg2MDQ2OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzNzIyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFnX25ldGNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9NYWtlZmlsZT0zMj1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTVhMX0dTVzFYWCkgKz0gdGFnX214bC1nc3cxeHgub1xcbm5ldC9kc2EvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX05FVEMpICs9IHRhZ19uZXRjLm9cXG5uZXQvZHNhL01ha2VmaWxlLTM0LW9iai0kKENPTkZJR19ORVRfRFNBX1RBR19OT05FKSArPSB0YWdfbm9uZS5vXFxuLS1cXG5uZXQvZHNhL3RhZ19uZXRjLmMtNS1cXG5uZXQvZHNhL3RhZ19uZXRjLmM6NjojaW5jbHVkZSBcXHUwMDNjbGludXgvZHNhL3RhZ19uZXRjLmhcXHUwMDNlXFxubmV0L2RzYS90YWdfbmV0Yy5jLTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA3OjU2OjMyLjM5ODIzOTgxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njg4NTE4MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgU3l6a2FsbGVyJ3MgRFNBIFRhZ2dlciBDb3ZlcmFnZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgY29tcHJlaGVuc2l2ZWx5IFN5emthbGxlciBjb3ZlcnMgRFNBIHRhZ2dlciBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgdGhlcmUgbWlnaHQgYmUgYSBkZWRpY2F0ZWQgYHN5el9kc2Ffc2V0dXBgIGNhbGwgb3IgYSBzaW1pbGFyIGNvbnN0cnVjdCwgc3BlY2lmaWNhbGx5IGZvciBjb25maWd1cmluZyBhbmQgdGVzdGluZyB0aGVzZSB0YWdnZXJzLiBCdXQsIG9uIGZ1cnRoZXIgcmVmbGVjdGlvbiwgSSBkb24ndCB0aGluayB0aGF0J3MgcXVpdGUgcmlnaHQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBTeXprYWxsZXIgYXBwcm9hY2hlcyBEU0EgdGVzdGluZyB0aHJvdWdoIHZldGggcGFpcnMsIHdoaWNoIGl0IHRoZW4gY29ubmVjdHMgc29tZWhvdyB0byBhIERTQSBzd2l0Y2guIEJ1dCB3YWl0Li4uIEknbSBwcmV0dHkgc3VyZSB0aGF0IGl0IGRvZXNuJ3QgaGF2ZSBhIHRydWx5IGdlbmVyaWMgd2F5IHRvIGluc3RhbnRpYXRlIGFueSBhbmQgYWxsIERTQSB0YWdnZXJzLCBhdCBsZWFzdCB1bmxlc3MgdGhlcmUncyBhIHZpcnR1YWwgZHJpdmVyIHByZXNlbnQuIEkgbWVhbiwgd2l0aG91dCB0aGF0LCBpdCB3b3VsZCBiZSBkaWZmaWN1bHQgdG8gdGVzdC5cblxuQWgsIHRoYXQncyBpdCEgVGhlIGBkc2FfbG9vcGAgZHJpdmVyLiBSaWdodC4gKlRoYXQncyogdGhlIHZpcnR1YWwgRFNBIHN3aXRjaCBkcml2ZXIgdXNlZCBzcGVjaWZpY2FsbHkgZm9yIHRlc3RpbmcgRFNBIGZ1bmN0aW9uYWxpdHkuIFRoYXQgZ2l2ZXMgaXQgdGhlIHBvd2VyIHRvIGNyZWF0ZSB0ZXN0IHNjZW5hcmlvcyB0aGF0IHdvdWxkIGJlIGRpZmZpY3VsdCBvdGhlcndpc2UuIE9rYXksIHNvIG5vdyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIGlmIGBkc2FfbG9vcGAgY2FuIHV0aWxpemUgYERTQV9UQUdfUFJPVE9fTkVUQ2AuIElmIGl0IGNhbiwgd2UnbGwgc2VlIGlmIHRoZSBjb3ZlcmFnZSBpbXByb3ZlcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjcxODQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6MzcuMDg2NzYyMzY4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY2NDM4NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRTQV9UQUdfUFJPVE9fTkVUQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM9NjI9bmV0Y19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy02NC17XFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6NjU6XFx0cmV0dXJuIERTQV9UQUdfUFJPVE9fTkVUQztcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy02Ni19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz02OD1zdGF0aWMgaW50IG5ldGNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtNzItXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6NzM6XFx0aWYgKHByb3RvICE9IERTQV9UQUdfUFJPVE9fTkVUQylcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy03NC1cXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oPTI2PXN0cnVjdCB0Y19hY3Rpb247XFxuLS1cXG5pbmNsdWRlL25ldC9kc2EuaC02MC0jZGVmaW5lIERTQV9UQUdfUFJPVE9fTVhMODYyX1ZBTFVFXFx0XFx0MzJcXG5pbmNsdWRlL25ldC9kc2EuaDo2MTojZGVmaW5lIERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRVxcdFxcdDMzXFxuaW5jbHVkZS9uZXQvZHNhLmgtNjItXFxuaW5jbHVkZS9uZXQvZHNhLmg9NjM9ZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oLTk2LVxcdERTQV9UQUdfUFJPVE9fTVhMODYyXFx0XFx0PSBEU0FfVEFHX1BST1RPX01YTDg2Ml9WQUxVRSxcXG5pbmNsdWRlL25ldC9kc2EuaDo5NzpcXHREU0FfVEFHX1BST1RPX05FVENcXHRcXHQ9IERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRSxcXG5pbmNsdWRlL25ldC9kc2EuaC05OC19O1xcbi0tXFxubmV0L2RzYS90YWdfbmV0Yy5jPTM3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIG5ldGNfbmV0ZGV2X29wcyA9IHtcXG5uZXQvZHNhL3RhZ19uZXRjLmMtMzgwLVxcdC5uYW1lXFx0XFx0XFx0PSBORVRDX05BTUUsXFxubmV0L2RzYS90YWdfbmV0Yy5jOjM4MTpcXHQucHJvdG9cXHRcXHRcXHQ9IERTQV9UQUdfUFJPVE9fTkVUQyxcXG5uZXQvZHNhL3RhZ19uZXRjLmMtMzgyLVxcdC54bWl0XFx0XFx0XFx0PSBuZXRjX3htaXQsXFxuLS1cXG5uZXQvZHNhL3RhZ19uZXRjLmM9MzkxPU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5uZXQvZHNhL3RhZ19uZXRjLmMtMzkyLVxcbm5ldC9kc2EvdGFnX25ldGMuYzozOTM6TU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fTkVUQywgTkVUQ19OQU1FKTtcXG5uZXQvZHNhL3RhZ19uZXRjLmMtMzk0LW1vZHVsZV9kc2FfdGFnX2RyaXZlcihuZXRjX25ldGRldl9vcHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NjozOS4wNTMyMDgxMjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1MjQ0Njc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgVGFnZ2luZyBGbGV4aWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGEgd2F5IHRvIGludGVyYWN0IHdpdGggYG5ldGNfeG1pdGAgb3IgYG5ldGNfcmN2YCB3aXRoaW4gYG5ldC9kc2EvdGFnX25ldGMuY2Agd2l0aG91dCBhY3R1YWxseSBuZWVkaW5nIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBwcmVzZW50LiBUaGF0J3MgdGhlIGNvcmUgcXVlc3Rpb24uIE15IHRoaW5raW5nIGlzLCBjYW4gSSBzaW11bGF0ZSBvciB0ZXN0IHRoZXNlIGZ1bmN0aW9ucyBpbiBhIG1vcmUgY29udHJvbGxlZCBlbnZpcm9ubWVudD9cblxuU3BlY2lmaWNhbGx5LCBJJ20gd29uZGVyaW5nIGlmIGEgdXNlciwgdGhyb3VnaCBzeXNmcyBvciBuZXRsaW5rLCBjb3VsZCAqZHluYW1pY2FsbHkqIGFsdGVyIHRoZSBEU0EgdGFnIHByb3RvY29sIG9mIGFuIGV4aXN0aW5nIERTQSBzd2l0Y2guIEZvciBpbnN0YW5jZSwgY2FuIEkgdGFrZSBhIHNldHVwIHVzaW5nIGBkc2FfbG9vcGAgb3IgZXZlbiBgZHNhX21vY2tgIGFuZCBzb21laG93IHJlY29uZmlndXJlIGl0IHRvIHVzZSBgRFNBX1RBR19QUk9UT19ORVRDYD8gVGhpcyB3b3VsZCBnaXZlIG1lIGEgdmFsdWFibGUgd2luZG93IGludG8gaG93IHRoZSBgTkVUQ2AgdGFnIHByb3RvY29sIHdvdWxkIGZ1bmN0aW9uIHVuZGVyIGRpZmZlcmVudCBjb25kaXRpb25zLCBhbmQgcG90ZW50aWFsbHkgZmFjaWxpdGF0ZSBlYXNpZXIgZGVidWdnaW5nIGFuZCBleHBlcmltZW50YXRpb24uIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzICp3aGV0aGVyKiBEU0EncyBhcmNoaXRlY3R1cmUgZXZlbiBwZXJtaXRzIHRoaXMga2luZCBvZiBvbi10aGUtZmx5IHRhZyBwcm90b2NvbCBzd2l0Y2hpbmcuIExldCdzIGRpZyBpbnRvIHRoZSBEU0EgaW50ZXJuYWxzIGFuZCBmaW5kIG91dCBpZiBpdCBpcyBkZXNpZ25lZCB0byBoYW5kbGUgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyODQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6NDMuNjA1NjU4MDA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY0NTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGFuZ2VfdGFnX3Byb3RvY29sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kc2EvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kc2EvZHNhLmM9NTY5PXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9zZXR1cF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxubmV0L2RzYS9kc2EuYy01NzgtXFx0cnRubF9sb2NrKCk7XFxubmV0L2RzYS9kc2EuYzo1Nzk6XFx0ZXJyID0gZHMtXFx1MDAzZW9wcy1cXHUwMDNlY2hhbmdlX3RhZ19wcm90b2NvbChkcywgdGFnX29wcy1cXHUwMDNlcHJvdG8pO1xcbm5ldC9kc2EvZHNhLmMtNTgwLVxcdHJ0bmxfdW5sb2NrKCk7XFxuLS1cXG5uZXQvZHNhL2RzYS5jPTExNTQ9c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV9jcHUoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTExNzUtXFx0aWYgKHVzZXJfcHJvdG9jb2wpIHtcXG5uZXQvZHNhL2RzYS5jOjExNzY6XFx0XFx0aWYgKCFkcy1cXHUwMDNlb3BzLVxcdTAwM2VjaGFuZ2VfdGFnX3Byb3RvY29sKSB7XFxubmV0L2RzYS9kc2EuYy0xMTc3LVxcdFxcdFxcdGRldl9lcnIoZHMtXFx1MDAzZWRldiwgXFxcIlRhZyBwcm90b2NvbCBjYW5ub3QgYmUgbW9kaWZpZWRcXFxcblxcXCIpO1xcbi0tXFxubmV0L2RzYS9kc2EuYy0xMjI5LVxcdCAqIGRzYV9zd2l0Y2hfc2V0dXBfdGFnX3Byb3RvY29sIG9uY2UgLnNldHVwIGhhcyBydW4gYW5kIHRoZVxcbm5ldC9kc2EvZHNhLmM6MTIzMDpcXHQgKiBkcml2ZXIgaXMgcmVhZHkgdG8gYWNjZXB0IGNhbGxzIHRvIC5jaGFuZ2VfdGFnX3Byb3RvY29sLiBJZlxcbm5ldC9kc2EvZHNhLmMtMTIzMS1cXHQgKiB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGN1c3RvbSBwcm90b2NvbCBhdCB0aGF0XFxuLS1cXG5uZXQvZHNhL3N3aXRjaC5jPTg3Mz1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfY2hhbmdlX3RhZ19wcm90byhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuLS1cXG5uZXQvZHNhL3N3aXRjaC5jLTg3OS1cXG5uZXQvZHNhL3N3aXRjaC5jOjg4MDpcXHRpZiAoIWRzLVxcdTAwM2VvcHMtXFx1MDAzZWNoYW5nZV90YWdfcHJvdG9jb2wpXFxubmV0L2RzYS9zd2l0Y2guYy04ODEtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2RzYS9zd2l0Y2guYy04ODQtXFxubmV0L2RzYS9zd2l0Y2guYzo4ODU6XFx0ZXJyID0gZHMtXFx1MDAzZW9wcy1cXHUwMDNlY2hhbmdlX3RhZ19wcm90b2NvbChkcywgdGFnX29wcy1cXHUwMDNlcHJvdG8pO1xcbm5ldC9kc2Evc3dpdGNoLmMtODg2LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA3OjU2OjQzLjY1ODMwODk1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzk5MjMyNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCByZWZsZWN0aW9uLCBhcyBpZiBJJ20gdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBhbiBleHBlcnQ6XG5cbioqRHluYW1pYyBUYWcgUHJvdG9jb2wgaW4gRFNBOiBWZXJpZmljYXRpb24gUmVxdWlyZWQqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IERTQSDigJMgdGhlIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUuIFRoZSBkb2N1bWVudGF0aW9uIGNsZWFybHkgc3RhdGVzIHRoYXQgdGhlIGBjaGFuZ2VfdGFnX3Byb3RvY29sYCBzd2l0Y2ggb3BlcmF0aW9uIGFsbG93cyBmb3IgZHluYW1pY2FsbHkgbW9kaWZ5aW5nIHRoZSB0YWdnaW5nIHByb3RvY29sIGluIHVzZS4gVGhhdCdzIGEga2V5IGZlYXR1cmUsIGFuZCBpdCBvZmZlcnMgYSBsb3Qgb2YgZmxleGliaWxpdHkgaW4gdmFyaW91cyBuZXR3b3JraW5nIHNjZW5hcmlvcy5cblxuQnV0LCBob2xkIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBkcmlsbCBkb3duIGhlcmUuIE15IGV4cGVyaWVuY2UgaXMgdGhhdCBhIGZlYXR1cmUncyBhdmFpbGFiaWxpdHkgaXMgb25seSB0aGUgKnN0YXJ0KiBvZiB0aGUgc3RvcnkuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsIGRvZXMgdGhlICpzcGVjaWZpYyogRFNBIGRyaXZlciBJJ20gY29uc2lkZXJpbmcsIHNheSwgdGhlIGBkc2FfbG9vcGAgZHJpdmVyLCBhY3R1YWxseSBzdXBwb3J0IHRoaXMgYGNoYW5nZV90YWdfcHJvdG9jb2xgIGZlYXR1cmU/IEp1c3QgYmVjYXVzZSB0aGUgb3ZlcmFsbCBEU0EgYXJjaGl0ZWN0dXJlICphbGxvd3MqIGl0IGRvZXNuJ3QgYXV0b21hdGljYWxseSBtZWFuIGV2ZXJ5IHNpbmdsZSBkcml2ZXIgKmltcGxlbWVudHMqIGl0LiBJJ3ZlIGJlZW4gY2F1Z2h0IG91dCBieSB0aGVzZSBzb3J0cyBvZiBhc3N1bXB0aW9ucyBiZWZvcmUuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyJ3MgaW1wbGVtZW50YXRpb24gaXMgdHJ1bHkgY29tcGxpYW50IHdpdGggdGhhdCBhcmNoaXRlY3R1cmFsIGZlYXR1cmUuIEkgbmVlZCB0byBjaGVjayBpdHMgc291cmNlIGNvZGUsIG9yIGRvY3VtZW50YXRpb24sIG9yIHJ1biBzb21lIHRhcmdldGVkIHRlc3RpbmcgdG8gYmUgY2VydGFpbi4gT3RoZXJ3aXNlLCBJIG1pZ2h0IGJlIHNldHRpbmcgbXlzZWxmIHVwIGZvciB0cm91YmxlIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTkyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6NDguMDU3NTQ2MjQ5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDAzNTI3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhbmdlX3RhZ19wcm90b2NvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6NDguMTExNTk1MzY5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDM0MzkzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQWJzZW5jZSBvZiBGdW5jdGlvbmFsaXR5IGFuZCBDb25zaWRlcmluZyBBbHRlcm5hdGl2ZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBpbXByZXNzaW9uIGlzIGEgbmVnYXRpdmUgb25lLiBFc3NlbnRpYWxseSwgd2hhdGV2ZXIgc3lzdGVtIG9yIGZ1bmN0aW9uIEkgd2FzIGV4cGVjdGluZyB0byBmaW5kIGlzLi4uIG1pc3NpbmcuIEl0J3MgYSBub24tc3RhcnRlci4gVGhpcyBhYnNlbmNlIGlzIGEga2V5IGRhdGEgcG9pbnQ7IGl0IGhpZ2hsaWdodHMgYSBnYXAsIGVpdGhlciBpbiB0aGUgZGVzaWduLCB0aGUgaW1wbGVtZW50YXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gaW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgYXJjaGl0ZWN0dXJlLlxuXG5NeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHBvdGVudGlhbCB3b3JrYXJvdW5kcyBvciBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzLiBMZXQncyBzZWUuLi4gd2hhdCBhYm91dCB0aGUgcG9zc2liaWxpdHkgb2YgYSBgZHNhX21vY2tgPyBUaGUgZXhpc3RlbmNlIChvciBub24tZXhpc3RlbmNlKSBvZiBhIG1vY2sgZHJpdmVyIGJlY29tZXMgY3J1Y2lhbCBpbiBkZXRlcm1pbmluZyBob3cgYmVzdCB0byBwcm9jZWVkLiBJZiBvbmUgaXMgYXZhaWxhYmxlLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGdyZWF0bHksIGFsbG93aW5nIG1lIHRvIGlzb2xhdGUgYW5kIHRlc3QgZGlmZmVyZW50IGNvbXBvbmVudHMgd2l0aG91dCByZWx5aW5nIG9uIHRoZSBmdWxsIHN5c3RlbS4gSWYgaXQncyAqbm90KiBhdmFpbGFibGUsIHRoZW4gdGhhdCByYWlzZXMgYSB3aG9sZSBob3N0IG9mIGZ1cnRoZXIgcXVlc3Rpb25zIGFib3V0IHRlc3Rpbmcgc3RyYXRlZ3kgYW5kIGhvdyB0byBiZXN0IGNyZWF0ZSB0aGUgbmVjZXNzYXJ5IHRlc3QgZW52aXJvbm1lbnQuIFRoZSBtb2NrIGRyaXZlcidzIGFic2VuY2UgYWxzbyB0ZWxscyBtZSBhYm91dCB0aGUgc3lzdGVtJ3Mgb3ZlcmFsbCBsZXZlbCBvZiB0ZXN0YWJpbGl0eSBhbmQgdGhlIGRlZ3JlZSB0byB3aGljaCBpdCBtaWdodCBuZWVkIGZ1cnRoZXIgcmVmaW5lbWVudC4gVGhpcyBhYnNlbmNlIGFsc28gY2F1c2VzIG1lIHRvIHRoaW5rIGFib3V0IHdoZXJlIHN1Y2ggYSBtb2NrIG1pZ2h0IGZpdCwgYW5kIGlmIHN1Y2ggYSBtb2NrIGlzIGV2ZW4gcG9zc2libGUsIGdpdmVuIHRoZSBleGlzdGluZyBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTUzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDc6NTY6NTEuODU1MDM4MDY3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM1ODAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGFuZ2VfdGFnX3Byb3RvY29sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM9NjY0Nj1zdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIG12ODhlNnh4eF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTY2NTQtXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6NjY1NTpzdGF0aWMgaW50IG12ODhlNnh4eF9jaGFuZ2VfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjU2LVxcdFxcdFxcdFxcdFxcdCBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz03MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXY4OGU2eHh4X3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNzE4OC1cXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gbXY4OGU2eHh4X2dldF90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6NzE4OTpcXHQuY2hhbmdlX3RhZ19wcm90b2NvbFxcdD0gbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNzE5MC1cXHQuc2V0dXBcXHRcXHRcXHQ9IG12ODhlNnh4eF9zZXR1cCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz03MzI9ZmVsaXhfdGFnX3Byb3RvX3NldHVwX3NoYXJlZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtNzUzLSAqL1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzo3NTQ6c3RhdGljIGludCBmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtNzU1LVxcdFxcdFxcdFxcdCAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTE2OTY9c3RhdGljIGludCBmZWxpeF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMTc1MS1cXHQgKi9cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6MTc1MjpcXHRmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sKGRzLCBmZWxpeC1cXHUwMDNldGFnX3Byb3RvKTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMTc1My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz0yMzA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZmVsaXhfc3dpdGNoX29wcyA9IHtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwNy1cXHQuZ2V0X3RhZ19wcm90b2NvbFxcdFxcdD0gZmVsaXhfZ2V0X3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6MjMwODpcXHQuY2hhbmdlX3RhZ19wcm90b2NvbFxcdFxcdD0gZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwOS1cXHQuY29ubmVjdF90YWdfcHJvdG9jb2xcXHRcXHQ9IGZlbGl4X2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYz0yMzAzPXN0YXRpYyBpbnQgcnRsODM2NW1iX2NwdV9jb25maWcoc3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMjMzMS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jOjIzMzI6c3RhdGljIGludCBydGw4MzY1bWJfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0yMzMzLVxcdFxcdFxcdFxcdFxcdCBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jPTI2NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBydGw4MzY1bWJfc3dpdGNoX29wcyA9IHtcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jLTI2NjctXFx0LmdldF90YWdfcHJvdG9jb2wgPSBydGw4MzY1bWJfZ2V0X3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jOjI2Njg6XFx0LmNoYW5nZV90YWdfcHJvdG9jb2wgPSBydGw4MzY1bWJfY2hhbmdlX3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jLTI2NjktXFx0LnNldHVwID0gcnRsODM2NW1iX3NldHVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1Njo1MS45MDM0MDE5NjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzNTY4NzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFByb3RvY29sIFN1cHBvcnQgb2YgU3dpdGNoIENoaXBzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgc3dpdGNoIGRyaXZlciBsYW5kc2NhcGUgYW5kIHNlZWluZyB3aGVyZSB3ZSBzdGFuZCB3aXRoIFZMQU4gdGFnZ2luZyBwcm90b2NvbHMuIEkga25vdyB0aGF0IGNoaXBzIGxpa2UgdGhlIGBtdjg4ZTZ4eHhgLCBgZmVsaXhgLCBhbmQgYHJ0bDgzNjVtYmAgc2VyaWVzICpkbyogb2ZmZXIgdGhpcyBraW5kIG9mIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSG93ZXZlciwgdGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSBibGFua2V0IHN1cHBvcnQgZm9yIGV2ZXJ5IHRhZ2dpbmcgcHJvdG9jb2wgdW5kZXIgdGhlIHN1bi4gSXQncyBsb29raW5nIGxpa2UgdGhlaXIgaW1wbGVtZW50YXRpb25zIGFyZSBwcmV0dHkgc3BlY2lmaWMuXG5cbkZvciBpbnN0YW5jZSwgdGhlIGBmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sYCBmdW5jdGlvbiBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGF0IGl0cyBzdXBwb3J0IGlzIHByb2JhYmx5IGxpbWl0ZWQgdG8sIGxldCdzIHNheSwgYERTQV9UQUdfUFJPVE9fT0NFTE9UYCBhbmQgYERTQV9UQUdfUFJPVE9fT0NFTE9UXzgwMjFRYCBwcm90b2NvbHMuIEl0IHNlZW1zIGxpa2UgdGhlIHByb3RvY29sIGlzIHZlcnkgY2hpcC1kZXBlbmRlbnQuXG5cblRvIGdldCBhIGJldHRlciBwaWN0dXJlLCBJIG5lZWQgdG8gbG9vayBpbnRvIGBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbGAgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHByb3RvY29scyBlYWNoIG9mIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBhY3R1YWxseSBzdXBwb3J0cywgc28gSSBjYW4gc3RhcnQgdG8gYnVpbGQgYSBjbGVhcmVyLCBtb3JlIGNvbXBsZXRlIG1vZGVsIG9mIHRoZSBvcHRpb25zIGF2YWlsYWJsZSB0byBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwMDAsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1Njo1Ni4zMzkwOTIxMzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzMzNTQxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz02NjQ2PXN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXY4OGU2eHh4X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNjY1NC1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzo2NjU1OnN0YXRpYyBpbnQgbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTY2NTYtXFx0XFx0XFx0XFx0XFx0IGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTcxODc9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdjg4ZTZ4eHhfc3dpdGNoX29wcyA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy03MTg4LVxcdC5nZXRfdGFnX3Byb3RvY29sXFx0PSBtdjg4ZTZ4eHhfZ2V0X3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzo3MTg5OlxcdC5jaGFuZ2VfdGFnX3Byb3RvY29sXFx0PSBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy03MTkwLVxcdC5zZXR1cFxcdFxcdFxcdD0gbXY4OGU2eHh4X3NldHVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1Njo1Ni43NTI0MzM1MDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQyMzg3MTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4gbmV0d29ya2luZyBhbmQga2VybmVsIGRldmVsb3BtZW50OlxuXG4qKkFuYWx5emluZyB0aGUgYG12ODhlNnh4eF9jaGFuZ2VfdGFnX3Byb3RvY29sYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRoZSBuZXh0IHRhc2sgaXMgdG8gZGl2ZSBpbnRvIGBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbGAuIFNvdW5kcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgTWFydmVsbCA4OEU2eHh4IHNlcmllcyBvZiBFdGhlcm5ldCBzd2l0Y2hlcyDigJMgYW5kIHNwZWNpZmljYWxseSwgaG93IHRoZXkgaGFuZGxlIHRhZ2dlZCBFdGhlcm5ldCBmcmFtZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSB3YXkgdGhlIHN3aXRjaCBpbnRlcnByZXRzIG9yIGhhbmRsZXMgdGhlIHRhZ2dpbmcgcHJvdG9jb2wuXG5cbkltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2hhdCBraW5kIG9mIHRhZ2dpbmcgcHJvdG9jb2xzIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBWTEFOIHRhZ3MgKDgwMi4xUSk/IFByb3ZpZGVyIEJyaWRnZSB0YWdzICg4MDIuMWFkKT8gTWF5YmUgc29tZSBwcm9wcmlldGFyeSBNYXJ2ZWxsIGV4dGVuc2lvbnM/IFRoZSBmdW5jdGlvbidzIHB1cnBvc2Ugc2hvdWxkIGJlIHByZXR0eSBjcml0aWNhbCBpbiBhIGxvdCBvZiBuZXR3b3JraW5nIHNjZW5hcmlvcy5cblxuSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwYXNzZWQgaW4/IEEgZGV2aWNlIHN0cnVjdHVyZSBsaWtlbHksIGFuZCBhbG1vc3QgY2VydGFpbmx5IGEgcG9pbnRlciB0byBzb21lIHNvcnQgb2YgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGUgc3dpdGNoJ3MgcG9ydCBzZXR0aW5ncy4gSSBleHBlY3QgdG8gc2VlIHJlZ2lzdGVyIHdyaXRlcyBpbnZvbHZlZCwgbGlrZWx5IHRvIHRoZSBzd2l0Y2gncyBpbnRlcm5hbCByZWdpc3RlcnMgdGhhdCBjb250cm9sIHRoZSB0YWdnaW5nIHNldHRpbmdzLiBUaGUgZnVuY3Rpb24gY291bGQgYWxzbyBiZSBoYW5kbGluZyB0aGUgaW50ZXJhY3Rpb24gd2l0aCBhbnkgTUlJL01ESU8gaW50ZXJmYWNlIHRoYXQncyBpbnZvbHZlZC5cblxuSSdsbCBrZWVwIGEgY2xvc2UgZXllIG91dCBmb3IgYW55IGVycm9yIGhhbmRsaW5nLiBJcyB0aGlzIGZ1bmN0aW9uIHJvYnVzdD8gRG9lcyBpdCBjaGVjayBmb3IgdmFsaWQgcHJvdG9jb2wgSURzIG9yIHBhcmFtZXRlciByYW5nZXM/IEFyZSB0aGVyZSBjaGVja3MgZm9yIGhhcmR3YXJlIGxpbWl0YXRpb25zPyBBIG1pc2NvbmZpZ3VyYXRpb24gaGVyZSBjb3VsZCBlYXNpbHkgY3JlYXRlIGludGVybWl0dGVudCBjb25uZWN0aXZpdHkgaXNzdWVzLCBvciBldmVuIGEgZnVsbCBuZXR3b3JrIG91dGFnZS5cblxuVWx0aW1hdGVseSwgSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgKmhvdyogdGhlIHRhZ2dpbmcgcHJvdG9jb2wgaXMgYmVpbmcgY2hhbmdlZC4gSXMgaXQganVzdCB0aGUgYWRkaXRpb24gb2YgYSBuZXcgVkxBTiBJRCBvciBpcyBpdCBjaGFuZ2luZyB0aGUgZW50aXJlIHRhZ2dpbmcgc2NoZW1lIGZvciB0aGUgcG9ydD8gQWZ0ZXIgdGhhdCwgSSB3aWxsIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBzd2l0Y2ggZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTczOSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA3OjU3OjAyLjE3NjMwODU3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODcxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjY1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjY1NTpcXHRzdGF0aWMgaW50IG12ODhlNnh4eF9jaGFuZ2VfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG42NjU2OlxcdFxcdFxcdFxcdFxcdFxcdCBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuNjY1NzpcXHR7XFxuNjY1ODpcXHRcXHRzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAgPSBkcy1cXHUwMDNlcHJpdjtcXG42NjU5OlxcdFxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBvbGRfcHJvdG9jb2w7XFxuNjY2MDpcXHRcXHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDtcXG42NjYxOlxcdFxcdGludCBlcnI7XFxuNjY2MjpcXHRcXG42NjYzOlxcdFxcdHN3aXRjaCAocHJvdG8pIHtcXG42NjY0OlxcdFxcdGNhc2UgRFNBX1RBR19QUk9UT19FRFNBOlxcbjY2NjU6XFx0XFx0XFx0c3dpdGNoIChjaGlwLVxcdTAwM2VpbmZvLVxcdTAwM2VlZHNhX3N1cHBvcnQpIHtcXG42NjY2OlxcdFxcdFxcdGNhc2UgTVY4OEU2WFhYX0VEU0FfVU5TVVBQT1JURUQ6XFxuNjY2NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG42NjY4OlxcdFxcdFxcdGNhc2UgTVY4OEU2WFhYX0VEU0FfVU5ET0NVTUVOVEVEOlxcbjY2Njk6XFx0XFx0XFx0XFx0ZGV2X3dhcm4oY2hpcC1cXHUwMDNlZGV2LCBcXFwiUmVseWluZyBvbiB1bmRvY3VtZW50ZWQgRURTQSB0YWdnaW5nIGJlaGF2aW9yXFxcXG5cXFwiKTtcXG42NjcwOlxcdFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbjY2NzE6XFx0XFx0XFx0Y2FzZSBNVjg4RTZYWFhfRURTQV9TVVBQT1JURUQ6XFxuNjY3MjpcXHRcXHRcXHRcXHRicmVhaztcXG42NjczOlxcdFxcdFxcdH1cXG42Njc0OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NzowMi4xNzY1OTc1MzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5Mjk5MDg5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBQYXRoczogTlhQIE5FVEMgRHJpdmVyIGFuZCBUYWdnZXIqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBpbiBxdWVzdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIE5YUCBORVRDIGRyaXZlciBhbmQgYHRhZ19uZXRjLmNgLCByZWxpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgcHJvdG9jb2xzLCBzcGVjaWZpY2FsbHkgdGhlIE5YUCBORVRDIFBDSSBoYXJkd2FyZS4gVGhlcmUncyBubyB3YXkgdG8gcmVhY2ggYHRhZ19uZXRjLmNgIGRpcmVjdGx5IHdpdGhvdXQgdGhhdCBoYXJkd2FyZSwgYW5kIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBub3QgdmlhIGFueSBzdGFuZGFyZCB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIHRyaWNrcyBvciBwYWNrZXQgaW5qZWN0aW9uLiBTeXprYWxsZXIgaXMgb3V0LCBhcyBgdGFnX25ldGMuY2AgaXMgbGlua2VkIHRvIGEgbmV0d29yayBpbnRlcmZhY2Ugb25seSBpZiB0aGUgRFNBIHN3aXRjaCB1c2luZyBgbmV0Y19tYWluLmNgIGlzIGNvbmZpZ3VyZWQsIHdoaWNoIGluIHR1cm4gZGVtYW5kcyB0aGlzIE5YUCBORVRDIFBDSSBoYXJkd2FyZS5cblxuSSB3YXMgaG9waW5nIG1heWJlIGEgRFNBIHN3aXRjaCBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgZGlmZmVyZW50bHksIGJ1dCBpdCBsb29rcyBsaWtlIGRyaXZlcnMgY2FsbCBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgdG8gZG8gc28sIGFuZCBgbmV0Y19tYWluLmNgIGlzIHRoZSBzb2xlIGRyaXZlciByZXR1cm5pbmcgYERTQV9UQUdfUFJPVE9fTkVUQ2AuICBUaGlzIGNvbmZpcm1zIGB0YWdfbmV0Yy5jYCBhbmQgYnkgZXh0ZW5zaW9uLCB0aGUgdXBkYXRlZCBjb2RlIGFyZSBkZXBlbmRlbnQgb24gdGhhdCBwaHlzaWNhbCBoYXJkd2FyZS5cblxuSSBjaGVja2VkIGZvciBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLCBsaWtlIGBkc2FfbG9vcGAgb3IgYGRzYV9tb2NrYC4gYGRzYV9sb29wYCBpcyB0aGVyZSwgYnV0IHVzZXMgYERTQV9UQUdfUFJPVE9fTk9ORWAuICBgZHNhX2xvb3BfYmRpbmZvYCByZWdpc3RlcnMgYGRzYV9sb29wYCwgYnV0IHRoYXQncyBub3QgaGVscGluZy4gQmFzaWNhbGx5LCB1bmxlc3MgdGhlcmUncyBleHBsaWNpdCB2aXJ0dWFsIGRyaXZlciBzdXBwb3J0IGZvciB0aGlzIHNwZWNpZmljIHRhZ2dlciwgaXQncyB1bnJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS5cblxuR2l2ZW4gdGhlIHByb21wdCdzIGNyaXRlcmlhOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSxcIiBJIGhhdmUgdG8gY29uY2x1ZGUgdGhhdCB0aGUgTlhQIE5FVEMgc3dpdGNoIGZpdHMgdGhhdCBkZXNjcmlwdGlvbi4gSXQncyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGUgZHJpdmVyIGl0c2VsZiwgdGhlIFBUUCBzdXBwb3J0IGFkZGVkIGluIHRoZSBwYXRjaCwgYW5kIHRoZSBhc3NvY2lhdGVkIHRhZ2dlciwgYXJlIGFsbCB1bnJlYWNoYWJsZSB3aXRob3V0IHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUuXG5cbkkndmUgdmVyaWZpZWQgdGhhdCBgbmV0Y19tYWluLmNgIHV0aWxpemVzIGBtb2R1bGVfcGNpX2RyaXZlcihuZXRjX3N3aXRjaF9kcml2ZXIpYCwgYW5kIGl0cyB2ZW5kb3IgSUQgKDB4MTEzMSwgTlhQKSBhbmQgZGV2aWNlIElEICgweGVlZjIpIGNvbmZpcm0gaXQncyBhIHBoeXNpY2FsIGhhcmR3YXJlIGNvbXBvbmVudC4gVGhlIFBUUCBzdXBwb3J0LCB0aGVyZWZvcmUsIGlzIGVxdWFsbHkgaW5hY2Nlc3NpYmxlLiBJIHdhcyBjb25zaWRlcmluZyBvdGhlciB3YXlzIHRvIHBvc3NpYmx5IGFjdGl2YXRlIGB0YWdfbmV0Yy5jYCB0aHJvdWdoIERTQSByb3V0aW5nIHJ1bGVzIG9yIHRyYWZmaWMgY29udHJvbCAodGMpIC8gQlBGLCBidXQgYHRhZ19uZXRjLmNgIGlzIHRpZWQgdG8gdGhlIGBkc2FfZGV2aWNlX29wc2Agc3RydWN0IHJlZ2lzdGVyZWQgdmlhIGBtb2R1bGVfZHNhX3RhZ19kcml2ZXJgLiBJdCdzIHNlbGVjdGVkIG9ubHkgd2hlbiB0aGUgRFNBIHN3aXRjaCBpcyBzZXR1cCwgYW5kIG9ubHkgaWYgdGhlIHN3aXRjaCwgdGhyb3VnaCBpdHMgYGdldF90YWdfcHJvdG9jb2xgIG9yIGBjaGFuZ2VfdGFnX3Byb3RvY29sYCBvcHMsIHJlcXVlc3RzIGBEU0FfVEFHX1BST1RPX05FVENgLCB3aGljaCBubyB2aXJ0dWFsIHN3aXRjaCBkb2VzLlxuXG5UaGVyZWZvcmUsIHRoZSBlbnRpcmUgcGF0Y2gncyBjb2RlIHBhdGhzIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBNeSByZWFzb25pbmcgbGVhZHMgbWUgdG8gYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUyOCwiT3V0cHV0VG9rZW5zIjoxMTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNzo1NzoxNS4xMDY1MDk2MDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBzdXBwb3J0IHRvIHRoZSBOWFAgTkVUQyBzd2l0Y2ggZHJpdmVyIGFuZCBpdHMgYXNzb2NpYXRlZCBEU0EgdGFnZ2VyLiBUaGUgTkVUQyBzd2l0Y2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBkZXZpY2UgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyByZXF1aXJlZCB0byBwcm9iZSB0aGUgZHJpdmVyIGFuZCBpbnN0YW50aWF0ZSB0aGUgRFNBIHN3aXRjaCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW4gYm90aCB0aGUgZHJpdmVyIGFuZCB0aGUgdGFnZ2VyIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBzdXBwb3J0IHRvIHRoZSBOWFAgTkVUQyBzd2l0Y2ggZHJpdmVyIGFuZCBpdHMgYXNzb2NpYXRlZCBEU0EgdGFnZ2VyLiBUaGUgTkVUQyBzd2l0Y2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBoYXJkd2FyZSBkZXZpY2UgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyByZXF1aXJlZCB0byBwcm9iZSB0aGUgZHJpdmVyIGFuZCBpbnN0YW50aWF0ZSB0aGUgRFNBIHN3aXRjaCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW4gYm90aCB0aGUgZHJpdmVyIGFuZCB0aGUgdGFnZ2VyIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsbzhz[1] Phase: Running StartedAt: 2026-07-29 07:57:39 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsbzhz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-29 07:57:39 +0000 UTC FinishedAt: 2026-07-29 07:57:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}