Name: series-workflowtqbhz Phase: Failed StartedAt: 2026-07-15 00:20:46 +0000 UTC FinishedAt: 2026-07-15 00:51:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqbhz[0] Phase: Succeeded StartedAt: 2026-07-15 00:20:46 +0000 UTC FinishedAt: 2026-07-15 00:50:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqbhz[0].run-triage Phase: Succeeded StartedAt: 2026-07-15 00:20:46 +0000 UTC FinishedAt: 2026-07-15 00:50:08 +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+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY29udGFpbnMgc3RydWN0dXJhbCByZWFycmFuZ2VtZW50cyBvZiBmaWVsZHMgaW4gaW5jbHVkZS9saW51eC9kYW1vbi5oLCBhZGRzIGNvbW1lbnRzLCBhbmQgcmVwbGFjZXMgYSBkaXJlY3QgZW51bSBjb21wYXJpc29uIHdpdGggYW4gZXF1aXZhbGVudCBoZWxwZXIgZnVuY3Rpb24gKGRhbW9uX3RhcmdldF9oYXNfcGlkKSBpbiBtbS9kYW1vbi9zeXNmcy5jLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhZDA5NTdkZGM2YmI0MGY4OGYyMjAwMjcwZmMwMTEyOTI5YzYxM2I4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMDA6NDk6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCBmNjk0NDJhOWQ0MzEyOC4uMzI3ZjUzNDY5NmFhODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTQ2LDcgJiM0Mzs0Niw2IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHtcbiAgKiBAc2FtcGxpbmdfYWRkcjpcdEFkZHJlc3Mgb2YgdGhlIHNhbXBsZSBmb3IgdGhlIG5leHQgYWNjZXNzIGNoZWNrLlxuICAqIEBucl9hY2Nlc3NlczpcdEFjY2VzcyBmcmVxdWVuY3kgb2YgdGhpcyByZWdpb24uXG4gICogQHByb2JlX2hpdHM6XHRcdE51bWJlciBvZiBwcm9iZS1wb3NpdGl2ZSByZWdpb24gc2FtcGxlcy5cbi0gKiBAbGlzdDpcdFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKiBAYWdlOlx0XHRBZ2Ugb2YgdGhpcyByZWdpb24uXG4gICpcbiAgKiBGb3IgYW55IHVzZSBjYXNlLCBAYXIgc2hvdWxkIGJlIG5vbi16ZXJvIHBvc2l0aXZlIHNpemUuICBkYW1vbl9zZXRfcmVnaW9ucygpXG5AQCAtNjgsOSAmIzQzOzY3LDExIEBAIHN0cnVjdCBkYW1vbl9yZWdpb24ge1xuIFx0dW5zaWduZWQgbG9uZyBzYW1wbGluZ19hZGRyO1xuIFx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzO1xuIFx0dW5zaWduZWQgY2hhciBwcm9iZV9oaXRzW0RBTU9OX01BWF9QUk9CRVNdO1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIFx0dW5zaWduZWQgaW50IGFnZTtcbi0vKiBwcml2YXRlOiBJbnRlcm5hbCB2YWx1ZSBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqL1xuJiM0MzsvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seS4gKi9cbiYjNDM7XHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiYjNDM7XHQvKiBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqL1xuIFx0dW5zaWduZWQgaW50IGxhc3RfbnJfYWNjZXNzZXM7XG4gXHR1bnNpZ25lZCBjaGFyIGxhc3RfcHJvYmVfaGl0c1tEQU1PTl9NQVhfUFJPQkVTXTtcbiB9O1xuQEAgLTc4LDkgJiM0Mzs3OSw2IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24ge1xuIC8qKlxuICAqIHN0cnVjdCBkYW1vbl90YXJnZXQgLSBSZXByZXNlbnRzIGEgbW9uaXRvcmluZyB0YXJnZXQuXG4gICogQHBpZDpcdFx0VGhlIFBJRCBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRvIG1vbml0b3IuXG4tICogQG5yX3JlZ2lvbnM6XHRcdE51bWJlciBvZiBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LlxuLSAqIEByZWdpb25zX2xpc3Q6XHRIZWFkIG9mIHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqIEBvYnNvbGV0ZTpcdFx0V2hldGhlciB0aGUgY29tbWl0IGRlc3RpbmF0aW9uIHRhcmdldCBpcyBvYnNvbGV0ZS5cbiAgKlxuICAqIEVhY2ggbW9uaXRvcmluZyBjb250ZXh0IGNvdWxkIGhhdmUgbXVsdGlwbGUgdGFyZ2V0cy4gIEZvciBleGFtcGxlLCBhIGNvbnRleHRcbkBAIC05NCwxMCAmIzQzOzkyLDE0IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24ge1xuICAqL1xuIHN0cnVjdCBkYW1vbl90YXJnZXQge1xuIFx0c3RydWN0IHBpZCAqcGlkO1xuJiM0MztcdGJvb2wgb2Jzb2xldGU7XG4mIzQzOy8qIHByaXZhdGU6ICovXG4mIzQzO1x0LyogTnVtYmVyIG9mIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuICovXG4gXHR1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucztcbiYjNDM7XHQvKiBIZWFkIG9mIHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCByZWdpb25zX2xpc3Q7XG4mIzQzO1x0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi1cdGJvb2wgb2Jzb2xldGU7XG4gfTtcbiBcbiAvKipcbkBAIC0xNzMsMTAgJiM0MzsxNzUsOCBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcbiAgKiBAbWV0cmljOlx0XHRNZXRyaWMgdG8gYmUgdXNlZCBmb3IgcmVwcmVzZW50aW5nIHRoZSBnb2FsLlxuICAqIEB0YXJnZXRfdmFsdWU6XHRUYXJnZXQgdmFsdWUgb2YgQG1ldHJpYyB0byBhY2hpZXZlIHdpdGggdGhlIHR1bmluZy5cbiAgKiBAY3VycmVudF92YWx1ZTpcdEN1cnJlbnQgdmFsdWUgb2YgQG1ldHJpYy5cbi0gKiBAbGFzdF9wc2lfdG90YWw6XHRMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSVxuICAqIEBuaWQ6XHRcdE5vZGUgaWQuXG4gICogQG1lbWNnX2lkOlx0XHRNZW1jZyBpZC5cbi0gKiBAbGlzdDpcdFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKlxuICAqIERhdGEgc3RydWN0dXJlIGZvciBnZXR0aW5nIHRoZSBjdXJyZW50IHNjb3JlIG9mIHRoZSBxdW90YSB0dW5pbmcgZ29hbC4gIFRoZVxuICAqIHNjb3JlIGlzIGNhbGN1bGF0ZWQgYnkgaG93IGNsb3NlIEBjdXJyZW50X3ZhbHVlIGFuZCBAdGFyZ2V0X3ZhbHVlIGFyZS4gIFRoZW5cbkBAIC0xOTksMTIgJiM0MzsxOTksMTcgQEAgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xuIFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xuIFx0LyogbWV0cmljLWRlcGVuZGVudCBmaWVsZHMgKi9cbiBcdHVuaW9uIHtcbi1cdFx0dTY0IGxhc3RfcHNpX3RvdGFsO1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdGludCBuaWQ7XG4gXHRcdFx0dTY0IG1lbWNnX2lkO1xuIFx0XHR9O1xuJiM0MzsvKiBwcml2YXRlOiAqL1xuJiM0MztcdFx0LyogTGFzdCBtZWFzdXJlZCB0b3RhbCBQU0kgKi9cbiYjNDM7XHRcdHU2NCBsYXN0X3BzaV90b3RhbDtcbiYjNDM7XG4gXHR9O1xuJiM0MzsvKiBwcml2YXRlOiAqL1xuJiM0MztcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbiBcbkBAIC0yMjMsNyAmIzQzOzIyOCw2IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XG4gICogQHJlc2V0X2ludGVydmFsOlx0Q2hhcmdlIHJlc2V0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cbiAgKiBAbXM6XHRcdFx0TWF4aW11bSBtaWxsaXNlY29uZHMgdGhhdCB0aGUgc2NoZW1lIGNhbiB1c2UuXG4gICogQHN6Olx0XHRcdE1heGltdW0gYnl0ZXMgb2YgbWVtb3J5IHRoYXQgdGhlIGFjdGlvbiBjYW4gYmUgYXBwbGllZC5cbi0gKiBAZ29hbHM6XHRcdEhlYWQgb2YgcXVvdGEgdHVuaW5nIGdvYWxzIChcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LlxuICAqIEBnb2FsX3R1bmVyOlx0XHRHb2FsLWJhc2VkIEBlc3ogdHVuaW5nIGFsZ29yaXRobSB0byB1c2UuXG4gICogQGVzejpcdFx0RWZmZWN0aXZlIHNpemUgcXVvdGEgaW4gYnl0ZXMuXG4gICogQGZhaWxfY2hhcmdlX251bTpcdEZhaWxlZCByZWdpb25zIGNoYXJnZSByYXRlIG51bWVyYXRvci5cbkBAIC0yNTAsNyAmIzQzOzI1NCw3IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XG4gICogdGhlIHNjaGVtZSYjMzk7cyBhY3Rpb24uICBEQU1PTiB0aGVuIGNvbXBhcmVzIGl0IGFnYWluc3QgXHUwMDI2c3ogYW5kIHVzZXMgc21hbGxlclxuICAqIG9uZSBhcyB0aGUgZWZmZWN0aXZlIHF1b3RhLlxuICAqXG4tICogSWYgQGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZVxuJiM0MzsgKiBJZiBnb2FscyBpcyBub3QgZW1wdHksIERBTU9OIGNhbGN1bGF0ZXMgeWV0IGFub3RoZXIgc2l6ZSBxdW90YSBiYXNlZCBvbiB0aGVcbiAgKiBnb2FscyB1c2luZyBpdHMgaW50ZXJuYWwgZmVlZGJhY2sgbG9vcCBhbGdvcml0aG0sIGZvciBldmVyeSBAcmVzZXRfaW50ZXJ2YWwuXG4gICogVGhlbiwgaWYgdGhlIG5ldyBzaXplIHF1b3RhIGlzIHNtYWxsZXIgdGhhbiB0aGUgZWZmZWN0aXZlIHF1b3RhLCBpdCB1c2VzIHRoZVxuICAqIG5ldyBzaXplIHF1b3RhIGFzIHRoZSBlZmZlY3RpdmUgcXVvdGEuXG5AQCAtMjcxLDcgJiM0MzsyNzUsNyBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGEge1xuIFx0dW5zaWduZWQgbG9uZyByZXNldF9pbnRlcnZhbDtcbiBcdHVuc2lnbmVkIGxvbmcgbXM7XG4gXHR1bnNpZ25lZCBsb25nIHN6O1xuLVx0c3RydWN0IGxpc3RfaGVhZCBnb2FscztcbiYjNDM7XG4gXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgZ29hbF90dW5lcjtcbiBcdHVuc2lnbmVkIGxvbmcgZXN6O1xuIFxuQEAgLTI4Myw2ICYjNDM7Mjg3LDggQEAgc3RydWN0IGRhbW9zX3F1b3RhIHtcbiBcdHVuc2lnbmVkIGludCB3ZWlnaHRfYWdlO1xuIFxuIC8qIHByaXZhdGU6ICovXG4mIzQzO1x0LyogSGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFx1MDAyNmRhbW9zX3F1b3RhX2dvYWwpIGxpc3QuICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBnb2FscztcbiBcdC8qIEZvciB0aHJvdWdocHV0IGVzdGltYXRpb24gKi9cbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9zejtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9ucztcbkBAIC00MjYsNyAmIzQzOzQzMiw2IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuICAqXHRcdFx1MDAyNmRhbW9uX2N0eC1cdTAwM2VhZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzXG4gICpcdFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULlxuICAqIEBzel9yYW5nZTpcdFNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS5cbi0gKiBAbGlzdDpcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXG4gICpcbiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlIFx1MDAyNmRhbW9zLVx1MDAzZWFjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIERBTU9TIGNoZWNrcyBpZiBlYWNoXG4gICogYnl0ZSBvZiB0aGUgcmVnaW9uIG1hdGNoZXMgdG8gdGhpcyBnaXZlbiBjb25kaXRpb24gYW5kIGF2b2lkIGFwcGx5aW5nIHRoZVxuQEAgLTQ0NCw2ICYjNDM7NDQ5LDggQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7XG4gXHRcdGludCB0YXJnZXRfaWR4O1xuIFx0XHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcbiBcdH07XG4mIzQzOy8qIHByaXZhdGU6ICovXG4mIzQzO1x0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiB9O1xuIFxuQEAgLTUxNSwxMiAmIzQzOzUyMiw4IEBAIHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIHtcbiAgKiBAd21hcmtzOlx0XHRXYXRlcm1hcmtzIGZvciBhdXRvbWF0ZWQgKGluKWFjdGl2YXRpb24gb2YgdGhpcyBzY2hlbWUuXG4gICogQG1pZ3JhdGVfZGVzdHM6XHREZXN0aW5hdGlvbiBub2RlcyBpZiBAYWN0aW9uIGlzIFwmIzM0O21pZ3JhdGVfe2hvdCxjb2xkfVwmIzM0Oy5cbiAgKiBAdGFyZ2V0X25pZDpcdFx0RGVzdGluYXRpb24gbm9kZSBpZiBAYWN0aW9uIGlzIFwmIzM0O21pZ3JhdGVfe2hvdCxjb2xkfVwmIzM0Oy5cbi0gKiBAY29yZV9maWx0ZXJzOlx0QWRkaXRpb25hbCBzZXQgb2YgXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlciBmb3IgXHUwMDI2YWN0aW9uLlxuLSAqIEBvcHNfZmlsdGVyczpcdG9wcyBsYXllciBoYW5kbGluZyBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIG9iamVjdHMgbGlzdC5cbi0gKiBAbGFzdF9hcHBsaWVkOlx0TGFzdCBAYWN0aW9uIGFwcGxpZWQgb3BzLW1hbmFnaW5nIGVudGl0eS5cbiAgKiBAc3RhdDpcdFx0U3RhdGlzdGljcyBvZiB0aGlzIHNjaGVtZS5cbiAgKiBAbWF4X25yX3NuYXBzaG90czpcdFVwcGVyIGxpbWl0IG9mIG5yX3NuYXBzaG90cyBzdGF0LlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqXG4gICogRm9yIGVhY2ggQGFwcGx5X2ludGVydmFsX3VzLCBEQU1PTiBmaW5kcyByZWdpb25zIHdoaWNoIGZpdCBpbiB0aGVcbiAgKiBcdTAwMjZwYXR0ZXJuIGFuZCBhcHBsaWVzIFx1MDAyNmFjdGlvbiB0byB0aG9zZS4gVG8gYXZvaWQgY29uc3VtaW5nIHRvbyBtdWNoXG5AQCAtNTQyLDE2ICYjNDM7NTQ1LDcgQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xuICAqXG4gICogQmVmb3JlIGFwcGx5aW5nIHRoZSBcdTAwMjZhY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9uc1xuICAqIGltcGxlbWVudGF0aW9uIGNvdWxkIGNoZWNrIHBhZ2VzIG9mIHRoZSByZWdpb24gYW5kIHNraXAgXHUwMDI2YWN0aW9uIHRvIHJlc3BlY3Rcbi0gKiBcdTAwMjZjb3JlX2ZpbHRlcnNcbi0gKlxuLSAqIFRoZSBtaW5pbXVtIGVudGl0eSB0aGF0IEBhY3Rpb24gY2FuIGJlIGFwcGxpZWQgZGVwZW5kcyBvbiB0aGUgdW5kZXJseWluZ1xuLSAqIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkIHdpdGggdGhlIGNvcmUgbGF5ZXJcbi0gKiBhYnN0cmFjdCwgbmFtZWx5IFx1MDAyNnN0cnVjdCBkYW1vbl9yZWdpb24sIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5XG4tICogQGFjdGlvbiB0byBzYW1lIGVudGl0eSBtdWx0aXBsZSB0aW1lcy4gIExhcmdlIGZvbGlvcyB0aGF0IHVuZGVybHlpbmcgb25cbi0gKiBtdWx0aXBsZSBcdTAwMjZzdHJ1Y3QgZGFtb24gcmVnaW9uIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSBcdTAwMjZzdHJ1Y3Rcbi0gKiBkYW1vbl9vcGVyYXRpb25zIGNhbiB1c2UgQGxhc3RfYXBwbGllZCB0byBhdm9pZCB0aGF0LiAgREFNT1MgY29yZSBsb2dpY1xuLSAqIHVuc2V0cyBAbGFzdF9hcHBsaWVkIHdoZW4gZWFjaCByZWdpb25zIHdhbGtpbmcgZm9yIGFwcGx5aW5nIHRoZSBzY2hlbWUgaXNcbi0gKiBmaW5pc2hlZC5cbiYjNDM7ICogXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlci5cbiAgKlxuICAqIEFmdGVyIGFwcGx5aW5nIHRoZSBcdTAwMjZhY3Rpb24gdG8gZWFjaCByZWdpb24sIFx1MDAyNnN0YXQgaXMgdXBkYXRlZC5cbiAgKlxuQEAgLTU2Miw2ICYjNDM7NTU2LDE2IEBAIHN0cnVjdCBkYW1vcyB7XG4gXHRzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gcGF0dGVybjtcbiBcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbjtcbiBcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXM7XG4mIzQzO1x0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhO1xuJiM0MztcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcztcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRpbnQgdGFyZ2V0X25pZDtcbiYjNDM7XHRcdFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0cztcbiYjNDM7XHRcdH07XG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgZGFtb3Nfc3RhdCBzdGF0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbWF4X25yX3NuYXBzaG90cztcbiAvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seSAqL1xuIFx0LypcbiBcdCAqIG51bWJlciBvZiBzYW1wbGUgaW50ZXJ2YWxzIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBiZWZvcmUgYXBwbHlpbmdcbkBAIC01NzgsMjAgJiM0Mzs1ODIsMjUgQEAgc3RydWN0IGRhbW9zIHtcbiBcdC8qIHdoZXRoZXIgdG8gcmVqZWN0IGNvcmUvb3BzIGZpbHRlcnMgdW1hdGNoZWQgcmVnaW9ucyAqL1xuIFx0Ym9vbCBjb3JlX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Q7XG4gXHRib29sIG9wc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0O1xuLS8qIHB1YmxpYzogKi9cbi1cdHN0cnVjdCBkYW1vc19xdW90YSBxdW90YTtcbi1cdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcztcbi1cdHVuaW9uIHtcbi1cdFx0c3RydWN0IHtcbi1cdFx0XHRpbnQgdGFyZ2V0X25pZDtcbi1cdFx0XHRzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyBtaWdyYXRlX2Rlc3RzO1xuLVx0XHR9O1xuLVx0fTtcbiYjNDM7XHQvKiBBZGRpdGlvbmFsIHNldCBvZiBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIGZvciBcdTAwMjZhY3Rpb24uICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGNvcmVfZmlsdGVycztcbiYjNDM7XHQvKiBvcHMgbGF5ZXIgaGFuZGxpbmcgXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlciBvYmplY3RzIGxpc3QuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG9wc19maWx0ZXJzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTGFzdCBAYWN0aW9uIGFwcGxpZWQgb3BzLW1hbmFnaW5nIGVudGl0eS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBtaW5pbXVtIGVudGl0eSB0aGF0IEBhY3Rpb24gY2FuIGJlIGFwcGxpZWQgZGVwZW5kcyBvbiB0aGVcbiYjNDM7XHQgKiB1bmRlcmx5aW5nIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkXG4mIzQzO1x0ICogd2l0aCB0aGUgY29yZSBsYXllciBhYnN0cmFjdCwgbmFtZWx5IFx1MDAyNnN0cnVjdCBkYW1vbl9yZWdpb24sIFx1MDAyNnN0cnVjdFxuJiM0MztcdCAqIGRhbW9uX29wZXJhdGlvbnMgY291bGQgYXBwbHkgQGFjdGlvbiB0byBzYW1lIGVudGl0eSBtdWx0aXBsZSB0aW1lcy5cbiYjNDM7XHQgKiBMYXJnZSBmb2xpb3MgdGhhdCB1bmRlcmx5aW5nIG9uIG11bHRpcGxlIFx1MDAyNnN0cnVjdCBkYW1vbiByZWdpb25cbiYjNDM7XHQgKiBvYmplY3RzIGNvdWxkIGJlIHN1Y2ggZXhhbXBsZXMuICBUaGUgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgY2FuXG4mIzQzO1x0ICogdXNlIEBsYXN0X2FwcGxpZWQgdG8gYXZvaWQgdGhhdC4gIERBTU9TIGNvcmUgbG9naWMgdW5zZXRzXG4mIzQzO1x0ICogQGxhc3RfYXBwbGllZCB3aGVuIGVhY2ggcmVnaW9ucyB3YWxraW5nIGZvciBhcHBseWluZyB0aGUgc2NoZW1lIGlzXG4mIzQzO1x0ICogZmluaXNoZWQuXG4mIzQzO1x0ICovXG4gXHR2b2lkICpsYXN0X2FwcGxpZWQ7XG4tXHRzdHJ1Y3QgZGFtb3Nfc3RhdCBzdGF0O1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzO1xuJiM0MztcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbiBcbkBAIC03NDksNyAmIzQzOzc1OCw2IEBAIGVudW0gZGFtb25fZmlsdGVyX3R5cGUge1xuICAqIEBtYXRjaGluZzpcdFdoZXRoZXIgdGhpcyBmaWx0ZXIgaXMgZm9yIHRoZSB0eXBlLW1hdGNoaW5nIG9uZXMuXG4gICogQGFsbG93Olx0V2hldGhlciB0aGUgQHR5cGUtQG1hdGNoaW5nIG9uZXMgc2hvdWxkIHBhc3MgdGhpcyBmaWx0ZXIuXG4gICogQG1lbWNnX2lkOlx0TWVtY2cgaWQgb2YgdGhlIHF1ZXN0aW9uIGlmIEB0eXBlIGlzIERBTU9OX0ZJTFRFUl9NRU1DRy5cbi0gKiBAbGlzdDpcdFNpYmxpbmdzIGxpc3QuXG4gICovXG4gc3RydWN0IGRhbW9uX2ZpbHRlciB7XG4gXHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XG5AQCAtNzU4LDYgJiM0Mzs3NjYsOCBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcbiBcdHVuaW9uIHtcbiBcdFx0dTY0IG1lbWNnX2lkO1xuIFx0fTtcbiYjNDM7LyogcHJpdmF0ZTogKi9cbiYjNDM7XHQvKiBTaWJsaW5ncyBsaXN0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtNzY1LDEyICYjNDM7Nzc1LDEzIEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIge1xuICAqIHN0cnVjdCBkYW1vbl9wcm9iZSAtIERhdGEgcmVnaW9uIGF0dHJpYnV0ZSBwcm9iZS5cbiAgKlxuICAqIEB3ZWlnaHQ6XHRSZWxhdGl2ZSBwcmlvcml0eSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGlzIHByb2JlLlxuLSAqIEBmaWx0ZXJzOlx0RmlsdGVycyBmb3IgYXNzZXNzaW5nIGlmIGEgZ2l2ZW4gcmVnaW9uIGlzIGZvciB0aGlzIHByb2JlLlxuLSAqIEBsaXN0Olx0U2libGluZ3MgbGlzdC5cbiAgKi9cbiBzdHJ1Y3QgZGFtb25fcHJvYmUge1xuIFx0dW5zaWduZWQgaW50IHdlaWdodDtcbiYjNDM7LyogcHJpdmF0ZTogKi9cbiYjNDM7XHQvKiBGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZpbHRlcnM7XG4mIzQzO1x0LyogU2libGluZ3MgbGlzdC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiB9O1xuIFxuQEAgLTgzNywxNCAmIzQzOzg0OCw5IEBAIHN0cnVjdCBkYW1vbl9hdHRycyB7XG4gICogdGhyZWFkIG90aGVyIHRoYW4gdGhlIGtkYW1vbmQgc2hvdWxkIGJlIG1hZGUgdXNpbmcgc2FmZSBEQU1PTiBBUElzLFxuICAqIGluY2x1ZGluZyBkYW1vbl9jYWxsKCkgYW5kIGRhbW9zX3dhbGsoKS5cbiAgKlxuLSAqIEBvcHM6XHRTZXQgb2YgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuXG4tICogQHByb2JlczpcdEhlYWQgb2YgcHJvYmVzIChcdTAwMjZkYW1vbl9wcm9iZSkgbGlzdC5cbiAgKiBAYWRkcl91bml0Olx0U2NhbGUgZmFjdG9yIGZvciBjb3JlIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24uXG4gICogQG1pbl9yZWdpb25fc3o6XHRNaW5pbXVtIHJlZ2lvbiBzaXplLlxuICAqIEBwYXVzZTpcdFBhdXNlIGtkYW1vbmQgbWFpbiBsb29wLlxuLSAqIEBhZGFwdGl2ZV90YXJnZXRzOlx0SGVhZCBvZiBtb25pdG9yaW5nIHRhcmdldHMgKFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC5cbi0gKiBAc2NoZW1lczpcdFx0SGVhZCBvZiBzY2hlbWVzIChcdTAwMjZkYW1vcykgbGlzdC5cbi0gKiBAcm5kX3N0YXRlOlx0UGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuXG4gICovXG4gc3RydWN0IGRhbW9uX2N0eCB7XG4gXHRzdHJ1Y3QgZGFtb25fYXR0cnMgYXR0cnM7XG5AQCAtODkzLDE1ICYjNDM7ODk5LDIxIEBAIHN0cnVjdCBkYW1vbl9jdHgge1xuIFx0c3RydWN0IG11dGV4IGtkYW1vbmRfbG9jaztcbiBcbiAvKiBwdWJsaWM6ICovXG4tXHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHM7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlcztcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0O1xuIFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6O1xuIFx0Ym9vbCBwYXVzZTtcbiBcbiYjNDM7LyogcHJpdmF0ZTogKi9cbiYjNDM7XHQvKiBTZXQgb2YgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuICovXG4mIzQzO1x0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzO1xuJiM0MztcdC8qIEhlYWQgb2YgbW9uaXRvcmluZyB0YXJnZXRzIChcdTAwMjZkYW1vbl90YXJnZXQpIGxpc3QuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGFkYXB0aXZlX3RhcmdldHM7XG4mIzQzO1x0LyogSGVhZCBvZiBwcm9iZXMgKFx1MDAyNmRhbW9uX3Byb2JlKSBsaXN0LiAqL1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgcHJvYmVzO1xuJiM0MztcdC8qIEhlYWQgb2Ygc2NoZW1lcyAoXHUwMDI2ZGFtb3MpIGxpc3QuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHNjaGVtZXM7XG4gXG4mIzQzO1x0LyogQHJuZF9zdGF0ZTpcdFBlci1jdHggUFJORyBzdGF0ZSBmb3IgZGFtb25fcmFuZCgpLiAqL1xuIFx0c3RydWN0IHJuZF9zdGF0ZSBybmRfc3RhdGU7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggYjVmZTAzNmY3ODAxNTIuLjIwOGJiNjM5ZjUwZmZiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTIwNTEsNyAmIzQzOzIwNTEsNyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdGludCBpLCBlcnI7XG4gXG4gXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xuLVx0aWYgKGN0eC1cdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxuJiM0MztcdGlmICghZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSBcdTAwMjZcdTAwMjYgc3lzZnNfdGFyZ2V0cy1cdTAwM2VuciBcdTAwM2UgMSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNmc190YXJnZXRzLVx1MDAzZW5yOyBpJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY29udGFpbnMgc3RydWN0dXJhbCByZWFycmFuZ2VtZW50cyBvZiBmaWVsZHMgaW4gaW5jbHVkZS9saW51eC9kYW1vbi5oLCBhZGRzIGNvbW1lbnRzLCBhbmQgcmVwbGFjZXMgYSBkaXJlY3QgZW51bSBjb21wYXJpc29uIHdpdGggYW4gZXF1aXZhbGVudCBoZWxwZXIgZnVuY3Rpb24gKGRhbW9uX3RhcmdldF9oYXNfcGlkKSBpbiBtbS9kYW1vbi9zeXNmcy5jLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFkMDk1N2RkYzZiYjQwZjg4ZjIyMDAyNzBmYzAxMTI5MjljNjEzYjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxNSAwMDo0OToxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaAppbmRleCBmNjk0NDJhOWQ0MzEyOC4uMzI3ZjUzNDY5NmFhODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTQ2LDcgJiM0Mzs0Niw2IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHsKICAqIEBzYW1wbGluZ19hZGRyOglBZGRyZXNzIG9mIHRoZSBzYW1wbGUgZm9yIHRoZSBuZXh0IGFjY2VzcyBjaGVjay4KICAqIEBucl9hY2Nlc3NlczoJQWNjZXNzIGZyZXF1ZW5jeSBvZiB0aGlzIHJlZ2lvbi4KICAqIEBwcm9iZV9oaXRzOgkJTnVtYmVyIG9mIHByb2JlLXBvc2l0aXZlIHJlZ2lvbiBzYW1wbGVzLgotICogQGxpc3Q6CQlMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLgogICogQGFnZToJCUFnZSBvZiB0aGlzIHJlZ2lvbi4KICAqCiAgKiBGb3IgYW55IHVzZSBjYXNlLCBAYXIgc2hvdWxkIGJlIG5vbi16ZXJvIHBvc2l0aXZlIHNpemUuICBkYW1vbl9zZXRfcmVnaW9ucygpCkBAIC02OCw5ICYjNDM7NjcsMTEgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7CiAJdW5zaWduZWQgbG9uZyBzYW1wbGluZ19hZGRyOwogCXVuc2lnbmVkIGludCBucl9hY2Nlc3NlczsKIAl1bnNpZ25lZCBjaGFyIHByb2JlX2hpdHNbREFNT05fTUFYX1BST0JFU107Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXVuc2lnbmVkIGludCBhZ2U7Ci0vKiBwcml2YXRlOiBJbnRlcm5hbCB2YWx1ZSBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqLwomIzQzOy8qIHByaXZhdGU6IGludGVybmFsIHVzZSBvbmx5LiAqLwomIzQzOwkvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqLwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiYjNDM7CS8qIGZvciBhZ2UgY2FsY3VsYXRpb24uICovCiAJdW5zaWduZWQgaW50IGxhc3RfbnJfYWNjZXNzZXM7CiAJdW5zaWduZWQgY2hhciBsYXN0X3Byb2JlX2hpdHNbREFNT05fTUFYX1BST0JFU107CiB9OwpAQCAtNzgsOSAmIzQzOzc5LDYgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7CiAvKioKICAqIHN0cnVjdCBkYW1vbl90YXJnZXQgLSBSZXByZXNlbnRzIGEgbW9uaXRvcmluZyB0YXJnZXQuCiAgKiBAcGlkOgkJVGhlIFBJRCBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRvIG1vbml0b3IuCi0gKiBAbnJfcmVnaW9uczoJCU51bWJlciBvZiBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LgotICogQHJlZ2lvbnNfbGlzdDoJSGVhZCBvZiB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4KLSAqIEBsaXN0OgkJTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4KICAqIEBvYnNvbGV0ZToJCVdoZXRoZXIgdGhlIGNvbW1pdCBkZXN0aW5hdGlvbiB0YXJnZXQgaXMgb2Jzb2xldGUuCiAgKgogICogRWFjaCBtb25pdG9yaW5nIGNvbnRleHQgY291bGQgaGF2ZSBtdWx0aXBsZSB0YXJnZXRzLiAgRm9yIGV4YW1wbGUsIGEgY29udGV4dApAQCAtOTQsMTAgJiM0Mzs5MiwxNCBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uIHsKICAqLwogc3RydWN0IGRhbW9uX3RhcmdldCB7CiAJc3RydWN0IHBpZCAqcGlkOwomIzQzOwlib29sIG9ic29sZXRlOwomIzQzOy8qIHByaXZhdGU6ICovCiYjNDM7CS8qIE51bWJlciBvZiBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LiAqLwogCXVuc2lnbmVkIGludCBucl9yZWdpb25zOwomIzQzOwkvKiBIZWFkIG9mIHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgcmVnaW9uc19saXN0OwomIzQzOwkvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlib29sIG9ic29sZXRlOwogfTsKIAogLyoqCkBAIC0xNzMsMTAgJiM0MzsxNzUsOCBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHsKICAqIEBtZXRyaWM6CQlNZXRyaWMgdG8gYmUgdXNlZCBmb3IgcmVwcmVzZW50aW5nIHRoZSBnb2FsLgogICogQHRhcmdldF92YWx1ZToJVGFyZ2V0IHZhbHVlIG9mIEBtZXRyaWMgdG8gYWNoaWV2ZSB3aXRoIHRoZSB0dW5pbmcuCiAgKiBAY3VycmVudF92YWx1ZToJQ3VycmVudCB2YWx1ZSBvZiBAbWV0cmljLgotICogQGxhc3RfcHNpX3RvdGFsOglMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSQogICogQG5pZDoJCU5vZGUgaWQuCiAgKiBAbWVtY2dfaWQ6CQlNZW1jZyBpZC4KLSAqIEBsaXN0OgkJTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4KICAqCiAgKiBEYXRhIHN0cnVjdHVyZSBmb3IgZ2V0dGluZyB0aGUgY3VycmVudCBzY29yZSBvZiB0aGUgcXVvdGEgdHVuaW5nIGdvYWwuICBUaGUKICAqIHNjb3JlIGlzIGNhbGN1bGF0ZWQgYnkgaG93IGNsb3NlIEBjdXJyZW50X3ZhbHVlIGFuZCBAdGFyZ2V0X3ZhbHVlIGFyZS4gIFRoZW4KQEAgLTE5OSwxMiAmIzQzOzE5OSwxNyBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7CiAJdW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlOwogCS8qIG1ldHJpYy1kZXBlbmRlbnQgZmllbGRzICovCiAJdW5pb24gewotCQl1NjQgbGFzdF9wc2lfdG90YWw7CiAJCXN0cnVjdCB7CiAJCQlpbnQgbmlkOwogCQkJdTY0IG1lbWNnX2lkOwogCQl9OwomIzQzOy8qIHByaXZhdGU6ICovCiYjNDM7CQkvKiBMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSSAqLwomIzQzOwkJdTY0IGxhc3RfcHNpX3RvdGFsOwomIzQzOwogCX07CiYjNDM7LyogcHJpdmF0ZTogKi8KJiM0MzsJLyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCkBAIC0yMjMsNyAmIzQzOzIyOCw2IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7CiAgKiBAcmVzZXRfaW50ZXJ2YWw6CUNoYXJnZSByZXNldCBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMuCiAgKiBAbXM6CQkJTWF4aW11bSBtaWxsaXNlY29uZHMgdGhhdCB0aGUgc2NoZW1lIGNhbiB1c2UuCiAgKiBAc3o6CQkJTWF4aW11bSBieXRlcyBvZiBtZW1vcnkgdGhhdCB0aGUgYWN0aW9uIGNhbiBiZSBhcHBsaWVkLgotICogQGdvYWxzOgkJSGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKCZhbXA7ZGFtb3NfcXVvdGFfZ29hbCkgbGlzdC4KICAqIEBnb2FsX3R1bmVyOgkJR29hbC1iYXNlZCBAZXN6IHR1bmluZyBhbGdvcml0aG0gdG8gdXNlLgogICogQGVzejoJCUVmZmVjdGl2ZSBzaXplIHF1b3RhIGluIGJ5dGVzLgogICogQGZhaWxfY2hhcmdlX251bToJRmFpbGVkIHJlZ2lvbnMgY2hhcmdlIHJhdGUgbnVtZXJhdG9yLgpAQCAtMjUwLDcgJiM0MzsyNTQsNyBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgewogICogdGhlIHNjaGVtZSYjMzk7cyBhY3Rpb24uICBEQU1PTiB0aGVuIGNvbXBhcmVzIGl0IGFnYWluc3QgJmFtcDtzeiBhbmQgdXNlcyBzbWFsbGVyCiAgKiBvbmUgYXMgdGhlIGVmZmVjdGl2ZSBxdW90YS4KICAqCi0gKiBJZiBAZ29hbHMgaXMgbm90IGVtcHR5LCBEQU1PTiBjYWxjdWxhdGVzIHlldCBhbm90aGVyIHNpemUgcXVvdGEgYmFzZWQgb24gdGhlCiYjNDM7ICogSWYgZ29hbHMgaXMgbm90IGVtcHR5LCBEQU1PTiBjYWxjdWxhdGVzIHlldCBhbm90aGVyIHNpemUgcXVvdGEgYmFzZWQgb24gdGhlCiAgKiBnb2FscyB1c2luZyBpdHMgaW50ZXJuYWwgZmVlZGJhY2sgbG9vcCBhbGdvcml0aG0sIGZvciBldmVyeSBAcmVzZXRfaW50ZXJ2YWwuCiAgKiBUaGVuLCBpZiB0aGUgbmV3IHNpemUgcXVvdGEgaXMgc21hbGxlciB0aGFuIHRoZSBlZmZlY3RpdmUgcXVvdGEsIGl0IHVzZXMgdGhlCiAgKiBuZXcgc2l6ZSBxdW90YSBhcyB0aGUgZWZmZWN0aXZlIHF1b3RhLgpAQCAtMjcxLDcgJiM0MzsyNzUsNyBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGEgewogCXVuc2lnbmVkIGxvbmcgcmVzZXRfaW50ZXJ2YWw7CiAJdW5zaWduZWQgbG9uZyBtczsKIAl1bnNpZ25lZCBsb25nIHN6OwotCXN0cnVjdCBsaXN0X2hlYWQgZ29hbHM7CiYjNDM7CiAJZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIGdvYWxfdHVuZXI7CiAJdW5zaWduZWQgbG9uZyBlc3o7CiAKQEAgLTI4Myw2ICYjNDM7Mjg3LDggQEAgc3RydWN0IGRhbW9zX3F1b3RhIHsKIAl1bnNpZ25lZCBpbnQgd2VpZ2h0X2FnZTsKIAogLyogcHJpdmF0ZTogKi8KJiM0MzsJLyogSGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKCZhbXA7ZGFtb3NfcXVvdGFfZ29hbCkgbGlzdC4gKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBnb2FsczsKIAkvKiBGb3IgdGhyb3VnaHB1dCBlc3RpbWF0aW9uICovCiAJdW5zaWduZWQgbG9uZyB0b3RhbF9jaGFyZ2VkX3N6OwogCXVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9uczsKQEAgLTQyNiw3ICYjNDM7NDMyLDYgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7CiAgKgkJJmFtcDtkYW1vbl9jdHgtJmd0O2FkYXB0aXZlX3RhcmdldHMgaWYgQHR5cGUgaXMKICAqCQlEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQuCiAgKiBAc3pfcmFuZ2U6CVNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS4KLSAqIEBsaXN0OglMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLgogICoKICAqIEJlZm9yZSBhcHBseWluZyB0aGUgJmFtcDtkYW1vcy0mZ3Q7YWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2gKICAqIGJ5dGUgb2YgdGhlIHJlZ2lvbiBtYXRjaGVzIHRvIHRoaXMgZ2l2ZW4gY29uZGl0aW9uIGFuZCBhdm9pZCBhcHBseWluZyB0aGUKQEAgLTQ0NCw2ICYjNDM7NDQ5LDggQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7CiAJCWludCB0YXJnZXRfaWR4OwogCQlzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTsKIAl9OwomIzQzOy8qIHByaXZhdGU6ICovCiYjNDM7CS8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIApAQCAtNTE1LDEyICYjNDM7NTIyLDggQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgewogICogQHdtYXJrczoJCVdhdGVybWFya3MgZm9yIGF1dG9tYXRlZCAoaW4pYWN0aXZhdGlvbiBvZiB0aGlzIHNjaGVtZS4KICAqIEBtaWdyYXRlX2Rlc3RzOglEZXN0aW5hdGlvbiBub2RlcyBpZiBAYWN0aW9uIGlzICYjMzQ7bWlncmF0ZV97aG90LGNvbGR9JiMzNDsuCiAgKiBAdGFyZ2V0X25pZDoJCURlc3RpbmF0aW9uIG5vZGUgaWYgQGFjdGlvbiBpcyAmIzM0O21pZ3JhdGVfe2hvdCxjb2xkfSYjMzQ7LgotICogQGNvcmVfZmlsdGVyczoJQWRkaXRpb25hbCBzZXQgb2YgJmFtcDtzdHJ1Y3QgZGFtb3NfZmlsdGVyIGZvciAmYW1wO2FjdGlvbi4KLSAqIEBvcHNfZmlsdGVyczoJb3BzIGxheWVyIGhhbmRsaW5nICZhbXA7c3RydWN0IGRhbW9zX2ZpbHRlciBvYmplY3RzIGxpc3QuCi0gKiBAbGFzdF9hcHBsaWVkOglMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LgogICogQHN0YXQ6CQlTdGF0aXN0aWNzIG9mIHRoaXMgc2NoZW1lLgogICogQG1heF9ucl9zbmFwc2hvdHM6CVVwcGVyIGxpbWl0IG9mIG5yX3NuYXBzaG90cyBzdGF0LgotICogQGxpc3Q6CQlMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLgogICoKICAqIEZvciBlYWNoIEBhcHBseV9pbnRlcnZhbF91cywgREFNT04gZmluZHMgcmVnaW9ucyB3aGljaCBmaXQgaW4gdGhlCiAgKiAmYW1wO3BhdHRlcm4gYW5kIGFwcGxpZXMgJmFtcDthY3Rpb24gdG8gdGhvc2UuIFRvIGF2b2lkIGNvbnN1bWluZyB0b28gbXVjaApAQCAtNTQyLDE2ICYjNDM7NTQ1LDcgQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgewogICoKICAqIEJlZm9yZSBhcHBseWluZyB0aGUgJmFtcDthY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCAmYW1wO3N0cnVjdCBkYW1vbl9vcGVyYXRpb25zCiAgKiBpbXBsZW1lbnRhdGlvbiBjb3VsZCBjaGVjayBwYWdlcyBvZiB0aGUgcmVnaW9uIGFuZCBza2lwICZhbXA7YWN0aW9uIHRvIHJlc3BlY3QKLSAqICZhbXA7Y29yZV9maWx0ZXJzCi0gKgotICogVGhlIG1pbmltdW0gZW50aXR5IHRoYXQgQGFjdGlvbiBjYW4gYmUgYXBwbGllZCBkZXBlbmRzIG9uIHRoZSB1bmRlcmx5aW5nCi0gKiAmYW1wO3N0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkIHdpdGggdGhlIGNvcmUgbGF5ZXIKLSAqIGFic3RyYWN0LCBuYW1lbHkgJmFtcDtzdHJ1Y3QgZGFtb25fcmVnaW9uLCAmYW1wO3N0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5Ci0gKiBAYWN0aW9uIHRvIHNhbWUgZW50aXR5IG11bHRpcGxlIHRpbWVzLiAgTGFyZ2UgZm9saW9zIHRoYXQgdW5kZXJseWluZyBvbgotICogbXVsdGlwbGUgJmFtcDtzdHJ1Y3QgZGFtb24gcmVnaW9uIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSAmYW1wO3N0cnVjdAotICogZGFtb25fb3BlcmF0aW9ucyBjYW4gdXNlIEBsYXN0X2FwcGxpZWQgdG8gYXZvaWQgdGhhdC4gIERBTU9TIGNvcmUgbG9naWMKLSAqIHVuc2V0cyBAbGFzdF9hcHBsaWVkIHdoZW4gZWFjaCByZWdpb25zIHdhbGtpbmcgZm9yIGFwcGx5aW5nIHRoZSBzY2hlbWUgaXMKLSAqIGZpbmlzaGVkLgomIzQzOyAqICZhbXA7c3RydWN0IGRhbW9zX2ZpbHRlci4KICAqCiAgKiBBZnRlciBhcHBseWluZyB0aGUgJmFtcDthY3Rpb24gdG8gZWFjaCByZWdpb24sICZhbXA7c3RhdCBpcyB1cGRhdGVkLgogICoKQEAgLTU2Miw2ICYjNDM7NTU2LDE2IEBAIHN0cnVjdCBkYW1vcyB7CiAJc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuIHBhdHRlcm47CiAJZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uOwogCXVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXM7CiYjNDM7CXN0cnVjdCBkYW1vc19xdW90YSBxdW90YTsKJiM0MzsJc3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzOwomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCWludCB0YXJnZXRfbmlkOwomIzQzOwkJCXN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIG1pZ3JhdGVfZGVzdHM7CiYjNDM7CQl9OwomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgZGFtb3Nfc3RhdCBzdGF0OwomIzQzOwl1bnNpZ25lZCBsb25nIG1heF9ucl9zbmFwc2hvdHM7CiAvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seSAqLwogCS8qCiAJICogbnVtYmVyIG9mIHNhbXBsZSBpbnRlcnZhbHMgdGhhdCBzaG91bGQgYmUgcGFzc2VkIGJlZm9yZSBhcHBseWluZwpAQCAtNTc4LDIwICYjNDM7NTgyLDI1IEBAIHN0cnVjdCBkYW1vcyB7CiAJLyogd2hldGhlciB0byByZWplY3QgY29yZS9vcHMgZmlsdGVycyB1bWF0Y2hlZCByZWdpb25zICovCiAJYm9vbCBjb3JlX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Q7CiAJYm9vbCBvcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdDsKLS8qIHB1YmxpYzogKi8KLQlzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7Ci0Jc3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCWludCB0YXJnZXRfbmlkOwotCQkJc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0czsKLQkJfTsKLQl9OwomIzQzOwkvKiBBZGRpdGlvbmFsIHNldCBvZiAmYW1wO3N0cnVjdCBkYW1vc19maWx0ZXIgZm9yICZhbXA7YWN0aW9uLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgY29yZV9maWx0ZXJzOwomIzQzOwkvKiBvcHMgbGF5ZXIgaGFuZGxpbmcgJmFtcDtzdHJ1Y3QgZGFtb3NfZmlsdGVyIG9iamVjdHMgbGlzdC4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG9wc19maWx0ZXJzOwomIzQzOwkvKgomIzQzOwkgKiBMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LgomIzQzOwkgKgomIzQzOwkgKiBUaGUgbWluaW11bSBlbnRpdHkgdGhhdCBAYWN0aW9uIGNhbiBiZSBhcHBsaWVkIGRlcGVuZHMgb24gdGhlCiYjNDM7CSAqIHVuZGVybHlpbmcgJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy4gIFNpbmNlIGl0IG1heSBub3QgYmUgYWxpZ25lZAomIzQzOwkgKiB3aXRoIHRoZSBjb3JlIGxheWVyIGFic3RyYWN0LCBuYW1lbHkgJmFtcDtzdHJ1Y3QgZGFtb25fcmVnaW9uLCAmYW1wO3N0cnVjdAomIzQzOwkgKiBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5IEBhY3Rpb24gdG8gc2FtZSBlbnRpdHkgbXVsdGlwbGUgdGltZXMuCiYjNDM7CSAqIExhcmdlIGZvbGlvcyB0aGF0IHVuZGVybHlpbmcgb24gbXVsdGlwbGUgJmFtcDtzdHJ1Y3QgZGFtb24gcmVnaW9uCiYjNDM7CSAqIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSAmYW1wO3N0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNhbgomIzQzOwkgKiB1c2UgQGxhc3RfYXBwbGllZCB0byBhdm9pZCB0aGF0LiAgREFNT1MgY29yZSBsb2dpYyB1bnNldHMKJiM0MzsJICogQGxhc3RfYXBwbGllZCB3aGVuIGVhY2ggcmVnaW9ucyB3YWxraW5nIGZvciBhcHBseWluZyB0aGUgc2NoZW1lIGlzCiYjNDM7CSAqIGZpbmlzaGVkLgomIzQzOwkgKi8KIAl2b2lkICpsYXN0X2FwcGxpZWQ7Ci0Jc3RydWN0IGRhbW9zX3N0YXQgc3RhdDsKLQl1bnNpZ25lZCBsb25nIG1heF9ucl9zbmFwc2hvdHM7CiYjNDM7CS8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIApAQCAtNzQ5LDcgJiM0Mzs3NTgsNiBAQCBlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHsKICAqIEBtYXRjaGluZzoJV2hldGhlciB0aGlzIGZpbHRlciBpcyBmb3IgdGhlIHR5cGUtbWF0Y2hpbmcgb25lcy4KICAqIEBhbGxvdzoJV2hldGhlciB0aGUgQHR5cGUtQG1hdGNoaW5nIG9uZXMgc2hvdWxkIHBhc3MgdGhpcyBmaWx0ZXIuCiAgKiBAbWVtY2dfaWQ6CU1lbWNnIGlkIG9mIHRoZSBxdWVzdGlvbiBpZiBAdHlwZSBpcyBEQU1PTl9GSUxURVJfTUVNQ0cuCi0gKiBAbGlzdDoJU2libGluZ3MgbGlzdC4KICAqLwogc3RydWN0IGRhbW9uX2ZpbHRlciB7CiAJZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlOwpAQCAtNzU4LDYgJiM0Mzs3NjYsOCBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHsKIAl1bmlvbiB7CiAJCXU2NCBtZW1jZ19pZDsKIAl9OwomIzQzOy8qIHByaXZhdGU6ICovCiYjNDM7CS8qIFNpYmxpbmdzIGxpc3QuICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIApAQCAtNzY1LDEyICYjNDM7Nzc1LDEzIEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIgewogICogc3RydWN0IGRhbW9uX3Byb2JlIC0gRGF0YSByZWdpb24gYXR0cmlidXRlIHByb2JlLgogICoKICAqIEB3ZWlnaHQ6CVJlbGF0aXZlIHByaW9yaXR5IG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHRoaXMgcHJvYmUuCi0gKiBAZmlsdGVyczoJRmlsdGVycyBmb3IgYXNzZXNzaW5nIGlmIGEgZ2l2ZW4gcmVnaW9uIGlzIGZvciB0aGlzIHByb2JlLgotICogQGxpc3Q6CVNpYmxpbmdzIGxpc3QuCiAgKi8KIHN0cnVjdCBkYW1vbl9wcm9iZSB7CiAJdW5zaWduZWQgaW50IHdlaWdodDsKJiM0MzsvKiBwcml2YXRlOiAqLwomIzQzOwkvKiBGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuICovCiAJc3RydWN0IGxpc3RfaGVhZCBmaWx0ZXJzOwomIzQzOwkvKiBTaWJsaW5ncyBsaXN0LiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKQEAgLTgzNywxNCAmIzQzOzg0OCw5IEBAIHN0cnVjdCBkYW1vbl9hdHRycyB7CiAgKiB0aHJlYWQgb3RoZXIgdGhhbiB0aGUga2RhbW9uZCBzaG91bGQgYmUgbWFkZSB1c2luZyBzYWZlIERBTU9OIEFQSXMsCiAgKiBpbmNsdWRpbmcgZGFtb25fY2FsbCgpIGFuZCBkYW1vc193YWxrKCkuCiAgKgotICogQG9wczoJU2V0IG9mIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgZ2l2ZW4gdXNlIGNhc2VzLgotICogQHByb2JlczoJSGVhZCBvZiBwcm9iZXMgKCZhbXA7ZGFtb25fcHJvYmUpIGxpc3QuCiAgKiBAYWRkcl91bml0OglTY2FsZSBmYWN0b3IgZm9yIGNvcmUgdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbi4KICAqIEBtaW5fcmVnaW9uX3N6OglNaW5pbXVtIHJlZ2lvbiBzaXplLgogICogQHBhdXNlOglQYXVzZSBrZGFtb25kIG1haW4gbG9vcC4KLSAqIEBhZGFwdGl2ZV90YXJnZXRzOglIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoJmFtcDtkYW1vbl90YXJnZXQpIGxpc3QuCi0gKiBAc2NoZW1lczoJCUhlYWQgb2Ygc2NoZW1lcyAoJmFtcDtkYW1vcykgbGlzdC4KLSAqIEBybmRfc3RhdGU6CVBlci1jdHggUFJORyBzdGF0ZSBmb3IgZGFtb25fcmFuZCgpLgogICovCiBzdHJ1Y3QgZGFtb25fY3R4IHsKIAlzdHJ1Y3QgZGFtb25fYXR0cnMgYXR0cnM7CkBAIC04OTMsMTUgJiM0Mzs4OTksMjEgQEAgc3RydWN0IGRhbW9uX2N0eCB7CiAJc3RydWN0IG11dGV4IGtkYW1vbmRfbG9jazsKIAogLyogcHVibGljOiAqLwotCXN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wczsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlczsKIAl1bnNpZ25lZCBsb25nIGFkZHJfdW5pdDsKIAl1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3o7CiAJYm9vbCBwYXVzZTsKIAomIzQzOy8qIHByaXZhdGU6ICovCiYjNDM7CS8qIFNldCBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIGdpdmVuIHVzZSBjYXNlcy4gKi8KJiM0MzsJc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzOwomIzQzOwkvKiBIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoJmFtcDtkYW1vbl90YXJnZXQpIGxpc3QuICovCiAJc3RydWN0IGxpc3RfaGVhZCBhZGFwdGl2ZV90YXJnZXRzOwomIzQzOwkvKiBIZWFkIG9mIHByb2JlcyAoJmFtcDtkYW1vbl9wcm9iZSkgbGlzdC4gKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBwcm9iZXM7CiYjNDM7CS8qIEhlYWQgb2Ygc2NoZW1lcyAoJmFtcDtkYW1vcykgbGlzdC4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHNjaGVtZXM7CiAKJiM0MzsJLyogQHJuZF9zdGF0ZToJUGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuICovCiAJc3RydWN0IHJuZF9zdGF0ZSBybmRfc3RhdGU7CiB9OwogCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuYwppbmRleCBiNWZlMDM2Zjc4MDE1Mi4uMjA4YmI2MzlmNTBmZmIgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuYwpAQCAtMjA1MSw3ICYjNDM7MjA1MSw3IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogCWludCBpLCBlcnI7CiAKIAkvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqLwotCWlmIChjdHgtJmd0O29wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFIgJmFtcDsmYW1wOyBzeXNmc190YXJnZXRzLSZndDtuciAmZ3Q7IDEpCiYjNDM7CWlmICghZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSAmYW1wOyZhbXA7IHN5c2ZzX3RhcmdldHMtJmd0O25yICZndDsgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc3lzZnNfdGFyZ2V0cy0mZ3Q7bnI7IGkmIzQzOyYjNDM7KSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBwYXRjaCwgYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIGZhaXJseSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB0b3VjaGluZyBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBhbmQgYG1tL2RhbW9uL3N5c2ZzLmNgLiBUaGUgaGVhZGVyIGZpbGUgbW9kaWZpY2F0aW9ucyBzZWVtIGNvc21ldGljIOKAkyByZWFycmFuZ2luZyBjb21tZW50cywgcmVvcmRlcmluZyBzdHJ1Y3QgZmllbGRzLCBhbmQgYWRkaW5nIGAvKiBwcml2YXRlOiAqL2AgYmxvY2tzLiBNb3N0bHkgZm9ybWF0dGluZywgd2hpY2ggaXMgZmluZSwgYnV0IEkmIzM5O2xsIHN0aWxsIGdsYW5jZSB0aHJvdWdoIGl0IHRvIG1ha2Ugc3VyZSBub3RoaW5nIHdhcyBhY2NpZGVudGFsbHkgY2hhbmdlZC4KClRoZSByZWFsIG1lYXQgb2YgdGhpcyBpcyBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIFRoZSBjb3JlIGNoYW5nZSBpcyBhIGxvZ2ljYWwgYWRqdXN0bWVudCBpbiB0aGlzIGNvZGUgYmxvY2s6CgpgYGBjCi0JaWYgKGN0eC0mZ3Q7b3BzLmlkID09IERBTU9OX09QU19QQUREUiAmYW1wOyZhbXA7IHN5c2ZzX3RhcmdldHMtJmd0O25yICZndDsgMSkKJiM0MzsJaWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpICZhbXA7JmFtcDsgc3lzZnNfdGFyZ2V0cy0mZ3Q7bnIgJmd0OyAxKQpgYGAKCldlJiMzOTtyZSByZXBsYWNpbmcgYSBjaGVjayBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uIElEIChgREFNT05fT1BTX1BBRERSYCkgd2l0aCBhIGNhbGwgdG8gYGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgLiBUaGUgb3ZlcmFsbCBsb2dpYyBzZWVtcyB0byBiZSByZWxhdGVkIHRvIG1hbmFnaW5nIHRhcmdldCBjb25maWd1cmF0aW9ucyBiYXNlZCBvbiB0aGVpciBudW1iZXIuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBTcGVjaWZpY2FsbHksIHdoYXQgc2NlbmFyaW8gaXMgdGhpcyBub3cgaGFuZGxpbmcgdGhhdCB0aGUgcHJpb3Igb25lIGRpZG4mIzM5O3QsIG9yIHZpY2UtdmVyc2E/IFdoYXQgY29udGV4dCBpcyB0aGUgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCBmdW5jdGlvbiByZWxldmFudCBpbj8KCkkgbmVlZCB0byBzZWUgd2hhdCBgZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KWAgYWN0dWFsbHkgKmRvZXMqLiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgZmluZCB0aGUgZGVmaW5pdGlvbiBhbmQgYW55IHVzYWdlcyBvZiB0aGF0IGZ1bmN0aW9uLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIGlmIHRoaXMgaXMgYSBidWcgZml4LCBhbiBvcHRpbWl6YXRpb24sIG9yIHNvbWV0aGluZyBlbnRpcmVseSBkaWZmZXJlbnQuIEkmIzM5O2xsIG5lZWQgdG8gc3R1ZHkgdGhhdCBkZWZpbml0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaXRzIHJlbGV2YW5jZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgc3lzZnMgaW50ZXJmYWNlIGFuZCB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fdGFyZ2V0X2hhc19waWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNzI9aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3My1cbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDc0OnN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZChjb25zdCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3NS17XG4tLVxubW0vZGFtb24vY29yZS5jPTE1ODc9c3RhdGljIHZvaWQgZGFtb25fcmV2ZXJ0X3RhcmdldF9jb21taXRzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTU5MS1cbm1tL2RhbW9uL2NvcmUuYzoxNTkyOlx0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChzcmMpKVxubW0vZGFtb24vY29yZS5jLTE1OTMtXHRcdHJldHVybjtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTYwMz1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjE3LVx0XHRcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXQoXG5tbS9kYW1vbi9jb3JlLmM6MTYxODpcdFx0XHRcdFx0ZHN0X3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoZHN0KSxcbm1tL2RhbW9uL2NvcmUuYzoxNjE5Olx0XHRcdFx0XHRzcmNfdGFyZ2V0LCBkYW1vbl90YXJnZXRfaGFzX3BpZChzcmMpLFxubW0vZGFtb24vY29yZS5jLTE2MjAtXHRcdFx0XHRcdHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTY1Mi1cdFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldChuZXdfdGFyZ2V0LCBmYWxzZSxcbm1tL2RhbW9uL2NvcmUuYzoxNjUzOlx0XHRcdFx0c3JjX3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSxcbm1tL2RhbW9uL2NvcmUuYy0xNjU0LVx0XHRcdFx0c3JjLVx1MDAzZW1pbl9yZWdpb25fc3opO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjAyOT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldCAqc3lzX3RhcmdldCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwMzYtXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdCk7XG5tbS9kYW1vbi9zeXNmcy5jOjIwMzc6XHRpZiAoZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSkge1xubW0vZGFtb24vc3lzZnMuYy0yMDM4LVx0XHR0LVx1MDAzZXBpZCA9IGZpbmRfZ2V0X3BpZChzeXNfdGFyZ2V0LVx1MDAzZXBpZCk7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMDQ4PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjA1My1cdC8qIE11bHRpcGxlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyB0YXJnZXRzIG1ha2VzIG5vIHNlbnNlICovXG5tbS9kYW1vbi9zeXNmcy5jOjIwNTQ6XHRpZiAoIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkgXHUwMDI2XHUwMDI2IHN5c2ZzX3RhcmdldHMtXHUwMDNlbnIgXHUwMDNlIDEpXG5tbS9kYW1vbi9zeXNmcy5jLTIwNTUtXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEkmIzM5O2QgZXhwZWN0IGZyb20gc29tZXRoaW5nIGNhbGxlZCBgZGFtb25fdGFyZ2V0X2hhc19waWRgOgoKKipBbmFseXppbmcgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCoqCgpBbHJpZ2h0LCB0aGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGRlc2NyaXB0aXZlLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0LiAmIzM0O0RBTU9OJiMzNDsgbGlrZWx5IHJlZmVycyB0byB0aGUgRHluYW1pYyBBZGFwdGl2ZSBNZW1vcnkgT3B0aW1pemVyIGZvciBOVU1BLCBzbyB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoYXQgZnJhbWV3b3JrLiAmIzM0O1RhcmdldCYjMzQ7IHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgb3BlcmF0aW5nIG9uIGEgc3BlY2lmaWMgcHJvY2VzcyBvciB0YXNrIHRoYXQgREFNT04gaXMgd2F0Y2hpbmcgb3IgbWFuYWdpbmcuIEFuZCwgJiMzNDtQSUQmIzM0OyBwcmV0dHkgY2xlYXJseSBzaWduYWxzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSB1c2luZyB0aGUgcHJvY2VzcyBJRCBhcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4KCk15IGltbWVkaWF0ZSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYSBnaXZlbiBwcm9jZXNzIChpZGVudGlmaWVkIGJ5IGl0cyBQSUQpIGlzIGN1cnJlbnRseSBiZWluZyBhY3RpdmVseSBtb25pdG9yZWQgb3IgdHJhY2tlZCBieSBEQU1PTi4gSXQmIzM5O3MgbGlrZWx5IGEgYm9vbGVhbiBmdW5jdGlvbiDigJMgcmV0dXJuaW5nIHRydWUgb3IgZmFsc2Ug4oCTIGluZGljYXRpbmcgd2hldGhlciB0aGUgcHJvY2VzcyBpcyBpbmRlZWQgYSB0YXJnZXQgb2YgREFNT04mIzM5O3Mgb3B0aW1pemF0aW9ucy4gUGVyaGFwcyBpdCYjMzk7cyBjaGVja2luZyBhZ2FpbnN0IGFuIGludGVybmFsIGxpc3Qgb3IgZGF0YSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBEQU1PTiBzeXN0ZW0uIFRoaXMgc2VlbXMgbGlrZSBpdCBjb3VsZCBiZSBwYXJ0IG9mIGEgbGFyZ2VyIGNvbmRpdGlvbmFsIGZsb3cgd2l0aGluIERBTU9OJiMzOTtzIG9wZXJhdGlvbnMuIEZvciBleGFtcGxlLCBpdCBjb3VsZCBiZSB1c2VkIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGFwcGx5IG9wdGltaXphdGlvbnMgdG8gYSBwcm9jZXNzLCB0byBlbnN1cmUgREFNT04gaXMgYWN0dWFsbHkgY29uY2VybmVkIHdpdGggdGhhdCBwYXJ0aWN1bGFyIFBJRCBhdCBhIGdpdmVuIHBvaW50IGluIHRpbWUuIE9yLCBjb252ZXJzZWx5LCBpdCBjb3VsZCBiZSBjaGVja2luZyBpZiBhIHByb2Nlc3MgaXMgKm5vIGxvbmdlciogYSB0YXJnZXQsIHBlcmhhcHMgZHVlIHRvIHRlcm1pbmF0aW9uIG9yIHJlc291cmNlIHJlbGVhc2UuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzA6XHRib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKTtcbjEwNzE6XHRpbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpO1xuMTA3MjpcdGludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpO1xuMTA3MzpcdFxuMTA3NDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZChjb25zdCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4xMDc1Olx0e1xuMTA3NjpcdFx0cmV0dXJuIGN0eC1cdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1ZBRERSIHx8IGN0eC1cdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX0ZWQUREUjtcbjEwNzc6XHR9XG4xMDc4Olx0XG4xMDc5Olx0LyogUmV0dXJucyBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgYWdncmVnYXRpb24gaW50ZXJ2YWwgKi9cbjEwODA6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxuMTA4MTpcdFx0XHRjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuMTA4MjpcdHtcbjEwODM6XHRcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsO1xuMTA4NDpcdFx0dW5zaWduZWQgbG9uZyBucl9zYW1wbGVzO1xuMTA4NTpcdFxuMTA4NjpcdFx0c2FtcGxlX2ludGVydmFsID0gYXR0cnMtXHUwMDNlc2FtcGxlX2ludGVydmFsID8gOiAxO1xuMTA4NzpcdFx0bnJfc2FtcGxlcyA9IG1pbihhdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLFxuMTA4ODpcdFx0XHRcdCh1bnNpZ25lZCBsb25nKVVJTlRfTUFYKTtcbjEwODk6XHRcdHJldHVybiBucl9zYW1wbGVzID8gOiAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNzIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBUYXJnZXQgU2VsZWN0aW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCBub3cgcmV0dXJucyBgdHJ1ZWAgaWYgYGN0eC0mZ3Q7b3BzLmlkYCBpcyBlaXRoZXIgYERBTU9OX09QU19WQUREUmAgb3IgYERBTU9OX09QU19GVkFERFJgLiBQcmV2aW91c2x5LCB0aGUgbG9naWMgd2FzIHRvIHNwZWNpZmljYWxseSBjaGVjayBmb3IgYERBTU9OX09QU19QQUREUmAgYWxvbmcgd2l0aCBgc3lzZnNfdGFyZ2V0cy0mZ3Q7bnIgJmd0OyAxYC4gTm93LCB0aGUgY29uZGl0aW9uIGhhcyBiZWVuIGludmVydGVkLiBXZSYjMzk7cmUgY2hlY2tpbmcgYCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpICZhbXA7JmFtcDsgc3lzZnNfdGFyZ2V0cy0mZ3Q7bnIgJmd0OyAxYC4KClNvLCBpZiBgY3R4LSZndDtvcHMuaWRgICppcyogYERBTU9OX09QU19QQUREUmAsIGBkYW1vbl90YXJnZXRfaGFzX3BpZGAgd2lsbCBldmFsdWF0ZSB0byBgZmFsc2VgLiBUaGF0IG1lYW5zIHRoZSBuZXcgY29uZGl0aW9uIGJlaGF2ZXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBjb25kaXRpb24gd2hlbiBkZWFsaW5nIHdpdGggUGh5c2ljYWwgQWRkcmVzcyB0YXJnZXRzIChQQUREUikgYW5kIG1vcmUgdGhhbiBvbmUgdGFyZ2V0LiBNYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGUgY2hlY2sgdGhlbiBiZWNvbWVzIGAhZmFsc2VgLCB3aGljaCBldmFsdWF0ZXMgdG8gYHRydWVgLCBhbmQgaXQgYWxsIHdvcmtzLgoKSG93ZXZlciwgdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IHRoZSBsb2dpYyB3b3JrcyB3aXRoIGFueSBvdGhlciBgY3R4LSZndDtvcHMuaWRgLiBJZiBgY3R4LSZndDtvcHMuaWRgIGlzIHNvbWV0aGluZyAqb3RoZXIqIHRoYW4gYERBTU9OX09QU19QQUREUmAsIGFuZCBhc3N1bWluZyBgc3lzZnNfdGFyZ2V0cy0mZ3Q7bnIgJmd0OyAxYCwgdGhpcyBtaWdodCBjaGFuZ2UgdGhlIHNlbGVjdGlvbiBpbiBzdWJ0bGUgd2F5cy4gSXQmIzM5O3MgaW1wZXJhdGl2ZSB0aGF0IEkgZmlndXJlIG91dCBhbGwgdGhlIHBvc3NpYmxlIHZhbHVlcyB0aGF0IGBkYW1vbl9vcHNfaWRgIGNhbiB0YWtlLCBzbyBJIGNhbiBwcmVkaWN0IGhvdyB0aGlzIHdpbGwgYWZmZWN0IERBTU9OJiMzOTtzIHRhcmdldCBzZWxlY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIElEcyBhcmUgdXNlZCwgYW5kIHdoYXQgc2NlbmFyaW9zIHRoZXkgYXBwbHkgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW51bSBkYW1vbl9vcHNfaWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTU1NT1zdHJ1Y3QgZGFtb3Mge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC02MDctLyoqXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjA4OiAqIGVudW0gZGFtb25fb3BzX2lkIC0gSWRlbnRpZmllciBmb3IgZWFjaCBtb25pdG9yaW5nIG9wZXJhdGlvbnMgaW1wbGVtZW50YXRpb25cbmluY2x1ZGUvbGludXgvZGFtb24uaC02MDktICpcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjE1LSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYxNjplbnVtIGRhbW9uX29wc19pZCB7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjE3LVx0REFNT05fT1BTX1ZBRERSLFxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD02NzQ9c3RydWN0IGRhbW9uX29wZXJhdGlvbnMge1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjY3NTpcdGVudW0gZGFtb25fb3BzX2lkIGlkO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY3Ni1cdHZvaWQgKCppbml0KShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2OT1pbnQgZGFtb25fbnJfcnVubmluZ19jdHhzKHZvaWQpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNzA6Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3MS1pbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNzI6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3My1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkYW1vbl9yZWdpb25fY2FjaGUgX19yb19hZnRlcl9pbml0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNC0vKiBTaG91bGQgYmUgY2FsbGVkIHVuZGVyIGRhbW9uX29wc19sb2NrIHdpdGggaWQgc21hbGxlciB0aGFuIE5SX0RBTU9OX09QUyAqL1xubW0vZGFtb24vY29yZS5jOjM1OnN0YXRpYyBib29sIF9fZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXG5tbS9kYW1vbi9jb3JlLmMtMzYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy00OS0gKi9cbm1tL2RhbW9uL2NvcmUuYzo1MDpib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxubW0vZGFtb24vY29yZS5jLTUxLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NzE9aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy05Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzo5ODppbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxubW0vZGFtb24vY29yZS5jLTk5LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTEzODI9c3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIHtcbm1tL2RhbW9uL3N5c2ZzLmM6MTM4MzpcdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcbm1tL2RhbW9uL3N5c2ZzLmMtMTM4NC1cdGNoYXIgKm5hbWU7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xNDAyPXN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTQwMy1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG5tbS9kYW1vbi9zeXNmcy5jOjE0MDQ6XHRlbnVtIGRhbW9uX29wc19pZCBvcHNfaWQ7XG5tbS9kYW1vbi9zeXNmcy5jLTE0MDUtXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdDtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE0MTI9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpkYW1vbl9zeXNmc19jb250ZXh0X2FsbG9jKFxubW0vZGFtb24vc3lzZnMuYzoxNDEzOlx0XHRlbnVtIGRhbW9uX29wc19pZCBvcHNfaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTE0MTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBPcGVyYXRpb25zIEVudW1lcmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIGFuZCBzcGVjaWZpY2FsbHkgemVybyBpbiBvbiB0aGUgYGVudW0gZGFtb25fb3BzX2lkYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2Ugb3BlcmF0aW9uIElEcyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCBlYWNoIG9uZSBzaWduaWZpZXMuIEkmIzM5O20gbGlrZWx5IGRlYnVnZ2luZyBhIERBTU9OLXJlbGF0ZWQgcGVyZm9ybWFuY2UgaXNzdWUsIHRyeWluZyB0byB0cmFjZSBhIHNwZWNpZmljIG9wZXJhdGlvbiwgb3IgbWF5YmUgZXZlbiBwcmVwYXJpbmcgdG8gYWRkIGEgbmV3IG1vbml0b3JpbmcgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBlbnVtIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBtYXAgb2Ygd2hhdCYjMzk7cyBkZWZpbmVkIGhlcmUgYW5kIGhvdyB0aGVzZSBJRHMgbWFwIHRvIHRoZSB1bmRlcmx5aW5nIGFjdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHdlbGwtZG9jdW1lbnRlZCAodGhvdWdoLCBsZXQmIzM5O3MgYmUgaG9uZXN0LCB0aGF0JiMzOTtzIG5vdCBhbHdheXMgdGhlIGNhc2UpLiBUaW1lIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgZW51bTsgSSBuZWVkIHRoaXMgaW5mb3JtYXRpb24gdG8gbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjEwOlx0ICogQERBTU9OX09QU19WQUREUjpcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xuIDYxMTpcdCAqIEBEQU1PTl9PUFNfRlZBRERSOlx0TW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBvbmx5IGZpeGVkIHJhbmdlcyBvZiB2aXJ0dWFsXG4gNjEyOlx0ICpcdFx0XHRhZGRyZXNzIHNwYWNlc1xuIDYxMzpcdCAqIEBEQU1PTl9PUFNfUEFERFI6XHRNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXG4gNjE0Olx0ICogQE5SX0RBTU9OX09QUzpcdE51bWJlciBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgaW1wbGVtZW50YXRpb25zXG4gNjE1Olx0ICovXG4gNjE2Olx0ZW51bSBkYW1vbl9vcHNfaWQge1xuIDYxNzpcdFx0REFNT05fT1BTX1ZBRERSLFxuIDYxODpcdFx0REFNT05fT1BTX0ZWQUREUixcbiA2MTk6XHRcdERBTU9OX09QU19QQUREUixcbiA2MjA6XHRcdE5SX0RBTU9OX09QUyxcbiA2MjE6XHR9O1xuIDYyMjpcdFxuIDYyMzpcdC8qKlxuIDYyNDpcdCAqIHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIC0gTW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuXG4gNjI1Olx0ICpcbiA2MjY6XHQgKiBAaWQ6XHRcdFx0XHRJZGVudGlmaWVyIG9mIHRoaXMgb3BlcmF0aW9ucyBzZXQuXG4gNjI3Olx0ICogQGluaXQ6XHRcdFx0SW5pdGlhbGl6ZSBvcGVyYXRpb25zLXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLlxuIDYyODpcdCAqIEB1cGRhdGU6XHRcdFx0VXBkYXRlIG9wZXJhdGlvbnMtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuXG4gNjI5Olx0ICogQHByZXBhcmVfYWNjZXNzX2NoZWNrczpcdFByZXBhcmUgbmV4dCBhY2Nlc3MgY2hlY2sgb2YgdGFyZ2V0IHJlZ2lvbnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NDMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgREFNT04gVGFyZ2V0IExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIHBhdGNoIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGluIGBtbS9kYW1vbi9zeXNmcy5jYCByZXZvbHZlcyBhcm91bmQgdGhpcyBjb25kaXRpb25hbCBjaGVjay4gUHJldmlvdXNseSwgdGhleSB3ZXJlIGNoZWNraW5nIGlmIGBjdHgtJmd0O29wcy5pZGAgd2FzIGBEQU1PTl9PUFNfUEFERFJgIGFuZCBpZiB0aGUgbnVtYmVyIG9mIHRhcmdldHMgKGBzeXNmc190YXJnZXRzLSZndDtucmApIHdhcyBncmVhdGVyIHRoYW4gb25lLiBOb3csIHRoZSBjb25kaXRpb24gaGFzIGJlZW4gcmV3cml0dGVuIHRvIGAhZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSAmYW1wOyZhbXA7IHN5c2ZzX3RhcmdldHMtJmd0O25yICZndDsgMWAuCgpOb3csIGxldCYjMzk7cyB1bnBhY2sgdGhpcy4gYGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgIHJldHVybnMgdHJ1ZSBmb3IgYERBTU9OX09QU19WQUREUmAgYW5kIGBEQU1PTl9PUFNfRlZBRERSYC4gIFRoZXJlZm9yZSwgdGhlIG5lZ2F0aW9uLCBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgLCBlZmZlY3RpdmVseSBtZWFucyB0aGF0IHRoZSBjb25kaXRpb24gaXMgb25seSB0cnVlIGZvciBgREFNT05fT1BTX1BBRERSYCwgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBvcmlnaW5hbCBpbnRlbnQuIFRoZSBmdW5jdGlvbiBwcm9iYWJseSBpbmNsdWRlcyBzb21lIHNvcnQgb2YgY2hlY2sgd2l0aGluIGl0LCBmb3IgdGhlIGNvbnRleHQmIzM5O3Mgc3RydWN0dXJlLCB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIFBJRCBpcyB2YWxpZCwgb3IgdGhlIFBJRCBpcyBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiBjb250ZXh0LiBJdCYjMzk7cyBlc3NlbnRpYWxseSBqdXN0IGEgcmVmYWN0b3JpbmcgdG8gaW1wcm92ZSByZWFkYWJpbGl0eSBhbmQgcG90ZW50aWFsbHkgZW5jYXBzdWxhdGUgdGhlIGxvZ2ljIGJlaGluZCB0aGF0IGNoZWNrIHdpdGhpbiBhIGhlbHBlciBmdW5jdGlvbi4gQW5kLCBzaW5jZSBgTlJfREFNT05fT1BTYCBzaG91bGRuJiMzOTt0IGJlIHVzZWQsIHdlIGNhbiBpZ25vcmUgdGhhdCBwYXJ0LgoKSG9sZCBvbiwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgREFNT04gb3BlcmF0aW9uIElEcywgYnV0IGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MganVzdCB0aGUgdGhyZWUuIFNvIHllcywgaXQgc2VlbXMgdGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4KCkxvb2tpbmcgYXQgdGhlIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIGNoYW5nZXMsIHRoZXkgYXBwZWFyIHRvIGJlIHB1cmVseSBzdHJ1Y3R1cmFsIOKAkyBtb3ZpbmcgYXJvdW5kIHNvbWUgc3RydWN0IGZpZWxkcyBhbmQgYWRkaW5nIGNvbW1lbnRzLiBTbywgaXQmIzM5O3MganVzdCBjbGVhbnVwIGFuZCByZWZhY3RvcmluZyB0byBpbXByb3ZlIHRoZSBjb2RlLiBOb3RoaW5nIHN1YnN0YW50aWFsIGhlcmUuIEFscmlnaHQsIHRoaXMgbG9va3MgZ29vZC4gSSBkb24mIzM5O3Qgc2VlIGFueSBoaWRkZW4gcGl0ZmFsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3RhcmdldF9oYXNfcGlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD0xMDcyPWludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNzMtXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA3NDpzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNzUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTg3PXN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTE1OTEtXG5tbS9kYW1vbi9jb3JlLmM6MTU5MjpcdGlmICghZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSlcbm1tL2RhbW9uL2NvcmUuYy0xNTkzLVx0XHRyZXR1cm47XG4tLVxubW0vZGFtb24vY29yZS5jPTE2MDM9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTYxNy1cdFx0XHRlcnIgPSBkYW1vbl9jb21taXRfdGFyZ2V0KFxubW0vZGFtb24vY29yZS5jOjE2MTg6XHRcdFx0XHRcdGRzdF90YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKGRzdCksXG5tbS9kYW1vbi9jb3JlLmM6MTYxOTpcdFx0XHRcdFx0c3JjX3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSxcbm1tL2RhbW9uL2NvcmUuYy0xNjIwLVx0XHRcdFx0XHRzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4tLVxubW0vZGFtb24vY29yZS5jLTE2NTItXHRcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXQobmV3X3RhcmdldCwgZmFsc2UsXG5tbS9kYW1vbi9jb3JlLmM6MTY1MzpcdFx0XHRcdHNyY190YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKHNyYyksXG5tbS9kYW1vbi9jb3JlLmMtMTY1NC1cdFx0XHRcdHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIwMjk9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQgKnN5c190YXJnZXQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDM2LVx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHQpO1xubW0vZGFtb24vc3lzZnMuYzoyMDM3Olx0aWYgKGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkpIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzOC1cdFx0dC1cdTAwM2VwaWQgPSBmaW5kX2dldF9waWQoc3lzX3RhcmdldC1cdTAwM2VwaWQpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjA0OD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwNTMtXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xubW0vZGFtb24vc3lzZnMuYzoyMDU0Olx0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxubW0vZGFtb24vc3lzZnMuYy0yMDU1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NzUKCQkJCQkJCW91dHB1dDogOTQKCQkJCQkJCXRob3VnaHRzOiA0MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gUGF0Y2ggQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoaXMgcGF0Y2ggaXMgdGlnaHRseSBzY29wZWQg4oCTIGl0JiMzOTtzIGp1c3QgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvZGFtb24uaGAgYW5kIGBtbS9kYW1vbi9zeXNmcy5jYC4gTm8gY29yZSBsb2dpYyBpcyBiZWluZyBhbHRlcmVkIGhlcmUsIHdoaWNoIGlzIHRoZSBmaXJzdCBnb29kIHNpZ24uCgpUaGUgZGlmZiBpdHNlbGYgZm9jdXNlcyBvbiBob3cgdGFyZ2V0cyBhcmUgYWRkZWQgaW4gdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhlIGNydWNpYWwgY2hhbmdlIGlzIHRoaXM6IHRoZSBjb25kaXRpb25hbCBjaGVjayBoYXMgc2hpZnRlZCBmcm9tIHJlbHlpbmcgb24gdGhlIGBjdHgtJmd0O29wcy5pZGAgKHNwZWNpZmljYWxseSwgd2hldGhlciBpdCYjMzk7cyBgREFNT05fT1BTX1BBRERSYCkgdG8gYCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpYC4gQnV0LCBJIHF1aWNrbHkgY29uZmlybSB0aGF0LCBpbiB0aGlzIGNvbnRleHQsIHRoaXMgaXMgYSBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCBjaGFuZ2UuIGBkYW1vbl90YXJnZXRfaGFzX3BpZGAgcmV0dXJuaW5nIHRydWUgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIHRhcmdldHMgbGlrZSBgVkFERFJgIGFuZCBgRlZBRERSYCwgYW5kIGZhbHNlIGZvciBwaHlzaWNhbCBhZGRyZXNzZXMsIG5lYXRseSBjb3ZlcnMgdGhlIGludGVudC4gRXNzZW50aWFsbHksIGl0IGFwcGVhcnMgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHJlZmFjdG9yaW5nIG9mIHRoZSBpbnRlcm5hbCBzdHJ1Y3QgbGF5b3V0LCBidXQgbm90IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGxvZ2ljLgoKV2hpbGUgc3RydWN0IGxheW91dCBtb2RpZmljYXRpb25zIGNhbiAqYWx3YXlzKiBpbnRyb2R1Y2Ugc3VidGxlIHBlcmZvcm1hbmNlIGltcGFjdHMsIG9yIGV2ZW4gbWVtb3J5IGxheW91dCBudWFuY2VzIHRoYXQgY2FuIG1hdHRlciBpbiBzcGVjaWZpYyB3b3JrbG9hZHMsIHRoZXJlIGlzIG5vIG5ldyBsb2dpYyBiZWluZyBhZGRlZCB0aGF0IHdvdWxkIG5lZWQgYSBmdXp6aW5nIHJ1bi4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzbiYjMzk7dCB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY29udGFpbnMgc3RydWN0dXJhbCByZWFycmFuZ2VtZW50cyBvZiBmaWVsZHMgaW4gaW5jbHVkZS9saW51eC9kYW1vbi5oLCBhZGRzIGNvbW1lbnRzLCBhbmQgcmVwbGFjZXMgYSBkaXJlY3QgZW51bSBjb21wYXJpc29uIHdpdGggYW4gZXF1aXZhbGVudCBoZWxwZXIgZnVuY3Rpb24gKGRhbW9uX3RhcmdldF9oYXNfcGlkKSBpbiBtbS9kYW1vbi9zeXNmcy5jLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY29udGFpbnMgc3RydWN0dXJhbCByZWFycmFuZ2VtZW50cyBvZiBmaWVsZHMgaW4gaW5jbHVkZS9saW51eC9kYW1vbi5oLCBhZGRzIGNvbW1lbnRzLCBhbmQgcmVwbGFjZXMgYSBkaXJlY3QgZW51bSBjb21wYXJpc29uIHdpdGggYW4gZXF1aXZhbGVudCBoZWxwZXIgZnVuY3Rpb24gKGRhbW9uX3RhcmdldF9oYXNfcGlkKSBpbiBtbS9kYW1vbi9zeXNmcy5jLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo0OToyMC41MDMxMjA5OTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzEzNzM5NTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBjb250YWlucyBzdHJ1Y3R1cmFsIHJlYXJyYW5nZW1lbnRzIG9mIGZpZWxkcyBpbiBpbmNsdWRlL2xpbnV4L2RhbW9uLmgsIGFkZHMgY29tbWVudHMsIGFuZCByZXBsYWNlcyBhIGRpcmVjdCBlbnVtIGNvbXBhcmlzb24gd2l0aCBhbiBlcXVpdmFsZW50IGhlbHBlciBmdW5jdGlvbiAoZGFtb25fdGFyZ2V0X2hhc19waWQpIGluIG1tL2RhbW9uL3N5c2ZzLmMuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NDk6MjAuNTAzMTI3NzI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE4MTg0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZDA5NTdkZGM2YmI0MGY4OGYyMjAwMjcwZmMwMTEyOTI5YzYxM2I4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDE1IDAwOjQ5OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbmluZGV4IGY2OTQ0MmE5ZDQzMTI4Li4zMjdmNTM0Njk2YWE4NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtNDYsNyArNDYsNiBAQCBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7XFxuICAqIEBzYW1wbGluZ19hZGRyOlxcdEFkZHJlc3Mgb2YgdGhlIHNhbXBsZSBmb3IgdGhlIG5leHQgYWNjZXNzIGNoZWNrLlxcbiAgKiBAbnJfYWNjZXNzZXM6XFx0QWNjZXNzIGZyZXF1ZW5jeSBvZiB0aGlzIHJlZ2lvbi5cXG4gICogQHByb2JlX2hpdHM6XFx0XFx0TnVtYmVyIG9mIHByb2JlLXBvc2l0aXZlIHJlZ2lvbiBzYW1wbGVzLlxcbi0gKiBAbGlzdDpcXHRcXHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxcbiAgKiBAYWdlOlxcdFxcdEFnZSBvZiB0aGlzIHJlZ2lvbi5cXG4gICpcXG4gICogRm9yIGFueSB1c2UgY2FzZSwgQGFyIHNob3VsZCBiZSBub24temVybyBwb3NpdGl2ZSBzaXplLiAgZGFtb25fc2V0X3JlZ2lvbnMoKVxcbkBAIC02OCw5ICs2NywxMSBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzYW1wbGluZ19hZGRyO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXM7XFxuIFxcdHVuc2lnbmVkIGNoYXIgcHJvYmVfaGl0c1tEQU1PTl9NQVhfUFJPQkVTXTtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiBcXHR1bnNpZ25lZCBpbnQgYWdlO1xcbi0vKiBwcml2YXRlOiBJbnRlcm5hbCB2YWx1ZSBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqL1xcbisvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seS4gKi9cXG4rXFx0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHQvKiBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgbGFzdF9ucl9hY2Nlc3NlcztcXG4gXFx0dW5zaWduZWQgY2hhciBsYXN0X3Byb2JlX2hpdHNbREFNT05fTUFYX1BST0JFU107XFxuIH07XFxuQEAgLTc4LDkgKzc5LDYgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XFxuIC8qKlxcbiAgKiBzdHJ1Y3QgZGFtb25fdGFyZ2V0IC0gUmVwcmVzZW50cyBhIG1vbml0b3JpbmcgdGFyZ2V0LlxcbiAgKiBAcGlkOlxcdFxcdFRoZSBQSUQgb2YgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBtb25pdG9yLlxcbi0gKiBAbnJfcmVnaW9uczpcXHRcXHROdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC5cXG4tICogQHJlZ2lvbnNfbGlzdDpcXHRIZWFkIG9mIHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0Llxcbi0gKiBAbGlzdDpcXHRcXHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxcbiAgKiBAb2Jzb2xldGU6XFx0XFx0V2hldGhlciB0aGUgY29tbWl0IGRlc3RpbmF0aW9uIHRhcmdldCBpcyBvYnNvbGV0ZS5cXG4gICpcXG4gICogRWFjaCBtb25pdG9yaW5nIGNvbnRleHQgY291bGQgaGF2ZSBtdWx0aXBsZSB0YXJnZXRzLiAgRm9yIGV4YW1wbGUsIGEgY29udGV4dFxcbkBAIC05NCwxMCArOTIsMTQgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XFxuICAqL1xcbiBzdHJ1Y3QgZGFtb25fdGFyZ2V0IHtcXG4gXFx0c3RydWN0IHBpZCAqcGlkO1xcbitcXHRib29sIG9ic29sZXRlO1xcbisvKiBwcml2YXRlOiAqL1xcbitcXHQvKiBOdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4gKi9cXG4gXFx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnM7XFxuK1xcdC8qIEhlYWQgb2YgdGhlIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgcmVnaW9uc19saXN0O1xcbitcXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuLVxcdGJvb2wgb2Jzb2xldGU7XFxuIH07XFxuIFxcbiAvKipcXG5AQCAtMTczLDEwICsxNzUsOCBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcXG4gICogQG1ldHJpYzpcXHRcXHRNZXRyaWMgdG8gYmUgdXNlZCBmb3IgcmVwcmVzZW50aW5nIHRoZSBnb2FsLlxcbiAgKiBAdGFyZ2V0X3ZhbHVlOlxcdFRhcmdldCB2YWx1ZSBvZiBAbWV0cmljIHRvIGFjaGlldmUgd2l0aCB0aGUgdHVuaW5nLlxcbiAgKiBAY3VycmVudF92YWx1ZTpcXHRDdXJyZW50IHZhbHVlIG9mIEBtZXRyaWMuXFxuLSAqIEBsYXN0X3BzaV90b3RhbDpcXHRMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSVxcbiAgKiBAbmlkOlxcdFxcdE5vZGUgaWQuXFxuICAqIEBtZW1jZ19pZDpcXHRcXHRNZW1jZyBpZC5cXG4tICogQGxpc3Q6XFx0XFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cXG4gICpcXG4gICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgc2NvcmUgb2YgdGhlIHF1b3RhIHR1bmluZyBnb2FsLiAgVGhlXFxuICAqIHNjb3JlIGlzIGNhbGN1bGF0ZWQgYnkgaG93IGNsb3NlIEBjdXJyZW50X3ZhbHVlIGFuZCBAdGFyZ2V0X3ZhbHVlIGFyZS4gIFRoZW5cXG5AQCAtMTk5LDEyICsxOTksMTcgQEAgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xcbiBcXHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfdmFsdWU7XFxuIFxcdC8qIG1ldHJpYy1kZXBlbmRlbnQgZmllbGRzICovXFxuIFxcdHVuaW9uIHtcXG4tXFx0XFx0dTY0IGxhc3RfcHNpX3RvdGFsO1xcbiBcXHRcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRcXHRpbnQgbmlkO1xcbiBcXHRcXHRcXHR1NjQgbWVtY2dfaWQ7XFxuIFxcdFxcdH07XFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdFxcdC8qIExhc3QgbWVhc3VyZWQgdG90YWwgUFNJICovXFxuK1xcdFxcdHU2NCBsYXN0X3BzaV90b3RhbDtcXG4rXFxuIFxcdH07XFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gfTtcXG4gXFxuQEAgLTIyMyw3ICsyMjgsNiBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIge1xcbiAgKiBAcmVzZXRfaW50ZXJ2YWw6XFx0Q2hhcmdlIHJlc2V0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cXG4gICogQG1zOlxcdFxcdFxcdE1heGltdW0gbWlsbGlzZWNvbmRzIHRoYXQgdGhlIHNjaGVtZSBjYW4gdXNlLlxcbiAgKiBAc3o6XFx0XFx0XFx0TWF4aW11bSBieXRlcyBvZiBtZW1vcnkgdGhhdCB0aGUgYWN0aW9uIGNhbiBiZSBhcHBsaWVkLlxcbi0gKiBAZ29hbHM6XFx0XFx0SGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFxcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LlxcbiAgKiBAZ29hbF90dW5lcjpcXHRcXHRHb2FsLWJhc2VkIEBlc3ogdHVuaW5nIGFsZ29yaXRobSB0byB1c2UuXFxuICAqIEBlc3o6XFx0XFx0RWZmZWN0aXZlIHNpemUgcXVvdGEgaW4gYnl0ZXMuXFxuICAqIEBmYWlsX2NoYXJnZV9udW06XFx0RmFpbGVkIHJlZ2lvbnMgY2hhcmdlIHJhdGUgbnVtZXJhdG9yLlxcbkBAIC0yNTAsNyArMjU0LDcgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcXG4gICogdGhlIHNjaGVtZSdzIGFjdGlvbi4gIERBTU9OIHRoZW4gY29tcGFyZXMgaXQgYWdhaW5zdCBcXHUwMDI2c3ogYW5kIHVzZXMgc21hbGxlclxcbiAgKiBvbmUgYXMgdGhlIGVmZmVjdGl2ZSBxdW90YS5cXG4gICpcXG4tICogSWYgQGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZVxcbisgKiBJZiBnb2FscyBpcyBub3QgZW1wdHksIERBTU9OIGNhbGN1bGF0ZXMgeWV0IGFub3RoZXIgc2l6ZSBxdW90YSBiYXNlZCBvbiB0aGVcXG4gICogZ29hbHMgdXNpbmcgaXRzIGludGVybmFsIGZlZWRiYWNrIGxvb3AgYWxnb3JpdGhtLCBmb3IgZXZlcnkgQHJlc2V0X2ludGVydmFsLlxcbiAgKiBUaGVuLCBpZiB0aGUgbmV3IHNpemUgcXVvdGEgaXMgc21hbGxlciB0aGFuIHRoZSBlZmZlY3RpdmUgcXVvdGEsIGl0IHVzZXMgdGhlXFxuICAqIG5ldyBzaXplIHF1b3RhIGFzIHRoZSBlZmZlY3RpdmUgcXVvdGEuXFxuQEAgLTI3MSw3ICsyNzUsNyBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGEge1xcbiBcXHR1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsO1xcbiBcXHR1bnNpZ25lZCBsb25nIG1zO1xcbiBcXHR1bnNpZ25lZCBsb25nIHN6O1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xcbitcXG4gXFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIGdvYWxfdHVuZXI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZXN6O1xcbiBcXG5AQCAtMjgzLDYgKzI4Nyw4IEBAIHN0cnVjdCBkYW1vc19xdW90YSB7XFxuIFxcdHVuc2lnbmVkIGludCB3ZWlnaHRfYWdlO1xcbiBcXG4gLyogcHJpdmF0ZTogKi9cXG4rXFx0LyogSGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFxcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LiAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xcbiBcXHQvKiBGb3IgdGhyb3VnaHB1dCBlc3RpbWF0aW9uICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9zejtcXG4gXFx0dW5zaWduZWQgbG9uZyB0b3RhbF9jaGFyZ2VkX25zO1xcbkBAIC00MjYsNyArNDMyLDYgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XFxuICAqXFx0XFx0XFx1MDAyNmRhbW9uX2N0eC1cXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyBpZiBAdHlwZSBpc1xcbiAgKlxcdFxcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVC5cXG4gICogQHN6X3JhbmdlOlxcdFNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS5cXG4tICogQGxpc3Q6XFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cXG4gICpcXG4gICogQmVmb3JlIGFwcGx5aW5nIHRoZSBcXHUwMDI2ZGFtb3MtXFx1MDAzZWFjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIERBTU9TIGNoZWNrcyBpZiBlYWNoXFxuICAqIGJ5dGUgb2YgdGhlIHJlZ2lvbiBtYXRjaGVzIHRvIHRoaXMgZ2l2ZW4gY29uZGl0aW9uIGFuZCBhdm9pZCBhcHBseWluZyB0aGVcXG5AQCAtNDQ0LDYgKzQ0OSw4IEBAIHN0cnVjdCBkYW1vc19maWx0ZXIge1xcbiBcXHRcXHRpbnQgdGFyZ2V0X2lkeDtcXG4gXFx0XFx0c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7XFxuIFxcdH07XFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gfTtcXG4gXFxuQEAgLTUxNSwxMiArNTIyLDggQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xcbiAgKiBAd21hcmtzOlxcdFxcdFdhdGVybWFya3MgZm9yIGF1dG9tYXRlZCAoaW4pYWN0aXZhdGlvbiBvZiB0aGlzIHNjaGVtZS5cXG4gICogQG1pZ3JhdGVfZGVzdHM6XFx0RGVzdGluYXRpb24gbm9kZXMgaWYgQGFjdGlvbiBpcyBcXFwibWlncmF0ZV97aG90LGNvbGR9XFxcIi5cXG4gICogQHRhcmdldF9uaWQ6XFx0XFx0RGVzdGluYXRpb24gbm9kZSBpZiBAYWN0aW9uIGlzIFxcXCJtaWdyYXRlX3tob3QsY29sZH1cXFwiLlxcbi0gKiBAY29yZV9maWx0ZXJzOlxcdEFkZGl0aW9uYWwgc2V0IG9mIFxcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIGZvciBcXHUwMDI2YWN0aW9uLlxcbi0gKiBAb3BzX2ZpbHRlcnM6XFx0b3BzIGxheWVyIGhhbmRsaW5nIFxcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIG9iamVjdHMgbGlzdC5cXG4tICogQGxhc3RfYXBwbGllZDpcXHRMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LlxcbiAgKiBAc3RhdDpcXHRcXHRTdGF0aXN0aWNzIG9mIHRoaXMgc2NoZW1lLlxcbiAgKiBAbWF4X25yX3NuYXBzaG90czpcXHRVcHBlciBsaW1pdCBvZiBucl9zbmFwc2hvdHMgc3RhdC5cXG4tICogQGxpc3Q6XFx0XFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cXG4gICpcXG4gICogRm9yIGVhY2ggQGFwcGx5X2ludGVydmFsX3VzLCBEQU1PTiBmaW5kcyByZWdpb25zIHdoaWNoIGZpdCBpbiB0aGVcXG4gICogXFx1MDAyNnBhdHRlcm4gYW5kIGFwcGxpZXMgXFx1MDAyNmFjdGlvbiB0byB0aG9zZS4gVG8gYXZvaWQgY29uc3VtaW5nIHRvbyBtdWNoXFxuQEAgLTU0MiwxNiArNTQ1LDcgQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xcbiAgKlxcbiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlIFxcdTAwMjZhY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBcXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnNcXG4gICogaW1wbGVtZW50YXRpb24gY291bGQgY2hlY2sgcGFnZXMgb2YgdGhlIHJlZ2lvbiBhbmQgc2tpcCBcXHUwMDI2YWN0aW9uIHRvIHJlc3BlY3RcXG4tICogXFx1MDAyNmNvcmVfZmlsdGVyc1xcbi0gKlxcbi0gKiBUaGUgbWluaW11bSBlbnRpdHkgdGhhdCBAYWN0aW9uIGNhbiBiZSBhcHBsaWVkIGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmdcXG4tICogXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkIHdpdGggdGhlIGNvcmUgbGF5ZXJcXG4tICogYWJzdHJhY3QsIG5hbWVseSBcXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5XFxuLSAqIEBhY3Rpb24gdG8gc2FtZSBlbnRpdHkgbXVsdGlwbGUgdGltZXMuICBMYXJnZSBmb2xpb3MgdGhhdCB1bmRlcmx5aW5nIG9uXFxuLSAqIG11bHRpcGxlIFxcdTAwMjZzdHJ1Y3QgZGFtb24gcmVnaW9uIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSBcXHUwMDI2c3RydWN0XFxuLSAqIGRhbW9uX29wZXJhdGlvbnMgY2FuIHVzZSBAbGFzdF9hcHBsaWVkIHRvIGF2b2lkIHRoYXQuICBEQU1PUyBjb3JlIGxvZ2ljXFxuLSAqIHVuc2V0cyBAbGFzdF9hcHBsaWVkIHdoZW4gZWFjaCByZWdpb25zIHdhbGtpbmcgZm9yIGFwcGx5aW5nIHRoZSBzY2hlbWUgaXNcXG4tICogZmluaXNoZWQuXFxuKyAqIFxcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyLlxcbiAgKlxcbiAgKiBBZnRlciBhcHBseWluZyB0aGUgXFx1MDAyNmFjdGlvbiB0byBlYWNoIHJlZ2lvbiwgXFx1MDAyNnN0YXQgaXMgdXBkYXRlZC5cXG4gICpcXG5AQCAtNTYyLDYgKzU1NiwxNiBAQCBzdHJ1Y3QgZGFtb3Mge1xcbiBcXHRzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gcGF0dGVybjtcXG4gXFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uO1xcbiBcXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzO1xcbitcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XFxuK1xcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcztcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHRpbnQgdGFyZ2V0X25pZDtcXG4rXFx0XFx0XFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0cztcXG4rXFx0XFx0fTtcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGRhbW9zX3N0YXQgc3RhdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzO1xcbiAvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seSAqL1xcbiBcXHQvKlxcbiBcXHQgKiBudW1iZXIgb2Ygc2FtcGxlIGludGVydmFscyB0aGF0IHNob3VsZCBiZSBwYXNzZWQgYmVmb3JlIGFwcGx5aW5nXFxuQEAgLTU3OCwyMCArNTgyLDI1IEBAIHN0cnVjdCBkYW1vcyB7XFxuIFxcdC8qIHdoZXRoZXIgdG8gcmVqZWN0IGNvcmUvb3BzIGZpbHRlcnMgdW1hdGNoZWQgcmVnaW9ucyAqL1xcbiBcXHRib29sIGNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdDtcXG4gXFx0Ym9vbCBvcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdDtcXG4tLyogcHVibGljOiAqL1xcbi1cXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XFxuLVxcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcztcXG4tXFx0dW5pb24ge1xcbi1cXHRcXHRzdHJ1Y3Qge1xcbi1cXHRcXHRcXHRpbnQgdGFyZ2V0X25pZDtcXG4tXFx0XFx0XFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0cztcXG4tXFx0XFx0fTtcXG4tXFx0fTtcXG4rXFx0LyogQWRkaXRpb25hbCBzZXQgb2YgXFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIgZm9yIFxcdTAwMjZhY3Rpb24uICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgY29yZV9maWx0ZXJzO1xcbitcXHQvKiBvcHMgbGF5ZXIgaGFuZGxpbmcgXFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIgb2JqZWN0cyBsaXN0LiAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIG9wc19maWx0ZXJzO1xcbitcXHQvKlxcbitcXHQgKiBMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LlxcbitcXHQgKlxcbitcXHQgKiBUaGUgbWluaW11bSBlbnRpdHkgdGhhdCBAYWN0aW9uIGNhbiBiZSBhcHBsaWVkIGRlcGVuZHMgb24gdGhlXFxuK1xcdCAqIHVuZGVybHlpbmcgXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkXFxuK1xcdCAqIHdpdGggdGhlIGNvcmUgbGF5ZXIgYWJzdHJhY3QsIG5hbWVseSBcXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXFx1MDAyNnN0cnVjdFxcbitcXHQgKiBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5IEBhY3Rpb24gdG8gc2FtZSBlbnRpdHkgbXVsdGlwbGUgdGltZXMuXFxuK1xcdCAqIExhcmdlIGZvbGlvcyB0aGF0IHVuZGVybHlpbmcgb24gbXVsdGlwbGUgXFx1MDAyNnN0cnVjdCBkYW1vbiByZWdpb25cXG4rXFx0ICogb2JqZWN0cyBjb3VsZCBiZSBzdWNoIGV4YW1wbGVzLiAgVGhlIFxcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBjYW5cXG4rXFx0ICogdXNlIEBsYXN0X2FwcGxpZWQgdG8gYXZvaWQgdGhhdC4gIERBTU9TIGNvcmUgbG9naWMgdW5zZXRzXFxuK1xcdCAqIEBsYXN0X2FwcGxpZWQgd2hlbiBlYWNoIHJlZ2lvbnMgd2Fsa2luZyBmb3IgYXBwbHlpbmcgdGhlIHNjaGVtZSBpc1xcbitcXHQgKiBmaW5pc2hlZC5cXG4rXFx0ICovXFxuIFxcdHZvaWQgKmxhc3RfYXBwbGllZDtcXG4tXFx0c3RydWN0IGRhbW9zX3N0YXQgc3RhdDtcXG4tXFx0dW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzO1xcbitcXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIH07XFxuIFxcbkBAIC03NDksNyArNzU4LDYgQEAgZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB7XFxuICAqIEBtYXRjaGluZzpcXHRXaGV0aGVyIHRoaXMgZmlsdGVyIGlzIGZvciB0aGUgdHlwZS1tYXRjaGluZyBvbmVzLlxcbiAgKiBAYWxsb3c6XFx0V2hldGhlciB0aGUgQHR5cGUtQG1hdGNoaW5nIG9uZXMgc2hvdWxkIHBhc3MgdGhpcyBmaWx0ZXIuXFxuICAqIEBtZW1jZ19pZDpcXHRNZW1jZyBpZCBvZiB0aGUgcXVlc3Rpb24gaWYgQHR5cGUgaXMgREFNT05fRklMVEVSX01FTUNHLlxcbi0gKiBAbGlzdDpcXHRTaWJsaW5ncyBsaXN0LlxcbiAgKi9cXG4gc3RydWN0IGRhbW9uX2ZpbHRlciB7XFxuIFxcdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcXG5AQCAtNzU4LDYgKzc2Niw4IEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIge1xcbiBcXHR1bmlvbiB7XFxuIFxcdFxcdHU2NCBtZW1jZ19pZDtcXG4gXFx0fTtcXG4rLyogcHJpdmF0ZTogKi9cXG4rXFx0LyogU2libGluZ3MgbGlzdC4gKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiB9O1xcbiBcXG5AQCAtNzY1LDEyICs3NzUsMTMgQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7XFxuICAqIHN0cnVjdCBkYW1vbl9wcm9iZSAtIERhdGEgcmVnaW9uIGF0dHJpYnV0ZSBwcm9iZS5cXG4gICpcXG4gICogQHdlaWdodDpcXHRSZWxhdGl2ZSBwcmlvcml0eSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGlzIHByb2JlLlxcbi0gKiBAZmlsdGVyczpcXHRGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuXFxuLSAqIEBsaXN0OlxcdFNpYmxpbmdzIGxpc3QuXFxuICAqL1xcbiBzdHJ1Y3QgZGFtb25fcHJvYmUge1xcbiBcXHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xcbisvKiBwcml2YXRlOiAqL1xcbitcXHQvKiBGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZmlsdGVycztcXG4rXFx0LyogU2libGluZ3MgbGlzdC4gKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiB9O1xcbiBcXG5AQCAtODM3LDE0ICs4NDgsOSBAQCBzdHJ1Y3QgZGFtb25fYXR0cnMge1xcbiAgKiB0aHJlYWQgb3RoZXIgdGhhbiB0aGUga2RhbW9uZCBzaG91bGQgYmUgbWFkZSB1c2luZyBzYWZlIERBTU9OIEFQSXMsXFxuICAqIGluY2x1ZGluZyBkYW1vbl9jYWxsKCkgYW5kIGRhbW9zX3dhbGsoKS5cXG4gICpcXG4tICogQG9wczpcXHRTZXQgb2YgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuXFxuLSAqIEBwcm9iZXM6XFx0SGVhZCBvZiBwcm9iZXMgKFxcdTAwMjZkYW1vbl9wcm9iZSkgbGlzdC5cXG4gICogQGFkZHJfdW5pdDpcXHRTY2FsZSBmYWN0b3IgZm9yIGNvcmUgdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbi5cXG4gICogQG1pbl9yZWdpb25fc3o6XFx0TWluaW11bSByZWdpb24gc2l6ZS5cXG4gICogQHBhdXNlOlxcdFBhdXNlIGtkYW1vbmQgbWFpbiBsb29wLlxcbi0gKiBAYWRhcHRpdmVfdGFyZ2V0czpcXHRIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoXFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC5cXG4tICogQHNjaGVtZXM6XFx0XFx0SGVhZCBvZiBzY2hlbWVzIChcXHUwMDI2ZGFtb3MpIGxpc3QuXFxuLSAqIEBybmRfc3RhdGU6XFx0UGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuXFxuICAqL1xcbiBzdHJ1Y3QgZGFtb25fY3R4IHtcXG4gXFx0c3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzO1xcbkBAIC04OTMsMTUgKzg5OSwyMSBAQCBzdHJ1Y3QgZGFtb25fY3R4IHtcXG4gXFx0c3RydWN0IG11dGV4IGtkYW1vbmRfbG9jaztcXG4gXFxuIC8qIHB1YmxpYzogKi9cXG4tXFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzO1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlcztcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zejtcXG4gXFx0Ym9vbCBwYXVzZTtcXG4gXFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdC8qIFNldCBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIGdpdmVuIHVzZSBjYXNlcy4gKi9cXG4rXFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzO1xcbitcXHQvKiBIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoXFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC4gKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBhZGFwdGl2ZV90YXJnZXRzO1xcbitcXHQvKiBIZWFkIG9mIHByb2JlcyAoXFx1MDAyNmRhbW9uX3Byb2JlKSBsaXN0LiAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlcztcXG4rXFx0LyogSGVhZCBvZiBzY2hlbWVzIChcXHUwMDI2ZGFtb3MpIGxpc3QuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgc2NoZW1lcztcXG4gXFxuK1xcdC8qIEBybmRfc3RhdGU6XFx0UGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuICovXFxuIFxcdHN0cnVjdCBybmRfc3RhdGUgcm5kX3N0YXRlO1xcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5pbmRleCBiNWZlMDM2Zjc4MDE1Mi4uMjA4YmI2MzlmNTBmZmIgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5AQCAtMjA1MSw3ICsyMDUxLDcgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbiBcXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xcbi1cXHRpZiAoY3R4LVxcdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSIFxcdTAwMjZcXHUwMDI2IHN5c2ZzX3RhcmdldHMtXFx1MDAzZW5yIFxcdTAwM2UgMSlcXG4rXFx0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFxcdTAwMjZcXHUwMDI2IHN5c2ZzX3RhcmdldHMtXFx1MDAzZW5yIFxcdTAwM2UgMSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3lzZnNfdGFyZ2V0cy1cXHUwMDNlbnI7IGkrKykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo0OToyMS4wNTY4NzAwMzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTgzNjQwNTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHN0cnVjdHVyYWwgcmVhcnJhbmdlbWVudHMgb2YgZmllbGRzIGluIGluY2x1ZGUvbGludXgvZGFtb24uaCwgYWRkcyBjb21tZW50cywgYW5kIHJlcGxhY2VzIGEgZGlyZWN0IGVudW0gY29tcGFyaXNvbiB3aXRoIGFuIGVxdWl2YWxlbnQgaGVscGVyIGZ1bmN0aW9uIChkYW1vbl90YXJnZXRfaGFzX3BpZCkgaW4gbW0vZGFtb24vc3lzZnMuYy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFkMDk1N2RkYzZiYjQwZjg4ZjIyMDAyNzBmYzAxMTI5MjljNjEzYjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAwMDo0OToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggZjY5NDQyYTlkNDMxMjguLjMyN2Y1MzQ2OTZhYTg1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC00Niw3ICs0Niw2IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHtcbiAgKiBAc2FtcGxpbmdfYWRkcjpcdEFkZHJlc3Mgb2YgdGhlIHNhbXBsZSBmb3IgdGhlIG5leHQgYWNjZXNzIGNoZWNrLlxuICAqIEBucl9hY2Nlc3NlczpcdEFjY2VzcyBmcmVxdWVuY3kgb2YgdGhpcyByZWdpb24uXG4gICogQHByb2JlX2hpdHM6XHRcdE51bWJlciBvZiBwcm9iZS1wb3NpdGl2ZSByZWdpb24gc2FtcGxlcy5cbi0gKiBAbGlzdDpcdFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKiBAYWdlOlx0XHRBZ2Ugb2YgdGhpcyByZWdpb24uXG4gICpcbiAgKiBGb3IgYW55IHVzZSBjYXNlLCBAYXIgc2hvdWxkIGJlIG5vbi16ZXJvIHBvc2l0aXZlIHNpemUuICBkYW1vbl9zZXRfcmVnaW9ucygpXG5AQCAtNjgsOSArNjcsMTEgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNhbXBsaW5nX2FkZHI7XG4gXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXM7XG4gXHR1bnNpZ25lZCBjaGFyIHByb2JlX2hpdHNbREFNT05fTUFYX1BST0JFU107XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHR1bnNpZ25lZCBpbnQgYWdlO1xuLS8qIHByaXZhdGU6IEludGVybmFsIHZhbHVlIGZvciBhZ2UgY2FsY3VsYXRpb24uICovXG4rLyogcHJpdmF0ZTogaW50ZXJuYWwgdXNlIG9ubHkuICovXG4rXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1x0LyogZm9yIGFnZSBjYWxjdWxhdGlvbi4gKi9cbiBcdHVuc2lnbmVkIGludCBsYXN0X25yX2FjY2Vzc2VzO1xuIFx0dW5zaWduZWQgY2hhciBsYXN0X3Byb2JlX2hpdHNbREFNT05fTUFYX1BST0JFU107XG4gfTtcbkBAIC03OCw5ICs3OSw2IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24ge1xuIC8qKlxuICAqIHN0cnVjdCBkYW1vbl90YXJnZXQgLSBSZXByZXNlbnRzIGEgbW9uaXRvcmluZyB0YXJnZXQuXG4gICogQHBpZDpcdFx0VGhlIFBJRCBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRvIG1vbml0b3IuXG4tICogQG5yX3JlZ2lvbnM6XHRcdE51bWJlciBvZiBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LlxuLSAqIEByZWdpb25zX2xpc3Q6XHRIZWFkIG9mIHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqIEBvYnNvbGV0ZTpcdFx0V2hldGhlciB0aGUgY29tbWl0IGRlc3RpbmF0aW9uIHRhcmdldCBpcyBvYnNvbGV0ZS5cbiAgKlxuICAqIEVhY2ggbW9uaXRvcmluZyBjb250ZXh0IGNvdWxkIGhhdmUgbXVsdGlwbGUgdGFyZ2V0cy4gIEZvciBleGFtcGxlLCBhIGNvbnRleHRcbkBAIC05NCwxMCArOTIsMTQgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XG4gICovXG4gc3RydWN0IGRhbW9uX3RhcmdldCB7XG4gXHRzdHJ1Y3QgcGlkICpwaWQ7XG4rXHRib29sIG9ic29sZXRlO1xuKy8qIHByaXZhdGU6ICovXG4rXHQvKiBOdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4gKi9cbiBcdHVuc2lnbmVkIGludCBucl9yZWdpb25zO1xuK1x0LyogSGVhZCBvZiB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgcmVnaW9uc19saXN0O1xuK1x0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi1cdGJvb2wgb2Jzb2xldGU7XG4gfTtcbiBcbiAvKipcbkBAIC0xNzMsMTAgKzE3NSw4IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xuICAqIEBtZXRyaWM6XHRcdE1ldHJpYyB0byBiZSB1c2VkIGZvciByZXByZXNlbnRpbmcgdGhlIGdvYWwuXG4gICogQHRhcmdldF92YWx1ZTpcdFRhcmdldCB2YWx1ZSBvZiBAbWV0cmljIHRvIGFjaGlldmUgd2l0aCB0aGUgdHVuaW5nLlxuICAqIEBjdXJyZW50X3ZhbHVlOlx0Q3VycmVudCB2YWx1ZSBvZiBAbWV0cmljLlxuLSAqIEBsYXN0X3BzaV90b3RhbDpcdExhc3QgbWVhc3VyZWQgdG90YWwgUFNJXG4gICogQG5pZDpcdFx0Tm9kZSBpZC5cbiAgKiBAbWVtY2dfaWQ6XHRcdE1lbWNnIGlkLlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqXG4gICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgc2NvcmUgb2YgdGhlIHF1b3RhIHR1bmluZyBnb2FsLiAgVGhlXG4gICogc2NvcmUgaXMgY2FsY3VsYXRlZCBieSBob3cgY2xvc2UgQGN1cnJlbnRfdmFsdWUgYW5kIEB0YXJnZXRfdmFsdWUgYXJlLiAgVGhlblxuQEAgLTE5OSwxMiArMTk5LDE3IEBAIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHtcbiBcdHVuc2lnbmVkIGxvbmcgY3VycmVudF92YWx1ZTtcbiBcdC8qIG1ldHJpYy1kZXBlbmRlbnQgZmllbGRzICovXG4gXHR1bmlvbiB7XG4tXHRcdHU2NCBsYXN0X3BzaV90b3RhbDtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHRpbnQgbmlkO1xuIFx0XHRcdHU2NCBtZW1jZ19pZDtcbiBcdFx0fTtcbisvKiBwcml2YXRlOiAqL1xuK1x0XHQvKiBMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSSAqL1xuK1x0XHR1NjQgbGFzdF9wc2lfdG90YWw7XG4rXG4gXHR9O1xuKy8qIHByaXZhdGU6ICovXG4rXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtMjIzLDcgKzIyOCw2IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XG4gICogQHJlc2V0X2ludGVydmFsOlx0Q2hhcmdlIHJlc2V0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cbiAgKiBAbXM6XHRcdFx0TWF4aW11bSBtaWxsaXNlY29uZHMgdGhhdCB0aGUgc2NoZW1lIGNhbiB1c2UuXG4gICogQHN6Olx0XHRcdE1heGltdW0gYnl0ZXMgb2YgbWVtb3J5IHRoYXQgdGhlIGFjdGlvbiBjYW4gYmUgYXBwbGllZC5cbi0gKiBAZ29hbHM6XHRcdEhlYWQgb2YgcXVvdGEgdHVuaW5nIGdvYWxzIChcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LlxuICAqIEBnb2FsX3R1bmVyOlx0XHRHb2FsLWJhc2VkIEBlc3ogdHVuaW5nIGFsZ29yaXRobSB0byB1c2UuXG4gICogQGVzejpcdFx0RWZmZWN0aXZlIHNpemUgcXVvdGEgaW4gYnl0ZXMuXG4gICogQGZhaWxfY2hhcmdlX251bTpcdEZhaWxlZCByZWdpb25zIGNoYXJnZSByYXRlIG51bWVyYXRvci5cbkBAIC0yNTAsNyArMjU0LDcgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcbiAgKiB0aGUgc2NoZW1lJ3MgYWN0aW9uLiAgREFNT04gdGhlbiBjb21wYXJlcyBpdCBhZ2FpbnN0IFx1MDAyNnN6IGFuZCB1c2VzIHNtYWxsZXJcbiAgKiBvbmUgYXMgdGhlIGVmZmVjdGl2ZSBxdW90YS5cbiAgKlxuLSAqIElmIEBnb2FscyBpcyBub3QgZW1wdHksIERBTU9OIGNhbGN1bGF0ZXMgeWV0IGFub3RoZXIgc2l6ZSBxdW90YSBiYXNlZCBvbiB0aGVcbisgKiBJZiBnb2FscyBpcyBub3QgZW1wdHksIERBTU9OIGNhbGN1bGF0ZXMgeWV0IGFub3RoZXIgc2l6ZSBxdW90YSBiYXNlZCBvbiB0aGVcbiAgKiBnb2FscyB1c2luZyBpdHMgaW50ZXJuYWwgZmVlZGJhY2sgbG9vcCBhbGdvcml0aG0sIGZvciBldmVyeSBAcmVzZXRfaW50ZXJ2YWwuXG4gICogVGhlbiwgaWYgdGhlIG5ldyBzaXplIHF1b3RhIGlzIHNtYWxsZXIgdGhhbiB0aGUgZWZmZWN0aXZlIHF1b3RhLCBpdCB1c2VzIHRoZVxuICAqIG5ldyBzaXplIHF1b3RhIGFzIHRoZSBlZmZlY3RpdmUgcXVvdGEuXG5AQCAtMjcxLDcgKzI3NSw3IEBAIHN0cnVjdCBkYW1vc19xdW90YSB7XG4gXHR1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsO1xuIFx0dW5zaWduZWQgbG9uZyBtcztcbiBcdHVuc2lnbmVkIGxvbmcgc3o7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xuK1xuIFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIGdvYWxfdHVuZXI7XG4gXHR1bnNpZ25lZCBsb25nIGVzejtcbiBcbkBAIC0yODMsNiArMjg3LDggQEAgc3RydWN0IGRhbW9zX3F1b3RhIHtcbiBcdHVuc2lnbmVkIGludCB3ZWlnaHRfYWdlO1xuIFxuIC8qIHByaXZhdGU6ICovXG4rXHQvKiBIZWFkIG9mIHF1b3RhIHR1bmluZyBnb2FscyAoXHUwMDI2ZGFtb3NfcXVvdGFfZ29hbCkgbGlzdC4gKi9cbitcdHN0cnVjdCBsaXN0X2hlYWQgZ29hbHM7XG4gXHQvKiBGb3IgdGhyb3VnaHB1dCBlc3RpbWF0aW9uICovXG4gXHR1bnNpZ25lZCBsb25nIHRvdGFsX2NoYXJnZWRfc3o7XG4gXHR1bnNpZ25lZCBsb25nIHRvdGFsX2NoYXJnZWRfbnM7XG5AQCAtNDI2LDcgKzQzMiw2IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuICAqXHRcdFx1MDAyNmRhbW9uX2N0eC1cdTAwM2VhZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzXG4gICpcdFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULlxuICAqIEBzel9yYW5nZTpcdFNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS5cbi0gKiBAbGlzdDpcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXG4gICpcbiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlIFx1MDAyNmRhbW9zLVx1MDAzZWFjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIERBTU9TIGNoZWNrcyBpZiBlYWNoXG4gICogYnl0ZSBvZiB0aGUgcmVnaW9uIG1hdGNoZXMgdG8gdGhpcyBnaXZlbiBjb25kaXRpb24gYW5kIGF2b2lkIGFwcGx5aW5nIHRoZVxuQEAgLTQ0NCw2ICs0NDksOCBAQCBzdHJ1Y3QgZGFtb3NfZmlsdGVyIHtcbiBcdFx0aW50IHRhcmdldF9pZHg7XG4gXHRcdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xuIFx0fTtcbisvKiBwcml2YXRlOiAqL1xuK1x0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiB9O1xuIFxuQEAgLTUxNSwxMiArNTIyLDggQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xuICAqIEB3bWFya3M6XHRcdFdhdGVybWFya3MgZm9yIGF1dG9tYXRlZCAoaW4pYWN0aXZhdGlvbiBvZiB0aGlzIHNjaGVtZS5cbiAgKiBAbWlncmF0ZV9kZXN0czpcdERlc3RpbmF0aW9uIG5vZGVzIGlmIEBhY3Rpb24gaXMgXCJtaWdyYXRlX3tob3QsY29sZH1cIi5cbiAgKiBAdGFyZ2V0X25pZDpcdFx0RGVzdGluYXRpb24gbm9kZSBpZiBAYWN0aW9uIGlzIFwibWlncmF0ZV97aG90LGNvbGR9XCIuXG4tICogQGNvcmVfZmlsdGVyczpcdEFkZGl0aW9uYWwgc2V0IG9mIFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIgZm9yIFx1MDAyNmFjdGlvbi5cbi0gKiBAb3BzX2ZpbHRlcnM6XHRvcHMgbGF5ZXIgaGFuZGxpbmcgXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlciBvYmplY3RzIGxpc3QuXG4tICogQGxhc3RfYXBwbGllZDpcdExhc3QgQGFjdGlvbiBhcHBsaWVkIG9wcy1tYW5hZ2luZyBlbnRpdHkuXG4gICogQHN0YXQ6XHRcdFN0YXRpc3RpY3Mgb2YgdGhpcyBzY2hlbWUuXG4gICogQG1heF9ucl9zbmFwc2hvdHM6XHRVcHBlciBsaW1pdCBvZiBucl9zbmFwc2hvdHMgc3RhdC5cbi0gKiBAbGlzdDpcdFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKlxuICAqIEZvciBlYWNoIEBhcHBseV9pbnRlcnZhbF91cywgREFNT04gZmluZHMgcmVnaW9ucyB3aGljaCBmaXQgaW4gdGhlXG4gICogXHUwMDI2cGF0dGVybiBhbmQgYXBwbGllcyBcdTAwMjZhY3Rpb24gdG8gdGhvc2UuIFRvIGF2b2lkIGNvbnN1bWluZyB0b28gbXVjaFxuQEAgLTU0MiwxNiArNTQ1LDcgQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xuICAqXG4gICogQmVmb3JlIGFwcGx5aW5nIHRoZSBcdTAwMjZhY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9uc1xuICAqIGltcGxlbWVudGF0aW9uIGNvdWxkIGNoZWNrIHBhZ2VzIG9mIHRoZSByZWdpb24gYW5kIHNraXAgXHUwMDI2YWN0aW9uIHRvIHJlc3BlY3Rcbi0gKiBcdTAwMjZjb3JlX2ZpbHRlcnNcbi0gKlxuLSAqIFRoZSBtaW5pbXVtIGVudGl0eSB0aGF0IEBhY3Rpb24gY2FuIGJlIGFwcGxpZWQgZGVwZW5kcyBvbiB0aGUgdW5kZXJseWluZ1xuLSAqIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkIHdpdGggdGhlIGNvcmUgbGF5ZXJcbi0gKiBhYnN0cmFjdCwgbmFtZWx5IFx1MDAyNnN0cnVjdCBkYW1vbl9yZWdpb24sIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5XG4tICogQGFjdGlvbiB0byBzYW1lIGVudGl0eSBtdWx0aXBsZSB0aW1lcy4gIExhcmdlIGZvbGlvcyB0aGF0IHVuZGVybHlpbmcgb25cbi0gKiBtdWx0aXBsZSBcdTAwMjZzdHJ1Y3QgZGFtb24gcmVnaW9uIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSBcdTAwMjZzdHJ1Y3Rcbi0gKiBkYW1vbl9vcGVyYXRpb25zIGNhbiB1c2UgQGxhc3RfYXBwbGllZCB0byBhdm9pZCB0aGF0LiAgREFNT1MgY29yZSBsb2dpY1xuLSAqIHVuc2V0cyBAbGFzdF9hcHBsaWVkIHdoZW4gZWFjaCByZWdpb25zIHdhbGtpbmcgZm9yIGFwcGx5aW5nIHRoZSBzY2hlbWUgaXNcbi0gKiBmaW5pc2hlZC5cbisgKiBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyLlxuICAqXG4gICogQWZ0ZXIgYXBwbHlpbmcgdGhlIFx1MDAyNmFjdGlvbiB0byBlYWNoIHJlZ2lvbiwgXHUwMDI2c3RhdCBpcyB1cGRhdGVkLlxuICAqXG5AQCAtNTYyLDYgKzU1NiwxNiBAQCBzdHJ1Y3QgZGFtb3Mge1xuIFx0c3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuIHBhdHRlcm47XG4gXHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb247XG4gXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzO1xuK1x0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhO1xuK1x0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzO1xuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3Qge1xuK1x0XHRcdGludCB0YXJnZXRfbmlkO1xuK1x0XHRcdHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIG1pZ3JhdGVfZGVzdHM7XG4rXHRcdH07XG4rXHR9O1xuK1x0c3RydWN0IGRhbW9zX3N0YXQgc3RhdDtcbitcdHVuc2lnbmVkIGxvbmcgbWF4X25yX3NuYXBzaG90cztcbiAvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seSAqL1xuIFx0LypcbiBcdCAqIG51bWJlciBvZiBzYW1wbGUgaW50ZXJ2YWxzIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBiZWZvcmUgYXBwbHlpbmdcbkBAIC01NzgsMjAgKzU4MiwyNSBAQCBzdHJ1Y3QgZGFtb3Mge1xuIFx0Lyogd2hldGhlciB0byByZWplY3QgY29yZS9vcHMgZmlsdGVycyB1bWF0Y2hlZCByZWdpb25zICovXG4gXHRib29sIGNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdDtcbiBcdGJvb2wgb3BzX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Q7XG4tLyogcHVibGljOiAqL1xuLVx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhO1xuLVx0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzO1xuLVx0dW5pb24ge1xuLVx0XHRzdHJ1Y3Qge1xuLVx0XHRcdGludCB0YXJnZXRfbmlkO1xuLVx0XHRcdHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIG1pZ3JhdGVfZGVzdHM7XG4tXHRcdH07XG4tXHR9O1xuK1x0LyogQWRkaXRpb25hbCBzZXQgb2YgXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlciBmb3IgXHUwMDI2YWN0aW9uLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBjb3JlX2ZpbHRlcnM7XG4rXHQvKiBvcHMgbGF5ZXIgaGFuZGxpbmcgXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlciBvYmplY3RzIGxpc3QuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG9wc19maWx0ZXJzO1xuK1x0LypcbitcdCAqIExhc3QgQGFjdGlvbiBhcHBsaWVkIG9wcy1tYW5hZ2luZyBlbnRpdHkuXG4rXHQgKlxuK1x0ICogVGhlIG1pbmltdW0gZW50aXR5IHRoYXQgQGFjdGlvbiBjYW4gYmUgYXBwbGllZCBkZXBlbmRzIG9uIHRoZVxuK1x0ICogdW5kZXJseWluZyBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy4gIFNpbmNlIGl0IG1heSBub3QgYmUgYWxpZ25lZFxuK1x0ICogd2l0aCB0aGUgY29yZSBsYXllciBhYnN0cmFjdCwgbmFtZWx5IFx1MDAyNnN0cnVjdCBkYW1vbl9yZWdpb24sIFx1MDAyNnN0cnVjdFxuK1x0ICogZGFtb25fb3BlcmF0aW9ucyBjb3VsZCBhcHBseSBAYWN0aW9uIHRvIHNhbWUgZW50aXR5IG11bHRpcGxlIHRpbWVzLlxuK1x0ICogTGFyZ2UgZm9saW9zIHRoYXQgdW5kZXJseWluZyBvbiBtdWx0aXBsZSBcdTAwMjZzdHJ1Y3QgZGFtb24gcmVnaW9uXG4rXHQgKiBvYmplY3RzIGNvdWxkIGJlIHN1Y2ggZXhhbXBsZXMuICBUaGUgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgY2FuXG4rXHQgKiB1c2UgQGxhc3RfYXBwbGllZCB0byBhdm9pZCB0aGF0LiAgREFNT1MgY29yZSBsb2dpYyB1bnNldHNcbitcdCAqIEBsYXN0X2FwcGxpZWQgd2hlbiBlYWNoIHJlZ2lvbnMgd2Fsa2luZyBmb3IgYXBwbHlpbmcgdGhlIHNjaGVtZSBpc1xuK1x0ICogZmluaXNoZWQuXG4rXHQgKi9cbiBcdHZvaWQgKmxhc3RfYXBwbGllZDtcbi1cdHN0cnVjdCBkYW1vc19zdGF0IHN0YXQ7XG4tXHR1bnNpZ25lZCBsb25nIG1heF9ucl9zbmFwc2hvdHM7XG4rXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtNzQ5LDcgKzc1OCw2IEBAIGVudW0gZGFtb25fZmlsdGVyX3R5cGUge1xuICAqIEBtYXRjaGluZzpcdFdoZXRoZXIgdGhpcyBmaWx0ZXIgaXMgZm9yIHRoZSB0eXBlLW1hdGNoaW5nIG9uZXMuXG4gICogQGFsbG93Olx0V2hldGhlciB0aGUgQHR5cGUtQG1hdGNoaW5nIG9uZXMgc2hvdWxkIHBhc3MgdGhpcyBmaWx0ZXIuXG4gICogQG1lbWNnX2lkOlx0TWVtY2cgaWQgb2YgdGhlIHF1ZXN0aW9uIGlmIEB0eXBlIGlzIERBTU9OX0ZJTFRFUl9NRU1DRy5cbi0gKiBAbGlzdDpcdFNpYmxpbmdzIGxpc3QuXG4gICovXG4gc3RydWN0IGRhbW9uX2ZpbHRlciB7XG4gXHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XG5AQCAtNzU4LDYgKzc2Niw4IEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIge1xuIFx0dW5pb24ge1xuIFx0XHR1NjQgbWVtY2dfaWQ7XG4gXHR9O1xuKy8qIHByaXZhdGU6ICovXG4rXHQvKiBTaWJsaW5ncyBsaXN0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtNzY1LDEyICs3NzUsMTMgQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7XG4gICogc3RydWN0IGRhbW9uX3Byb2JlIC0gRGF0YSByZWdpb24gYXR0cmlidXRlIHByb2JlLlxuICAqXG4gICogQHdlaWdodDpcdFJlbGF0aXZlIHByaW9yaXR5IG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHRoaXMgcHJvYmUuXG4tICogQGZpbHRlcnM6XHRGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuXG4tICogQGxpc3Q6XHRTaWJsaW5ncyBsaXN0LlxuICAqL1xuIHN0cnVjdCBkYW1vbl9wcm9iZSB7XG4gXHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xuKy8qIHByaXZhdGU6ICovXG4rXHQvKiBGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZpbHRlcnM7XG4rXHQvKiBTaWJsaW5ncyBsaXN0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtODM3LDE0ICs4NDgsOSBAQCBzdHJ1Y3QgZGFtb25fYXR0cnMge1xuICAqIHRocmVhZCBvdGhlciB0aGFuIHRoZSBrZGFtb25kIHNob3VsZCBiZSBtYWRlIHVzaW5nIHNhZmUgREFNT04gQVBJcyxcbiAgKiBpbmNsdWRpbmcgZGFtb25fY2FsbCgpIGFuZCBkYW1vc193YWxrKCkuXG4gICpcbi0gKiBAb3BzOlx0U2V0IG9mIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgZ2l2ZW4gdXNlIGNhc2VzLlxuLSAqIEBwcm9iZXM6XHRIZWFkIG9mIHByb2JlcyAoXHUwMDI2ZGFtb25fcHJvYmUpIGxpc3QuXG4gICogQGFkZHJfdW5pdDpcdFNjYWxlIGZhY3RvciBmb3IgY29yZSB0byBvcHMgYWRkcmVzcyBjb252ZXJzaW9uLlxuICAqIEBtaW5fcmVnaW9uX3N6Olx0TWluaW11bSByZWdpb24gc2l6ZS5cbiAgKiBAcGF1c2U6XHRQYXVzZSBrZGFtb25kIG1haW4gbG9vcC5cbi0gKiBAYWRhcHRpdmVfdGFyZ2V0czpcdEhlYWQgb2YgbW9uaXRvcmluZyB0YXJnZXRzIChcdTAwMjZkYW1vbl90YXJnZXQpIGxpc3QuXG4tICogQHNjaGVtZXM6XHRcdEhlYWQgb2Ygc2NoZW1lcyAoXHUwMDI2ZGFtb3MpIGxpc3QuXG4tICogQHJuZF9zdGF0ZTpcdFBlci1jdHggUFJORyBzdGF0ZSBmb3IgZGFtb25fcmFuZCgpLlxuICAqL1xuIHN0cnVjdCBkYW1vbl9jdHgge1xuIFx0c3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzO1xuQEAgLTg5MywxNSArODk5LDIxIEBAIHN0cnVjdCBkYW1vbl9jdHgge1xuIFx0c3RydWN0IG11dGV4IGtkYW1vbmRfbG9jaztcbiBcbiAvKiBwdWJsaWM6ICovXG4tXHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHM7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlcztcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0O1xuIFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6O1xuIFx0Ym9vbCBwYXVzZTtcbiBcbisvKiBwcml2YXRlOiAqL1xuK1x0LyogU2V0IG9mIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgZ2l2ZW4gdXNlIGNhc2VzLiAqL1xuK1x0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzO1xuK1x0LyogSGVhZCBvZiBtb25pdG9yaW5nIHRhcmdldHMgKFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgYWRhcHRpdmVfdGFyZ2V0cztcbitcdC8qIEhlYWQgb2YgcHJvYmVzIChcdTAwMjZkYW1vbl9wcm9iZSkgbGlzdC4gKi9cbitcdHN0cnVjdCBsaXN0X2hlYWQgcHJvYmVzO1xuK1x0LyogSGVhZCBvZiBzY2hlbWVzIChcdTAwMjZkYW1vcykgbGlzdC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgc2NoZW1lcztcbiBcbitcdC8qIEBybmRfc3RhdGU6XHRQZXItY3R4IFBSTkcgc3RhdGUgZm9yIGRhbW9uX3JhbmQoKS4gKi9cbiBcdHN0cnVjdCBybmRfc3RhdGUgcm5kX3N0YXRlO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcbmluZGV4IGI1ZmUwMzZmNzgwMTUyLi4yMDhiYjYzOWY1MGZmYiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcbkBAIC0yMDUxLDcgKzIwNTEsNyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdGludCBpLCBlcnI7XG4gXG4gXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xuLVx0aWYgKGN0eC1cdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxuK1x0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN5c2ZzX3RhcmdldHMtXHUwMDNlbnI7IGkrKykge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NDk6MjEuMDU2ODcxOTI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3ODQ1ODMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBwYXRjaCwgYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2Ugd2UncmUgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvZGFtb24uaGAgYW5kIGBtbS9kYW1vbi9zeXNmcy5jYC4gVGhlIGhlYWRlciBmaWxlIG1vZGlmaWNhdGlvbnMgc2VlbSBjb3NtZXRpYyDigJMgcmVhcnJhbmdpbmcgY29tbWVudHMsIHJlb3JkZXJpbmcgc3RydWN0IGZpZWxkcywgYW5kIGFkZGluZyBgLyogcHJpdmF0ZTogKi9gIGJsb2Nrcy4gTW9zdGx5IGZvcm1hdHRpbmcsIHdoaWNoIGlzIGZpbmUsIGJ1dCBJJ2xsIHN0aWxsIGdsYW5jZSB0aHJvdWdoIGl0IHRvIG1ha2Ugc3VyZSBub3RoaW5nIHdhcyBhY2NpZGVudGFsbHkgY2hhbmdlZC5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGlzIGlzIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gVGhlIGNvcmUgY2hhbmdlIGlzIGEgbG9naWNhbCBhZGp1c3RtZW50IGluIHRoaXMgY29kZSBibG9jazpcblxuYGBgY1xuLVx0aWYgKGN0eC1cdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxuK1x0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxuYGBgXG5cbldlJ3JlIHJlcGxhY2luZyBhIGNoZWNrIGJhc2VkIG9uIHRoZSBvcGVyYXRpb24gSUQgKGBEQU1PTl9PUFNfUEFERFJgKSB3aXRoIGEgY2FsbCB0byBgZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KWAuIFRoZSBvdmVyYWxsIGxvZ2ljIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gbWFuYWdpbmcgdGFyZ2V0IGNvbmZpZ3VyYXRpb25zIGJhc2VkIG9uIHRoZWlyIG51bWJlci4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIFNwZWNpZmljYWxseSwgd2hhdCBzY2VuYXJpbyBpcyB0aGlzIG5vdyBoYW5kbGluZyB0aGF0IHRoZSBwcmlvciBvbmUgZGlkbid0LCBvciB2aWNlLXZlcnNhPyBXaGF0IGNvbnRleHQgaXMgdGhlIGBkYW1vbl90YXJnZXRfaGFzX3BpZGAgZnVuY3Rpb24gcmVsZXZhbnQgaW4/XG5cbkkgbmVlZCB0byBzZWUgd2hhdCBgZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KWAgYWN0dWFsbHkgKmRvZXMqLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgdXNhZ2VzIG9mIHRoYXQgZnVuY3Rpb24uIFRoYXQnbGwgdGVsbCBtZSBpZiB0aGlzIGlzIGEgYnVnIGZpeCwgYW4gb3B0aW1pemF0aW9uLCBvciBzb21ldGhpbmcgZW50aXJlbHkgZGlmZmVyZW50LiBJJ2xsIG5lZWQgdG8gc3R1ZHkgdGhhdCBkZWZpbml0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaXRzIHJlbGV2YW5jZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgc3lzZnMgaW50ZXJmYWNlIGFuZCB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo0OToyNi4wMzUzMzI3NTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNDc4MTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl90YXJnZXRfaGFzX3BpZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA3Mj1pbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3My1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA3NDpzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDc1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTg3PXN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU5MS1cXG5tbS9kYW1vbi9jb3JlLmM6MTU5MjpcXHRpZiAoIWRhbW9uX3RhcmdldF9oYXNfcGlkKHNyYykpXFxubW0vZGFtb24vY29yZS5jLTE1OTMtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE2MDM9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjE3LVxcdFxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXQoXFxubW0vZGFtb24vY29yZS5jOjE2MTg6XFx0XFx0XFx0XFx0XFx0ZHN0X3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoZHN0KSxcXG5tbS9kYW1vbi9jb3JlLmM6MTYxOTpcXHRcXHRcXHRcXHRcXHRzcmNfdGFyZ2V0LCBkYW1vbl90YXJnZXRfaGFzX3BpZChzcmMpLFxcbm1tL2RhbW9uL2NvcmUuYy0xNjIwLVxcdFxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTY1Mi1cXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfdGFyZ2V0KG5ld190YXJnZXQsIGZhbHNlLFxcbm1tL2RhbW9uL2NvcmUuYzoxNjUzOlxcdFxcdFxcdFxcdHNyY190YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKHNyYyksXFxubW0vZGFtb24vY29yZS5jLTE2NTQtXFx0XFx0XFx0XFx0c3JjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjAyOT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldCAqc3lzX3RhcmdldCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzNi1cXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdCk7XFxubW0vZGFtb24vc3lzZnMuYzoyMDM3OlxcdGlmIChkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpKSB7XFxubW0vZGFtb24vc3lzZnMuYy0yMDM4LVxcdFxcdHQtXFx1MDAzZXBpZCA9IGZpbmRfZ2V0X3BpZChzeXNfdGFyZ2V0LVxcdTAwM2VwaWQpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMDQ4PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMDUzLVxcdC8qIE11bHRpcGxlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyB0YXJnZXRzIG1ha2VzIG5vIHNlbnNlICovXFxubW0vZGFtb24vc3lzZnMuYzoyMDU0OlxcdGlmICghZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSBcXHUwMDI2XFx1MDAyNiBzeXNmc190YXJnZXRzLVxcdTAwM2VuciBcXHUwMDNlIDEpXFxubW0vZGFtb24vc3lzZnMuYy0yMDU1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo0OToyOC4xNTAxMjAzNTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjExOTQ1OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEknZCBleHBlY3QgZnJvbSBzb21ldGhpbmcgY2FsbGVkIGBkYW1vbl90YXJnZXRfaGFzX3BpZGA6XG5cbioqQW5hbHl6aW5nIGBkYW1vbl90YXJnZXRfaGFzX3BpZGAqKlxuXG5BbHJpZ2h0LCB0aGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGRlc2NyaXB0aXZlLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0LiBcIkRBTU9OXCIgbGlrZWx5IHJlZmVycyB0byB0aGUgRHluYW1pYyBBZGFwdGl2ZSBNZW1vcnkgT3B0aW1pemVyIGZvciBOVU1BLCBzbyB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoYXQgZnJhbWV3b3JrLiBcIlRhcmdldFwiIHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgb3BlcmF0aW5nIG9uIGEgc3BlY2lmaWMgcHJvY2VzcyBvciB0YXNrIHRoYXQgREFNT04gaXMgd2F0Y2hpbmcgb3IgbWFuYWdpbmcuIEFuZCwgXCJQSURcIiBwcmV0dHkgY2xlYXJseSBzaWduYWxzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSB1c2luZyB0aGUgcHJvY2VzcyBJRCBhcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi5cblxuTXkgaW1tZWRpYXRlIGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIGdpdmVuIHByb2Nlc3MgKGlkZW50aWZpZWQgYnkgaXRzIFBJRCkgaXMgY3VycmVudGx5IGJlaW5nIGFjdGl2ZWx5IG1vbml0b3JlZCBvciB0cmFja2VkIGJ5IERBTU9OLiBJdCdzIGxpa2VseSBhIGJvb2xlYW4gZnVuY3Rpb24g4oCTIHJldHVybmluZyB0cnVlIG9yIGZhbHNlIOKAkyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXMgaW5kZWVkIGEgdGFyZ2V0IG9mIERBTU9OJ3Mgb3B0aW1pemF0aW9ucy4gUGVyaGFwcyBpdCdzIGNoZWNraW5nIGFnYWluc3QgYW4gaW50ZXJuYWwgbGlzdCBvciBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhlIERBTU9OIHN5c3RlbS4gVGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIGJlIHBhcnQgb2YgYSBsYXJnZXIgY29uZGl0aW9uYWwgZmxvdyB3aXRoaW4gREFNT04ncyBvcGVyYXRpb25zLiBGb3IgZXhhbXBsZSwgaXQgY291bGQgYmUgdXNlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byBhcHBseSBvcHRpbWl6YXRpb25zIHRvIGEgcHJvY2VzcywgdG8gZW5zdXJlIERBTU9OIGlzIGFjdHVhbGx5IGNvbmNlcm5lZCB3aXRoIHRoYXQgcGFydGljdWxhciBQSUQgYXQgYSBnaXZlbiBwb2ludCBpbiB0aW1lLiBPciwgY29udmVyc2VseSwgaXQgY291bGQgYmUgY2hlY2tpbmcgaWYgYSBwcm9jZXNzIGlzICpubyBsb25nZXIqIGEgdGFyZ2V0LCBwZXJoYXBzIGR1ZSB0byB0ZXJtaW5hdGlvbiBvciByZXNvdXJjZSByZWxlYXNlLlxuXG5MZXQncyBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY1MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjQ5OjMyLjM2MjA2ODI3NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDcwOlxcdGJvb2wgZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpO1xcbjEwNzE6XFx0aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKTtcXG4xMDcyOlxcdGludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpO1xcbjEwNzM6XFx0XFxuMTA3NDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbjEwNzU6XFx0e1xcbjEwNzY6XFx0XFx0cmV0dXJuIGN0eC1cXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19WQUREUiB8fCBjdHgtXFx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfRlZBRERSO1xcbjEwNzc6XFx0fVxcbjEwNzg6XFx0XFxuMTA3OTpcXHQvKiBSZXR1cm5zIG51bWJlciBvZiBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xcbjEwODA6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXG4xMDgxOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuMTA4MjpcXHR7XFxuMTA4MzpcXHRcXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcXG4xMDg0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfc2FtcGxlcztcXG4xMDg1OlxcdFxcbjEwODY6XFx0XFx0c2FtcGxlX2ludGVydmFsID0gYXR0cnMtXFx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMTtcXG4xMDg3OlxcdFxcdG5yX3NhbXBsZXMgPSBtaW4oYXR0cnMtXFx1MDAzZWFnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWwsXFxuMTA4ODpcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZylVSU5UX01BWCk7XFxuMTA4OTpcXHRcXHRyZXR1cm4gbnJfc2FtcGxlcyA/IDogMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NDk6MzIuMzYyMTY3ODI1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwNTEyMjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFRhcmdldCBTZWxlY3Rpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCBub3cgcmV0dXJucyBgdHJ1ZWAgaWYgYGN0eC1cdTAwM2VvcHMuaWRgIGlzIGVpdGhlciBgREFNT05fT1BTX1ZBRERSYCBvciBgREFNT05fT1BTX0ZWQUREUmAuIFByZXZpb3VzbHksIHRoZSBsb2dpYyB3YXMgdG8gc3BlY2lmaWNhbGx5IGNoZWNrIGZvciBgREFNT05fT1BTX1BBRERSYCBhbG9uZyB3aXRoIGBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxYC4gTm93LCB0aGUgY29uZGl0aW9uIGhhcyBiZWVuIGludmVydGVkLiBXZSdyZSBjaGVja2luZyBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkgXHUwMDI2XHUwMDI2IHN5c2ZzX3RhcmdldHMtXHUwMDNlbnIgXHUwMDNlIDFgLlxuXG5TbywgaWYgYGN0eC1cdTAwM2VvcHMuaWRgICppcyogYERBTU9OX09QU19QQUREUmAsIGBkYW1vbl90YXJnZXRfaGFzX3BpZGAgd2lsbCBldmFsdWF0ZSB0byBgZmFsc2VgLiBUaGF0IG1lYW5zIHRoZSBuZXcgY29uZGl0aW9uIGJlaGF2ZXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBjb25kaXRpb24gd2hlbiBkZWFsaW5nIHdpdGggUGh5c2ljYWwgQWRkcmVzcyB0YXJnZXRzIChQQUREUikgYW5kIG1vcmUgdGhhbiBvbmUgdGFyZ2V0LiBNYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGUgY2hlY2sgdGhlbiBiZWNvbWVzIGAhZmFsc2VgLCB3aGljaCBldmFsdWF0ZXMgdG8gYHRydWVgLCBhbmQgaXQgYWxsIHdvcmtzLlxuXG5Ib3dldmVyLCB0aGUgcmVhbCBxdWVzdGlvbiBpcyBob3cgdGhlIGxvZ2ljIHdvcmtzIHdpdGggYW55IG90aGVyIGBjdHgtXHUwMDNlb3BzLmlkYC4gSWYgYGN0eC1cdTAwM2VvcHMuaWRgIGlzIHNvbWV0aGluZyAqb3RoZXIqIHRoYW4gYERBTU9OX09QU19QQUREUmAsIGFuZCBhc3N1bWluZyBgc3lzZnNfdGFyZ2V0cy1cdTAwM2VuciBcdTAwM2UgMWAsIHRoaXMgbWlnaHQgY2hhbmdlIHRoZSBzZWxlY3Rpb24gaW4gc3VidGxlIHdheXMuIEl0J3MgaW1wZXJhdGl2ZSB0aGF0IEkgZmlndXJlIG91dCBhbGwgdGhlIHBvc3NpYmxlIHZhbHVlcyB0aGF0IGBkYW1vbl9vcHNfaWRgIGNhbiB0YWtlLCBzbyBJIGNhbiBwcmVkaWN0IGhvdyB0aGlzIHdpbGwgYWZmZWN0IERBTU9OJ3MgdGFyZ2V0IHNlbGVjdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2UgSURzIGFyZSB1c2VkLCBhbmQgd2hhdCBzY2VuYXJpb3MgdGhleSBhcHBseSB0by5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM3MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjQ5OjM2Ljk2NzI5Mjk1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU5NjgyNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVudW0gZGFtb25fb3BzX2lkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD01NTU9c3RydWN0IGRhbW9zIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC02MDctLyoqXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYwODogKiBlbnVtIGRhbW9uX29wc19pZCAtIElkZW50aWZpZXIgZm9yIGVhY2ggbW9uaXRvcmluZyBvcGVyYXRpb25zIGltcGxlbWVudGF0aW9uXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYwOS0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYxNS0gKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjE2OmVudW0gZGFtb25fb3BzX2lkIHtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjE3LVxcdERBTU9OX09QU19WQUREUixcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD02NzQ9c3RydWN0IGRhbW9uX29wZXJhdGlvbnMge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2NzU6XFx0ZW51bSBkYW1vbl9vcHNfaWQgaWQ7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY3Ni1cXHR2b2lkICgqaW5pdCkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2OT1pbnQgZGFtb25fbnJfcnVubmluZ19jdHhzKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDcwOmJvb2wgZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDcxLWludCBkYW1vbl9yZWdpc3Rlcl9vcHMoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgKm9wcyk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNzI6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNzMtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzI9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkYW1vbl9yZWdpb25fY2FjaGUgX19yb19hZnRlcl9pbml0O1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0LS8qIFNob3VsZCBiZSBjYWxsZWQgdW5kZXIgZGFtb25fb3BzX2xvY2sgd2l0aCBpZCBzbWFsbGVyIHRoYW4gTlJfREFNT05fT1BTICovXFxubW0vZGFtb24vY29yZS5jOjM1OnN0YXRpYyBib29sIF9fZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxubW0vZGFtb24vY29yZS5jLTM2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00OS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NTA6Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcXG5tbS9kYW1vbi9jb3JlLmMtNTEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTcxPWludCBkYW1vbl9yZWdpc3Rlcl9vcHMoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgKm9wcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6OTg6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcXG5tbS9kYW1vbi9jb3JlLmMtOTkte1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMzgyPXN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSB7XFxubW0vZGFtb24vc3lzZnMuYzoxMzgzOlxcdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcXG5tbS9kYW1vbi9zeXNmcy5jLTEzODQtXFx0Y2hhciAqbmFtZTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTQwMj1zdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dCB7XFxubW0vZGFtb24vc3lzZnMuYy0xNDAzLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxubW0vZGFtb24vc3lzZnMuYzoxNDA0OlxcdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcXG5tbS9kYW1vbi9zeXNmcy5jLTE0MDUtXFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE0MTI9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpkYW1vbl9zeXNmc19jb250ZXh0X2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLmM6MTQxMzpcXHRcXHRlbnVtIGRhbW9uX29wc19pZCBvcHNfaWQpXFxubW0vZGFtb24vc3lzZnMuYy0xNDE0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NDk6MzguOTI2OTgyMzU3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxODE1NzQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgREFNT04gT3BlcmF0aW9ucyBFbnVtZXJhdGlvbioqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgYGluY2x1ZGUvbGludXgvZGFtb24uaGAgYW5kIHNwZWNpZmljYWxseSB6ZXJvIGluIG9uIHRoZSBgZW51bSBkYW1vbl9vcHNfaWRgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBvcGVyYXRpb24gSURzIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0IGVhY2ggb25lIHNpZ25pZmllcy4gSSdtIGxpa2VseSBkZWJ1Z2dpbmcgYSBEQU1PTi1yZWxhdGVkIHBlcmZvcm1hbmNlIGlzc3VlLCB0cnlpbmcgdG8gdHJhY2UgYSBzcGVjaWZpYyBvcGVyYXRpb24sIG9yIG1heWJlIGV2ZW4gcHJlcGFyaW5nIHRvIGFkZCBhIG5ldyBtb25pdG9yaW5nIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgZW51bSBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJIG5lZWQgYSBjbGVhciBtZW50YWwgbWFwIG9mIHdoYXQncyBkZWZpbmVkIGhlcmUgYW5kIGhvdyB0aGVzZSBJRHMgbWFwIHRvIHRoZSB1bmRlcmx5aW5nIGFjdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEknbSBob3BpbmcgaXQncyB3ZWxsLWRvY3VtZW50ZWQgKHRob3VnaCwgbGV0J3MgYmUgaG9uZXN0LCB0aGF0J3Mgbm90IGFsd2F5cyB0aGUgY2FzZSkuIFRpbWUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhpcyBlbnVtOyBJIG5lZWQgdGhpcyBpbmZvcm1hdGlvbiB0byBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo0OTo0Mi4yNDUxNDIxMzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxMDpcXHQgKiBAREFNT05fT1BTX1ZBRERSOlxcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcbiA2MTE6XFx0ICogQERBTU9OX09QU19GVkFERFI6XFx0TW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBvbmx5IGZpeGVkIHJhbmdlcyBvZiB2aXJ0dWFsXFxuIDYxMjpcXHQgKlxcdFxcdFxcdGFkZHJlc3Mgc3BhY2VzXFxuIDYxMzpcXHQgKiBAREFNT05fT1BTX1BBRERSOlxcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXG4gNjE0OlxcdCAqIEBOUl9EQU1PTl9PUFM6XFx0TnVtYmVyIG9mIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBpbXBsZW1lbnRhdGlvbnNcXG4gNjE1OlxcdCAqL1xcbiA2MTY6XFx0ZW51bSBkYW1vbl9vcHNfaWQge1xcbiA2MTc6XFx0XFx0REFNT05fT1BTX1ZBRERSLFxcbiA2MTg6XFx0XFx0REFNT05fT1BTX0ZWQUREUixcXG4gNjE5OlxcdFxcdERBTU9OX09QU19QQUREUixcXG4gNjIwOlxcdFxcdE5SX0RBTU9OX09QUyxcXG4gNjIxOlxcdH07XFxuIDYyMjpcXHRcXG4gNjIzOlxcdC8qKlxcbiA2MjQ6XFx0ICogc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgLSBNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIGdpdmVuIHVzZSBjYXNlcy5cXG4gNjI1OlxcdCAqXFxuIDYyNjpcXHQgKiBAaWQ6XFx0XFx0XFx0XFx0SWRlbnRpZmllciBvZiB0aGlzIG9wZXJhdGlvbnMgc2V0LlxcbiA2Mjc6XFx0ICogQGluaXQ6XFx0XFx0XFx0SW5pdGlhbGl6ZSBvcGVyYXRpb25zLXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLlxcbiA2Mjg6XFx0ICogQHVwZGF0ZTpcXHRcXHRcXHRVcGRhdGUgb3BlcmF0aW9ucy1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcy5cXG4gNjI5OlxcdCAqIEBwcmVwYXJlX2FjY2Vzc19jaGVja3M6XFx0UHJlcGFyZSBuZXh0IGFjY2VzcyBjaGVjayBvZiB0YXJnZXQgcmVnaW9ucy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NDk6NDIuMjQ1MjM4MjA1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTk4Njc5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgREFNT04gVGFyZ2V0IExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBwYXRjaCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AgcmV2b2x2ZXMgYXJvdW5kIHRoaXMgY29uZGl0aW9uYWwgY2hlY2suIFByZXZpb3VzbHksIHRoZXkgd2VyZSBjaGVja2luZyBpZiBgY3R4LVx1MDAzZW9wcy5pZGAgd2FzIGBEQU1PTl9PUFNfUEFERFJgIGFuZCBpZiB0aGUgbnVtYmVyIG9mIHRhcmdldHMgKGBzeXNmc190YXJnZXRzLVx1MDAzZW5yYCkgd2FzIGdyZWF0ZXIgdGhhbiBvbmUuIE5vdywgdGhlIGNvbmRpdGlvbiBoYXMgYmVlbiByZXdyaXR0ZW4gdG8gYCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxYC5cblxuTm93LCBsZXQncyB1bnBhY2sgdGhpcy4gYGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgIHJldHVybnMgdHJ1ZSBmb3IgYERBTU9OX09QU19WQUREUmAgYW5kIGBEQU1PTl9PUFNfRlZBRERSYC4gIFRoZXJlZm9yZSwgdGhlIG5lZ2F0aW9uLCBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgLCBlZmZlY3RpdmVseSBtZWFucyB0aGF0IHRoZSBjb25kaXRpb24gaXMgb25seSB0cnVlIGZvciBgREFNT05fT1BTX1BBRERSYCwgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBvcmlnaW5hbCBpbnRlbnQuIFRoZSBmdW5jdGlvbiBwcm9iYWJseSBpbmNsdWRlcyBzb21lIHNvcnQgb2YgY2hlY2sgd2l0aGluIGl0LCBmb3IgdGhlIGNvbnRleHQncyBzdHJ1Y3R1cmUsIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGUgUElEIGlzIHZhbGlkLCBvciB0aGUgUElEIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGdpdmVuIGNvbnRleHQuIEl0J3MgZXNzZW50aWFsbHkganVzdCBhIHJlZmFjdG9yaW5nIHRvIGltcHJvdmUgcmVhZGFiaWxpdHkgYW5kIHBvdGVudGlhbGx5IGVuY2Fwc3VsYXRlIHRoZSBsb2dpYyBiZWhpbmQgdGhhdCBjaGVjayB3aXRoaW4gYSBoZWxwZXIgZnVuY3Rpb24uIEFuZCwgc2luY2UgYE5SX0RBTU9OX09QU2Agc2hvdWxkbid0IGJlIHVzZWQsIHdlIGNhbiBpZ25vcmUgdGhhdCBwYXJ0LlxuXG5Ib2xkIG9uLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIERBTU9OIG9wZXJhdGlvbiBJRHMsIGJ1dCBpdCBsb29rcyBsaWtlIGl0J3MganVzdCB0aGUgdGhyZWUuIFNvIHllcywgaXQgc2VlbXMgdGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC5cblxuTG9va2luZyBhdCB0aGUgYGluY2x1ZGUvbGludXgvZGFtb24uaGAgY2hhbmdlcywgdGhleSBhcHBlYXIgdG8gYmUgcHVyZWx5IHN0cnVjdHVyYWwg4oCTIG1vdmluZyBhcm91bmQgc29tZSBzdHJ1Y3QgZmllbGRzIGFuZCBhZGRpbmcgY29tbWVudHMuIFNvLCBpdCdzIGp1c3QgY2xlYW51cCBhbmQgcmVmYWN0b3JpbmcgdG8gaW1wcm92ZSB0aGUgY29kZS4gTm90aGluZyBzdWJzdGFudGlhbCBoZXJlLiBBbHJpZ2h0LCB0aGlzIGxvb2tzIGdvb2QuIEkgZG9uJ3Qgc2VlIGFueSBoaWRkZW4gcGl0ZmFsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NDMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo0OTo0Ny42NjUxMDg2MjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjA4NTkyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fdGFyZ2V0X2hhc19waWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNzI9aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNzMtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNzQ6c3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTU4Nz1zdGF0aWMgdm9pZCBkYW1vbl9yZXZlcnRfdGFyZ2V0X2NvbW1pdHMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1OTEtXFxubW0vZGFtb24vY29yZS5jOjE1OTI6XFx0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChzcmMpKVxcbm1tL2RhbW9uL2NvcmUuYy0xNTkzLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjAzPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTYxNy1cXHRcXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfdGFyZ2V0KFxcbm1tL2RhbW9uL2NvcmUuYzoxNjE4OlxcdFxcdFxcdFxcdFxcdGRzdF90YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKGRzdCksXFxubW0vZGFtb24vY29yZS5jOjE2MTk6XFx0XFx0XFx0XFx0XFx0c3JjX3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSxcXG5tbS9kYW1vbi9jb3JlLmMtMTYyMC1cXHRcXHRcXHRcXHRcXHRzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3opO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE2NTItXFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldChuZXdfdGFyZ2V0LCBmYWxzZSxcXG5tbS9kYW1vbi9jb3JlLmM6MTY1MzpcXHRcXHRcXHRcXHRzcmNfdGFyZ2V0LCBkYW1vbl90YXJnZXRfaGFzX3BpZChzcmMpLFxcbm1tL2RhbW9uL2NvcmUuYy0xNjU0LVxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwMjk9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQgKnN5c190YXJnZXQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwMzYtXFx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHQpO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjAzNzpcXHRpZiAoZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSkge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzOC1cXHRcXHR0LVxcdTAwM2VwaWQgPSBmaW5kX2dldF9waWQoc3lzX3RhcmdldC1cXHUwMDNlcGlkKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjA0OD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA1My1cXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjA1NDpcXHRpZiAoIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkgXFx1MDAyNlxcdTAwMjYgc3lzZnNfdGFyZ2V0cy1cXHUwMDNlbnIgXFx1MDAzZSAxKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA1NS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NDk6NDkuNzg1OTc5MTAyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NTQ0OTc3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUGF0Y2ggQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoaXMgcGF0Y2ggaXMgdGlnaHRseSBzY29wZWQg4oCTIGl0J3MganVzdCB0b3VjaGluZyBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBhbmQgYG1tL2RhbW9uL3N5c2ZzLmNgLiBObyBjb3JlIGxvZ2ljIGlzIGJlaW5nIGFsdGVyZWQgaGVyZSwgd2hpY2ggaXMgdGhlIGZpcnN0IGdvb2Qgc2lnbi5cblxuVGhlIGRpZmYgaXRzZWxmIGZvY3VzZXMgb24gaG93IHRhcmdldHMgYXJlIGFkZGVkIGluIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGlzOiB0aGUgY29uZGl0aW9uYWwgY2hlY2sgaGFzIHNoaWZ0ZWQgZnJvbSByZWx5aW5nIG9uIHRoZSBgY3R4LVx1MDAzZW9wcy5pZGAgKHNwZWNpZmljYWxseSwgd2hldGhlciBpdCdzIGBEQU1PTl9PUFNfUEFERFJgKSB0byBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgLiBCdXQsIEkgcXVpY2tseSBjb25maXJtIHRoYXQsIGluIHRoaXMgY29udGV4dCwgdGhpcyBpcyBhIHNlbWFudGljYWxseSBlcXVpdmFsZW50IGNoYW5nZS4gYGRhbW9uX3RhcmdldF9oYXNfcGlkYCByZXR1cm5pbmcgdHJ1ZSBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBsaWtlIGBWQUREUmAgYW5kIGBGVkFERFJgLCBhbmQgZmFsc2UgZm9yIHBoeXNpY2FsIGFkZHJlc3NlcywgbmVhdGx5IGNvdmVycyB0aGUgaW50ZW50LiBFc3NlbnRpYWxseSwgaXQgYXBwZWFycyB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGludGVybmFsIHN0cnVjdCBsYXlvdXQsIGJ1dCBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbG9naWMuXG5cbldoaWxlIHN0cnVjdCBsYXlvdXQgbW9kaWZpY2F0aW9ucyBjYW4gKmFsd2F5cyogaW50cm9kdWNlIHN1YnRsZSBwZXJmb3JtYW5jZSBpbXBhY3RzLCBvciBldmVuIG1lbW9yeSBsYXlvdXQgbnVhbmNlcyB0aGF0IGNhbiBtYXR0ZXIgaW4gc3BlY2lmaWMgd29ya2xvYWRzLCB0aGVyZSBpcyBubyBuZXcgbG9naWMgYmVpbmcgYWRkZWQgdGhhdCB3b3VsZCBuZWVkIGEgZnV6emluZyBydW4uIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpc24ndCB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg3NSwiT3V0cHV0VG9rZW5zIjo5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo0OTo1Ny42NDA0ODA4NDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHN0cnVjdHVyYWwgcmVhcnJhbmdlbWVudHMgb2YgZmllbGRzIGluIGluY2x1ZGUvbGludXgvZGFtb24uaCwgYWRkcyBjb21tZW50cywgYW5kIHJlcGxhY2VzIGEgZGlyZWN0IGVudW0gY29tcGFyaXNvbiB3aXRoIGFuIGVxdWl2YWxlbnQgaGVscGVyIGZ1bmN0aW9uIChkYW1vbl90YXJnZXRfaGFzX3BpZCkgaW4gbW0vZGFtb24vc3lzZnMuYy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHN0cnVjdHVyYWwgcmVhcnJhbmdlbWVudHMgb2YgZmllbGRzIGluIGluY2x1ZGUvbGludXgvZGFtb24uaCwgYWRkcyBjb21tZW50cywgYW5kIHJlcGxhY2VzIGEgZGlyZWN0IGVudW0gY29tcGFyaXNvbiB3aXRoIGFuIGVxdWl2YWxlbnQgaGVscGVyIGZ1bmN0aW9uIChkYW1vbl90YXJnZXRfaGFzX3BpZCkgaW4gbW0vZGFtb24vc3lzZnMuYy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowtqbhz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-15 00:20:46 +0000 UTC FinishedAt: 2026-07-15 00:49:58 +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+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY29udGFpbnMgc3RydWN0dXJhbCByZWFycmFuZ2VtZW50cyBvZiBmaWVsZHMgaW4gaW5jbHVkZS9saW51eC9kYW1vbi5oLCBhZGRzIGNvbW1lbnRzLCBhbmQgcmVwbGFjZXMgYSBkaXJlY3QgZW51bSBjb21wYXJpc29uIHdpdGggYW4gZXF1aXZhbGVudCBoZWxwZXIgZnVuY3Rpb24gKGRhbW9uX3RhcmdldF9oYXNfcGlkKSBpbiBtbS9kYW1vbi9zeXNmcy5jLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhZDA5NTdkZGM2YmI0MGY4OGYyMjAwMjcwZmMwMTEyOTI5YzYxM2I4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMDA6NDk6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCBmNjk0NDJhOWQ0MzEyOC4uMzI3ZjUzNDY5NmFhODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTQ2LDcgJiM0Mzs0Niw2IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHtcbiAgKiBAc2FtcGxpbmdfYWRkcjpcdEFkZHJlc3Mgb2YgdGhlIHNhbXBsZSBmb3IgdGhlIG5leHQgYWNjZXNzIGNoZWNrLlxuICAqIEBucl9hY2Nlc3NlczpcdEFjY2VzcyBmcmVxdWVuY3kgb2YgdGhpcyByZWdpb24uXG4gICogQHByb2JlX2hpdHM6XHRcdE51bWJlciBvZiBwcm9iZS1wb3NpdGl2ZSByZWdpb24gc2FtcGxlcy5cbi0gKiBAbGlzdDpcdFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKiBAYWdlOlx0XHRBZ2Ugb2YgdGhpcyByZWdpb24uXG4gICpcbiAgKiBGb3IgYW55IHVzZSBjYXNlLCBAYXIgc2hvdWxkIGJlIG5vbi16ZXJvIHBvc2l0aXZlIHNpemUuICBkYW1vbl9zZXRfcmVnaW9ucygpXG5AQCAtNjgsOSAmIzQzOzY3LDExIEBAIHN0cnVjdCBkYW1vbl9yZWdpb24ge1xuIFx0dW5zaWduZWQgbG9uZyBzYW1wbGluZ19hZGRyO1xuIFx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzO1xuIFx0dW5zaWduZWQgY2hhciBwcm9iZV9oaXRzW0RBTU9OX01BWF9QUk9CRVNdO1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIFx0dW5zaWduZWQgaW50IGFnZTtcbi0vKiBwcml2YXRlOiBJbnRlcm5hbCB2YWx1ZSBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqL1xuJiM0MzsvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seS4gKi9cbiYjNDM7XHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiYjNDM7XHQvKiBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqL1xuIFx0dW5zaWduZWQgaW50IGxhc3RfbnJfYWNjZXNzZXM7XG4gXHR1bnNpZ25lZCBjaGFyIGxhc3RfcHJvYmVfaGl0c1tEQU1PTl9NQVhfUFJPQkVTXTtcbiB9O1xuQEAgLTc4LDkgJiM0Mzs3OSw2IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24ge1xuIC8qKlxuICAqIHN0cnVjdCBkYW1vbl90YXJnZXQgLSBSZXByZXNlbnRzIGEgbW9uaXRvcmluZyB0YXJnZXQuXG4gICogQHBpZDpcdFx0VGhlIFBJRCBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRvIG1vbml0b3IuXG4tICogQG5yX3JlZ2lvbnM6XHRcdE51bWJlciBvZiBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LlxuLSAqIEByZWdpb25zX2xpc3Q6XHRIZWFkIG9mIHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqIEBvYnNvbGV0ZTpcdFx0V2hldGhlciB0aGUgY29tbWl0IGRlc3RpbmF0aW9uIHRhcmdldCBpcyBvYnNvbGV0ZS5cbiAgKlxuICAqIEVhY2ggbW9uaXRvcmluZyBjb250ZXh0IGNvdWxkIGhhdmUgbXVsdGlwbGUgdGFyZ2V0cy4gIEZvciBleGFtcGxlLCBhIGNvbnRleHRcbkBAIC05NCwxMCAmIzQzOzkyLDE0IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24ge1xuICAqL1xuIHN0cnVjdCBkYW1vbl90YXJnZXQge1xuIFx0c3RydWN0IHBpZCAqcGlkO1xuJiM0MztcdGJvb2wgb2Jzb2xldGU7XG4mIzQzOy8qIHByaXZhdGU6ICovXG4mIzQzO1x0LyogTnVtYmVyIG9mIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuICovXG4gXHR1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucztcbiYjNDM7XHQvKiBIZWFkIG9mIHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCByZWdpb25zX2xpc3Q7XG4mIzQzO1x0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi1cdGJvb2wgb2Jzb2xldGU7XG4gfTtcbiBcbiAvKipcbkBAIC0xNzMsMTAgJiM0MzsxNzUsOCBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcbiAgKiBAbWV0cmljOlx0XHRNZXRyaWMgdG8gYmUgdXNlZCBmb3IgcmVwcmVzZW50aW5nIHRoZSBnb2FsLlxuICAqIEB0YXJnZXRfdmFsdWU6XHRUYXJnZXQgdmFsdWUgb2YgQG1ldHJpYyB0byBhY2hpZXZlIHdpdGggdGhlIHR1bmluZy5cbiAgKiBAY3VycmVudF92YWx1ZTpcdEN1cnJlbnQgdmFsdWUgb2YgQG1ldHJpYy5cbi0gKiBAbGFzdF9wc2lfdG90YWw6XHRMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSVxuICAqIEBuaWQ6XHRcdE5vZGUgaWQuXG4gICogQG1lbWNnX2lkOlx0XHRNZW1jZyBpZC5cbi0gKiBAbGlzdDpcdFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKlxuICAqIERhdGEgc3RydWN0dXJlIGZvciBnZXR0aW5nIHRoZSBjdXJyZW50IHNjb3JlIG9mIHRoZSBxdW90YSB0dW5pbmcgZ29hbC4gIFRoZVxuICAqIHNjb3JlIGlzIGNhbGN1bGF0ZWQgYnkgaG93IGNsb3NlIEBjdXJyZW50X3ZhbHVlIGFuZCBAdGFyZ2V0X3ZhbHVlIGFyZS4gIFRoZW5cbkBAIC0xOTksMTIgJiM0MzsxOTksMTcgQEAgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xuIFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlO1xuIFx0LyogbWV0cmljLWRlcGVuZGVudCBmaWVsZHMgKi9cbiBcdHVuaW9uIHtcbi1cdFx0dTY0IGxhc3RfcHNpX3RvdGFsO1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdGludCBuaWQ7XG4gXHRcdFx0dTY0IG1lbWNnX2lkO1xuIFx0XHR9O1xuJiM0MzsvKiBwcml2YXRlOiAqL1xuJiM0MztcdFx0LyogTGFzdCBtZWFzdXJlZCB0b3RhbCBQU0kgKi9cbiYjNDM7XHRcdHU2NCBsYXN0X3BzaV90b3RhbDtcbiYjNDM7XG4gXHR9O1xuJiM0MzsvKiBwcml2YXRlOiAqL1xuJiM0MztcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbiBcbkBAIC0yMjMsNyAmIzQzOzIyOCw2IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XG4gICogQHJlc2V0X2ludGVydmFsOlx0Q2hhcmdlIHJlc2V0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cbiAgKiBAbXM6XHRcdFx0TWF4aW11bSBtaWxsaXNlY29uZHMgdGhhdCB0aGUgc2NoZW1lIGNhbiB1c2UuXG4gICogQHN6Olx0XHRcdE1heGltdW0gYnl0ZXMgb2YgbWVtb3J5IHRoYXQgdGhlIGFjdGlvbiBjYW4gYmUgYXBwbGllZC5cbi0gKiBAZ29hbHM6XHRcdEhlYWQgb2YgcXVvdGEgdHVuaW5nIGdvYWxzIChcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LlxuICAqIEBnb2FsX3R1bmVyOlx0XHRHb2FsLWJhc2VkIEBlc3ogdHVuaW5nIGFsZ29yaXRobSB0byB1c2UuXG4gICogQGVzejpcdFx0RWZmZWN0aXZlIHNpemUgcXVvdGEgaW4gYnl0ZXMuXG4gICogQGZhaWxfY2hhcmdlX251bTpcdEZhaWxlZCByZWdpb25zIGNoYXJnZSByYXRlIG51bWVyYXRvci5cbkBAIC0yNTAsNyAmIzQzOzI1NCw3IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XG4gICogdGhlIHNjaGVtZSYjMzk7cyBhY3Rpb24uICBEQU1PTiB0aGVuIGNvbXBhcmVzIGl0IGFnYWluc3QgXHUwMDI2c3ogYW5kIHVzZXMgc21hbGxlclxuICAqIG9uZSBhcyB0aGUgZWZmZWN0aXZlIHF1b3RhLlxuICAqXG4tICogSWYgQGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZVxuJiM0MzsgKiBJZiBnb2FscyBpcyBub3QgZW1wdHksIERBTU9OIGNhbGN1bGF0ZXMgeWV0IGFub3RoZXIgc2l6ZSBxdW90YSBiYXNlZCBvbiB0aGVcbiAgKiBnb2FscyB1c2luZyBpdHMgaW50ZXJuYWwgZmVlZGJhY2sgbG9vcCBhbGdvcml0aG0sIGZvciBldmVyeSBAcmVzZXRfaW50ZXJ2YWwuXG4gICogVGhlbiwgaWYgdGhlIG5ldyBzaXplIHF1b3RhIGlzIHNtYWxsZXIgdGhhbiB0aGUgZWZmZWN0aXZlIHF1b3RhLCBpdCB1c2VzIHRoZVxuICAqIG5ldyBzaXplIHF1b3RhIGFzIHRoZSBlZmZlY3RpdmUgcXVvdGEuXG5AQCAtMjcxLDcgJiM0MzsyNzUsNyBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGEge1xuIFx0dW5zaWduZWQgbG9uZyByZXNldF9pbnRlcnZhbDtcbiBcdHVuc2lnbmVkIGxvbmcgbXM7XG4gXHR1bnNpZ25lZCBsb25nIHN6O1xuLVx0c3RydWN0IGxpc3RfaGVhZCBnb2FscztcbiYjNDM7XG4gXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgZ29hbF90dW5lcjtcbiBcdHVuc2lnbmVkIGxvbmcgZXN6O1xuIFxuQEAgLTI4Myw2ICYjNDM7Mjg3LDggQEAgc3RydWN0IGRhbW9zX3F1b3RhIHtcbiBcdHVuc2lnbmVkIGludCB3ZWlnaHRfYWdlO1xuIFxuIC8qIHByaXZhdGU6ICovXG4mIzQzO1x0LyogSGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFx1MDAyNmRhbW9zX3F1b3RhX2dvYWwpIGxpc3QuICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBnb2FscztcbiBcdC8qIEZvciB0aHJvdWdocHV0IGVzdGltYXRpb24gKi9cbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9zejtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9ucztcbkBAIC00MjYsNyAmIzQzOzQzMiw2IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuICAqXHRcdFx1MDAyNmRhbW9uX2N0eC1cdTAwM2VhZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzXG4gICpcdFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULlxuICAqIEBzel9yYW5nZTpcdFNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS5cbi0gKiBAbGlzdDpcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXG4gICpcbiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlIFx1MDAyNmRhbW9zLVx1MDAzZWFjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIERBTU9TIGNoZWNrcyBpZiBlYWNoXG4gICogYnl0ZSBvZiB0aGUgcmVnaW9uIG1hdGNoZXMgdG8gdGhpcyBnaXZlbiBjb25kaXRpb24gYW5kIGF2b2lkIGFwcGx5aW5nIHRoZVxuQEAgLTQ0NCw2ICYjNDM7NDQ5LDggQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7XG4gXHRcdGludCB0YXJnZXRfaWR4O1xuIFx0XHRzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTtcbiBcdH07XG4mIzQzOy8qIHByaXZhdGU6ICovXG4mIzQzO1x0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiB9O1xuIFxuQEAgLTUxNSwxMiAmIzQzOzUyMiw4IEBAIHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIHtcbiAgKiBAd21hcmtzOlx0XHRXYXRlcm1hcmtzIGZvciBhdXRvbWF0ZWQgKGluKWFjdGl2YXRpb24gb2YgdGhpcyBzY2hlbWUuXG4gICogQG1pZ3JhdGVfZGVzdHM6XHREZXN0aW5hdGlvbiBub2RlcyBpZiBAYWN0aW9uIGlzIFwmIzM0O21pZ3JhdGVfe2hvdCxjb2xkfVwmIzM0Oy5cbiAgKiBAdGFyZ2V0X25pZDpcdFx0RGVzdGluYXRpb24gbm9kZSBpZiBAYWN0aW9uIGlzIFwmIzM0O21pZ3JhdGVfe2hvdCxjb2xkfVwmIzM0Oy5cbi0gKiBAY29yZV9maWx0ZXJzOlx0QWRkaXRpb25hbCBzZXQgb2YgXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlciBmb3IgXHUwMDI2YWN0aW9uLlxuLSAqIEBvcHNfZmlsdGVyczpcdG9wcyBsYXllciBoYW5kbGluZyBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIG9iamVjdHMgbGlzdC5cbi0gKiBAbGFzdF9hcHBsaWVkOlx0TGFzdCBAYWN0aW9uIGFwcGxpZWQgb3BzLW1hbmFnaW5nIGVudGl0eS5cbiAgKiBAc3RhdDpcdFx0U3RhdGlzdGljcyBvZiB0aGlzIHNjaGVtZS5cbiAgKiBAbWF4X25yX3NuYXBzaG90czpcdFVwcGVyIGxpbWl0IG9mIG5yX3NuYXBzaG90cyBzdGF0LlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqXG4gICogRm9yIGVhY2ggQGFwcGx5X2ludGVydmFsX3VzLCBEQU1PTiBmaW5kcyByZWdpb25zIHdoaWNoIGZpdCBpbiB0aGVcbiAgKiBcdTAwMjZwYXR0ZXJuIGFuZCBhcHBsaWVzIFx1MDAyNmFjdGlvbiB0byB0aG9zZS4gVG8gYXZvaWQgY29uc3VtaW5nIHRvbyBtdWNoXG5AQCAtNTQyLDE2ICYjNDM7NTQ1LDcgQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xuICAqXG4gICogQmVmb3JlIGFwcGx5aW5nIHRoZSBcdTAwMjZhY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9uc1xuICAqIGltcGxlbWVudGF0aW9uIGNvdWxkIGNoZWNrIHBhZ2VzIG9mIHRoZSByZWdpb24gYW5kIHNraXAgXHUwMDI2YWN0aW9uIHRvIHJlc3BlY3Rcbi0gKiBcdTAwMjZjb3JlX2ZpbHRlcnNcbi0gKlxuLSAqIFRoZSBtaW5pbXVtIGVudGl0eSB0aGF0IEBhY3Rpb24gY2FuIGJlIGFwcGxpZWQgZGVwZW5kcyBvbiB0aGUgdW5kZXJseWluZ1xuLSAqIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkIHdpdGggdGhlIGNvcmUgbGF5ZXJcbi0gKiBhYnN0cmFjdCwgbmFtZWx5IFx1MDAyNnN0cnVjdCBkYW1vbl9yZWdpb24sIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5XG4tICogQGFjdGlvbiB0byBzYW1lIGVudGl0eSBtdWx0aXBsZSB0aW1lcy4gIExhcmdlIGZvbGlvcyB0aGF0IHVuZGVybHlpbmcgb25cbi0gKiBtdWx0aXBsZSBcdTAwMjZzdHJ1Y3QgZGFtb24gcmVnaW9uIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSBcdTAwMjZzdHJ1Y3Rcbi0gKiBkYW1vbl9vcGVyYXRpb25zIGNhbiB1c2UgQGxhc3RfYXBwbGllZCB0byBhdm9pZCB0aGF0LiAgREFNT1MgY29yZSBsb2dpY1xuLSAqIHVuc2V0cyBAbGFzdF9hcHBsaWVkIHdoZW4gZWFjaCByZWdpb25zIHdhbGtpbmcgZm9yIGFwcGx5aW5nIHRoZSBzY2hlbWUgaXNcbi0gKiBmaW5pc2hlZC5cbiYjNDM7ICogXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlci5cbiAgKlxuICAqIEFmdGVyIGFwcGx5aW5nIHRoZSBcdTAwMjZhY3Rpb24gdG8gZWFjaCByZWdpb24sIFx1MDAyNnN0YXQgaXMgdXBkYXRlZC5cbiAgKlxuQEAgLTU2Miw2ICYjNDM7NTU2LDE2IEBAIHN0cnVjdCBkYW1vcyB7XG4gXHRzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gcGF0dGVybjtcbiBcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbjtcbiBcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXM7XG4mIzQzO1x0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhO1xuJiM0MztcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcztcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRpbnQgdGFyZ2V0X25pZDtcbiYjNDM7XHRcdFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0cztcbiYjNDM7XHRcdH07XG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgZGFtb3Nfc3RhdCBzdGF0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbWF4X25yX3NuYXBzaG90cztcbiAvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seSAqL1xuIFx0LypcbiBcdCAqIG51bWJlciBvZiBzYW1wbGUgaW50ZXJ2YWxzIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBiZWZvcmUgYXBwbHlpbmdcbkBAIC01NzgsMjAgJiM0Mzs1ODIsMjUgQEAgc3RydWN0IGRhbW9zIHtcbiBcdC8qIHdoZXRoZXIgdG8gcmVqZWN0IGNvcmUvb3BzIGZpbHRlcnMgdW1hdGNoZWQgcmVnaW9ucyAqL1xuIFx0Ym9vbCBjb3JlX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Q7XG4gXHRib29sIG9wc19maWx0ZXJzX2RlZmF1bHRfcmVqZWN0O1xuLS8qIHB1YmxpYzogKi9cbi1cdHN0cnVjdCBkYW1vc19xdW90YSBxdW90YTtcbi1cdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcztcbi1cdHVuaW9uIHtcbi1cdFx0c3RydWN0IHtcbi1cdFx0XHRpbnQgdGFyZ2V0X25pZDtcbi1cdFx0XHRzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyBtaWdyYXRlX2Rlc3RzO1xuLVx0XHR9O1xuLVx0fTtcbiYjNDM7XHQvKiBBZGRpdGlvbmFsIHNldCBvZiBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIGZvciBcdTAwMjZhY3Rpb24uICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGNvcmVfZmlsdGVycztcbiYjNDM7XHQvKiBvcHMgbGF5ZXIgaGFuZGxpbmcgXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlciBvYmplY3RzIGxpc3QuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG9wc19maWx0ZXJzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTGFzdCBAYWN0aW9uIGFwcGxpZWQgb3BzLW1hbmFnaW5nIGVudGl0eS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBtaW5pbXVtIGVudGl0eSB0aGF0IEBhY3Rpb24gY2FuIGJlIGFwcGxpZWQgZGVwZW5kcyBvbiB0aGVcbiYjNDM7XHQgKiB1bmRlcmx5aW5nIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkXG4mIzQzO1x0ICogd2l0aCB0aGUgY29yZSBsYXllciBhYnN0cmFjdCwgbmFtZWx5IFx1MDAyNnN0cnVjdCBkYW1vbl9yZWdpb24sIFx1MDAyNnN0cnVjdFxuJiM0MztcdCAqIGRhbW9uX29wZXJhdGlvbnMgY291bGQgYXBwbHkgQGFjdGlvbiB0byBzYW1lIGVudGl0eSBtdWx0aXBsZSB0aW1lcy5cbiYjNDM7XHQgKiBMYXJnZSBmb2xpb3MgdGhhdCB1bmRlcmx5aW5nIG9uIG11bHRpcGxlIFx1MDAyNnN0cnVjdCBkYW1vbiByZWdpb25cbiYjNDM7XHQgKiBvYmplY3RzIGNvdWxkIGJlIHN1Y2ggZXhhbXBsZXMuICBUaGUgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgY2FuXG4mIzQzO1x0ICogdXNlIEBsYXN0X2FwcGxpZWQgdG8gYXZvaWQgdGhhdC4gIERBTU9TIGNvcmUgbG9naWMgdW5zZXRzXG4mIzQzO1x0ICogQGxhc3RfYXBwbGllZCB3aGVuIGVhY2ggcmVnaW9ucyB3YWxraW5nIGZvciBhcHBseWluZyB0aGUgc2NoZW1lIGlzXG4mIzQzO1x0ICogZmluaXNoZWQuXG4mIzQzO1x0ICovXG4gXHR2b2lkICpsYXN0X2FwcGxpZWQ7XG4tXHRzdHJ1Y3QgZGFtb3Nfc3RhdCBzdGF0O1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzO1xuJiM0MztcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbiBcbkBAIC03NDksNyAmIzQzOzc1OCw2IEBAIGVudW0gZGFtb25fZmlsdGVyX3R5cGUge1xuICAqIEBtYXRjaGluZzpcdFdoZXRoZXIgdGhpcyBmaWx0ZXIgaXMgZm9yIHRoZSB0eXBlLW1hdGNoaW5nIG9uZXMuXG4gICogQGFsbG93Olx0V2hldGhlciB0aGUgQHR5cGUtQG1hdGNoaW5nIG9uZXMgc2hvdWxkIHBhc3MgdGhpcyBmaWx0ZXIuXG4gICogQG1lbWNnX2lkOlx0TWVtY2cgaWQgb2YgdGhlIHF1ZXN0aW9uIGlmIEB0eXBlIGlzIERBTU9OX0ZJTFRFUl9NRU1DRy5cbi0gKiBAbGlzdDpcdFNpYmxpbmdzIGxpc3QuXG4gICovXG4gc3RydWN0IGRhbW9uX2ZpbHRlciB7XG4gXHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XG5AQCAtNzU4LDYgJiM0Mzs3NjYsOCBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcbiBcdHVuaW9uIHtcbiBcdFx0dTY0IG1lbWNnX2lkO1xuIFx0fTtcbiYjNDM7LyogcHJpdmF0ZTogKi9cbiYjNDM7XHQvKiBTaWJsaW5ncyBsaXN0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtNzY1LDEyICYjNDM7Nzc1LDEzIEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIge1xuICAqIHN0cnVjdCBkYW1vbl9wcm9iZSAtIERhdGEgcmVnaW9uIGF0dHJpYnV0ZSBwcm9iZS5cbiAgKlxuICAqIEB3ZWlnaHQ6XHRSZWxhdGl2ZSBwcmlvcml0eSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGlzIHByb2JlLlxuLSAqIEBmaWx0ZXJzOlx0RmlsdGVycyBmb3IgYXNzZXNzaW5nIGlmIGEgZ2l2ZW4gcmVnaW9uIGlzIGZvciB0aGlzIHByb2JlLlxuLSAqIEBsaXN0Olx0U2libGluZ3MgbGlzdC5cbiAgKi9cbiBzdHJ1Y3QgZGFtb25fcHJvYmUge1xuIFx0dW5zaWduZWQgaW50IHdlaWdodDtcbiYjNDM7LyogcHJpdmF0ZTogKi9cbiYjNDM7XHQvKiBGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZpbHRlcnM7XG4mIzQzO1x0LyogU2libGluZ3MgbGlzdC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiB9O1xuIFxuQEAgLTgzNywxNCAmIzQzOzg0OCw5IEBAIHN0cnVjdCBkYW1vbl9hdHRycyB7XG4gICogdGhyZWFkIG90aGVyIHRoYW4gdGhlIGtkYW1vbmQgc2hvdWxkIGJlIG1hZGUgdXNpbmcgc2FmZSBEQU1PTiBBUElzLFxuICAqIGluY2x1ZGluZyBkYW1vbl9jYWxsKCkgYW5kIGRhbW9zX3dhbGsoKS5cbiAgKlxuLSAqIEBvcHM6XHRTZXQgb2YgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuXG4tICogQHByb2JlczpcdEhlYWQgb2YgcHJvYmVzIChcdTAwMjZkYW1vbl9wcm9iZSkgbGlzdC5cbiAgKiBAYWRkcl91bml0Olx0U2NhbGUgZmFjdG9yIGZvciBjb3JlIHRvIG9wcyBhZGRyZXNzIGNvbnZlcnNpb24uXG4gICogQG1pbl9yZWdpb25fc3o6XHRNaW5pbXVtIHJlZ2lvbiBzaXplLlxuICAqIEBwYXVzZTpcdFBhdXNlIGtkYW1vbmQgbWFpbiBsb29wLlxuLSAqIEBhZGFwdGl2ZV90YXJnZXRzOlx0SGVhZCBvZiBtb25pdG9yaW5nIHRhcmdldHMgKFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC5cbi0gKiBAc2NoZW1lczpcdFx0SGVhZCBvZiBzY2hlbWVzIChcdTAwMjZkYW1vcykgbGlzdC5cbi0gKiBAcm5kX3N0YXRlOlx0UGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuXG4gICovXG4gc3RydWN0IGRhbW9uX2N0eCB7XG4gXHRzdHJ1Y3QgZGFtb25fYXR0cnMgYXR0cnM7XG5AQCAtODkzLDE1ICYjNDM7ODk5LDIxIEBAIHN0cnVjdCBkYW1vbl9jdHgge1xuIFx0c3RydWN0IG11dGV4IGtkYW1vbmRfbG9jaztcbiBcbiAvKiBwdWJsaWM6ICovXG4tXHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHM7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlcztcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0O1xuIFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6O1xuIFx0Ym9vbCBwYXVzZTtcbiBcbiYjNDM7LyogcHJpdmF0ZTogKi9cbiYjNDM7XHQvKiBTZXQgb2YgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuICovXG4mIzQzO1x0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzO1xuJiM0MztcdC8qIEhlYWQgb2YgbW9uaXRvcmluZyB0YXJnZXRzIChcdTAwMjZkYW1vbl90YXJnZXQpIGxpc3QuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGFkYXB0aXZlX3RhcmdldHM7XG4mIzQzO1x0LyogSGVhZCBvZiBwcm9iZXMgKFx1MDAyNmRhbW9uX3Byb2JlKSBsaXN0LiAqL1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgcHJvYmVzO1xuJiM0MztcdC8qIEhlYWQgb2Ygc2NoZW1lcyAoXHUwMDI2ZGFtb3MpIGxpc3QuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHNjaGVtZXM7XG4gXG4mIzQzO1x0LyogQHJuZF9zdGF0ZTpcdFBlci1jdHggUFJORyBzdGF0ZSBmb3IgZGFtb25fcmFuZCgpLiAqL1xuIFx0c3RydWN0IHJuZF9zdGF0ZSBybmRfc3RhdGU7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xuaW5kZXggYjVmZTAzNmY3ODAxNTIuLjIwOGJiNjM5ZjUwZmZiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuY1xuQEAgLTIwNTEsNyAmIzQzOzIwNTEsNyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdGludCBpLCBlcnI7XG4gXG4gXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xuLVx0aWYgKGN0eC1cdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxuJiM0MztcdGlmICghZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSBcdTAwMjZcdTAwMjYgc3lzZnNfdGFyZ2V0cy1cdTAwM2VuciBcdTAwM2UgMSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzeXNmc190YXJnZXRzLVx1MDAzZW5yOyBpJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY29udGFpbnMgc3RydWN0dXJhbCByZWFycmFuZ2VtZW50cyBvZiBmaWVsZHMgaW4gaW5jbHVkZS9saW51eC9kYW1vbi5oLCBhZGRzIGNvbW1lbnRzLCBhbmQgcmVwbGFjZXMgYSBkaXJlY3QgZW51bSBjb21wYXJpc29uIHdpdGggYW4gZXF1aXZhbGVudCBoZWxwZXIgZnVuY3Rpb24gKGRhbW9uX3RhcmdldF9oYXNfcGlkKSBpbiBtbS9kYW1vbi9zeXNmcy5jLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFkMDk1N2RkYzZiYjQwZjg4ZjIyMDAyNzBmYzAxMTI5MjljNjEzYjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxNSAwMDo0OToxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaAppbmRleCBmNjk0NDJhOWQ0MzEyOC4uMzI3ZjUzNDY5NmFhODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKQEAgLTQ2LDcgJiM0Mzs0Niw2IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHsKICAqIEBzYW1wbGluZ19hZGRyOglBZGRyZXNzIG9mIHRoZSBzYW1wbGUgZm9yIHRoZSBuZXh0IGFjY2VzcyBjaGVjay4KICAqIEBucl9hY2Nlc3NlczoJQWNjZXNzIGZyZXF1ZW5jeSBvZiB0aGlzIHJlZ2lvbi4KICAqIEBwcm9iZV9oaXRzOgkJTnVtYmVyIG9mIHByb2JlLXBvc2l0aXZlIHJlZ2lvbiBzYW1wbGVzLgotICogQGxpc3Q6CQlMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLgogICogQGFnZToJCUFnZSBvZiB0aGlzIHJlZ2lvbi4KICAqCiAgKiBGb3IgYW55IHVzZSBjYXNlLCBAYXIgc2hvdWxkIGJlIG5vbi16ZXJvIHBvc2l0aXZlIHNpemUuICBkYW1vbl9zZXRfcmVnaW9ucygpCkBAIC02OCw5ICYjNDM7NjcsMTEgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7CiAJdW5zaWduZWQgbG9uZyBzYW1wbGluZ19hZGRyOwogCXVuc2lnbmVkIGludCBucl9hY2Nlc3NlczsKIAl1bnNpZ25lZCBjaGFyIHByb2JlX2hpdHNbREFNT05fTUFYX1BST0JFU107Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXVuc2lnbmVkIGludCBhZ2U7Ci0vKiBwcml2YXRlOiBJbnRlcm5hbCB2YWx1ZSBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqLwomIzQzOy8qIHByaXZhdGU6IGludGVybmFsIHVzZSBvbmx5LiAqLwomIzQzOwkvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqLwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiYjNDM7CS8qIGZvciBhZ2UgY2FsY3VsYXRpb24uICovCiAJdW5zaWduZWQgaW50IGxhc3RfbnJfYWNjZXNzZXM7CiAJdW5zaWduZWQgY2hhciBsYXN0X3Byb2JlX2hpdHNbREFNT05fTUFYX1BST0JFU107CiB9OwpAQCAtNzgsOSAmIzQzOzc5LDYgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7CiAvKioKICAqIHN0cnVjdCBkYW1vbl90YXJnZXQgLSBSZXByZXNlbnRzIGEgbW9uaXRvcmluZyB0YXJnZXQuCiAgKiBAcGlkOgkJVGhlIFBJRCBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRvIG1vbml0b3IuCi0gKiBAbnJfcmVnaW9uczoJCU51bWJlciBvZiBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LgotICogQHJlZ2lvbnNfbGlzdDoJSGVhZCBvZiB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4KLSAqIEBsaXN0OgkJTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4KICAqIEBvYnNvbGV0ZToJCVdoZXRoZXIgdGhlIGNvbW1pdCBkZXN0aW5hdGlvbiB0YXJnZXQgaXMgb2Jzb2xldGUuCiAgKgogICogRWFjaCBtb25pdG9yaW5nIGNvbnRleHQgY291bGQgaGF2ZSBtdWx0aXBsZSB0YXJnZXRzLiAgRm9yIGV4YW1wbGUsIGEgY29udGV4dApAQCAtOTQsMTAgJiM0Mzs5MiwxNCBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uIHsKICAqLwogc3RydWN0IGRhbW9uX3RhcmdldCB7CiAJc3RydWN0IHBpZCAqcGlkOwomIzQzOwlib29sIG9ic29sZXRlOwomIzQzOy8qIHByaXZhdGU6ICovCiYjNDM7CS8qIE51bWJlciBvZiBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LiAqLwogCXVuc2lnbmVkIGludCBucl9yZWdpb25zOwomIzQzOwkvKiBIZWFkIG9mIHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgcmVnaW9uc19saXN0OwomIzQzOwkvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlib29sIG9ic29sZXRlOwogfTsKIAogLyoqCkBAIC0xNzMsMTAgJiM0MzsxNzUsOCBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHsKICAqIEBtZXRyaWM6CQlNZXRyaWMgdG8gYmUgdXNlZCBmb3IgcmVwcmVzZW50aW5nIHRoZSBnb2FsLgogICogQHRhcmdldF92YWx1ZToJVGFyZ2V0IHZhbHVlIG9mIEBtZXRyaWMgdG8gYWNoaWV2ZSB3aXRoIHRoZSB0dW5pbmcuCiAgKiBAY3VycmVudF92YWx1ZToJQ3VycmVudCB2YWx1ZSBvZiBAbWV0cmljLgotICogQGxhc3RfcHNpX3RvdGFsOglMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSQogICogQG5pZDoJCU5vZGUgaWQuCiAgKiBAbWVtY2dfaWQ6CQlNZW1jZyBpZC4KLSAqIEBsaXN0OgkJTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4KICAqCiAgKiBEYXRhIHN0cnVjdHVyZSBmb3IgZ2V0dGluZyB0aGUgY3VycmVudCBzY29yZSBvZiB0aGUgcXVvdGEgdHVuaW5nIGdvYWwuICBUaGUKICAqIHNjb3JlIGlzIGNhbGN1bGF0ZWQgYnkgaG93IGNsb3NlIEBjdXJyZW50X3ZhbHVlIGFuZCBAdGFyZ2V0X3ZhbHVlIGFyZS4gIFRoZW4KQEAgLTE5OSwxMiAmIzQzOzE5OSwxNyBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7CiAJdW5zaWduZWQgbG9uZyBjdXJyZW50X3ZhbHVlOwogCS8qIG1ldHJpYy1kZXBlbmRlbnQgZmllbGRzICovCiAJdW5pb24gewotCQl1NjQgbGFzdF9wc2lfdG90YWw7CiAJCXN0cnVjdCB7CiAJCQlpbnQgbmlkOwogCQkJdTY0IG1lbWNnX2lkOwogCQl9OwomIzQzOy8qIHByaXZhdGU6ICovCiYjNDM7CQkvKiBMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSSAqLwomIzQzOwkJdTY0IGxhc3RfcHNpX3RvdGFsOwomIzQzOwogCX07CiYjNDM7LyogcHJpdmF0ZTogKi8KJiM0MzsJLyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCkBAIC0yMjMsNyAmIzQzOzIyOCw2IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7CiAgKiBAcmVzZXRfaW50ZXJ2YWw6CUNoYXJnZSByZXNldCBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMuCiAgKiBAbXM6CQkJTWF4aW11bSBtaWxsaXNlY29uZHMgdGhhdCB0aGUgc2NoZW1lIGNhbiB1c2UuCiAgKiBAc3o6CQkJTWF4aW11bSBieXRlcyBvZiBtZW1vcnkgdGhhdCB0aGUgYWN0aW9uIGNhbiBiZSBhcHBsaWVkLgotICogQGdvYWxzOgkJSGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKCZhbXA7ZGFtb3NfcXVvdGFfZ29hbCkgbGlzdC4KICAqIEBnb2FsX3R1bmVyOgkJR29hbC1iYXNlZCBAZXN6IHR1bmluZyBhbGdvcml0aG0gdG8gdXNlLgogICogQGVzejoJCUVmZmVjdGl2ZSBzaXplIHF1b3RhIGluIGJ5dGVzLgogICogQGZhaWxfY2hhcmdlX251bToJRmFpbGVkIHJlZ2lvbnMgY2hhcmdlIHJhdGUgbnVtZXJhdG9yLgpAQCAtMjUwLDcgJiM0MzsyNTQsNyBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIgewogICogdGhlIHNjaGVtZSYjMzk7cyBhY3Rpb24uICBEQU1PTiB0aGVuIGNvbXBhcmVzIGl0IGFnYWluc3QgJmFtcDtzeiBhbmQgdXNlcyBzbWFsbGVyCiAgKiBvbmUgYXMgdGhlIGVmZmVjdGl2ZSBxdW90YS4KICAqCi0gKiBJZiBAZ29hbHMgaXMgbm90IGVtcHR5LCBEQU1PTiBjYWxjdWxhdGVzIHlldCBhbm90aGVyIHNpemUgcXVvdGEgYmFzZWQgb24gdGhlCiYjNDM7ICogSWYgZ29hbHMgaXMgbm90IGVtcHR5LCBEQU1PTiBjYWxjdWxhdGVzIHlldCBhbm90aGVyIHNpemUgcXVvdGEgYmFzZWQgb24gdGhlCiAgKiBnb2FscyB1c2luZyBpdHMgaW50ZXJuYWwgZmVlZGJhY2sgbG9vcCBhbGdvcml0aG0sIGZvciBldmVyeSBAcmVzZXRfaW50ZXJ2YWwuCiAgKiBUaGVuLCBpZiB0aGUgbmV3IHNpemUgcXVvdGEgaXMgc21hbGxlciB0aGFuIHRoZSBlZmZlY3RpdmUgcXVvdGEsIGl0IHVzZXMgdGhlCiAgKiBuZXcgc2l6ZSBxdW90YSBhcyB0aGUgZWZmZWN0aXZlIHF1b3RhLgpAQCAtMjcxLDcgJiM0MzsyNzUsNyBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGEgewogCXVuc2lnbmVkIGxvbmcgcmVzZXRfaW50ZXJ2YWw7CiAJdW5zaWduZWQgbG9uZyBtczsKIAl1bnNpZ25lZCBsb25nIHN6OwotCXN0cnVjdCBsaXN0X2hlYWQgZ29hbHM7CiYjNDM7CiAJZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIGdvYWxfdHVuZXI7CiAJdW5zaWduZWQgbG9uZyBlc3o7CiAKQEAgLTI4Myw2ICYjNDM7Mjg3LDggQEAgc3RydWN0IGRhbW9zX3F1b3RhIHsKIAl1bnNpZ25lZCBpbnQgd2VpZ2h0X2FnZTsKIAogLyogcHJpdmF0ZTogKi8KJiM0MzsJLyogSGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKCZhbXA7ZGFtb3NfcXVvdGFfZ29hbCkgbGlzdC4gKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBnb2FsczsKIAkvKiBGb3IgdGhyb3VnaHB1dCBlc3RpbWF0aW9uICovCiAJdW5zaWduZWQgbG9uZyB0b3RhbF9jaGFyZ2VkX3N6OwogCXVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9uczsKQEAgLTQyNiw3ICYjNDM7NDMyLDYgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7CiAgKgkJJmFtcDtkYW1vbl9jdHgtJmd0O2FkYXB0aXZlX3RhcmdldHMgaWYgQHR5cGUgaXMKICAqCQlEQU1PU19GSUxURVJfVFlQRV9UQVJHRVQuCiAgKiBAc3pfcmFuZ2U6CVNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS4KLSAqIEBsaXN0OglMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLgogICoKICAqIEJlZm9yZSBhcHBseWluZyB0aGUgJmFtcDtkYW1vcy0mZ3Q7YWN0aW9uIHRvIGEgbWVtb3J5IHJlZ2lvbiwgREFNT1MgY2hlY2tzIGlmIGVhY2gKICAqIGJ5dGUgb2YgdGhlIHJlZ2lvbiBtYXRjaGVzIHRvIHRoaXMgZ2l2ZW4gY29uZGl0aW9uIGFuZCBhdm9pZCBhcHBseWluZyB0aGUKQEAgLTQ0NCw2ICYjNDM7NDQ5LDggQEAgc3RydWN0IGRhbW9zX2ZpbHRlciB7CiAJCWludCB0YXJnZXRfaWR4OwogCQlzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSBzel9yYW5nZTsKIAl9OwomIzQzOy8qIHByaXZhdGU6ICovCiYjNDM7CS8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIApAQCAtNTE1LDEyICYjNDM7NTIyLDggQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgewogICogQHdtYXJrczoJCVdhdGVybWFya3MgZm9yIGF1dG9tYXRlZCAoaW4pYWN0aXZhdGlvbiBvZiB0aGlzIHNjaGVtZS4KICAqIEBtaWdyYXRlX2Rlc3RzOglEZXN0aW5hdGlvbiBub2RlcyBpZiBAYWN0aW9uIGlzICYjMzQ7bWlncmF0ZV97aG90LGNvbGR9JiMzNDsuCiAgKiBAdGFyZ2V0X25pZDoJCURlc3RpbmF0aW9uIG5vZGUgaWYgQGFjdGlvbiBpcyAmIzM0O21pZ3JhdGVfe2hvdCxjb2xkfSYjMzQ7LgotICogQGNvcmVfZmlsdGVyczoJQWRkaXRpb25hbCBzZXQgb2YgJmFtcDtzdHJ1Y3QgZGFtb3NfZmlsdGVyIGZvciAmYW1wO2FjdGlvbi4KLSAqIEBvcHNfZmlsdGVyczoJb3BzIGxheWVyIGhhbmRsaW5nICZhbXA7c3RydWN0IGRhbW9zX2ZpbHRlciBvYmplY3RzIGxpc3QuCi0gKiBAbGFzdF9hcHBsaWVkOglMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LgogICogQHN0YXQ6CQlTdGF0aXN0aWNzIG9mIHRoaXMgc2NoZW1lLgogICogQG1heF9ucl9zbmFwc2hvdHM6CVVwcGVyIGxpbWl0IG9mIG5yX3NuYXBzaG90cyBzdGF0LgotICogQGxpc3Q6CQlMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLgogICoKICAqIEZvciBlYWNoIEBhcHBseV9pbnRlcnZhbF91cywgREFNT04gZmluZHMgcmVnaW9ucyB3aGljaCBmaXQgaW4gdGhlCiAgKiAmYW1wO3BhdHRlcm4gYW5kIGFwcGxpZXMgJmFtcDthY3Rpb24gdG8gdGhvc2UuIFRvIGF2b2lkIGNvbnN1bWluZyB0b28gbXVjaApAQCAtNTQyLDE2ICYjNDM7NTQ1LDcgQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgewogICoKICAqIEJlZm9yZSBhcHBseWluZyB0aGUgJmFtcDthY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCAmYW1wO3N0cnVjdCBkYW1vbl9vcGVyYXRpb25zCiAgKiBpbXBsZW1lbnRhdGlvbiBjb3VsZCBjaGVjayBwYWdlcyBvZiB0aGUgcmVnaW9uIGFuZCBza2lwICZhbXA7YWN0aW9uIHRvIHJlc3BlY3QKLSAqICZhbXA7Y29yZV9maWx0ZXJzCi0gKgotICogVGhlIG1pbmltdW0gZW50aXR5IHRoYXQgQGFjdGlvbiBjYW4gYmUgYXBwbGllZCBkZXBlbmRzIG9uIHRoZSB1bmRlcmx5aW5nCi0gKiAmYW1wO3N0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkIHdpdGggdGhlIGNvcmUgbGF5ZXIKLSAqIGFic3RyYWN0LCBuYW1lbHkgJmFtcDtzdHJ1Y3QgZGFtb25fcmVnaW9uLCAmYW1wO3N0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5Ci0gKiBAYWN0aW9uIHRvIHNhbWUgZW50aXR5IG11bHRpcGxlIHRpbWVzLiAgTGFyZ2UgZm9saW9zIHRoYXQgdW5kZXJseWluZyBvbgotICogbXVsdGlwbGUgJmFtcDtzdHJ1Y3QgZGFtb24gcmVnaW9uIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSAmYW1wO3N0cnVjdAotICogZGFtb25fb3BlcmF0aW9ucyBjYW4gdXNlIEBsYXN0X2FwcGxpZWQgdG8gYXZvaWQgdGhhdC4gIERBTU9TIGNvcmUgbG9naWMKLSAqIHVuc2V0cyBAbGFzdF9hcHBsaWVkIHdoZW4gZWFjaCByZWdpb25zIHdhbGtpbmcgZm9yIGFwcGx5aW5nIHRoZSBzY2hlbWUgaXMKLSAqIGZpbmlzaGVkLgomIzQzOyAqICZhbXA7c3RydWN0IGRhbW9zX2ZpbHRlci4KICAqCiAgKiBBZnRlciBhcHBseWluZyB0aGUgJmFtcDthY3Rpb24gdG8gZWFjaCByZWdpb24sICZhbXA7c3RhdCBpcyB1cGRhdGVkLgogICoKQEAgLTU2Miw2ICYjNDM7NTU2LDE2IEBAIHN0cnVjdCBkYW1vcyB7CiAJc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuIHBhdHRlcm47CiAJZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uOwogCXVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXM7CiYjNDM7CXN0cnVjdCBkYW1vc19xdW90YSBxdW90YTsKJiM0MzsJc3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzOwomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCWludCB0YXJnZXRfbmlkOwomIzQzOwkJCXN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIG1pZ3JhdGVfZGVzdHM7CiYjNDM7CQl9OwomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgZGFtb3Nfc3RhdCBzdGF0OwomIzQzOwl1bnNpZ25lZCBsb25nIG1heF9ucl9zbmFwc2hvdHM7CiAvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seSAqLwogCS8qCiAJICogbnVtYmVyIG9mIHNhbXBsZSBpbnRlcnZhbHMgdGhhdCBzaG91bGQgYmUgcGFzc2VkIGJlZm9yZSBhcHBseWluZwpAQCAtNTc4LDIwICYjNDM7NTgyLDI1IEBAIHN0cnVjdCBkYW1vcyB7CiAJLyogd2hldGhlciB0byByZWplY3QgY29yZS9vcHMgZmlsdGVycyB1bWF0Y2hlZCByZWdpb25zICovCiAJYm9vbCBjb3JlX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Q7CiAJYm9vbCBvcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdDsKLS8qIHB1YmxpYzogKi8KLQlzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7Ci0Jc3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCWludCB0YXJnZXRfbmlkOwotCQkJc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0czsKLQkJfTsKLQl9OwomIzQzOwkvKiBBZGRpdGlvbmFsIHNldCBvZiAmYW1wO3N0cnVjdCBkYW1vc19maWx0ZXIgZm9yICZhbXA7YWN0aW9uLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgY29yZV9maWx0ZXJzOwomIzQzOwkvKiBvcHMgbGF5ZXIgaGFuZGxpbmcgJmFtcDtzdHJ1Y3QgZGFtb3NfZmlsdGVyIG9iamVjdHMgbGlzdC4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG9wc19maWx0ZXJzOwomIzQzOwkvKgomIzQzOwkgKiBMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LgomIzQzOwkgKgomIzQzOwkgKiBUaGUgbWluaW11bSBlbnRpdHkgdGhhdCBAYWN0aW9uIGNhbiBiZSBhcHBsaWVkIGRlcGVuZHMgb24gdGhlCiYjNDM7CSAqIHVuZGVybHlpbmcgJmFtcDtzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy4gIFNpbmNlIGl0IG1heSBub3QgYmUgYWxpZ25lZAomIzQzOwkgKiB3aXRoIHRoZSBjb3JlIGxheWVyIGFic3RyYWN0LCBuYW1lbHkgJmFtcDtzdHJ1Y3QgZGFtb25fcmVnaW9uLCAmYW1wO3N0cnVjdAomIzQzOwkgKiBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5IEBhY3Rpb24gdG8gc2FtZSBlbnRpdHkgbXVsdGlwbGUgdGltZXMuCiYjNDM7CSAqIExhcmdlIGZvbGlvcyB0aGF0IHVuZGVybHlpbmcgb24gbXVsdGlwbGUgJmFtcDtzdHJ1Y3QgZGFtb24gcmVnaW9uCiYjNDM7CSAqIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSAmYW1wO3N0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNhbgomIzQzOwkgKiB1c2UgQGxhc3RfYXBwbGllZCB0byBhdm9pZCB0aGF0LiAgREFNT1MgY29yZSBsb2dpYyB1bnNldHMKJiM0MzsJICogQGxhc3RfYXBwbGllZCB3aGVuIGVhY2ggcmVnaW9ucyB3YWxraW5nIGZvciBhcHBseWluZyB0aGUgc2NoZW1lIGlzCiYjNDM7CSAqIGZpbmlzaGVkLgomIzQzOwkgKi8KIAl2b2lkICpsYXN0X2FwcGxpZWQ7Ci0Jc3RydWN0IGRhbW9zX3N0YXQgc3RhdDsKLQl1bnNpZ25lZCBsb25nIG1heF9ucl9zbmFwc2hvdHM7CiYjNDM7CS8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIApAQCAtNzQ5LDcgJiM0Mzs3NTgsNiBAQCBlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHsKICAqIEBtYXRjaGluZzoJV2hldGhlciB0aGlzIGZpbHRlciBpcyBmb3IgdGhlIHR5cGUtbWF0Y2hpbmcgb25lcy4KICAqIEBhbGxvdzoJV2hldGhlciB0aGUgQHR5cGUtQG1hdGNoaW5nIG9uZXMgc2hvdWxkIHBhc3MgdGhpcyBmaWx0ZXIuCiAgKiBAbWVtY2dfaWQ6CU1lbWNnIGlkIG9mIHRoZSBxdWVzdGlvbiBpZiBAdHlwZSBpcyBEQU1PTl9GSUxURVJfTUVNQ0cuCi0gKiBAbGlzdDoJU2libGluZ3MgbGlzdC4KICAqLwogc3RydWN0IGRhbW9uX2ZpbHRlciB7CiAJZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB0eXBlOwpAQCAtNzU4LDYgJiM0Mzs3NjYsOCBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHsKIAl1bmlvbiB7CiAJCXU2NCBtZW1jZ19pZDsKIAl9OwomIzQzOy8qIHByaXZhdGU6ICovCiYjNDM7CS8qIFNpYmxpbmdzIGxpc3QuICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIApAQCAtNzY1LDEyICYjNDM7Nzc1LDEzIEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIgewogICogc3RydWN0IGRhbW9uX3Byb2JlIC0gRGF0YSByZWdpb24gYXR0cmlidXRlIHByb2JlLgogICoKICAqIEB3ZWlnaHQ6CVJlbGF0aXZlIHByaW9yaXR5IG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHRoaXMgcHJvYmUuCi0gKiBAZmlsdGVyczoJRmlsdGVycyBmb3IgYXNzZXNzaW5nIGlmIGEgZ2l2ZW4gcmVnaW9uIGlzIGZvciB0aGlzIHByb2JlLgotICogQGxpc3Q6CVNpYmxpbmdzIGxpc3QuCiAgKi8KIHN0cnVjdCBkYW1vbl9wcm9iZSB7CiAJdW5zaWduZWQgaW50IHdlaWdodDsKJiM0MzsvKiBwcml2YXRlOiAqLwomIzQzOwkvKiBGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuICovCiAJc3RydWN0IGxpc3RfaGVhZCBmaWx0ZXJzOwomIzQzOwkvKiBTaWJsaW5ncyBsaXN0LiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKQEAgLTgzNywxNCAmIzQzOzg0OCw5IEBAIHN0cnVjdCBkYW1vbl9hdHRycyB7CiAgKiB0aHJlYWQgb3RoZXIgdGhhbiB0aGUga2RhbW9uZCBzaG91bGQgYmUgbWFkZSB1c2luZyBzYWZlIERBTU9OIEFQSXMsCiAgKiBpbmNsdWRpbmcgZGFtb25fY2FsbCgpIGFuZCBkYW1vc193YWxrKCkuCiAgKgotICogQG9wczoJU2V0IG9mIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgZ2l2ZW4gdXNlIGNhc2VzLgotICogQHByb2JlczoJSGVhZCBvZiBwcm9iZXMgKCZhbXA7ZGFtb25fcHJvYmUpIGxpc3QuCiAgKiBAYWRkcl91bml0OglTY2FsZSBmYWN0b3IgZm9yIGNvcmUgdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbi4KICAqIEBtaW5fcmVnaW9uX3N6OglNaW5pbXVtIHJlZ2lvbiBzaXplLgogICogQHBhdXNlOglQYXVzZSBrZGFtb25kIG1haW4gbG9vcC4KLSAqIEBhZGFwdGl2ZV90YXJnZXRzOglIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoJmFtcDtkYW1vbl90YXJnZXQpIGxpc3QuCi0gKiBAc2NoZW1lczoJCUhlYWQgb2Ygc2NoZW1lcyAoJmFtcDtkYW1vcykgbGlzdC4KLSAqIEBybmRfc3RhdGU6CVBlci1jdHggUFJORyBzdGF0ZSBmb3IgZGFtb25fcmFuZCgpLgogICovCiBzdHJ1Y3QgZGFtb25fY3R4IHsKIAlzdHJ1Y3QgZGFtb25fYXR0cnMgYXR0cnM7CkBAIC04OTMsMTUgJiM0Mzs4OTksMjEgQEAgc3RydWN0IGRhbW9uX2N0eCB7CiAJc3RydWN0IG11dGV4IGtkYW1vbmRfbG9jazsKIAogLyogcHVibGljOiAqLwotCXN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIG9wczsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlczsKIAl1bnNpZ25lZCBsb25nIGFkZHJfdW5pdDsKIAl1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3o7CiAJYm9vbCBwYXVzZTsKIAomIzQzOy8qIHByaXZhdGU6ICovCiYjNDM7CS8qIFNldCBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIGdpdmVuIHVzZSBjYXNlcy4gKi8KJiM0MzsJc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzOwomIzQzOwkvKiBIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoJmFtcDtkYW1vbl90YXJnZXQpIGxpc3QuICovCiAJc3RydWN0IGxpc3RfaGVhZCBhZGFwdGl2ZV90YXJnZXRzOwomIzQzOwkvKiBIZWFkIG9mIHByb2JlcyAoJmFtcDtkYW1vbl9wcm9iZSkgbGlzdC4gKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBwcm9iZXM7CiYjNDM7CS8qIEhlYWQgb2Ygc2NoZW1lcyAoJmFtcDtkYW1vcykgbGlzdC4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHNjaGVtZXM7CiAKJiM0MzsJLyogQHJuZF9zdGF0ZToJUGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuICovCiAJc3RydWN0IHJuZF9zdGF0ZSBybmRfc3RhdGU7CiB9OwogCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuYwppbmRleCBiNWZlMDM2Zjc4MDE1Mi4uMjA4YmI2MzlmNTBmZmIgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMuYwpAQCAtMjA1MSw3ICYjNDM7MjA1MSw3IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogCWludCBpLCBlcnI7CiAKIAkvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqLwotCWlmIChjdHgtJmd0O29wcy5pZCA9PSBEQU1PTl9PUFNfUEFERFIgJmFtcDsmYW1wOyBzeXNmc190YXJnZXRzLSZndDtuciAmZ3Q7IDEpCiYjNDM7CWlmICghZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSAmYW1wOyZhbXA7IHN5c2ZzX3RhcmdldHMtJmd0O25yICZndDsgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc3lzZnNfdGFyZ2V0cy0mZ3Q7bnI7IGkmIzQzOyYjNDM7KSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBwYXRjaCwgYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIGZhaXJseSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB0b3VjaGluZyBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBhbmQgYG1tL2RhbW9uL3N5c2ZzLmNgLiBUaGUgaGVhZGVyIGZpbGUgbW9kaWZpY2F0aW9ucyBzZWVtIGNvc21ldGljIOKAkyByZWFycmFuZ2luZyBjb21tZW50cywgcmVvcmRlcmluZyBzdHJ1Y3QgZmllbGRzLCBhbmQgYWRkaW5nIGAvKiBwcml2YXRlOiAqL2AgYmxvY2tzLiBNb3N0bHkgZm9ybWF0dGluZywgd2hpY2ggaXMgZmluZSwgYnV0IEkmIzM5O2xsIHN0aWxsIGdsYW5jZSB0aHJvdWdoIGl0IHRvIG1ha2Ugc3VyZSBub3RoaW5nIHdhcyBhY2NpZGVudGFsbHkgY2hhbmdlZC4KClRoZSByZWFsIG1lYXQgb2YgdGhpcyBpcyBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIFRoZSBjb3JlIGNoYW5nZSBpcyBhIGxvZ2ljYWwgYWRqdXN0bWVudCBpbiB0aGlzIGNvZGUgYmxvY2s6CgpgYGBjCi0JaWYgKGN0eC0mZ3Q7b3BzLmlkID09IERBTU9OX09QU19QQUREUiAmYW1wOyZhbXA7IHN5c2ZzX3RhcmdldHMtJmd0O25yICZndDsgMSkKJiM0MzsJaWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpICZhbXA7JmFtcDsgc3lzZnNfdGFyZ2V0cy0mZ3Q7bnIgJmd0OyAxKQpgYGAKCldlJiMzOTtyZSByZXBsYWNpbmcgYSBjaGVjayBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uIElEIChgREFNT05fT1BTX1BBRERSYCkgd2l0aCBhIGNhbGwgdG8gYGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgLiBUaGUgb3ZlcmFsbCBsb2dpYyBzZWVtcyB0byBiZSByZWxhdGVkIHRvIG1hbmFnaW5nIHRhcmdldCBjb25maWd1cmF0aW9ucyBiYXNlZCBvbiB0aGVpciBudW1iZXIuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBTcGVjaWZpY2FsbHksIHdoYXQgc2NlbmFyaW8gaXMgdGhpcyBub3cgaGFuZGxpbmcgdGhhdCB0aGUgcHJpb3Igb25lIGRpZG4mIzM5O3QsIG9yIHZpY2UtdmVyc2E/IFdoYXQgY29udGV4dCBpcyB0aGUgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCBmdW5jdGlvbiByZWxldmFudCBpbj8KCkkgbmVlZCB0byBzZWUgd2hhdCBgZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KWAgYWN0dWFsbHkgKmRvZXMqLiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgZmluZCB0aGUgZGVmaW5pdGlvbiBhbmQgYW55IHVzYWdlcyBvZiB0aGF0IGZ1bmN0aW9uLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIGlmIHRoaXMgaXMgYSBidWcgZml4LCBhbiBvcHRpbWl6YXRpb24sIG9yIHNvbWV0aGluZyBlbnRpcmVseSBkaWZmZXJlbnQuIEkmIzM5O2xsIG5lZWQgdG8gc3R1ZHkgdGhhdCBkZWZpbml0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaXRzIHJlbGV2YW5jZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgc3lzZnMgaW50ZXJmYWNlIGFuZCB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fdGFyZ2V0X2hhc19waWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNzI9aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3My1cbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDc0OnN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZChjb25zdCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3NS17XG4tLVxubW0vZGFtb24vY29yZS5jPTE1ODc9c3RhdGljIHZvaWQgZGFtb25fcmV2ZXJ0X3RhcmdldF9jb21taXRzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTU5MS1cbm1tL2RhbW9uL2NvcmUuYzoxNTkyOlx0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChzcmMpKVxubW0vZGFtb24vY29yZS5jLTE1OTMtXHRcdHJldHVybjtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTYwMz1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNjE3LVx0XHRcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXQoXG5tbS9kYW1vbi9jb3JlLmM6MTYxODpcdFx0XHRcdFx0ZHN0X3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoZHN0KSxcbm1tL2RhbW9uL2NvcmUuYzoxNjE5Olx0XHRcdFx0XHRzcmNfdGFyZ2V0LCBkYW1vbl90YXJnZXRfaGFzX3BpZChzcmMpLFxubW0vZGFtb24vY29yZS5jLTE2MjAtXHRcdFx0XHRcdHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTY1Mi1cdFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldChuZXdfdGFyZ2V0LCBmYWxzZSxcbm1tL2RhbW9uL2NvcmUuYzoxNjUzOlx0XHRcdFx0c3JjX3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSxcbm1tL2RhbW9uL2NvcmUuYy0xNjU0LVx0XHRcdFx0c3JjLVx1MDAzZW1pbl9yZWdpb25fc3opO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjAyOT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldCAqc3lzX3RhcmdldCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwMzYtXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdCk7XG5tbS9kYW1vbi9zeXNmcy5jOjIwMzc6XHRpZiAoZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSkge1xubW0vZGFtb24vc3lzZnMuYy0yMDM4LVx0XHR0LVx1MDAzZXBpZCA9IGZpbmRfZ2V0X3BpZChzeXNfdGFyZ2V0LVx1MDAzZXBpZCk7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMDQ4PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjA1My1cdC8qIE11bHRpcGxlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyB0YXJnZXRzIG1ha2VzIG5vIHNlbnNlICovXG5tbS9kYW1vbi9zeXNmcy5jOjIwNTQ6XHRpZiAoIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkgXHUwMDI2XHUwMDI2IHN5c2ZzX3RhcmdldHMtXHUwMDNlbnIgXHUwMDNlIDEpXG5tbS9kYW1vbi9zeXNmcy5jLTIwNTUtXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEkmIzM5O2QgZXhwZWN0IGZyb20gc29tZXRoaW5nIGNhbGxlZCBgZGFtb25fdGFyZ2V0X2hhc19waWRgOgoKKipBbmFseXppbmcgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCoqCgpBbHJpZ2h0LCB0aGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGRlc2NyaXB0aXZlLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0LiAmIzM0O0RBTU9OJiMzNDsgbGlrZWx5IHJlZmVycyB0byB0aGUgRHluYW1pYyBBZGFwdGl2ZSBNZW1vcnkgT3B0aW1pemVyIGZvciBOVU1BLCBzbyB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoYXQgZnJhbWV3b3JrLiAmIzM0O1RhcmdldCYjMzQ7IHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgb3BlcmF0aW5nIG9uIGEgc3BlY2lmaWMgcHJvY2VzcyBvciB0YXNrIHRoYXQgREFNT04gaXMgd2F0Y2hpbmcgb3IgbWFuYWdpbmcuIEFuZCwgJiMzNDtQSUQmIzM0OyBwcmV0dHkgY2xlYXJseSBzaWduYWxzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSB1c2luZyB0aGUgcHJvY2VzcyBJRCBhcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4KCk15IGltbWVkaWF0ZSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYSBnaXZlbiBwcm9jZXNzIChpZGVudGlmaWVkIGJ5IGl0cyBQSUQpIGlzIGN1cnJlbnRseSBiZWluZyBhY3RpdmVseSBtb25pdG9yZWQgb3IgdHJhY2tlZCBieSBEQU1PTi4gSXQmIzM5O3MgbGlrZWx5IGEgYm9vbGVhbiBmdW5jdGlvbiDigJMgcmV0dXJuaW5nIHRydWUgb3IgZmFsc2Ug4oCTIGluZGljYXRpbmcgd2hldGhlciB0aGUgcHJvY2VzcyBpcyBpbmRlZWQgYSB0YXJnZXQgb2YgREFNT04mIzM5O3Mgb3B0aW1pemF0aW9ucy4gUGVyaGFwcyBpdCYjMzk7cyBjaGVja2luZyBhZ2FpbnN0IGFuIGludGVybmFsIGxpc3Qgb3IgZGF0YSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBEQU1PTiBzeXN0ZW0uIFRoaXMgc2VlbXMgbGlrZSBpdCBjb3VsZCBiZSBwYXJ0IG9mIGEgbGFyZ2VyIGNvbmRpdGlvbmFsIGZsb3cgd2l0aGluIERBTU9OJiMzOTtzIG9wZXJhdGlvbnMuIEZvciBleGFtcGxlLCBpdCBjb3VsZCBiZSB1c2VkIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGFwcGx5IG9wdGltaXphdGlvbnMgdG8gYSBwcm9jZXNzLCB0byBlbnN1cmUgREFNT04gaXMgYWN0dWFsbHkgY29uY2VybmVkIHdpdGggdGhhdCBwYXJ0aWN1bGFyIFBJRCBhdCBhIGdpdmVuIHBvaW50IGluIHRpbWUuIE9yLCBjb252ZXJzZWx5LCBpdCBjb3VsZCBiZSBjaGVja2luZyBpZiBhIHByb2Nlc3MgaXMgKm5vIGxvbmdlciogYSB0YXJnZXQsIHBlcmhhcHMgZHVlIHRvIHRlcm1pbmF0aW9uIG9yIHJlc291cmNlIHJlbGVhc2UuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzA6XHRib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKTtcbjEwNzE6XHRpbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpO1xuMTA3MjpcdGludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpO1xuMTA3MzpcdFxuMTA3NDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZChjb25zdCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4xMDc1Olx0e1xuMTA3NjpcdFx0cmV0dXJuIGN0eC1cdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1ZBRERSIHx8IGN0eC1cdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX0ZWQUREUjtcbjEwNzc6XHR9XG4xMDc4Olx0XG4xMDc5Olx0LyogUmV0dXJucyBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgYWdncmVnYXRpb24gaW50ZXJ2YWwgKi9cbjEwODA6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxuMTA4MTpcdFx0XHRjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuMTA4MjpcdHtcbjEwODM6XHRcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsO1xuMTA4NDpcdFx0dW5zaWduZWQgbG9uZyBucl9zYW1wbGVzO1xuMTA4NTpcdFxuMTA4NjpcdFx0c2FtcGxlX2ludGVydmFsID0gYXR0cnMtXHUwMDNlc2FtcGxlX2ludGVydmFsID8gOiAxO1xuMTA4NzpcdFx0bnJfc2FtcGxlcyA9IG1pbihhdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLFxuMTA4ODpcdFx0XHRcdCh1bnNpZ25lZCBsb25nKVVJTlRfTUFYKTtcbjEwODk6XHRcdHJldHVybiBucl9zYW1wbGVzID8gOiAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNzIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBUYXJnZXQgU2VsZWN0aW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCBub3cgcmV0dXJucyBgdHJ1ZWAgaWYgYGN0eC0mZ3Q7b3BzLmlkYCBpcyBlaXRoZXIgYERBTU9OX09QU19WQUREUmAgb3IgYERBTU9OX09QU19GVkFERFJgLiBQcmV2aW91c2x5LCB0aGUgbG9naWMgd2FzIHRvIHNwZWNpZmljYWxseSBjaGVjayBmb3IgYERBTU9OX09QU19QQUREUmAgYWxvbmcgd2l0aCBgc3lzZnNfdGFyZ2V0cy0mZ3Q7bnIgJmd0OyAxYC4gTm93LCB0aGUgY29uZGl0aW9uIGhhcyBiZWVuIGludmVydGVkLiBXZSYjMzk7cmUgY2hlY2tpbmcgYCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpICZhbXA7JmFtcDsgc3lzZnNfdGFyZ2V0cy0mZ3Q7bnIgJmd0OyAxYC4KClNvLCBpZiBgY3R4LSZndDtvcHMuaWRgICppcyogYERBTU9OX09QU19QQUREUmAsIGBkYW1vbl90YXJnZXRfaGFzX3BpZGAgd2lsbCBldmFsdWF0ZSB0byBgZmFsc2VgLiBUaGF0IG1lYW5zIHRoZSBuZXcgY29uZGl0aW9uIGJlaGF2ZXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBjb25kaXRpb24gd2hlbiBkZWFsaW5nIHdpdGggUGh5c2ljYWwgQWRkcmVzcyB0YXJnZXRzIChQQUREUikgYW5kIG1vcmUgdGhhbiBvbmUgdGFyZ2V0LiBNYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGUgY2hlY2sgdGhlbiBiZWNvbWVzIGAhZmFsc2VgLCB3aGljaCBldmFsdWF0ZXMgdG8gYHRydWVgLCBhbmQgaXQgYWxsIHdvcmtzLgoKSG93ZXZlciwgdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IHRoZSBsb2dpYyB3b3JrcyB3aXRoIGFueSBvdGhlciBgY3R4LSZndDtvcHMuaWRgLiBJZiBgY3R4LSZndDtvcHMuaWRgIGlzIHNvbWV0aGluZyAqb3RoZXIqIHRoYW4gYERBTU9OX09QU19QQUREUmAsIGFuZCBhc3N1bWluZyBgc3lzZnNfdGFyZ2V0cy0mZ3Q7bnIgJmd0OyAxYCwgdGhpcyBtaWdodCBjaGFuZ2UgdGhlIHNlbGVjdGlvbiBpbiBzdWJ0bGUgd2F5cy4gSXQmIzM5O3MgaW1wZXJhdGl2ZSB0aGF0IEkgZmlndXJlIG91dCBhbGwgdGhlIHBvc3NpYmxlIHZhbHVlcyB0aGF0IGBkYW1vbl9vcHNfaWRgIGNhbiB0YWtlLCBzbyBJIGNhbiBwcmVkaWN0IGhvdyB0aGlzIHdpbGwgYWZmZWN0IERBTU9OJiMzOTtzIHRhcmdldCBzZWxlY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIElEcyBhcmUgdXNlZCwgYW5kIHdoYXQgc2NlbmFyaW9zIHRoZXkgYXBwbHkgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW51bSBkYW1vbl9vcHNfaWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTU1NT1zdHJ1Y3QgZGFtb3Mge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC02MDctLyoqXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjA4OiAqIGVudW0gZGFtb25fb3BzX2lkIC0gSWRlbnRpZmllciBmb3IgZWFjaCBtb25pdG9yaW5nIG9wZXJhdGlvbnMgaW1wbGVtZW50YXRpb25cbmluY2x1ZGUvbGludXgvZGFtb24uaC02MDktICpcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjE1LSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYxNjplbnVtIGRhbW9uX29wc19pZCB7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjE3LVx0REFNT05fT1BTX1ZBRERSLFxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD02NzQ9c3RydWN0IGRhbW9uX29wZXJhdGlvbnMge1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjY3NTpcdGVudW0gZGFtb25fb3BzX2lkIGlkO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY3Ni1cdHZvaWQgKCppbml0KShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2OT1pbnQgZGFtb25fbnJfcnVubmluZ19jdHhzKHZvaWQpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNzA6Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3MS1pbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNzI6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3My1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkYW1vbl9yZWdpb25fY2FjaGUgX19yb19hZnRlcl9pbml0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNC0vKiBTaG91bGQgYmUgY2FsbGVkIHVuZGVyIGRhbW9uX29wc19sb2NrIHdpdGggaWQgc21hbGxlciB0aGFuIE5SX0RBTU9OX09QUyAqL1xubW0vZGFtb24vY29yZS5jOjM1OnN0YXRpYyBib29sIF9fZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXG5tbS9kYW1vbi9jb3JlLmMtMzYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy00OS0gKi9cbm1tL2RhbW9uL2NvcmUuYzo1MDpib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxubW0vZGFtb24vY29yZS5jLTUxLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NzE9aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy05Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzo5ODppbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxubW0vZGFtb24vY29yZS5jLTk5LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTEzODI9c3RydWN0IGRhbW9uX3N5c2ZzX29wc19uYW1lIHtcbm1tL2RhbW9uL3N5c2ZzLmM6MTM4MzpcdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcbm1tL2RhbW9uL3N5c2ZzLmMtMTM4NC1cdGNoYXIgKm5hbWU7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xNDAyPXN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0IHtcbm1tL2RhbW9uL3N5c2ZzLmMtMTQwMy1cdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG5tbS9kYW1vbi9zeXNmcy5jOjE0MDQ6XHRlbnVtIGRhbW9uX29wc19pZCBvcHNfaWQ7XG5tbS9kYW1vbi9zeXNmcy5jLTE0MDUtXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdDtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTE0MTI9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpkYW1vbl9zeXNmc19jb250ZXh0X2FsbG9jKFxubW0vZGFtb24vc3lzZnMuYzoxNDEzOlx0XHRlbnVtIGRhbW9uX29wc19pZCBvcHNfaWQpXG5tbS9kYW1vbi9zeXNmcy5jLTE0MTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBPcGVyYXRpb25zIEVudW1lcmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIGFuZCBzcGVjaWZpY2FsbHkgemVybyBpbiBvbiB0aGUgYGVudW0gZGFtb25fb3BzX2lkYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2Ugb3BlcmF0aW9uIElEcyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCBlYWNoIG9uZSBzaWduaWZpZXMuIEkmIzM5O20gbGlrZWx5IGRlYnVnZ2luZyBhIERBTU9OLXJlbGF0ZWQgcGVyZm9ybWFuY2UgaXNzdWUsIHRyeWluZyB0byB0cmFjZSBhIHNwZWNpZmljIG9wZXJhdGlvbiwgb3IgbWF5YmUgZXZlbiBwcmVwYXJpbmcgdG8gYWRkIGEgbmV3IG1vbml0b3JpbmcgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBlbnVtIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBtYXAgb2Ygd2hhdCYjMzk7cyBkZWZpbmVkIGhlcmUgYW5kIGhvdyB0aGVzZSBJRHMgbWFwIHRvIHRoZSB1bmRlcmx5aW5nIGFjdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHdlbGwtZG9jdW1lbnRlZCAodGhvdWdoLCBsZXQmIzM5O3MgYmUgaG9uZXN0LCB0aGF0JiMzOTtzIG5vdCBhbHdheXMgdGhlIGNhc2UpLiBUaW1lIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgZW51bTsgSSBuZWVkIHRoaXMgaW5mb3JtYXRpb24gdG8gbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjEwOlx0ICogQERBTU9OX09QU19WQUREUjpcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xuIDYxMTpcdCAqIEBEQU1PTl9PUFNfRlZBRERSOlx0TW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBvbmx5IGZpeGVkIHJhbmdlcyBvZiB2aXJ0dWFsXG4gNjEyOlx0ICpcdFx0XHRhZGRyZXNzIHNwYWNlc1xuIDYxMzpcdCAqIEBEQU1PTl9PUFNfUEFERFI6XHRNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXG4gNjE0Olx0ICogQE5SX0RBTU9OX09QUzpcdE51bWJlciBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgaW1wbGVtZW50YXRpb25zXG4gNjE1Olx0ICovXG4gNjE2Olx0ZW51bSBkYW1vbl9vcHNfaWQge1xuIDYxNzpcdFx0REFNT05fT1BTX1ZBRERSLFxuIDYxODpcdFx0REFNT05fT1BTX0ZWQUREUixcbiA2MTk6XHRcdERBTU9OX09QU19QQUREUixcbiA2MjA6XHRcdE5SX0RBTU9OX09QUyxcbiA2MjE6XHR9O1xuIDYyMjpcdFxuIDYyMzpcdC8qKlxuIDYyNDpcdCAqIHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIC0gTW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuXG4gNjI1Olx0ICpcbiA2MjY6XHQgKiBAaWQ6XHRcdFx0XHRJZGVudGlmaWVyIG9mIHRoaXMgb3BlcmF0aW9ucyBzZXQuXG4gNjI3Olx0ICogQGluaXQ6XHRcdFx0SW5pdGlhbGl6ZSBvcGVyYXRpb25zLXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLlxuIDYyODpcdCAqIEB1cGRhdGU6XHRcdFx0VXBkYXRlIG9wZXJhdGlvbnMtcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuXG4gNjI5Olx0ICogQHByZXBhcmVfYWNjZXNzX2NoZWNrczpcdFByZXBhcmUgbmV4dCBhY2Nlc3MgY2hlY2sgb2YgdGFyZ2V0IHJlZ2lvbnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NDMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgREFNT04gVGFyZ2V0IExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIHBhdGNoIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGluIGBtbS9kYW1vbi9zeXNmcy5jYCByZXZvbHZlcyBhcm91bmQgdGhpcyBjb25kaXRpb25hbCBjaGVjay4gUHJldmlvdXNseSwgdGhleSB3ZXJlIGNoZWNraW5nIGlmIGBjdHgtJmd0O29wcy5pZGAgd2FzIGBEQU1PTl9PUFNfUEFERFJgIGFuZCBpZiB0aGUgbnVtYmVyIG9mIHRhcmdldHMgKGBzeXNmc190YXJnZXRzLSZndDtucmApIHdhcyBncmVhdGVyIHRoYW4gb25lLiBOb3csIHRoZSBjb25kaXRpb24gaGFzIGJlZW4gcmV3cml0dGVuIHRvIGAhZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSAmYW1wOyZhbXA7IHN5c2ZzX3RhcmdldHMtJmd0O25yICZndDsgMWAuCgpOb3csIGxldCYjMzk7cyB1bnBhY2sgdGhpcy4gYGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgIHJldHVybnMgdHJ1ZSBmb3IgYERBTU9OX09QU19WQUREUmAgYW5kIGBEQU1PTl9PUFNfRlZBRERSYC4gIFRoZXJlZm9yZSwgdGhlIG5lZ2F0aW9uLCBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgLCBlZmZlY3RpdmVseSBtZWFucyB0aGF0IHRoZSBjb25kaXRpb24gaXMgb25seSB0cnVlIGZvciBgREFNT05fT1BTX1BBRERSYCwgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBvcmlnaW5hbCBpbnRlbnQuIFRoZSBmdW5jdGlvbiBwcm9iYWJseSBpbmNsdWRlcyBzb21lIHNvcnQgb2YgY2hlY2sgd2l0aGluIGl0LCBmb3IgdGhlIGNvbnRleHQmIzM5O3Mgc3RydWN0dXJlLCB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIFBJRCBpcyB2YWxpZCwgb3IgdGhlIFBJRCBpcyBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiBjb250ZXh0LiBJdCYjMzk7cyBlc3NlbnRpYWxseSBqdXN0IGEgcmVmYWN0b3JpbmcgdG8gaW1wcm92ZSByZWFkYWJpbGl0eSBhbmQgcG90ZW50aWFsbHkgZW5jYXBzdWxhdGUgdGhlIGxvZ2ljIGJlaGluZCB0aGF0IGNoZWNrIHdpdGhpbiBhIGhlbHBlciBmdW5jdGlvbi4gQW5kLCBzaW5jZSBgTlJfREFNT05fT1BTYCBzaG91bGRuJiMzOTt0IGJlIHVzZWQsIHdlIGNhbiBpZ25vcmUgdGhhdCBwYXJ0LgoKSG9sZCBvbiwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgREFNT04gb3BlcmF0aW9uIElEcywgYnV0IGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MganVzdCB0aGUgdGhyZWUuIFNvIHllcywgaXQgc2VlbXMgdGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4KCkxvb2tpbmcgYXQgdGhlIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIGNoYW5nZXMsIHRoZXkgYXBwZWFyIHRvIGJlIHB1cmVseSBzdHJ1Y3R1cmFsIOKAkyBtb3ZpbmcgYXJvdW5kIHNvbWUgc3RydWN0IGZpZWxkcyBhbmQgYWRkaW5nIGNvbW1lbnRzLiBTbywgaXQmIzM5O3MganVzdCBjbGVhbnVwIGFuZCByZWZhY3RvcmluZyB0byBpbXByb3ZlIHRoZSBjb2RlLiBOb3RoaW5nIHN1YnN0YW50aWFsIGhlcmUuIEFscmlnaHQsIHRoaXMgbG9va3MgZ29vZC4gSSBkb24mIzM5O3Qgc2VlIGFueSBoaWRkZW4gcGl0ZmFsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3RhcmdldF9oYXNfcGlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD0xMDcyPWludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNzMtXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA3NDpzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNzUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNTg3PXN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTE1OTEtXG5tbS9kYW1vbi9jb3JlLmM6MTU5MjpcdGlmICghZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSlcbm1tL2RhbW9uL2NvcmUuYy0xNTkzLVx0XHRyZXR1cm47XG4tLVxubW0vZGFtb24vY29yZS5jPTE2MDM9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTYxNy1cdFx0XHRlcnIgPSBkYW1vbl9jb21taXRfdGFyZ2V0KFxubW0vZGFtb24vY29yZS5jOjE2MTg6XHRcdFx0XHRcdGRzdF90YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKGRzdCksXG5tbS9kYW1vbi9jb3JlLmM6MTYxOTpcdFx0XHRcdFx0c3JjX3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSxcbm1tL2RhbW9uL2NvcmUuYy0xNjIwLVx0XHRcdFx0XHRzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4tLVxubW0vZGFtb24vY29yZS5jLTE2NTItXHRcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXQobmV3X3RhcmdldCwgZmFsc2UsXG5tbS9kYW1vbi9jb3JlLmM6MTY1MzpcdFx0XHRcdHNyY190YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKHNyYyksXG5tbS9kYW1vbi9jb3JlLmMtMTY1NC1cdFx0XHRcdHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIwMjk9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQgKnN5c190YXJnZXQsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDM2LVx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHQpO1xubW0vZGFtb24vc3lzZnMuYzoyMDM3Olx0aWYgKGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkpIHtcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzOC1cdFx0dC1cdTAwM2VwaWQgPSBmaW5kX2dldF9waWQoc3lzX3RhcmdldC1cdTAwM2VwaWQpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjA0OD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwNTMtXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xubW0vZGFtb24vc3lzZnMuYzoyMDU0Olx0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxubW0vZGFtb24vc3lzZnMuYy0yMDU1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NzUKCQkJCQkJCW91dHB1dDogOTQKCQkJCQkJCXRob3VnaHRzOiA0MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gUGF0Y2ggQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoaXMgcGF0Y2ggaXMgdGlnaHRseSBzY29wZWQg4oCTIGl0JiMzOTtzIGp1c3QgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvZGFtb24uaGAgYW5kIGBtbS9kYW1vbi9zeXNmcy5jYC4gTm8gY29yZSBsb2dpYyBpcyBiZWluZyBhbHRlcmVkIGhlcmUsIHdoaWNoIGlzIHRoZSBmaXJzdCBnb29kIHNpZ24uCgpUaGUgZGlmZiBpdHNlbGYgZm9jdXNlcyBvbiBob3cgdGFyZ2V0cyBhcmUgYWRkZWQgaW4gdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhlIGNydWNpYWwgY2hhbmdlIGlzIHRoaXM6IHRoZSBjb25kaXRpb25hbCBjaGVjayBoYXMgc2hpZnRlZCBmcm9tIHJlbHlpbmcgb24gdGhlIGBjdHgtJmd0O29wcy5pZGAgKHNwZWNpZmljYWxseSwgd2hldGhlciBpdCYjMzk7cyBgREFNT05fT1BTX1BBRERSYCkgdG8gYCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpYC4gQnV0LCBJIHF1aWNrbHkgY29uZmlybSB0aGF0LCBpbiB0aGlzIGNvbnRleHQsIHRoaXMgaXMgYSBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCBjaGFuZ2UuIGBkYW1vbl90YXJnZXRfaGFzX3BpZGAgcmV0dXJuaW5nIHRydWUgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtb25pdG9yaW5nIHRhcmdldHMgbGlrZSBgVkFERFJgIGFuZCBgRlZBRERSYCwgYW5kIGZhbHNlIGZvciBwaHlzaWNhbCBhZGRyZXNzZXMsIG5lYXRseSBjb3ZlcnMgdGhlIGludGVudC4gRXNzZW50aWFsbHksIGl0IGFwcGVhcnMgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHJlZmFjdG9yaW5nIG9mIHRoZSBpbnRlcm5hbCBzdHJ1Y3QgbGF5b3V0LCBidXQgbm90IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGxvZ2ljLgoKV2hpbGUgc3RydWN0IGxheW91dCBtb2RpZmljYXRpb25zIGNhbiAqYWx3YXlzKiBpbnRyb2R1Y2Ugc3VidGxlIHBlcmZvcm1hbmNlIGltcGFjdHMsIG9yIGV2ZW4gbWVtb3J5IGxheW91dCBudWFuY2VzIHRoYXQgY2FuIG1hdHRlciBpbiBzcGVjaWZpYyB3b3JrbG9hZHMsIHRoZXJlIGlzIG5vIG5ldyBsb2dpYyBiZWluZyBhZGRlZCB0aGF0IHdvdWxkIG5lZWQgYSBmdXp6aW5nIHJ1bi4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzbiYjMzk7dCB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY29udGFpbnMgc3RydWN0dXJhbCByZWFycmFuZ2VtZW50cyBvZiBmaWVsZHMgaW4gaW5jbHVkZS9saW51eC9kYW1vbi5oLCBhZGRzIGNvbW1lbnRzLCBhbmQgcmVwbGFjZXMgYSBkaXJlY3QgZW51bSBjb21wYXJpc29uIHdpdGggYW4gZXF1aXZhbGVudCBoZWxwZXIgZnVuY3Rpb24gKGRhbW9uX3RhcmdldF9oYXNfcGlkKSBpbiBtbS9kYW1vbi9zeXNmcy5jLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgY29udGFpbnMgc3RydWN0dXJhbCByZWFycmFuZ2VtZW50cyBvZiBmaWVsZHMgaW4gaW5jbHVkZS9saW51eC9kYW1vbi5oLCBhZGRzIGNvbW1lbnRzLCBhbmQgcmVwbGFjZXMgYSBkaXJlY3QgZW51bSBjb21wYXJpc29uIHdpdGggYW4gZXF1aXZhbGVudCBoZWxwZXIgZnVuY3Rpb24gKGRhbW9uX3RhcmdldF9oYXNfcGlkKSBpbiBtbS9kYW1vbi9zeXNmcy5jLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo0OToyMC41MDMxMjA5OTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzEzNzM5NTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBjb250YWlucyBzdHJ1Y3R1cmFsIHJlYXJyYW5nZW1lbnRzIG9mIGZpZWxkcyBpbiBpbmNsdWRlL2xpbnV4L2RhbW9uLmgsIGFkZHMgY29tbWVudHMsIGFuZCByZXBsYWNlcyBhIGRpcmVjdCBlbnVtIGNvbXBhcmlzb24gd2l0aCBhbiBlcXVpdmFsZW50IGhlbHBlciBmdW5jdGlvbiAoZGFtb25fdGFyZ2V0X2hhc19waWQpIGluIG1tL2RhbW9uL3N5c2ZzLmMuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NDk6MjAuNTAzMTI3NzI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE4MTg0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZDA5NTdkZGM2YmI0MGY4OGYyMjAwMjcwZmMwMTEyOTI5YzYxM2I4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDE1IDAwOjQ5OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbmluZGV4IGY2OTQ0MmE5ZDQzMTI4Li4zMjdmNTM0Njk2YWE4NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtNDYsNyArNDYsNiBAQCBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7XFxuICAqIEBzYW1wbGluZ19hZGRyOlxcdEFkZHJlc3Mgb2YgdGhlIHNhbXBsZSBmb3IgdGhlIG5leHQgYWNjZXNzIGNoZWNrLlxcbiAgKiBAbnJfYWNjZXNzZXM6XFx0QWNjZXNzIGZyZXF1ZW5jeSBvZiB0aGlzIHJlZ2lvbi5cXG4gICogQHByb2JlX2hpdHM6XFx0XFx0TnVtYmVyIG9mIHByb2JlLXBvc2l0aXZlIHJlZ2lvbiBzYW1wbGVzLlxcbi0gKiBAbGlzdDpcXHRcXHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxcbiAgKiBAYWdlOlxcdFxcdEFnZSBvZiB0aGlzIHJlZ2lvbi5cXG4gICpcXG4gICogRm9yIGFueSB1c2UgY2FzZSwgQGFyIHNob3VsZCBiZSBub24temVybyBwb3NpdGl2ZSBzaXplLiAgZGFtb25fc2V0X3JlZ2lvbnMoKVxcbkBAIC02OCw5ICs2NywxMSBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzYW1wbGluZ19hZGRyO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXM7XFxuIFxcdHVuc2lnbmVkIGNoYXIgcHJvYmVfaGl0c1tEQU1PTl9NQVhfUFJPQkVTXTtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiBcXHR1bnNpZ25lZCBpbnQgYWdlO1xcbi0vKiBwcml2YXRlOiBJbnRlcm5hbCB2YWx1ZSBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqL1xcbisvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seS4gKi9cXG4rXFx0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHQvKiBmb3IgYWdlIGNhbGN1bGF0aW9uLiAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgbGFzdF9ucl9hY2Nlc3NlcztcXG4gXFx0dW5zaWduZWQgY2hhciBsYXN0X3Byb2JlX2hpdHNbREFNT05fTUFYX1BST0JFU107XFxuIH07XFxuQEAgLTc4LDkgKzc5LDYgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XFxuIC8qKlxcbiAgKiBzdHJ1Y3QgZGFtb25fdGFyZ2V0IC0gUmVwcmVzZW50cyBhIG1vbml0b3JpbmcgdGFyZ2V0LlxcbiAgKiBAcGlkOlxcdFxcdFRoZSBQSUQgb2YgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBtb25pdG9yLlxcbi0gKiBAbnJfcmVnaW9uczpcXHRcXHROdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC5cXG4tICogQHJlZ2lvbnNfbGlzdDpcXHRIZWFkIG9mIHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0Llxcbi0gKiBAbGlzdDpcXHRcXHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxcbiAgKiBAb2Jzb2xldGU6XFx0XFx0V2hldGhlciB0aGUgY29tbWl0IGRlc3RpbmF0aW9uIHRhcmdldCBpcyBvYnNvbGV0ZS5cXG4gICpcXG4gICogRWFjaCBtb25pdG9yaW5nIGNvbnRleHQgY291bGQgaGF2ZSBtdWx0aXBsZSB0YXJnZXRzLiAgRm9yIGV4YW1wbGUsIGEgY29udGV4dFxcbkBAIC05NCwxMCArOTIsMTQgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XFxuICAqL1xcbiBzdHJ1Y3QgZGFtb25fdGFyZ2V0IHtcXG4gXFx0c3RydWN0IHBpZCAqcGlkO1xcbitcXHRib29sIG9ic29sZXRlO1xcbisvKiBwcml2YXRlOiAqL1xcbitcXHQvKiBOdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4gKi9cXG4gXFx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnM7XFxuK1xcdC8qIEhlYWQgb2YgdGhlIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgb2YgdGhpcyB0YXJnZXQuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgcmVnaW9uc19saXN0O1xcbitcXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuLVxcdGJvb2wgb2Jzb2xldGU7XFxuIH07XFxuIFxcbiAvKipcXG5AQCAtMTczLDEwICsxNzUsOCBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIHtcXG4gICogQG1ldHJpYzpcXHRcXHRNZXRyaWMgdG8gYmUgdXNlZCBmb3IgcmVwcmVzZW50aW5nIHRoZSBnb2FsLlxcbiAgKiBAdGFyZ2V0X3ZhbHVlOlxcdFRhcmdldCB2YWx1ZSBvZiBAbWV0cmljIHRvIGFjaGlldmUgd2l0aCB0aGUgdHVuaW5nLlxcbiAgKiBAY3VycmVudF92YWx1ZTpcXHRDdXJyZW50IHZhbHVlIG9mIEBtZXRyaWMuXFxuLSAqIEBsYXN0X3BzaV90b3RhbDpcXHRMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSVxcbiAgKiBAbmlkOlxcdFxcdE5vZGUgaWQuXFxuICAqIEBtZW1jZ19pZDpcXHRcXHRNZW1jZyBpZC5cXG4tICogQGxpc3Q6XFx0XFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cXG4gICpcXG4gICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgc2NvcmUgb2YgdGhlIHF1b3RhIHR1bmluZyBnb2FsLiAgVGhlXFxuICAqIHNjb3JlIGlzIGNhbGN1bGF0ZWQgYnkgaG93IGNsb3NlIEBjdXJyZW50X3ZhbHVlIGFuZCBAdGFyZ2V0X3ZhbHVlIGFyZS4gIFRoZW5cXG5AQCAtMTk5LDEyICsxOTksMTcgQEAgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xcbiBcXHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfdmFsdWU7XFxuIFxcdC8qIG1ldHJpYy1kZXBlbmRlbnQgZmllbGRzICovXFxuIFxcdHVuaW9uIHtcXG4tXFx0XFx0dTY0IGxhc3RfcHNpX3RvdGFsO1xcbiBcXHRcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRcXHRpbnQgbmlkO1xcbiBcXHRcXHRcXHR1NjQgbWVtY2dfaWQ7XFxuIFxcdFxcdH07XFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdFxcdC8qIExhc3QgbWVhc3VyZWQgdG90YWwgUFNJICovXFxuK1xcdFxcdHU2NCBsYXN0X3BzaV90b3RhbDtcXG4rXFxuIFxcdH07XFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gfTtcXG4gXFxuQEAgLTIyMyw3ICsyMjgsNiBAQCBlbnVtIGRhbW9zX3F1b3RhX2dvYWxfdHVuZXIge1xcbiAgKiBAcmVzZXRfaW50ZXJ2YWw6XFx0Q2hhcmdlIHJlc2V0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cXG4gICogQG1zOlxcdFxcdFxcdE1heGltdW0gbWlsbGlzZWNvbmRzIHRoYXQgdGhlIHNjaGVtZSBjYW4gdXNlLlxcbiAgKiBAc3o6XFx0XFx0XFx0TWF4aW11bSBieXRlcyBvZiBtZW1vcnkgdGhhdCB0aGUgYWN0aW9uIGNhbiBiZSBhcHBsaWVkLlxcbi0gKiBAZ29hbHM6XFx0XFx0SGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFxcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LlxcbiAgKiBAZ29hbF90dW5lcjpcXHRcXHRHb2FsLWJhc2VkIEBlc3ogdHVuaW5nIGFsZ29yaXRobSB0byB1c2UuXFxuICAqIEBlc3o6XFx0XFx0RWZmZWN0aXZlIHNpemUgcXVvdGEgaW4gYnl0ZXMuXFxuICAqIEBmYWlsX2NoYXJnZV9udW06XFx0RmFpbGVkIHJlZ2lvbnMgY2hhcmdlIHJhdGUgbnVtZXJhdG9yLlxcbkBAIC0yNTAsNyArMjU0LDcgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcXG4gICogdGhlIHNjaGVtZSdzIGFjdGlvbi4gIERBTU9OIHRoZW4gY29tcGFyZXMgaXQgYWdhaW5zdCBcXHUwMDI2c3ogYW5kIHVzZXMgc21hbGxlclxcbiAgKiBvbmUgYXMgdGhlIGVmZmVjdGl2ZSBxdW90YS5cXG4gICpcXG4tICogSWYgQGdvYWxzIGlzIG5vdCBlbXB0eSwgREFNT04gY2FsY3VsYXRlcyB5ZXQgYW5vdGhlciBzaXplIHF1b3RhIGJhc2VkIG9uIHRoZVxcbisgKiBJZiBnb2FscyBpcyBub3QgZW1wdHksIERBTU9OIGNhbGN1bGF0ZXMgeWV0IGFub3RoZXIgc2l6ZSBxdW90YSBiYXNlZCBvbiB0aGVcXG4gICogZ29hbHMgdXNpbmcgaXRzIGludGVybmFsIGZlZWRiYWNrIGxvb3AgYWxnb3JpdGhtLCBmb3IgZXZlcnkgQHJlc2V0X2ludGVydmFsLlxcbiAgKiBUaGVuLCBpZiB0aGUgbmV3IHNpemUgcXVvdGEgaXMgc21hbGxlciB0aGFuIHRoZSBlZmZlY3RpdmUgcXVvdGEsIGl0IHVzZXMgdGhlXFxuICAqIG5ldyBzaXplIHF1b3RhIGFzIHRoZSBlZmZlY3RpdmUgcXVvdGEuXFxuQEAgLTI3MSw3ICsyNzUsNyBAQCBzdHJ1Y3QgZGFtb3NfcXVvdGEge1xcbiBcXHR1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsO1xcbiBcXHR1bnNpZ25lZCBsb25nIG1zO1xcbiBcXHR1bnNpZ25lZCBsb25nIHN6O1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xcbitcXG4gXFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIGdvYWxfdHVuZXI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZXN6O1xcbiBcXG5AQCAtMjgzLDYgKzI4Nyw4IEBAIHN0cnVjdCBkYW1vc19xdW90YSB7XFxuIFxcdHVuc2lnbmVkIGludCB3ZWlnaHRfYWdlO1xcbiBcXG4gLyogcHJpdmF0ZTogKi9cXG4rXFx0LyogSGVhZCBvZiBxdW90YSB0dW5pbmcgZ29hbHMgKFxcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LiAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xcbiBcXHQvKiBGb3IgdGhyb3VnaHB1dCBlc3RpbWF0aW9uICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgdG90YWxfY2hhcmdlZF9zejtcXG4gXFx0dW5zaWduZWQgbG9uZyB0b3RhbF9jaGFyZ2VkX25zO1xcbkBAIC00MjYsNyArNDMyLDYgQEAgZW51bSBkYW1vc19maWx0ZXJfdHlwZSB7XFxuICAqXFx0XFx0XFx1MDAyNmRhbW9uX2N0eC1cXHUwMDNlYWRhcHRpdmVfdGFyZ2V0cyBpZiBAdHlwZSBpc1xcbiAgKlxcdFxcdERBTU9TX0ZJTFRFUl9UWVBFX1RBUkdFVC5cXG4gICogQHN6X3JhbmdlOlxcdFNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS5cXG4tICogQGxpc3Q6XFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cXG4gICpcXG4gICogQmVmb3JlIGFwcGx5aW5nIHRoZSBcXHUwMDI2ZGFtb3MtXFx1MDAzZWFjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIERBTU9TIGNoZWNrcyBpZiBlYWNoXFxuICAqIGJ5dGUgb2YgdGhlIHJlZ2lvbiBtYXRjaGVzIHRvIHRoaXMgZ2l2ZW4gY29uZGl0aW9uIGFuZCBhdm9pZCBhcHBseWluZyB0aGVcXG5AQCAtNDQ0LDYgKzQ0OSw4IEBAIHN0cnVjdCBkYW1vc19maWx0ZXIge1xcbiBcXHRcXHRpbnQgdGFyZ2V0X2lkeDtcXG4gXFx0XFx0c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Ugc3pfcmFuZ2U7XFxuIFxcdH07XFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdC8qIExpc3QgaGVhZCBmb3Igc2libGluZ3MuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gfTtcXG4gXFxuQEAgLTUxNSwxMiArNTIyLDggQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xcbiAgKiBAd21hcmtzOlxcdFxcdFdhdGVybWFya3MgZm9yIGF1dG9tYXRlZCAoaW4pYWN0aXZhdGlvbiBvZiB0aGlzIHNjaGVtZS5cXG4gICogQG1pZ3JhdGVfZGVzdHM6XFx0RGVzdGluYXRpb24gbm9kZXMgaWYgQGFjdGlvbiBpcyBcXFwibWlncmF0ZV97aG90LGNvbGR9XFxcIi5cXG4gICogQHRhcmdldF9uaWQ6XFx0XFx0RGVzdGluYXRpb24gbm9kZSBpZiBAYWN0aW9uIGlzIFxcXCJtaWdyYXRlX3tob3QsY29sZH1cXFwiLlxcbi0gKiBAY29yZV9maWx0ZXJzOlxcdEFkZGl0aW9uYWwgc2V0IG9mIFxcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIGZvciBcXHUwMDI2YWN0aW9uLlxcbi0gKiBAb3BzX2ZpbHRlcnM6XFx0b3BzIGxheWVyIGhhbmRsaW5nIFxcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyIG9iamVjdHMgbGlzdC5cXG4tICogQGxhc3RfYXBwbGllZDpcXHRMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LlxcbiAgKiBAc3RhdDpcXHRcXHRTdGF0aXN0aWNzIG9mIHRoaXMgc2NoZW1lLlxcbiAgKiBAbWF4X25yX3NuYXBzaG90czpcXHRVcHBlciBsaW1pdCBvZiBucl9zbmFwc2hvdHMgc3RhdC5cXG4tICogQGxpc3Q6XFx0XFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cXG4gICpcXG4gICogRm9yIGVhY2ggQGFwcGx5X2ludGVydmFsX3VzLCBEQU1PTiBmaW5kcyByZWdpb25zIHdoaWNoIGZpdCBpbiB0aGVcXG4gICogXFx1MDAyNnBhdHRlcm4gYW5kIGFwcGxpZXMgXFx1MDAyNmFjdGlvbiB0byB0aG9zZS4gVG8gYXZvaWQgY29uc3VtaW5nIHRvbyBtdWNoXFxuQEAgLTU0MiwxNiArNTQ1LDcgQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xcbiAgKlxcbiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlIFxcdTAwMjZhY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBcXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnNcXG4gICogaW1wbGVtZW50YXRpb24gY291bGQgY2hlY2sgcGFnZXMgb2YgdGhlIHJlZ2lvbiBhbmQgc2tpcCBcXHUwMDI2YWN0aW9uIHRvIHJlc3BlY3RcXG4tICogXFx1MDAyNmNvcmVfZmlsdGVyc1xcbi0gKlxcbi0gKiBUaGUgbWluaW11bSBlbnRpdHkgdGhhdCBAYWN0aW9uIGNhbiBiZSBhcHBsaWVkIGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmdcXG4tICogXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkIHdpdGggdGhlIGNvcmUgbGF5ZXJcXG4tICogYWJzdHJhY3QsIG5hbWVseSBcXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5XFxuLSAqIEBhY3Rpb24gdG8gc2FtZSBlbnRpdHkgbXVsdGlwbGUgdGltZXMuICBMYXJnZSBmb2xpb3MgdGhhdCB1bmRlcmx5aW5nIG9uXFxuLSAqIG11bHRpcGxlIFxcdTAwMjZzdHJ1Y3QgZGFtb24gcmVnaW9uIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSBcXHUwMDI2c3RydWN0XFxuLSAqIGRhbW9uX29wZXJhdGlvbnMgY2FuIHVzZSBAbGFzdF9hcHBsaWVkIHRvIGF2b2lkIHRoYXQuICBEQU1PUyBjb3JlIGxvZ2ljXFxuLSAqIHVuc2V0cyBAbGFzdF9hcHBsaWVkIHdoZW4gZWFjaCByZWdpb25zIHdhbGtpbmcgZm9yIGFwcGx5aW5nIHRoZSBzY2hlbWUgaXNcXG4tICogZmluaXNoZWQuXFxuKyAqIFxcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyLlxcbiAgKlxcbiAgKiBBZnRlciBhcHBseWluZyB0aGUgXFx1MDAyNmFjdGlvbiB0byBlYWNoIHJlZ2lvbiwgXFx1MDAyNnN0YXQgaXMgdXBkYXRlZC5cXG4gICpcXG5AQCAtNTYyLDYgKzU1NiwxNiBAQCBzdHJ1Y3QgZGFtb3Mge1xcbiBcXHRzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gcGF0dGVybjtcXG4gXFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uO1xcbiBcXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzO1xcbitcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XFxuK1xcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcztcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHRpbnQgdGFyZ2V0X25pZDtcXG4rXFx0XFx0XFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0cztcXG4rXFx0XFx0fTtcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGRhbW9zX3N0YXQgc3RhdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzO1xcbiAvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seSAqL1xcbiBcXHQvKlxcbiBcXHQgKiBudW1iZXIgb2Ygc2FtcGxlIGludGVydmFscyB0aGF0IHNob3VsZCBiZSBwYXNzZWQgYmVmb3JlIGFwcGx5aW5nXFxuQEAgLTU3OCwyMCArNTgyLDI1IEBAIHN0cnVjdCBkYW1vcyB7XFxuIFxcdC8qIHdoZXRoZXIgdG8gcmVqZWN0IGNvcmUvb3BzIGZpbHRlcnMgdW1hdGNoZWQgcmVnaW9ucyAqL1xcbiBcXHRib29sIGNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdDtcXG4gXFx0Ym9vbCBvcHNfZmlsdGVyc19kZWZhdWx0X3JlamVjdDtcXG4tLyogcHVibGljOiAqL1xcbi1cXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XFxuLVxcdHN0cnVjdCBkYW1vc193YXRlcm1hcmtzIHdtYXJrcztcXG4tXFx0dW5pb24ge1xcbi1cXHRcXHRzdHJ1Y3Qge1xcbi1cXHRcXHRcXHRpbnQgdGFyZ2V0X25pZDtcXG4tXFx0XFx0XFx0c3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMgbWlncmF0ZV9kZXN0cztcXG4tXFx0XFx0fTtcXG4tXFx0fTtcXG4rXFx0LyogQWRkaXRpb25hbCBzZXQgb2YgXFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIgZm9yIFxcdTAwMjZhY3Rpb24uICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgY29yZV9maWx0ZXJzO1xcbitcXHQvKiBvcHMgbGF5ZXIgaGFuZGxpbmcgXFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIgb2JqZWN0cyBsaXN0LiAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIG9wc19maWx0ZXJzO1xcbitcXHQvKlxcbitcXHQgKiBMYXN0IEBhY3Rpb24gYXBwbGllZCBvcHMtbWFuYWdpbmcgZW50aXR5LlxcbitcXHQgKlxcbitcXHQgKiBUaGUgbWluaW11bSBlbnRpdHkgdGhhdCBAYWN0aW9uIGNhbiBiZSBhcHBsaWVkIGRlcGVuZHMgb24gdGhlXFxuK1xcdCAqIHVuZGVybHlpbmcgXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkXFxuK1xcdCAqIHdpdGggdGhlIGNvcmUgbGF5ZXIgYWJzdHJhY3QsIG5hbWVseSBcXHUwMDI2c3RydWN0IGRhbW9uX3JlZ2lvbiwgXFx1MDAyNnN0cnVjdFxcbitcXHQgKiBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5IEBhY3Rpb24gdG8gc2FtZSBlbnRpdHkgbXVsdGlwbGUgdGltZXMuXFxuK1xcdCAqIExhcmdlIGZvbGlvcyB0aGF0IHVuZGVybHlpbmcgb24gbXVsdGlwbGUgXFx1MDAyNnN0cnVjdCBkYW1vbiByZWdpb25cXG4rXFx0ICogb2JqZWN0cyBjb3VsZCBiZSBzdWNoIGV4YW1wbGVzLiAgVGhlIFxcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBjYW5cXG4rXFx0ICogdXNlIEBsYXN0X2FwcGxpZWQgdG8gYXZvaWQgdGhhdC4gIERBTU9TIGNvcmUgbG9naWMgdW5zZXRzXFxuK1xcdCAqIEBsYXN0X2FwcGxpZWQgd2hlbiBlYWNoIHJlZ2lvbnMgd2Fsa2luZyBmb3IgYXBwbHlpbmcgdGhlIHNjaGVtZSBpc1xcbitcXHQgKiBmaW5pc2hlZC5cXG4rXFx0ICovXFxuIFxcdHZvaWQgKmxhc3RfYXBwbGllZDtcXG4tXFx0c3RydWN0IGRhbW9zX3N0YXQgc3RhdDtcXG4tXFx0dW5zaWduZWQgbG9uZyBtYXhfbnJfc25hcHNob3RzO1xcbitcXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIH07XFxuIFxcbkBAIC03NDksNyArNzU4LDYgQEAgZW51bSBkYW1vbl9maWx0ZXJfdHlwZSB7XFxuICAqIEBtYXRjaGluZzpcXHRXaGV0aGVyIHRoaXMgZmlsdGVyIGlzIGZvciB0aGUgdHlwZS1tYXRjaGluZyBvbmVzLlxcbiAgKiBAYWxsb3c6XFx0V2hldGhlciB0aGUgQHR5cGUtQG1hdGNoaW5nIG9uZXMgc2hvdWxkIHBhc3MgdGhpcyBmaWx0ZXIuXFxuICAqIEBtZW1jZ19pZDpcXHRNZW1jZyBpZCBvZiB0aGUgcXVlc3Rpb24gaWYgQHR5cGUgaXMgREFNT05fRklMVEVSX01FTUNHLlxcbi0gKiBAbGlzdDpcXHRTaWJsaW5ncyBsaXN0LlxcbiAgKi9cXG4gc3RydWN0IGRhbW9uX2ZpbHRlciB7XFxuIFxcdGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZTtcXG5AQCAtNzU4LDYgKzc2Niw4IEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIge1xcbiBcXHR1bmlvbiB7XFxuIFxcdFxcdHU2NCBtZW1jZ19pZDtcXG4gXFx0fTtcXG4rLyogcHJpdmF0ZTogKi9cXG4rXFx0LyogU2libGluZ3MgbGlzdC4gKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiB9O1xcbiBcXG5AQCAtNzY1LDEyICs3NzUsMTMgQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7XFxuICAqIHN0cnVjdCBkYW1vbl9wcm9iZSAtIERhdGEgcmVnaW9uIGF0dHJpYnV0ZSBwcm9iZS5cXG4gICpcXG4gICogQHdlaWdodDpcXHRSZWxhdGl2ZSBwcmlvcml0eSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGlzIHByb2JlLlxcbi0gKiBAZmlsdGVyczpcXHRGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuXFxuLSAqIEBsaXN0OlxcdFNpYmxpbmdzIGxpc3QuXFxuICAqL1xcbiBzdHJ1Y3QgZGFtb25fcHJvYmUge1xcbiBcXHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xcbisvKiBwcml2YXRlOiAqL1xcbitcXHQvKiBGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZmlsdGVycztcXG4rXFx0LyogU2libGluZ3MgbGlzdC4gKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiB9O1xcbiBcXG5AQCAtODM3LDE0ICs4NDgsOSBAQCBzdHJ1Y3QgZGFtb25fYXR0cnMge1xcbiAgKiB0aHJlYWQgb3RoZXIgdGhhbiB0aGUga2RhbW9uZCBzaG91bGQgYmUgbWFkZSB1c2luZyBzYWZlIERBTU9OIEFQSXMsXFxuICAqIGluY2x1ZGluZyBkYW1vbl9jYWxsKCkgYW5kIGRhbW9zX3dhbGsoKS5cXG4gICpcXG4tICogQG9wczpcXHRTZXQgb2YgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBnaXZlbiB1c2UgY2FzZXMuXFxuLSAqIEBwcm9iZXM6XFx0SGVhZCBvZiBwcm9iZXMgKFxcdTAwMjZkYW1vbl9wcm9iZSkgbGlzdC5cXG4gICogQGFkZHJfdW5pdDpcXHRTY2FsZSBmYWN0b3IgZm9yIGNvcmUgdG8gb3BzIGFkZHJlc3MgY29udmVyc2lvbi5cXG4gICogQG1pbl9yZWdpb25fc3o6XFx0TWluaW11bSByZWdpb24gc2l6ZS5cXG4gICogQHBhdXNlOlxcdFBhdXNlIGtkYW1vbmQgbWFpbiBsb29wLlxcbi0gKiBAYWRhcHRpdmVfdGFyZ2V0czpcXHRIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoXFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC5cXG4tICogQHNjaGVtZXM6XFx0XFx0SGVhZCBvZiBzY2hlbWVzIChcXHUwMDI2ZGFtb3MpIGxpc3QuXFxuLSAqIEBybmRfc3RhdGU6XFx0UGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuXFxuICAqL1xcbiBzdHJ1Y3QgZGFtb25fY3R4IHtcXG4gXFx0c3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzO1xcbkBAIC04OTMsMTUgKzg5OSwyMSBAQCBzdHJ1Y3QgZGFtb25fY3R4IHtcXG4gXFx0c3RydWN0IG11dGV4IGtkYW1vbmRfbG9jaztcXG4gXFxuIC8qIHB1YmxpYzogKi9cXG4tXFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzO1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlcztcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zejtcXG4gXFx0Ym9vbCBwYXVzZTtcXG4gXFxuKy8qIHByaXZhdGU6ICovXFxuK1xcdC8qIFNldCBvZiBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIGdpdmVuIHVzZSBjYXNlcy4gKi9cXG4rXFx0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzO1xcbitcXHQvKiBIZWFkIG9mIG1vbml0b3JpbmcgdGFyZ2V0cyAoXFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC4gKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBhZGFwdGl2ZV90YXJnZXRzO1xcbitcXHQvKiBIZWFkIG9mIHByb2JlcyAoXFx1MDAyNmRhbW9uX3Byb2JlKSBsaXN0LiAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlcztcXG4rXFx0LyogSGVhZCBvZiBzY2hlbWVzIChcXHUwMDI2ZGFtb3MpIGxpc3QuICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgc2NoZW1lcztcXG4gXFxuK1xcdC8qIEBybmRfc3RhdGU6XFx0UGVyLWN0eCBQUk5HIHN0YXRlIGZvciBkYW1vbl9yYW5kKCkuICovXFxuIFxcdHN0cnVjdCBybmRfc3RhdGUgcm5kX3N0YXRlO1xcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5pbmRleCBiNWZlMDM2Zjc4MDE1Mi4uMjA4YmI2MzlmNTBmZmIgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMuY1xcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcXG5AQCAtMjA1MSw3ICsyMDUxLDcgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbiBcXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xcbi1cXHRpZiAoY3R4LVxcdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSIFxcdTAwMjZcXHUwMDI2IHN5c2ZzX3RhcmdldHMtXFx1MDAzZW5yIFxcdTAwM2UgMSlcXG4rXFx0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFxcdTAwMjZcXHUwMDI2IHN5c2ZzX3RhcmdldHMtXFx1MDAzZW5yIFxcdTAwM2UgMSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3lzZnNfdGFyZ2V0cy1cXHUwMDNlbnI7IGkrKykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo0OToyMS4wNTY4NzAwMzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTgzNjQwNTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHN0cnVjdHVyYWwgcmVhcnJhbmdlbWVudHMgb2YgZmllbGRzIGluIGluY2x1ZGUvbGludXgvZGFtb24uaCwgYWRkcyBjb21tZW50cywgYW5kIHJlcGxhY2VzIGEgZGlyZWN0IGVudW0gY29tcGFyaXNvbiB3aXRoIGFuIGVxdWl2YWxlbnQgaGVscGVyIGZ1bmN0aW9uIChkYW1vbl90YXJnZXRfaGFzX3BpZCkgaW4gbW0vZGFtb24vc3lzZnMuYy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFkMDk1N2RkYzZiYjQwZjg4ZjIyMDAyNzBmYzAxMTI5MjljNjEzYjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAwMDo0OToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggZjY5NDQyYTlkNDMxMjguLjMyN2Y1MzQ2OTZhYTg1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC00Niw3ICs0Niw2IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHtcbiAgKiBAc2FtcGxpbmdfYWRkcjpcdEFkZHJlc3Mgb2YgdGhlIHNhbXBsZSBmb3IgdGhlIG5leHQgYWNjZXNzIGNoZWNrLlxuICAqIEBucl9hY2Nlc3NlczpcdEFjY2VzcyBmcmVxdWVuY3kgb2YgdGhpcyByZWdpb24uXG4gICogQHByb2JlX2hpdHM6XHRcdE51bWJlciBvZiBwcm9iZS1wb3NpdGl2ZSByZWdpb24gc2FtcGxlcy5cbi0gKiBAbGlzdDpcdFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKiBAYWdlOlx0XHRBZ2Ugb2YgdGhpcyByZWdpb24uXG4gICpcbiAgKiBGb3IgYW55IHVzZSBjYXNlLCBAYXIgc2hvdWxkIGJlIG5vbi16ZXJvIHBvc2l0aXZlIHNpemUuICBkYW1vbl9zZXRfcmVnaW9ucygpXG5AQCAtNjgsOSArNjcsMTEgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNhbXBsaW5nX2FkZHI7XG4gXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXM7XG4gXHR1bnNpZ25lZCBjaGFyIHByb2JlX2hpdHNbREFNT05fTUFYX1BST0JFU107XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHR1bnNpZ25lZCBpbnQgYWdlO1xuLS8qIHByaXZhdGU6IEludGVybmFsIHZhbHVlIGZvciBhZ2UgY2FsY3VsYXRpb24uICovXG4rLyogcHJpdmF0ZTogaW50ZXJuYWwgdXNlIG9ubHkuICovXG4rXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1x0LyogZm9yIGFnZSBjYWxjdWxhdGlvbi4gKi9cbiBcdHVuc2lnbmVkIGludCBsYXN0X25yX2FjY2Vzc2VzO1xuIFx0dW5zaWduZWQgY2hhciBsYXN0X3Byb2JlX2hpdHNbREFNT05fTUFYX1BST0JFU107XG4gfTtcbkBAIC03OCw5ICs3OSw2IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24ge1xuIC8qKlxuICAqIHN0cnVjdCBkYW1vbl90YXJnZXQgLSBSZXByZXNlbnRzIGEgbW9uaXRvcmluZyB0YXJnZXQuXG4gICogQHBpZDpcdFx0VGhlIFBJRCBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRvIG1vbml0b3IuXG4tICogQG5yX3JlZ2lvbnM6XHRcdE51bWJlciBvZiBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LlxuLSAqIEByZWdpb25zX2xpc3Q6XHRIZWFkIG9mIHRoZSBtb25pdG9yaW5nIHRhcmdldCByZWdpb25zIG9mIHRoaXMgdGFyZ2V0LlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqIEBvYnNvbGV0ZTpcdFx0V2hldGhlciB0aGUgY29tbWl0IGRlc3RpbmF0aW9uIHRhcmdldCBpcyBvYnNvbGV0ZS5cbiAgKlxuICAqIEVhY2ggbW9uaXRvcmluZyBjb250ZXh0IGNvdWxkIGhhdmUgbXVsdGlwbGUgdGFyZ2V0cy4gIEZvciBleGFtcGxlLCBhIGNvbnRleHRcbkBAIC05NCwxMCArOTIsMTQgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XG4gICovXG4gc3RydWN0IGRhbW9uX3RhcmdldCB7XG4gXHRzdHJ1Y3QgcGlkICpwaWQ7XG4rXHRib29sIG9ic29sZXRlO1xuKy8qIHByaXZhdGU6ICovXG4rXHQvKiBOdW1iZXIgb2YgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4gKi9cbiBcdHVuc2lnbmVkIGludCBucl9yZWdpb25zO1xuK1x0LyogSGVhZCBvZiB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyBvZiB0aGlzIHRhcmdldC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgcmVnaW9uc19saXN0O1xuK1x0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi1cdGJvb2wgb2Jzb2xldGU7XG4gfTtcbiBcbiAvKipcbkBAIC0xNzMsMTAgKzE3NSw4IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xuICAqIEBtZXRyaWM6XHRcdE1ldHJpYyB0byBiZSB1c2VkIGZvciByZXByZXNlbnRpbmcgdGhlIGdvYWwuXG4gICogQHRhcmdldF92YWx1ZTpcdFRhcmdldCB2YWx1ZSBvZiBAbWV0cmljIHRvIGFjaGlldmUgd2l0aCB0aGUgdHVuaW5nLlxuICAqIEBjdXJyZW50X3ZhbHVlOlx0Q3VycmVudCB2YWx1ZSBvZiBAbWV0cmljLlxuLSAqIEBsYXN0X3BzaV90b3RhbDpcdExhc3QgbWVhc3VyZWQgdG90YWwgUFNJXG4gICogQG5pZDpcdFx0Tm9kZSBpZC5cbiAgKiBAbWVtY2dfaWQ6XHRcdE1lbWNnIGlkLlxuLSAqIEBsaXN0Olx0XHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxuICAqXG4gICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgc2NvcmUgb2YgdGhlIHF1b3RhIHR1bmluZyBnb2FsLiAgVGhlXG4gICogc2NvcmUgaXMgY2FsY3VsYXRlZCBieSBob3cgY2xvc2UgQGN1cnJlbnRfdmFsdWUgYW5kIEB0YXJnZXRfdmFsdWUgYXJlLiAgVGhlblxuQEAgLTE5OSwxMiArMTk5LDE3IEBAIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIHtcbiBcdHVuc2lnbmVkIGxvbmcgY3VycmVudF92YWx1ZTtcbiBcdC8qIG1ldHJpYy1kZXBlbmRlbnQgZmllbGRzICovXG4gXHR1bmlvbiB7XG4tXHRcdHU2NCBsYXN0X3BzaV90b3RhbDtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHRpbnQgbmlkO1xuIFx0XHRcdHU2NCBtZW1jZ19pZDtcbiBcdFx0fTtcbisvKiBwcml2YXRlOiAqL1xuK1x0XHQvKiBMYXN0IG1lYXN1cmVkIHRvdGFsIFBTSSAqL1xuK1x0XHR1NjQgbGFzdF9wc2lfdG90YWw7XG4rXG4gXHR9O1xuKy8qIHByaXZhdGU6ICovXG4rXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtMjIzLDcgKzIyOCw2IEBAIGVudW0gZGFtb3NfcXVvdGFfZ29hbF90dW5lciB7XG4gICogQHJlc2V0X2ludGVydmFsOlx0Q2hhcmdlIHJlc2V0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cbiAgKiBAbXM6XHRcdFx0TWF4aW11bSBtaWxsaXNlY29uZHMgdGhhdCB0aGUgc2NoZW1lIGNhbiB1c2UuXG4gICogQHN6Olx0XHRcdE1heGltdW0gYnl0ZXMgb2YgbWVtb3J5IHRoYXQgdGhlIGFjdGlvbiBjYW4gYmUgYXBwbGllZC5cbi0gKiBAZ29hbHM6XHRcdEhlYWQgb2YgcXVvdGEgdHVuaW5nIGdvYWxzIChcdTAwMjZkYW1vc19xdW90YV9nb2FsKSBsaXN0LlxuICAqIEBnb2FsX3R1bmVyOlx0XHRHb2FsLWJhc2VkIEBlc3ogdHVuaW5nIGFsZ29yaXRobSB0byB1c2UuXG4gICogQGVzejpcdFx0RWZmZWN0aXZlIHNpemUgcXVvdGEgaW4gYnl0ZXMuXG4gICogQGZhaWxfY2hhcmdlX251bTpcdEZhaWxlZCByZWdpb25zIGNoYXJnZSByYXRlIG51bWVyYXRvci5cbkBAIC0yNTAsNyArMjU0LDcgQEAgZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcbiAgKiB0aGUgc2NoZW1lJ3MgYWN0aW9uLiAgREFNT04gdGhlbiBjb21wYXJlcyBpdCBhZ2FpbnN0IFx1MDAyNnN6IGFuZCB1c2VzIHNtYWxsZXJcbiAgKiBvbmUgYXMgdGhlIGVmZmVjdGl2ZSBxdW90YS5cbiAgKlxuLSAqIElmIEBnb2FscyBpcyBub3QgZW1wdHksIERBTU9OIGNhbGN1bGF0ZXMgeWV0IGFub3RoZXIgc2l6ZSBxdW90YSBiYXNlZCBvbiB0aGVcbisgKiBJZiBnb2FscyBpcyBub3QgZW1wdHksIERBTU9OIGNhbGN1bGF0ZXMgeWV0IGFub3RoZXIgc2l6ZSBxdW90YSBiYXNlZCBvbiB0aGVcbiAgKiBnb2FscyB1c2luZyBpdHMgaW50ZXJuYWwgZmVlZGJhY2sgbG9vcCBhbGdvcml0aG0sIGZvciBldmVyeSBAcmVzZXRfaW50ZXJ2YWwuXG4gICogVGhlbiwgaWYgdGhlIG5ldyBzaXplIHF1b3RhIGlzIHNtYWxsZXIgdGhhbiB0aGUgZWZmZWN0aXZlIHF1b3RhLCBpdCB1c2VzIHRoZVxuICAqIG5ldyBzaXplIHF1b3RhIGFzIHRoZSBlZmZlY3RpdmUgcXVvdGEuXG5AQCAtMjcxLDcgKzI3NSw3IEBAIHN0cnVjdCBkYW1vc19xdW90YSB7XG4gXHR1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsO1xuIFx0dW5zaWduZWQgbG9uZyBtcztcbiBcdHVuc2lnbmVkIGxvbmcgc3o7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGdvYWxzO1xuK1xuIFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIGdvYWxfdHVuZXI7XG4gXHR1bnNpZ25lZCBsb25nIGVzejtcbiBcbkBAIC0yODMsNiArMjg3LDggQEAgc3RydWN0IGRhbW9zX3F1b3RhIHtcbiBcdHVuc2lnbmVkIGludCB3ZWlnaHRfYWdlO1xuIFxuIC8qIHByaXZhdGU6ICovXG4rXHQvKiBIZWFkIG9mIHF1b3RhIHR1bmluZyBnb2FscyAoXHUwMDI2ZGFtb3NfcXVvdGFfZ29hbCkgbGlzdC4gKi9cbitcdHN0cnVjdCBsaXN0X2hlYWQgZ29hbHM7XG4gXHQvKiBGb3IgdGhyb3VnaHB1dCBlc3RpbWF0aW9uICovXG4gXHR1bnNpZ25lZCBsb25nIHRvdGFsX2NoYXJnZWRfc3o7XG4gXHR1bnNpZ25lZCBsb25nIHRvdGFsX2NoYXJnZWRfbnM7XG5AQCAtNDI2LDcgKzQzMiw2IEBAIGVudW0gZGFtb3NfZmlsdGVyX3R5cGUge1xuICAqXHRcdFx1MDAyNmRhbW9uX2N0eC1cdTAwM2VhZGFwdGl2ZV90YXJnZXRzIGlmIEB0eXBlIGlzXG4gICpcdFx0REFNT1NfRklMVEVSX1RZUEVfVEFSR0VULlxuICAqIEBzel9yYW5nZTpcdFNpemUgcmFuZ2UgaWYgQHR5cGUgaXMgREFNT1NfRklMVEVSX1RZUEVfSFVHRVBBR0VfU0laRS5cbi0gKiBAbGlzdDpcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXG4gICpcbiAgKiBCZWZvcmUgYXBwbHlpbmcgdGhlIFx1MDAyNmRhbW9zLVx1MDAzZWFjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sIERBTU9TIGNoZWNrcyBpZiBlYWNoXG4gICogYnl0ZSBvZiB0aGUgcmVnaW9uIG1hdGNoZXMgdG8gdGhpcyBnaXZlbiBjb25kaXRpb24gYW5kIGF2b2lkIGFwcGx5aW5nIHRoZVxuQEAgLTQ0NCw2ICs0NDksOCBAQCBzdHJ1Y3QgZGFtb3NfZmlsdGVyIHtcbiBcdFx0aW50IHRhcmdldF9pZHg7XG4gXHRcdHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHN6X3JhbmdlO1xuIFx0fTtcbisvKiBwcml2YXRlOiAqL1xuK1x0LyogTGlzdCBoZWFkIGZvciBzaWJsaW5ncy4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiB9O1xuIFxuQEAgLTUxNSwxMiArNTIyLDggQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xuICAqIEB3bWFya3M6XHRcdFdhdGVybWFya3MgZm9yIGF1dG9tYXRlZCAoaW4pYWN0aXZhdGlvbiBvZiB0aGlzIHNjaGVtZS5cbiAgKiBAbWlncmF0ZV9kZXN0czpcdERlc3RpbmF0aW9uIG5vZGVzIGlmIEBhY3Rpb24gaXMgXCJtaWdyYXRlX3tob3QsY29sZH1cIi5cbiAgKiBAdGFyZ2V0X25pZDpcdFx0RGVzdGluYXRpb24gbm9kZSBpZiBAYWN0aW9uIGlzIFwibWlncmF0ZV97aG90LGNvbGR9XCIuXG4tICogQGNvcmVfZmlsdGVyczpcdEFkZGl0aW9uYWwgc2V0IG9mIFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIgZm9yIFx1MDAyNmFjdGlvbi5cbi0gKiBAb3BzX2ZpbHRlcnM6XHRvcHMgbGF5ZXIgaGFuZGxpbmcgXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlciBvYmplY3RzIGxpc3QuXG4tICogQGxhc3RfYXBwbGllZDpcdExhc3QgQGFjdGlvbiBhcHBsaWVkIG9wcy1tYW5hZ2luZyBlbnRpdHkuXG4gICogQHN0YXQ6XHRcdFN0YXRpc3RpY3Mgb2YgdGhpcyBzY2hlbWUuXG4gICogQG1heF9ucl9zbmFwc2hvdHM6XHRVcHBlciBsaW1pdCBvZiBucl9zbmFwc2hvdHMgc3RhdC5cbi0gKiBAbGlzdDpcdFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKlxuICAqIEZvciBlYWNoIEBhcHBseV9pbnRlcnZhbF91cywgREFNT04gZmluZHMgcmVnaW9ucyB3aGljaCBmaXQgaW4gdGhlXG4gICogXHUwMDI2cGF0dGVybiBhbmQgYXBwbGllcyBcdTAwMjZhY3Rpb24gdG8gdGhvc2UuIFRvIGF2b2lkIGNvbnN1bWluZyB0b28gbXVjaFxuQEAgLTU0MiwxNiArNTQ1LDcgQEAgc3RydWN0IGRhbW9zX21pZ3JhdGVfZGVzdHMge1xuICAqXG4gICogQmVmb3JlIGFwcGx5aW5nIHRoZSBcdTAwMjZhY3Rpb24gdG8gYSBtZW1vcnkgcmVnaW9uLCBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9uc1xuICAqIGltcGxlbWVudGF0aW9uIGNvdWxkIGNoZWNrIHBhZ2VzIG9mIHRoZSByZWdpb24gYW5kIHNraXAgXHUwMDI2YWN0aW9uIHRvIHJlc3BlY3Rcbi0gKiBcdTAwMjZjb3JlX2ZpbHRlcnNcbi0gKlxuLSAqIFRoZSBtaW5pbXVtIGVudGl0eSB0aGF0IEBhY3Rpb24gY2FuIGJlIGFwcGxpZWQgZGVwZW5kcyBvbiB0aGUgdW5kZXJseWluZ1xuLSAqIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zLiAgU2luY2UgaXQgbWF5IG5vdCBiZSBhbGlnbmVkIHdpdGggdGhlIGNvcmUgbGF5ZXJcbi0gKiBhYnN0cmFjdCwgbmFtZWx5IFx1MDAyNnN0cnVjdCBkYW1vbl9yZWdpb24sIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNvdWxkIGFwcGx5XG4tICogQGFjdGlvbiB0byBzYW1lIGVudGl0eSBtdWx0aXBsZSB0aW1lcy4gIExhcmdlIGZvbGlvcyB0aGF0IHVuZGVybHlpbmcgb25cbi0gKiBtdWx0aXBsZSBcdTAwMjZzdHJ1Y3QgZGFtb24gcmVnaW9uIG9iamVjdHMgY291bGQgYmUgc3VjaCBleGFtcGxlcy4gIFRoZSBcdTAwMjZzdHJ1Y3Rcbi0gKiBkYW1vbl9vcGVyYXRpb25zIGNhbiB1c2UgQGxhc3RfYXBwbGllZCB0byBhdm9pZCB0aGF0LiAgREFNT1MgY29yZSBsb2dpY1xuLSAqIHVuc2V0cyBAbGFzdF9hcHBsaWVkIHdoZW4gZWFjaCByZWdpb25zIHdhbGtpbmcgZm9yIGFwcGx5aW5nIHRoZSBzY2hlbWUgaXNcbi0gKiBmaW5pc2hlZC5cbisgKiBcdTAwMjZzdHJ1Y3QgZGFtb3NfZmlsdGVyLlxuICAqXG4gICogQWZ0ZXIgYXBwbHlpbmcgdGhlIFx1MDAyNmFjdGlvbiB0byBlYWNoIHJlZ2lvbiwgXHUwMDI2c3RhdCBpcyB1cGRhdGVkLlxuICAqXG5AQCAtNTYyLDYgKzU1NiwxNiBAQCBzdHJ1Y3QgZGFtb3Mge1xuIFx0c3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuIHBhdHRlcm47XG4gXHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb247XG4gXHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzO1xuK1x0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhO1xuK1x0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzO1xuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3Qge1xuK1x0XHRcdGludCB0YXJnZXRfbmlkO1xuK1x0XHRcdHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIG1pZ3JhdGVfZGVzdHM7XG4rXHRcdH07XG4rXHR9O1xuK1x0c3RydWN0IGRhbW9zX3N0YXQgc3RhdDtcbitcdHVuc2lnbmVkIGxvbmcgbWF4X25yX3NuYXBzaG90cztcbiAvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seSAqL1xuIFx0LypcbiBcdCAqIG51bWJlciBvZiBzYW1wbGUgaW50ZXJ2YWxzIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBiZWZvcmUgYXBwbHlpbmdcbkBAIC01NzgsMjAgKzU4MiwyNSBAQCBzdHJ1Y3QgZGFtb3Mge1xuIFx0Lyogd2hldGhlciB0byByZWplY3QgY29yZS9vcHMgZmlsdGVycyB1bWF0Y2hlZCByZWdpb25zICovXG4gXHRib29sIGNvcmVfZmlsdGVyc19kZWZhdWx0X3JlamVjdDtcbiBcdGJvb2wgb3BzX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Q7XG4tLyogcHVibGljOiAqL1xuLVx0c3RydWN0IGRhbW9zX3F1b3RhIHF1b3RhO1xuLVx0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzO1xuLVx0dW5pb24ge1xuLVx0XHRzdHJ1Y3Qge1xuLVx0XHRcdGludCB0YXJnZXRfbmlkO1xuLVx0XHRcdHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzIG1pZ3JhdGVfZGVzdHM7XG4tXHRcdH07XG4tXHR9O1xuK1x0LyogQWRkaXRpb25hbCBzZXQgb2YgXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlciBmb3IgXHUwMDI2YWN0aW9uLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBjb3JlX2ZpbHRlcnM7XG4rXHQvKiBvcHMgbGF5ZXIgaGFuZGxpbmcgXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlciBvYmplY3RzIGxpc3QuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG9wc19maWx0ZXJzO1xuK1x0LypcbitcdCAqIExhc3QgQGFjdGlvbiBhcHBsaWVkIG9wcy1tYW5hZ2luZyBlbnRpdHkuXG4rXHQgKlxuK1x0ICogVGhlIG1pbmltdW0gZW50aXR5IHRoYXQgQGFjdGlvbiBjYW4gYmUgYXBwbGllZCBkZXBlbmRzIG9uIHRoZVxuK1x0ICogdW5kZXJseWluZyBcdTAwMjZzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucy4gIFNpbmNlIGl0IG1heSBub3QgYmUgYWxpZ25lZFxuK1x0ICogd2l0aCB0aGUgY29yZSBsYXllciBhYnN0cmFjdCwgbmFtZWx5IFx1MDAyNnN0cnVjdCBkYW1vbl9yZWdpb24sIFx1MDAyNnN0cnVjdFxuK1x0ICogZGFtb25fb3BlcmF0aW9ucyBjb3VsZCBhcHBseSBAYWN0aW9uIHRvIHNhbWUgZW50aXR5IG11bHRpcGxlIHRpbWVzLlxuK1x0ICogTGFyZ2UgZm9saW9zIHRoYXQgdW5kZXJseWluZyBvbiBtdWx0aXBsZSBcdTAwMjZzdHJ1Y3QgZGFtb24gcmVnaW9uXG4rXHQgKiBvYmplY3RzIGNvdWxkIGJlIHN1Y2ggZXhhbXBsZXMuICBUaGUgXHUwMDI2c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgY2FuXG4rXHQgKiB1c2UgQGxhc3RfYXBwbGllZCB0byBhdm9pZCB0aGF0LiAgREFNT1MgY29yZSBsb2dpYyB1bnNldHNcbitcdCAqIEBsYXN0X2FwcGxpZWQgd2hlbiBlYWNoIHJlZ2lvbnMgd2Fsa2luZyBmb3IgYXBwbHlpbmcgdGhlIHNjaGVtZSBpc1xuK1x0ICogZmluaXNoZWQuXG4rXHQgKi9cbiBcdHZvaWQgKmxhc3RfYXBwbGllZDtcbi1cdHN0cnVjdCBkYW1vc19zdGF0IHN0YXQ7XG4tXHR1bnNpZ25lZCBsb25nIG1heF9ucl9zbmFwc2hvdHM7XG4rXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtNzQ5LDcgKzc1OCw2IEBAIGVudW0gZGFtb25fZmlsdGVyX3R5cGUge1xuICAqIEBtYXRjaGluZzpcdFdoZXRoZXIgdGhpcyBmaWx0ZXIgaXMgZm9yIHRoZSB0eXBlLW1hdGNoaW5nIG9uZXMuXG4gICogQGFsbG93Olx0V2hldGhlciB0aGUgQHR5cGUtQG1hdGNoaW5nIG9uZXMgc2hvdWxkIHBhc3MgdGhpcyBmaWx0ZXIuXG4gICogQG1lbWNnX2lkOlx0TWVtY2cgaWQgb2YgdGhlIHF1ZXN0aW9uIGlmIEB0eXBlIGlzIERBTU9OX0ZJTFRFUl9NRU1DRy5cbi0gKiBAbGlzdDpcdFNpYmxpbmdzIGxpc3QuXG4gICovXG4gc3RydWN0IGRhbW9uX2ZpbHRlciB7XG4gXHRlbnVtIGRhbW9uX2ZpbHRlcl90eXBlIHR5cGU7XG5AQCAtNzU4LDYgKzc2Niw4IEBAIHN0cnVjdCBkYW1vbl9maWx0ZXIge1xuIFx0dW5pb24ge1xuIFx0XHR1NjQgbWVtY2dfaWQ7XG4gXHR9O1xuKy8qIHByaXZhdGU6ICovXG4rXHQvKiBTaWJsaW5ncyBsaXN0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtNzY1LDEyICs3NzUsMTMgQEAgc3RydWN0IGRhbW9uX2ZpbHRlciB7XG4gICogc3RydWN0IGRhbW9uX3Byb2JlIC0gRGF0YSByZWdpb24gYXR0cmlidXRlIHByb2JlLlxuICAqXG4gICogQHdlaWdodDpcdFJlbGF0aXZlIHByaW9yaXR5IG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHRoaXMgcHJvYmUuXG4tICogQGZpbHRlcnM6XHRGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuXG4tICogQGxpc3Q6XHRTaWJsaW5ncyBsaXN0LlxuICAqL1xuIHN0cnVjdCBkYW1vbl9wcm9iZSB7XG4gXHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xuKy8qIHByaXZhdGU6ICovXG4rXHQvKiBGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZpbHRlcnM7XG4rXHQvKiBTaWJsaW5ncyBsaXN0LiAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtODM3LDE0ICs4NDgsOSBAQCBzdHJ1Y3QgZGFtb25fYXR0cnMge1xuICAqIHRocmVhZCBvdGhlciB0aGFuIHRoZSBrZGFtb25kIHNob3VsZCBiZSBtYWRlIHVzaW5nIHNhZmUgREFNT04gQVBJcyxcbiAgKiBpbmNsdWRpbmcgZGFtb25fY2FsbCgpIGFuZCBkYW1vc193YWxrKCkuXG4gICpcbi0gKiBAb3BzOlx0U2V0IG9mIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgZ2l2ZW4gdXNlIGNhc2VzLlxuLSAqIEBwcm9iZXM6XHRIZWFkIG9mIHByb2JlcyAoXHUwMDI2ZGFtb25fcHJvYmUpIGxpc3QuXG4gICogQGFkZHJfdW5pdDpcdFNjYWxlIGZhY3RvciBmb3IgY29yZSB0byBvcHMgYWRkcmVzcyBjb252ZXJzaW9uLlxuICAqIEBtaW5fcmVnaW9uX3N6Olx0TWluaW11bSByZWdpb24gc2l6ZS5cbiAgKiBAcGF1c2U6XHRQYXVzZSBrZGFtb25kIG1haW4gbG9vcC5cbi0gKiBAYWRhcHRpdmVfdGFyZ2V0czpcdEhlYWQgb2YgbW9uaXRvcmluZyB0YXJnZXRzIChcdTAwMjZkYW1vbl90YXJnZXQpIGxpc3QuXG4tICogQHNjaGVtZXM6XHRcdEhlYWQgb2Ygc2NoZW1lcyAoXHUwMDI2ZGFtb3MpIGxpc3QuXG4tICogQHJuZF9zdGF0ZTpcdFBlci1jdHggUFJORyBzdGF0ZSBmb3IgZGFtb25fcmFuZCgpLlxuICAqL1xuIHN0cnVjdCBkYW1vbl9jdHgge1xuIFx0c3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzO1xuQEAgLTg5MywxNSArODk5LDIxIEBAIHN0cnVjdCBkYW1vbl9jdHgge1xuIFx0c3RydWN0IG11dGV4IGtkYW1vbmRfbG9jaztcbiBcbiAvKiBwdWJsaWM6ICovXG4tXHRzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyBvcHM7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlcztcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0O1xuIFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6O1xuIFx0Ym9vbCBwYXVzZTtcbiBcbisvKiBwcml2YXRlOiAqL1xuK1x0LyogU2V0IG9mIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgZ2l2ZW4gdXNlIGNhc2VzLiAqL1xuK1x0c3RydWN0IGRhbW9uX29wZXJhdGlvbnMgb3BzO1xuK1x0LyogSGVhZCBvZiBtb25pdG9yaW5nIHRhcmdldHMgKFx1MDAyNmRhbW9uX3RhcmdldCkgbGlzdC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgYWRhcHRpdmVfdGFyZ2V0cztcbitcdC8qIEhlYWQgb2YgcHJvYmVzIChcdTAwMjZkYW1vbl9wcm9iZSkgbGlzdC4gKi9cbitcdHN0cnVjdCBsaXN0X2hlYWQgcHJvYmVzO1xuK1x0LyogSGVhZCBvZiBzY2hlbWVzIChcdTAwMjZkYW1vcykgbGlzdC4gKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgc2NoZW1lcztcbiBcbitcdC8qIEBybmRfc3RhdGU6XHRQZXItY3R4IFBSTkcgc3RhdGUgZm9yIGRhbW9uX3JhbmQoKS4gKi9cbiBcdHN0cnVjdCBybmRfc3RhdGUgcm5kX3N0YXRlO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcbmluZGV4IGI1ZmUwMzZmNzgwMTUyLi4yMDhiYjYzOWY1MGZmYiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLmNcbkBAIC0yMDUxLDcgKzIwNTEsNyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdGludCBpLCBlcnI7XG4gXG4gXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xuLVx0aWYgKGN0eC1cdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxuK1x0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN5c2ZzX3RhcmdldHMtXHUwMDNlbnI7IGkrKykge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NDk6MjEuMDU2ODcxOTI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3ODQ1ODMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBwYXRjaCwgYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2Ugd2UncmUgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvZGFtb24uaGAgYW5kIGBtbS9kYW1vbi9zeXNmcy5jYC4gVGhlIGhlYWRlciBmaWxlIG1vZGlmaWNhdGlvbnMgc2VlbSBjb3NtZXRpYyDigJMgcmVhcnJhbmdpbmcgY29tbWVudHMsIHJlb3JkZXJpbmcgc3RydWN0IGZpZWxkcywgYW5kIGFkZGluZyBgLyogcHJpdmF0ZTogKi9gIGJsb2Nrcy4gTW9zdGx5IGZvcm1hdHRpbmcsIHdoaWNoIGlzIGZpbmUsIGJ1dCBJJ2xsIHN0aWxsIGdsYW5jZSB0aHJvdWdoIGl0IHRvIG1ha2Ugc3VyZSBub3RoaW5nIHdhcyBhY2NpZGVudGFsbHkgY2hhbmdlZC5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGlzIGlzIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gVGhlIGNvcmUgY2hhbmdlIGlzIGEgbG9naWNhbCBhZGp1c3RtZW50IGluIHRoaXMgY29kZSBibG9jazpcblxuYGBgY1xuLVx0aWYgKGN0eC1cdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1BBRERSIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxuK1x0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxKVxuYGBgXG5cbldlJ3JlIHJlcGxhY2luZyBhIGNoZWNrIGJhc2VkIG9uIHRoZSBvcGVyYXRpb24gSUQgKGBEQU1PTl9PUFNfUEFERFJgKSB3aXRoIGEgY2FsbCB0byBgZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KWAuIFRoZSBvdmVyYWxsIGxvZ2ljIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gbWFuYWdpbmcgdGFyZ2V0IGNvbmZpZ3VyYXRpb25zIGJhc2VkIG9uIHRoZWlyIG51bWJlci4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIFNwZWNpZmljYWxseSwgd2hhdCBzY2VuYXJpbyBpcyB0aGlzIG5vdyBoYW5kbGluZyB0aGF0IHRoZSBwcmlvciBvbmUgZGlkbid0LCBvciB2aWNlLXZlcnNhPyBXaGF0IGNvbnRleHQgaXMgdGhlIGBkYW1vbl90YXJnZXRfaGFzX3BpZGAgZnVuY3Rpb24gcmVsZXZhbnQgaW4/XG5cbkkgbmVlZCB0byBzZWUgd2hhdCBgZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KWAgYWN0dWFsbHkgKmRvZXMqLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgdXNhZ2VzIG9mIHRoYXQgZnVuY3Rpb24uIFRoYXQnbGwgdGVsbCBtZSBpZiB0aGlzIGlzIGEgYnVnIGZpeCwgYW4gb3B0aW1pemF0aW9uLCBvciBzb21ldGhpbmcgZW50aXJlbHkgZGlmZmVyZW50LiBJJ2xsIG5lZWQgdG8gc3R1ZHkgdGhhdCBkZWZpbml0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaXRzIHJlbGV2YW5jZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgc3lzZnMgaW50ZXJmYWNlIGFuZCB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo0OToyNi4wMzUzMzI3NTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExNDc4MTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl90YXJnZXRfaGFzX3BpZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA3Mj1pbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3My1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA3NDpzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDc1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNTg3PXN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU5MS1cXG5tbS9kYW1vbi9jb3JlLmM6MTU5MjpcXHRpZiAoIWRhbW9uX3RhcmdldF9oYXNfcGlkKHNyYykpXFxubW0vZGFtb24vY29yZS5jLTE1OTMtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE2MDM9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNjE3LVxcdFxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXQoXFxubW0vZGFtb24vY29yZS5jOjE2MTg6XFx0XFx0XFx0XFx0XFx0ZHN0X3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoZHN0KSxcXG5tbS9kYW1vbi9jb3JlLmM6MTYxOTpcXHRcXHRcXHRcXHRcXHRzcmNfdGFyZ2V0LCBkYW1vbl90YXJnZXRfaGFzX3BpZChzcmMpLFxcbm1tL2RhbW9uL2NvcmUuYy0xNjIwLVxcdFxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTY1Mi1cXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfdGFyZ2V0KG5ld190YXJnZXQsIGZhbHNlLFxcbm1tL2RhbW9uL2NvcmUuYzoxNjUzOlxcdFxcdFxcdFxcdHNyY190YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKHNyYyksXFxubW0vZGFtb24vY29yZS5jLTE2NTQtXFx0XFx0XFx0XFx0c3JjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjAyOT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX3N5c2ZzX3RhcmdldCAqc3lzX3RhcmdldCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzNi1cXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdCk7XFxubW0vZGFtb24vc3lzZnMuYzoyMDM3OlxcdGlmIChkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpKSB7XFxubW0vZGFtb24vc3lzZnMuYy0yMDM4LVxcdFxcdHQtXFx1MDAzZXBpZCA9IGZpbmRfZ2V0X3BpZChzeXNfdGFyZ2V0LVxcdTAwM2VwaWQpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yMDQ4PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYWRkX3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMDUzLVxcdC8qIE11bHRpcGxlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgbW9uaXRvcmluZyB0YXJnZXRzIG1ha2VzIG5vIHNlbnNlICovXFxubW0vZGFtb24vc3lzZnMuYzoyMDU0OlxcdGlmICghZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSBcXHUwMDI2XFx1MDAyNiBzeXNmc190YXJnZXRzLVxcdTAwM2VuciBcXHUwMDNlIDEpXFxubW0vZGFtb24vc3lzZnMuYy0yMDU1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo0OToyOC4xNTAxMjAzNTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjExOTQ1OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEknZCBleHBlY3QgZnJvbSBzb21ldGhpbmcgY2FsbGVkIGBkYW1vbl90YXJnZXRfaGFzX3BpZGA6XG5cbioqQW5hbHl6aW5nIGBkYW1vbl90YXJnZXRfaGFzX3BpZGAqKlxuXG5BbHJpZ2h0LCB0aGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGRlc2NyaXB0aXZlLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0LiBcIkRBTU9OXCIgbGlrZWx5IHJlZmVycyB0byB0aGUgRHluYW1pYyBBZGFwdGl2ZSBNZW1vcnkgT3B0aW1pemVyIGZvciBOVU1BLCBzbyB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoYXQgZnJhbWV3b3JrLiBcIlRhcmdldFwiIHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgb3BlcmF0aW5nIG9uIGEgc3BlY2lmaWMgcHJvY2VzcyBvciB0YXNrIHRoYXQgREFNT04gaXMgd2F0Y2hpbmcgb3IgbWFuYWdpbmcuIEFuZCwgXCJQSURcIiBwcmV0dHkgY2xlYXJseSBzaWduYWxzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSB1c2luZyB0aGUgcHJvY2VzcyBJRCBhcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi5cblxuTXkgaW1tZWRpYXRlIGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIGdpdmVuIHByb2Nlc3MgKGlkZW50aWZpZWQgYnkgaXRzIFBJRCkgaXMgY3VycmVudGx5IGJlaW5nIGFjdGl2ZWx5IG1vbml0b3JlZCBvciB0cmFja2VkIGJ5IERBTU9OLiBJdCdzIGxpa2VseSBhIGJvb2xlYW4gZnVuY3Rpb24g4oCTIHJldHVybmluZyB0cnVlIG9yIGZhbHNlIOKAkyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXMgaW5kZWVkIGEgdGFyZ2V0IG9mIERBTU9OJ3Mgb3B0aW1pemF0aW9ucy4gUGVyaGFwcyBpdCdzIGNoZWNraW5nIGFnYWluc3QgYW4gaW50ZXJuYWwgbGlzdCBvciBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhlIERBTU9OIHN5c3RlbS4gVGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIGJlIHBhcnQgb2YgYSBsYXJnZXIgY29uZGl0aW9uYWwgZmxvdyB3aXRoaW4gREFNT04ncyBvcGVyYXRpb25zLiBGb3IgZXhhbXBsZSwgaXQgY291bGQgYmUgdXNlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byBhcHBseSBvcHRpbWl6YXRpb25zIHRvIGEgcHJvY2VzcywgdG8gZW5zdXJlIERBTU9OIGlzIGFjdHVhbGx5IGNvbmNlcm5lZCB3aXRoIHRoYXQgcGFydGljdWxhciBQSUQgYXQgYSBnaXZlbiBwb2ludCBpbiB0aW1lLiBPciwgY29udmVyc2VseSwgaXQgY291bGQgYmUgY2hlY2tpbmcgaWYgYSBwcm9jZXNzIGlzICpubyBsb25nZXIqIGEgdGFyZ2V0LCBwZXJoYXBzIGR1ZSB0byB0ZXJtaW5hdGlvbiBvciByZXNvdXJjZSByZWxlYXNlLlxuXG5MZXQncyBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY1MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjQ5OjMyLjM2MjA2ODI3NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDcwOlxcdGJvb2wgZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpO1xcbjEwNzE6XFx0aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKTtcXG4xMDcyOlxcdGludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpO1xcbjEwNzM6XFx0XFxuMTA3NDpcXHRzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbjEwNzU6XFx0e1xcbjEwNzY6XFx0XFx0cmV0dXJuIGN0eC1cXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19WQUREUiB8fCBjdHgtXFx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfRlZBRERSO1xcbjEwNzc6XFx0fVxcbjEwNzg6XFx0XFxuMTA3OTpcXHQvKiBSZXR1cm5zIG51bWJlciBvZiBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xcbjEwODA6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXG4xMDgxOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuMTA4MjpcXHR7XFxuMTA4MzpcXHRcXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcXG4xMDg0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfc2FtcGxlcztcXG4xMDg1OlxcdFxcbjEwODY6XFx0XFx0c2FtcGxlX2ludGVydmFsID0gYXR0cnMtXFx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMTtcXG4xMDg3OlxcdFxcdG5yX3NhbXBsZXMgPSBtaW4oYXR0cnMtXFx1MDAzZWFnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWwsXFxuMTA4ODpcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZylVSU5UX01BWCk7XFxuMTA4OTpcXHRcXHRyZXR1cm4gbnJfc2FtcGxlcyA/IDogMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NDk6MzIuMzYyMTY3ODI1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwNTEyMjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFRhcmdldCBTZWxlY3Rpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgYGRhbW9uX3RhcmdldF9oYXNfcGlkYCBub3cgcmV0dXJucyBgdHJ1ZWAgaWYgYGN0eC1cdTAwM2VvcHMuaWRgIGlzIGVpdGhlciBgREFNT05fT1BTX1ZBRERSYCBvciBgREFNT05fT1BTX0ZWQUREUmAuIFByZXZpb3VzbHksIHRoZSBsb2dpYyB3YXMgdG8gc3BlY2lmaWNhbGx5IGNoZWNrIGZvciBgREFNT05fT1BTX1BBRERSYCBhbG9uZyB3aXRoIGBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxYC4gTm93LCB0aGUgY29uZGl0aW9uIGhhcyBiZWVuIGludmVydGVkLiBXZSdyZSBjaGVja2luZyBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkgXHUwMDI2XHUwMDI2IHN5c2ZzX3RhcmdldHMtXHUwMDNlbnIgXHUwMDNlIDFgLlxuXG5TbywgaWYgYGN0eC1cdTAwM2VvcHMuaWRgICppcyogYERBTU9OX09QU19QQUREUmAsIGBkYW1vbl90YXJnZXRfaGFzX3BpZGAgd2lsbCBldmFsdWF0ZSB0byBgZmFsc2VgLiBUaGF0IG1lYW5zIHRoZSBuZXcgY29uZGl0aW9uIGJlaGF2ZXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBjb25kaXRpb24gd2hlbiBkZWFsaW5nIHdpdGggUGh5c2ljYWwgQWRkcmVzcyB0YXJnZXRzIChQQUREUikgYW5kIG1vcmUgdGhhbiBvbmUgdGFyZ2V0LiBNYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGUgY2hlY2sgdGhlbiBiZWNvbWVzIGAhZmFsc2VgLCB3aGljaCBldmFsdWF0ZXMgdG8gYHRydWVgLCBhbmQgaXQgYWxsIHdvcmtzLlxuXG5Ib3dldmVyLCB0aGUgcmVhbCBxdWVzdGlvbiBpcyBob3cgdGhlIGxvZ2ljIHdvcmtzIHdpdGggYW55IG90aGVyIGBjdHgtXHUwMDNlb3BzLmlkYC4gSWYgYGN0eC1cdTAwM2VvcHMuaWRgIGlzIHNvbWV0aGluZyAqb3RoZXIqIHRoYW4gYERBTU9OX09QU19QQUREUmAsIGFuZCBhc3N1bWluZyBgc3lzZnNfdGFyZ2V0cy1cdTAwM2VuciBcdTAwM2UgMWAsIHRoaXMgbWlnaHQgY2hhbmdlIHRoZSBzZWxlY3Rpb24gaW4gc3VidGxlIHdheXMuIEl0J3MgaW1wZXJhdGl2ZSB0aGF0IEkgZmlndXJlIG91dCBhbGwgdGhlIHBvc3NpYmxlIHZhbHVlcyB0aGF0IGBkYW1vbl9vcHNfaWRgIGNhbiB0YWtlLCBzbyBJIGNhbiBwcmVkaWN0IGhvdyB0aGlzIHdpbGwgYWZmZWN0IERBTU9OJ3MgdGFyZ2V0IHNlbGVjdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2UgSURzIGFyZSB1c2VkLCBhbmQgd2hhdCBzY2VuYXJpb3MgdGhleSBhcHBseSB0by5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM3MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjQ5OjM2Ljk2NzI5Mjk1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU5NjgyNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVudW0gZGFtb25fb3BzX2lkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD01NTU9c3RydWN0IGRhbW9zIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC02MDctLyoqXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYwODogKiBlbnVtIGRhbW9uX29wc19pZCAtIElkZW50aWZpZXIgZm9yIGVhY2ggbW9uaXRvcmluZyBvcGVyYXRpb25zIGltcGxlbWVudGF0aW9uXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYwOS0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYxNS0gKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NjE2OmVudW0gZGFtb25fb3BzX2lkIHtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjE3LVxcdERBTU9OX09QU19WQUREUixcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD02NzQ9c3RydWN0IGRhbW9uX29wZXJhdGlvbnMge1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo2NzU6XFx0ZW51bSBkYW1vbl9vcHNfaWQgaWQ7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTY3Ni1cXHR2b2lkICgqaW5pdCkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2OT1pbnQgZGFtb25fbnJfcnVubmluZ19jdHhzKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDcwOmJvb2wgZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDcxLWludCBkYW1vbl9yZWdpc3Rlcl9vcHMoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgKm9wcyk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNzI6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNzMtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzI9c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkYW1vbl9yZWdpb25fY2FjaGUgX19yb19hZnRlcl9pbml0O1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0LS8qIFNob3VsZCBiZSBjYWxsZWQgdW5kZXIgZGFtb25fb3BzX2xvY2sgd2l0aCBpZCBzbWFsbGVyIHRoYW4gTlJfREFNT05fT1BTICovXFxubW0vZGFtb24vY29yZS5jOjM1OnN0YXRpYyBib29sIF9fZGFtb25faXNfcmVnaXN0ZXJlZF9vcHMoZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxubW0vZGFtb24vY29yZS5jLTM2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00OS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NTA6Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcXG5tbS9kYW1vbi9jb3JlLmMtNTEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTcxPWludCBkYW1vbl9yZWdpc3Rlcl9vcHMoc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgKm9wcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6OTg6aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZClcXG5tbS9kYW1vbi9jb3JlLmMtOTkte1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0xMzgyPXN0cnVjdCBkYW1vbl9zeXNmc19vcHNfbmFtZSB7XFxubW0vZGFtb24vc3lzZnMuYzoxMzgzOlxcdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcXG5tbS9kYW1vbi9zeXNmcy5jLTEzODQtXFx0Y2hhciAqbmFtZTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTQwMj1zdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dCB7XFxubW0vZGFtb24vc3lzZnMuYy0xNDAzLVxcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XFxubW0vZGFtb24vc3lzZnMuYzoxNDA0OlxcdGVudW0gZGFtb25fb3BzX2lkIG9wc19pZDtcXG5tbS9kYW1vbi9zeXNmcy5jLTE0MDUtXFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQ7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTE0MTI9c3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpkYW1vbl9zeXNmc19jb250ZXh0X2FsbG9jKFxcbm1tL2RhbW9uL3N5c2ZzLmM6MTQxMzpcXHRcXHRlbnVtIGRhbW9uX29wc19pZCBvcHNfaWQpXFxubW0vZGFtb24vc3lzZnMuYy0xNDE0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NDk6MzguOTI2OTgyMzU3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxODE1NzQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgREFNT04gT3BlcmF0aW9ucyBFbnVtZXJhdGlvbioqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgYGluY2x1ZGUvbGludXgvZGFtb24uaGAgYW5kIHNwZWNpZmljYWxseSB6ZXJvIGluIG9uIHRoZSBgZW51bSBkYW1vbl9vcHNfaWRgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBvcGVyYXRpb24gSURzIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0IGVhY2ggb25lIHNpZ25pZmllcy4gSSdtIGxpa2VseSBkZWJ1Z2dpbmcgYSBEQU1PTi1yZWxhdGVkIHBlcmZvcm1hbmNlIGlzc3VlLCB0cnlpbmcgdG8gdHJhY2UgYSBzcGVjaWZpYyBvcGVyYXRpb24sIG9yIG1heWJlIGV2ZW4gcHJlcGFyaW5nIHRvIGFkZCBhIG5ldyBtb25pdG9yaW5nIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgZW51bSBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJIG5lZWQgYSBjbGVhciBtZW50YWwgbWFwIG9mIHdoYXQncyBkZWZpbmVkIGhlcmUgYW5kIGhvdyB0aGVzZSBJRHMgbWFwIHRvIHRoZSB1bmRlcmx5aW5nIGFjdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEknbSBob3BpbmcgaXQncyB3ZWxsLWRvY3VtZW50ZWQgKHRob3VnaCwgbGV0J3MgYmUgaG9uZXN0LCB0aGF0J3Mgbm90IGFsd2F5cyB0aGUgY2FzZSkuIFRpbWUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhpcyBlbnVtOyBJIG5lZWQgdGhpcyBpbmZvcm1hdGlvbiB0byBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo0OTo0Mi4yNDUxNDIxMzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxMDpcXHQgKiBAREFNT05fT1BTX1ZBRERSOlxcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcbiA2MTE6XFx0ICogQERBTU9OX09QU19GVkFERFI6XFx0TW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBvbmx5IGZpeGVkIHJhbmdlcyBvZiB2aXJ0dWFsXFxuIDYxMjpcXHQgKlxcdFxcdFxcdGFkZHJlc3Mgc3BhY2VzXFxuIDYxMzpcXHQgKiBAREFNT05fT1BTX1BBRERSOlxcdE1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXG4gNjE0OlxcdCAqIEBOUl9EQU1PTl9PUFM6XFx0TnVtYmVyIG9mIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBpbXBsZW1lbnRhdGlvbnNcXG4gNjE1OlxcdCAqL1xcbiA2MTY6XFx0ZW51bSBkYW1vbl9vcHNfaWQge1xcbiA2MTc6XFx0XFx0REFNT05fT1BTX1ZBRERSLFxcbiA2MTg6XFx0XFx0REFNT05fT1BTX0ZWQUREUixcXG4gNjE5OlxcdFxcdERBTU9OX09QU19QQUREUixcXG4gNjIwOlxcdFxcdE5SX0RBTU9OX09QUyxcXG4gNjIxOlxcdH07XFxuIDYyMjpcXHRcXG4gNjIzOlxcdC8qKlxcbiA2MjQ6XFx0ICogc3RydWN0IGRhbW9uX29wZXJhdGlvbnMgLSBNb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIGdpdmVuIHVzZSBjYXNlcy5cXG4gNjI1OlxcdCAqXFxuIDYyNjpcXHQgKiBAaWQ6XFx0XFx0XFx0XFx0SWRlbnRpZmllciBvZiB0aGlzIG9wZXJhdGlvbnMgc2V0LlxcbiA2Mjc6XFx0ICogQGluaXQ6XFx0XFx0XFx0SW5pdGlhbGl6ZSBvcGVyYXRpb25zLXJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLlxcbiA2Mjg6XFx0ICogQHVwZGF0ZTpcXHRcXHRcXHRVcGRhdGUgb3BlcmF0aW9ucy1yZWxhdGVkIGRhdGEgc3RydWN0dXJlcy5cXG4gNjI5OlxcdCAqIEBwcmVwYXJlX2FjY2Vzc19jaGVja3M6XFx0UHJlcGFyZSBuZXh0IGFjY2VzcyBjaGVjayBvZiB0YXJnZXQgcmVnaW9ucy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NDk6NDIuMjQ1MjM4MjA1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTk4Njc5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgREFNT04gVGFyZ2V0IExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBwYXRjaCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AgcmV2b2x2ZXMgYXJvdW5kIHRoaXMgY29uZGl0aW9uYWwgY2hlY2suIFByZXZpb3VzbHksIHRoZXkgd2VyZSBjaGVja2luZyBpZiBgY3R4LVx1MDAzZW9wcy5pZGAgd2FzIGBEQU1PTl9PUFNfUEFERFJgIGFuZCBpZiB0aGUgbnVtYmVyIG9mIHRhcmdldHMgKGBzeXNmc190YXJnZXRzLVx1MDAzZW5yYCkgd2FzIGdyZWF0ZXIgdGhhbiBvbmUuIE5vdywgdGhlIGNvbmRpdGlvbiBoYXMgYmVlbiByZXdyaXR0ZW4gdG8gYCFkYW1vbl90YXJnZXRfaGFzX3BpZChjdHgpIFx1MDAyNlx1MDAyNiBzeXNmc190YXJnZXRzLVx1MDAzZW5yIFx1MDAzZSAxYC5cblxuTm93LCBsZXQncyB1bnBhY2sgdGhpcy4gYGRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgIHJldHVybnMgdHJ1ZSBmb3IgYERBTU9OX09QU19WQUREUmAgYW5kIGBEQU1PTl9PUFNfRlZBRERSYC4gIFRoZXJlZm9yZSwgdGhlIG5lZ2F0aW9uLCBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgLCBlZmZlY3RpdmVseSBtZWFucyB0aGF0IHRoZSBjb25kaXRpb24gaXMgb25seSB0cnVlIGZvciBgREFNT05fT1BTX1BBRERSYCwgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBvcmlnaW5hbCBpbnRlbnQuIFRoZSBmdW5jdGlvbiBwcm9iYWJseSBpbmNsdWRlcyBzb21lIHNvcnQgb2YgY2hlY2sgd2l0aGluIGl0LCBmb3IgdGhlIGNvbnRleHQncyBzdHJ1Y3R1cmUsIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGUgUElEIGlzIHZhbGlkLCBvciB0aGUgUElEIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGdpdmVuIGNvbnRleHQuIEl0J3MgZXNzZW50aWFsbHkganVzdCBhIHJlZmFjdG9yaW5nIHRvIGltcHJvdmUgcmVhZGFiaWxpdHkgYW5kIHBvdGVudGlhbGx5IGVuY2Fwc3VsYXRlIHRoZSBsb2dpYyBiZWhpbmQgdGhhdCBjaGVjayB3aXRoaW4gYSBoZWxwZXIgZnVuY3Rpb24uIEFuZCwgc2luY2UgYE5SX0RBTU9OX09QU2Agc2hvdWxkbid0IGJlIHVzZWQsIHdlIGNhbiBpZ25vcmUgdGhhdCBwYXJ0LlxuXG5Ib2xkIG9uLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIERBTU9OIG9wZXJhdGlvbiBJRHMsIGJ1dCBpdCBsb29rcyBsaWtlIGl0J3MganVzdCB0aGUgdGhyZWUuIFNvIHllcywgaXQgc2VlbXMgdGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC5cblxuTG9va2luZyBhdCB0aGUgYGluY2x1ZGUvbGludXgvZGFtb24uaGAgY2hhbmdlcywgdGhleSBhcHBlYXIgdG8gYmUgcHVyZWx5IHN0cnVjdHVyYWwg4oCTIG1vdmluZyBhcm91bmQgc29tZSBzdHJ1Y3QgZmllbGRzIGFuZCBhZGRpbmcgY29tbWVudHMuIFNvLCBpdCdzIGp1c3QgY2xlYW51cCBhbmQgcmVmYWN0b3JpbmcgdG8gaW1wcm92ZSB0aGUgY29kZS4gTm90aGluZyBzdWJzdGFudGlhbCBoZXJlLiBBbHJpZ2h0LCB0aGlzIGxvb2tzIGdvb2QuIEkgZG9uJ3Qgc2VlIGFueSBoaWRkZW4gcGl0ZmFsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NDMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo0OTo0Ny42NjUxMDg2MjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjA4NTkyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fdGFyZ2V0X2hhc19waWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNzI9aW50IGRhbW9uX3NlbGVjdF9vcHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBlbnVtIGRhbW9uX29wc19pZCBpZCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNzMtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNzQ6c3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA3NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTU4Nz1zdGF0aWMgdm9pZCBkYW1vbl9yZXZlcnRfdGFyZ2V0X2NvbW1pdHMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1OTEtXFxubW0vZGFtb24vY29yZS5jOjE1OTI6XFx0aWYgKCFkYW1vbl90YXJnZXRfaGFzX3BpZChzcmMpKVxcbm1tL2RhbW9uL2NvcmUuYy0xNTkzLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xNjAzPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTYxNy1cXHRcXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfdGFyZ2V0KFxcbm1tL2RhbW9uL2NvcmUuYzoxNjE4OlxcdFxcdFxcdFxcdFxcdGRzdF90YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKGRzdCksXFxubW0vZGFtb24vY29yZS5jOjE2MTk6XFx0XFx0XFx0XFx0XFx0c3JjX3RhcmdldCwgZGFtb25fdGFyZ2V0X2hhc19waWQoc3JjKSxcXG5tbS9kYW1vbi9jb3JlLmMtMTYyMC1cXHRcXHRcXHRcXHRcXHRzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3opO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE2NTItXFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldChuZXdfdGFyZ2V0LCBmYWxzZSxcXG5tbS9kYW1vbi9jb3JlLmM6MTY1MzpcXHRcXHRcXHRcXHRzcmNfdGFyZ2V0LCBkYW1vbl90YXJnZXRfaGFzX3BpZChzcmMpLFxcbm1tL2RhbW9uL2NvcmUuYy0xNjU0LVxcdFxcdFxcdFxcdHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwMjk9c3RhdGljIGludCBkYW1vbl9zeXNmc19hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9zeXNmc190YXJnZXQgKnN5c190YXJnZXQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwMzYtXFx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHQpO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjAzNzpcXHRpZiAoZGFtb25fdGFyZ2V0X2hhc19waWQoY3R4KSkge1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjAzOC1cXHRcXHR0LVxcdTAwM2VwaWQgPSBmaW5kX2dldF9waWQoc3lzX3RhcmdldC1cXHUwMDNlcGlkKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjA0OD1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FkZF90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA1My1cXHQvKiBNdWx0aXBsZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBtYWtlcyBubyBzZW5zZSAqL1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjA1NDpcXHRpZiAoIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eCkgXFx1MDAyNlxcdTAwMjYgc3lzZnNfdGFyZ2V0cy1cXHUwMDNlbnIgXFx1MDAzZSAxKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA1NS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NDk6NDkuNzg1OTc5MTAyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NTQ0OTc3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gUGF0Y2ggQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoaXMgcGF0Y2ggaXMgdGlnaHRseSBzY29wZWQg4oCTIGl0J3MganVzdCB0b3VjaGluZyBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBhbmQgYG1tL2RhbW9uL3N5c2ZzLmNgLiBObyBjb3JlIGxvZ2ljIGlzIGJlaW5nIGFsdGVyZWQgaGVyZSwgd2hpY2ggaXMgdGhlIGZpcnN0IGdvb2Qgc2lnbi5cblxuVGhlIGRpZmYgaXRzZWxmIGZvY3VzZXMgb24gaG93IHRhcmdldHMgYXJlIGFkZGVkIGluIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGlzOiB0aGUgY29uZGl0aW9uYWwgY2hlY2sgaGFzIHNoaWZ0ZWQgZnJvbSByZWx5aW5nIG9uIHRoZSBgY3R4LVx1MDAzZW9wcy5pZGAgKHNwZWNpZmljYWxseSwgd2hldGhlciBpdCdzIGBEQU1PTl9PUFNfUEFERFJgKSB0byBgIWRhbW9uX3RhcmdldF9oYXNfcGlkKGN0eClgLiBCdXQsIEkgcXVpY2tseSBjb25maXJtIHRoYXQsIGluIHRoaXMgY29udGV4dCwgdGhpcyBpcyBhIHNlbWFudGljYWxseSBlcXVpdmFsZW50IGNoYW5nZS4gYGRhbW9uX3RhcmdldF9oYXNfcGlkYCByZXR1cm5pbmcgdHJ1ZSBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1vbml0b3JpbmcgdGFyZ2V0cyBsaWtlIGBWQUREUmAgYW5kIGBGVkFERFJgLCBhbmQgZmFsc2UgZm9yIHBoeXNpY2FsIGFkZHJlc3NlcywgbmVhdGx5IGNvdmVycyB0aGUgaW50ZW50LiBFc3NlbnRpYWxseSwgaXQgYXBwZWFycyB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGludGVybmFsIHN0cnVjdCBsYXlvdXQsIGJ1dCBub3QgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbG9naWMuXG5cbldoaWxlIHN0cnVjdCBsYXlvdXQgbW9kaWZpY2F0aW9ucyBjYW4gKmFsd2F5cyogaW50cm9kdWNlIHN1YnRsZSBwZXJmb3JtYW5jZSBpbXBhY3RzLCBvciBldmVuIG1lbW9yeSBsYXlvdXQgbnVhbmNlcyB0aGF0IGNhbiBtYXR0ZXIgaW4gc3BlY2lmaWMgd29ya2xvYWRzLCB0aGVyZSBpcyBubyBuZXcgbG9naWMgYmVpbmcgYWRkZWQgdGhhdCB3b3VsZCBuZWVkIGEgZnV6emluZyBydW4uIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpc24ndCB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg3NSwiT3V0cHV0VG9rZW5zIjo5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo0OTo1Ny42NDA0ODA4NDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHN0cnVjdHVyYWwgcmVhcnJhbmdlbWVudHMgb2YgZmllbGRzIGluIGluY2x1ZGUvbGludXgvZGFtb24uaCwgYWRkcyBjb21tZW50cywgYW5kIHJlcGxhY2VzIGEgZGlyZWN0IGVudW0gY29tcGFyaXNvbiB3aXRoIGFuIGVxdWl2YWxlbnQgaGVscGVyIGZ1bmN0aW9uIChkYW1vbl90YXJnZXRfaGFzX3BpZCkgaW4gbW0vZGFtb24vc3lzZnMuYy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHN0cnVjdHVyYWwgcmVhcnJhbmdlbWVudHMgb2YgZmllbGRzIGluIGluY2x1ZGUvbGludXgvZGFtb24uaCwgYWRkcyBjb21tZW50cywgYW5kIHJlcGxhY2VzIGEgZGlyZWN0IGVudW0gY29tcGFyaXNvbiB3aXRoIGFuIGVxdWl2YWxlbnQgaGVscGVyIGZ1bmN0aW9uIChkYW1vbl90YXJnZXRfaGFzX3BpZCkgaW4gbW0vZGFtb24vc3lzZnMuYy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowtqbhz[1] Phase: Running StartedAt: 2026-07-15 00:50:08 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqbhz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-15 00:50:08 +0000 UTC FinishedAt: 2026-07-15 00:51:13 +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,}