Name: series-workflowd8kg9 Phase: Failed StartedAt: 2026-09-14 10:37:51 +0000 UTC FinishedAt: 2026-09-14 10:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8kg9[0] Phase: Succeeded StartedAt: 2026-09-14 10:37:51 +0000 UTC FinishedAt: 2026-09-14 10:44:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8kg9[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 10:37:51 +0000 UTC FinishedAt: 2026-09-14 10:44:23 +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+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMga2VybmVsL2ZvcmsuYyB0byB3cmFwIHZtX2FyZWEtXHUwMDNlYWRkciBpbiBrYXNhbl9yZXNldF90YWcoKSBwcmlvciB0byBjYWxsaW5nIHZmcmVlKCkuIFRoZSBrYXNhbl9yZXNldF90YWcoKSBoZWxwZXIgaXMgb25seSBhY3RpdmUgd2hlbiBDT05GSUdfS0FTQU5fU1dfVEFHUyBvciBDT05GSUdfS0FTQU5fSFdfVEFHUyBpcyBlbmFibGVkLCBib3RoIG9mIHdoaWNoIGFyZSBleGNsdXNpdmUgdG8gYXJtNjQuIE9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCksIGthc2FuX3Jlc2V0X3RhZygpIGlzIGFuIGlkZW50aXR5IGZ1bmN0aW9uIHJldHVybmluZyAodm9pZCAqKWFkZHIgd2l0aG91dCBtb2RpZmljYXRpb24uIENvbnNlcXVlbnRseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gZnVuY3Rpb25hbCBvciBiaW5hcnkgY2hhbmdlcyB0byBjb21waWxlZCBjb2RlIG9uIGFtZDY0LCBmYWxsaW5nIHVuZGVyIGNoYW5nZXMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYzI4YmM3MzczYmZjYjY4ZGY5NDJkZDRmMGJkZDBlOGVhN2NkODk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTA6Mzk6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcbmluZGV4IDQxNjc1OGM4YTNkNDMuLjZlYWQ4NzdmODdhOGMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZm9yay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZm9yay5jXG5AQCAtMjgwLDcgJiM0MzsyODAsNyBAQCBzdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaClcbiBcdGlmICh0cnlfcmVsZWFzZV90aHJlYWRfc3RhY2tfdG9fY2FjaGUodm1fc3RhY2stXHUwMDNlc3RhY2tfdm1fYXJlYSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcik7XG4mIzQzO1x0dmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGtlcm5lbC9mb3JrLmMgdG8gd3JhcCB2bV9hcmVhLVx1MDAzZWFkZHIgaW4ga2FzYW5fcmVzZXRfdGFnKCkgcHJpb3IgdG8gY2FsbGluZyB2ZnJlZSgpLiBUaGUga2FzYW5fcmVzZXRfdGFnKCkgaGVscGVyIGlzIG9ubHkgYWN0aXZlIHdoZW4gQ09ORklHX0tBU0FOX1NXX1RBR1Mgb3IgQ09ORklHX0tBU0FOX0hXX1RBR1MgaXMgZW5hYmxlZCwgYm90aCBvZiB3aGljaCBhcmUgZXhjbHVzaXZlIHRvIGFybTY0LiBPbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCBrYXNhbl9yZXNldF90YWcoKSBpcyBhbiBpZGVudGl0eSBmdW5jdGlvbiByZXR1cm5pbmcgKHZvaWQgKilhZGRyIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBDb25zZXF1ZW50bHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwgb3IgYmluYXJ5IGNoYW5nZXMgdG8gY29tcGlsZWQgY29kZSBvbiBhbWQ2NCwgZmFsbGluZyB1bmRlciBjaGFuZ2VzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2MyOGJjNzM3M2JmY2I2OGRmOTQyZGQ0ZjBiZGQwZThlYTdjZDg5OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDEwOjM5OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggNDE2NzU4YzhhM2Q0My4uNmVhZDg3N2Y4N2E4YyAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZm9yay5jCkBAIC0yODAsNyAmIzQzOzI4MCw3IEBAIHN0YXRpYyB2b2lkIHRocmVhZF9zdGFja19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJoKQogCWlmICh0cnlfcmVsZWFzZV90aHJlYWRfc3RhY2tfdG9fY2FjaGUodm1fc3RhY2stJmd0O3N0YWNrX3ZtX2FyZWEpKQogCQlyZXR1cm47CiAKLQl2ZnJlZSh2bV9hcmVhLSZndDthZGRyKTsKJiM0MzsJdmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtJmd0O2FkZHIpKTsKIH0KIAogc3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX2RlbGF5ZWRfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBGb3JrIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBkaWZmLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkIGluIGBrZXJuZWwvZm9yay5jYC4gTG9va3MgbGlrZSBpdCYjMzk7cyBhIGNoYW5nZSByZWxhdGVkIHRvIHRocmVhZCBzdGFjayBkZWFsbG9jYXRpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgYHZmcmVlKClgIGNhbGwsIHdoaWNoIHJlbGVhc2VzIG1lbW9yeSwgaXMgYmVpbmcgdXBkYXRlZC4gSW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIGB2ZnJlZSgpYCBvbiBgdm1fYXJlYS0mZ3Q7YWRkcmAsIGl0JiMzOTtzIG5vdyBjYWxsaW5nIGBrYXNhbl9yZXNldF90YWcoKWAgb24gYHZtX2FyZWEtJmd0O2FkZHJgIGJlZm9yZSBwYXNzaW5nIGl0IHRvIGB2ZnJlZSgpYC4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIEtlcm5lbCBBZGRyZXNzIFNhbml0aXplciAoS0FTQU4pLiBUaGUgZmFjdCB0aGF0IGBrYXNhbl9yZXNldF90YWdgIGlzIGludm9sdmVkIGlzIGEgbWFqb3IgY2x1ZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYGtlcm5lbC9mb3JrLmNgIGFuZCBmb2N1cyBvbiB0aGUgY29kZSBhcm91bmQgbGluZSAyODAuIEkgbmVlZCB0byBzZWUgd2hhdCBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCBhbmQgYHRocmVhZF9zdGFja19kZWxheWVkX2ZyZWVgIGFyZSBkb2luZywgYW5kIGhvdyB0aGUgYHZtX2FyZWFgIGlzIGJlaW5nIHVzZWQuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgcHVycG9zZSBvZiB0aGlzIGNoYW5nZSBhbmQgd2hldGhlciBpdCYjMzk7cyByZWxhdGVkIHRvIG1lbW9yeSBzYWZldHksIHJhY2UgY29uZGl0aW9ucywgb3Igb3B0aW1pemF0aW9uLiBXaGF0JiMzOTtzIHRoZSB0aHJlYWQgc3RhY2sgY2FjaGUgdHJ5aW5nIHRvIGRvPyBJcyB0aGlzIGFib3V0IGNsZWFyaW5nIG1lbW9yeSB0YWdzIGJlZm9yZSByZWxlYXNpbmcgdGhlIHN0YWNrPyBJIG5lZWQgbW9yZSBkYXRhIGJlZm9yZSBJIGNhbiBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2ZvcmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0fVxuIDI0MTpcdFxuIDI0MjpcdHN0YXRpYyBib29sIHRyeV9yZWxlYXNlX3RocmVhZF9zdGFja190b19jYWNoZShzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhKVxuIDI0MzpcdHtcbiAyNDQ6XHRcdHVuc2lnbmVkIGludCBpO1xuIDI0NTpcdFx0aW50IG5pZDtcbiAyNDY6XHRcbiAyNDc6XHRcdC8qXG4gMjQ4Olx0XHQgKiBEb24mIzM5O3QgY2FjaGUgc3RhY2tzIGlmIGFueSBvZiB0aGUgcGFnZXMgZG9uJiMzOTt0IG1hdGNoIHRoZSBsb2NhbCBkb21haW4sIHVubGVzc1xuIDI0OTpcdFx0ICogdGhlcmUgaXMgbm8gbG9jYWwgbWVtb3J5IHRvIGJlZ2luIHdpdGguXG4gMjUwOlx0XHQgKlxuIDI1MTpcdFx0ICogTm90ZSB0aGF0IGxhY2sgb2YgbG9jYWwgbWVtb3J5IGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgbWVhbiBpdCBtYWtlcyBubyBkaWZmZXJlbmNlXG4gMjUyOlx0XHQgKiBwZXJmb3JtYW5jZS13aXNlIHdoaWNoIG90aGVyIGRvbWFpbiBiYWNrcyB0aGUgc3RhY2suIEluIHRoaXMgY2FzZSB3ZSBhcmUgbWVyZWx5XG4gMjUzOlx0XHQgKiB0cnlpbmcgdG8gYXZvaWQgY29uc3RhbnRseSBnb2luZyB0byB2bWFsbG9jLlxuIDI1NDpcdFx0ICovXG4gMjU1Olx0XHRzY29wZWRfZ3VhcmQocHJlZW1wdCkge1xuIDI1NjpcdFx0XHRuaWQgPSBudW1hX25vZGVfaWQoKTtcbiAyNTc6XHRcdFx0aWYgKG5vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkpIHtcbiAyNTg6XHRcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2bV9hcmVhLVx1MDAzZW5yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuIDI1OTpcdFx0XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSB2bV9hcmVhLVx1MDAzZXBhZ2VzW2ldO1xuIDI2MDpcdFx0XHRcdFx0aWYgKHBhZ2VfdG9fbmlkKHBhZ2UpICE9IG5pZClcbiAyNjE6XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI2MjpcdFx0XHRcdH1cbiAyNjM6XHRcdFx0fVxuIDI2NDpcdFxuIDI2NTpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9DQUNIRURfU1RBQ0tTOyBpJiM0MzsmIzQzOykge1xuIDI2NjpcdFx0XHRcdHN0cnVjdCB2bV9zdHJ1Y3QgKnRtcCA9IE5VTEw7XG4gMjY3Olx0XG4gMjY4Olx0XHRcdFx0aWYgKHRoaXNfY3B1X3RyeV9jbXB4Y2hnKGNhY2hlZF9zdGFja3NbaV0sIFx1MDAyNnRtcCwgdm1fYXJlYSkpXG4gMjY5Olx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyNzA6XHRcdFx0fVxuIDI3MTpcdFx0fVxuIDI3MjpcdFx0cmV0dXJuIGZhbHNlO1xuIDI3MzpcdH1cbiAyNzQ6XHRcbiAyNzU6XHRzdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaClcbiAyNzY6XHR7XG4gMjc3Olx0XHRzdHJ1Y3Qgdm1fc3RhY2sgKnZtX3N0YWNrID0gY29udGFpbmVyX29mKHJoLCBzdHJ1Y3Qgdm1fc3RhY2ssIHJjdSk7XG4gMjc4Olx0XHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhID0gdm1fc3RhY2stXHUwMDNlc3RhY2tfdm1fYXJlYTtcbiAyNzk6XHRcbiAyODA6XHRcdGlmICh0cnlfcmVsZWFzZV90aHJlYWRfc3RhY2tfdG9fY2FjaGUodm1fc3RhY2stXHUwMDNlc3RhY2tfdm1fYXJlYSkpXG4gMjgxOlx0XHRcdHJldHVybjtcbiAyODI6XHRcbiAyODM6XHRcdHZmcmVlKGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVx1MDAzZWFkZHIpKTtcbiAyODQ6XHR9XG4gMjg1Olx0XG4gMjg2Olx0c3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX2RlbGF5ZWRfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiAyODc6XHR7XG4gMjg4Olx0XHRzdHJ1Y3Qgdm1fc3RhY2sgKnZtX3N0YWNrID0gdHNrLVx1MDAzZXN0YWNrO1xuIDI4OTpcdFxuIDI5MDpcdFx0dm1fc3RhY2stXHUwMDNlc3RhY2tfdm1fYXJlYSA9IHRzay1cdTAwM2VzdGFja192bV9hcmVhO1xuIDI5MTpcdFx0Y2FsbF9yY3UoXHUwMDI2dm1fc3RhY2stXHUwMDNlcmN1LCB0aHJlYWRfc3RhY2tfZnJlZV9yY3UpO1xuIDI5MjpcdH1cbiAyOTM6XHRcbiAyOTQ6XHRzdGF0aWMgaW50IGZyZWVfdm1fc3RhY2tfY2FjaGUodW5zaWduZWQgaW50IGNwdSlcbiAyOTU6XHR7XG4gMjk2Olx0XHRzdHJ1Y3Qgdm1fc3RydWN0ICoqY2FjaGVkX3ZtX3N0YWNrX2FyZWFzID0gcGVyX2NwdV9wdHIoY2FjaGVkX3N0YWNrcywgY3B1KTtcbiAyOTc6XHRcdGludCBpO1xuIDI5ODpcdFxuIDI5OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfQ0FDSEVEX1NUQUNLUzsgaSYjNDM7JiM0MzspIHtcbiAzMDA6XHRcdFx0c3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYSA9IGNhY2hlZF92bV9zdGFja19hcmVhc1tpXTtcbiAzMDE6XHRcbiAzMDI6XHRcdFx0aWYgKCF2bV9hcmVhKVxuIDMwMzpcdFx0XHRcdGNvbnRpbnVlO1xuIDMwNDpcdFxuIDMwNTpcdFx0XHR2ZnJlZSh2bV9hcmVhLVx1MDAzZWFkZHIpO1xuIDMwNjpcdFx0XHRjYWNoZWRfdm1fc3RhY2tfYXJlYXNbaV0gPSBOVUxMO1xuIDMwNzpcdFx0fVxuIDMwODpcdFxuIDMwOTpcdFx0cmV0dXJuIDA7XG4gMzEwOlx0fVxuIDMxMTpcdFxuIDMxMjpcdHN0YXRpYyBpbnQgbWVtY2dfY2hhcmdlX2tlcm5lbF9zdGFjayhzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhKVxuIDMxMzpcdHtcbiAzMTQ6XHRcdGludCBpO1xuIDMxNTpcdFx0aW50IHJldDtcbiAzMTY6XHRcdGludCBucl9jaGFyZ2VkID0gMDtcbiAzMTc6XHRcbiAzMTg6XHRcdEJVR19PTih2bV9hcmVhLVx1MDAzZW5yX3BhZ2VzICE9IFRIUkVBRF9TSVpFIC8gUEFHRV9TSVpFKTtcbiAzMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTU1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIEZvcmsgQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gYGtlcm5lbC9mb3JrLmNgIG5vdy4gRmlyc3QgdGhpbmdzIGZpcnN0OiBpcyB0aGlzIHBhcnQgb2YgdGhlIGBDT05GSUdfVk1BUF9TVEFDS2AgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci4gTXkgbWFpbiBpbnRlcmVzdCBsaWVzIHdpdGhpbiBsaW5lcyAxNTAgdG8gMjUwIG9mIHRoaXMgZmlsZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHNwZWNpZmljIGxvZ2ljIHdpdGhpbiB0aGF0IHNlY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgZm9yayBwcm9jZXNzIHdpdGhpbiB0aGlzIGNvbnRleHQuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHR2b2lkIF9fd2VhayBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4gMTgxOlx0e1xuIDE4MjpcdH1cbiAxODM6XHRcbiAxODQ6XHRzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnRhc2tfc3RydWN0X2NhY2hlcDtcbiAxODU6XHRcbiAxODY6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqYWxsb2NfdGFza19zdHJ1Y3Rfbm9kZShpbnQgbm9kZSlcbiAxODc6XHR7XG4gMTg4Olx0XHRyZXR1cm4ga21lbV9jYWNoZV9hbGxvY19ub2RlKHRhc2tfc3RydWN0X2NhY2hlcCwgR0ZQX0tFUk5FTCwgbm9kZSk7XG4gMTg5Olx0fVxuIDE5MDpcdFxuIDE5MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIDE5MjpcdHtcbiAxOTM6XHRcdGttZW1fY2FjaGVfZnJlZSh0YXNrX3N0cnVjdF9jYWNoZXAsIHRzayk7XG4gMTk0Olx0fVxuIDE5NTpcdFxuIDE5NjpcdCNpZmRlZiBDT05GSUdfVk1BUF9TVEFDS1xuIDE5NzpcdC8qXG4gMTk4Olx0ICogdm1hbGxvYygpIGlzIGEgYml0IHNsb3csIGFuZCBjYWxsaW5nIHZmcmVlKCkgZW5vdWdoIHRpbWVzIHdpbGwgZm9yY2UgYSBUTEJcbiAxOTk6XHQgKiBmbHVzaC4gIFRyeSB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGNhbGxzIGJ5IGNhY2hpbmcgc3RhY2tzLlxuIDIwMDpcdCAqL1xuIDIwMTpcdCNkZWZpbmUgTlJfQ0FDSEVEX1NUQUNLUyAyXG4gMjAyOlx0c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2bV9zdHJ1Y3QgKiwgY2FjaGVkX3N0YWNrc1tOUl9DQUNIRURfU1RBQ0tTXSk7XG4gMjAzOlx0LypcbiAyMDQ6XHQgKiBBbGxvY2F0ZWQgc3RhY2tzIGFyZSBjYWNoZWQgYW5kIGxhdGVyIHJldXNlZCBieSBuZXcgdGhyZWFkcywgc28gbWVtY2dcbiAyMDU6XHQgKiBhY2NvdW50aW5nIGlzIHBlcmZvcm1lZCBieSB0aGUgY29kZSBhc3NpZ25pbmcvcmVsZWFzaW5nIHN0YWNrcyB0byB0YXNrcy5cbiAyMDY6XHQgKiBXZSBuZWVkIGEgemVyb2VkIG1lbW9yeSB3aXRob3V0IF9fR0ZQX0FDQ09VTlQuXG4gMjA3Olx0ICovXG4gMjA4Olx0I2RlZmluZSBHRlBfVk1BUF9TVEFDSyAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9TS0lQX0tBU0FOKVxuIDIwOTpcdFxuIDIxMDpcdHN0cnVjdCB2bV9zdGFjayB7XG4gMjExOlx0XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIDIxMjpcdFx0c3RydWN0IHZtX3N0cnVjdCAqc3RhY2tfdm1fYXJlYTtcbiAyMTM6XHR9O1xuIDIxNDpcdFxuIDIxNTpcdHN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICphbGxvY190aHJlYWRfc3RhY2tfbm9kZV9mcm9tX2NhY2hlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgbm9kZSlcbiAyMTY6XHR7XG4gMjE3Olx0XHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhO1xuIDIxODpcdFx0dW5zaWduZWQgaW50IGk7XG4gMjE5Olx0XG4gMjIwOlx0XHQvKlxuIDIyMTpcdFx0ICogSWYgdGhlIG5vZGUgaGFzIG1lbW9yeSwgd2UgYXJlIGd1YXJhbnRlZWQgdGhlIHN0YWNrcyBhcmUgYmFja2VkIGJ5IGxvY2FsIHBhZ2VzLlxuIDIyMjpcdFx0ICogT3RoZXJ3aXNlIHRoZSBwYWdlcyBhcmUgYXJiaXRyYXJ5LlxuIDIyMzpcdFx0ICpcbiAyMjQ6XHRcdCAqIE5vdGUgdGhhdCBkZXBlbmRpbmcgb24gY3B1c2V0IGl0IGlzIHBvc3NpYmxlIHdlIHdpbGwgZ2V0IG1pZ3JhdGVkIHRvIGEgZGlmZmVyZW50XG4gMjI1Olx0XHQgKiBub2RlIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpbmcgaGVyZSwgc28gdGhpcyBkb2VzICpub3QqIGd1YXJhbnRlZSBsb2NhbGl0eSBmb3JcbiAyMjY6XHRcdCAqIGFyYml0cmFyeSBjYWxsZXJzLlxuIDIyNzpcdFx0ICovXG4gMjI4Olx0XHRzY29wZWRfZ3VhcmQocHJlZW1wdCkge1xuIDIyOTpcdFx0XHRpZiAobm9kZSAhPSBOVU1BX05PX05PREUgXHUwMDI2XHUwMDI2IG51bWFfbm9kZV9pZCgpICE9IG5vZGUpXG4gMjMwOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gMjMxOlx0XG4gMjMyOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0NBQ0hFRF9TVEFDS1M7IGkmIzQzOyYjNDM7KSB7XG4gMjMzOlx0XHRcdFx0dm1fYXJlYSA9IHRoaXNfY3B1X3hjaGcoY2FjaGVkX3N0YWNrc1tpXSwgTlVMTCk7XG4gMjM0Olx0XHRcdFx0aWYgKHZtX2FyZWEpXG4gMjM1Olx0XHRcdFx0XHRyZXR1cm4gdm1fYXJlYTtcbiAyMzY6XHRcdFx0fVxuIDIzNzpcdFx0fVxuIDIzODpcdFxuIDIzOTpcdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY4MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgU3VzcGVjdCBNZW1vcnkgUmVsZWFzZSoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIGB2ZnJlZWAgY2FsbCByZWxhdGVkIHRvIGEgYHZtX2FyZWEtJmd0O2FkZHJgIGFuZCBzb21ldGhpbmcmIzM5O3MgYnVnZ2luZyBtZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgYGthc2FuX3Jlc2V0X3RhZ2AgY2FsbCB3YXNuJiMzOTt0IGFwcGxpZWQgb3Igd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBUaGUgY29kZSBsb29rcyBsaWtlIGl0JiMzOTtzIHRyeWluZyB0byByZWxlYXNlIHNvbWUgbWVtb3J5IGluIHRoZSBgZnJlZV92bV9zdGFja19jYWNoZWAgZnVuY3Rpb24uIEJ1dCB0aGVyZSYjMzk7cyBzb21ldGhpbmcgb2ZmLiBJICp0aG91Z2h0KiBJIHNhdyBhIGBrYXNhbl9yZXNldF90YWdgIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhbGwgZWFybGllciwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZSBoaXN0b3J5LiBTaW5jZSBJIGRvbiYjMzk7dCBoYXZlIGdpdCBsb2cgdG8gaGFuZCwgSSBzaG91bGQgc2VhcmNoIGZvciBga2FzYW5fcmVzZXRfdGFnYCwgYHZmcmVlYCB0byBnZXQgdGhlIGNoYW5nZXMgcXVpY2tseS4gTGluZSAzMDUgbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgYnV0IG1heWJlIHRoZSBjaGFuZ2UgSSB3YXMgbG9va2luZyBmb3Igd2FzbiYjMzk7dCB0aGVyZSBhdCBhbGwsIG9yIHBlcmhhcHMgaXQgd2FzIHJlbW92ZWQgaW4gYSBzdWJzZXF1ZW50IGNvbW1pdD8gTm93IEkgdGhpbmssIGluc3RlYWQgb2YgZm9jdXNpbmcgb24gYGthc2FuX3Jlc2V0X3RhZ2AsIHRoYXQgdGhlIGlzc3VlIG1pZ2h0IGJlIHdpdGggb3RoZXIgYHZmcmVlYCBjYWxscyB3aXRoaW4gZm9yay5jLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHRob3NlIGluc3RlYWQgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmM9MTkxPXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmtlcm5lbC9mb3JrLmMtMTk3LS8qXG5rZXJuZWwvZm9yay5jOjE5ODogKiB2bWFsbG9jKCkgaXMgYSBiaXQgc2xvdywgYW5kIGNhbGxpbmcgdmZyZWUoKSBlbm91Z2ggdGltZXMgd2lsbCBmb3JjZSBhIFRMQlxua2VybmVsL2ZvcmsuYy0xOTktICogZmx1c2guICBUcnkgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBjYWxscyBieSBjYWNoaW5nIHN0YWNrcy5cbi0tXG5rZXJuZWwvZm9yay5jPTI3NT1zdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaClcbi0tXG5rZXJuZWwvZm9yay5jLTI4Mi1cbmtlcm5lbC9mb3JrLmM6MjgzOlx0dmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpO1xua2VybmVsL2ZvcmsuYy0yODQtfVxuLS1cbmtlcm5lbC9mb3JrLmM9Mjk0PXN0YXRpYyBpbnQgZnJlZV92bV9zdGFja19jYWNoZSh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbmtlcm5lbC9mb3JrLmMtMzA0LVxua2VybmVsL2ZvcmsuYzozMDU6XHRcdHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcik7XG5rZXJuZWwvZm9yay5jLTMwNi1cdFx0Y2FjaGVkX3ZtX3N0YWNrX2FyZWFzW2ldID0gTlVMTDtcbi0tXG5rZXJuZWwvZm9yay5jPTMzMz1zdGF0aWMgaW50IGFsbG9jX3RocmVhZF9zdGFja19ub2RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgbm9kZSlcbi0tXG5rZXJuZWwvZm9yay5jLTM0MC1cdFx0aWYgKG1lbWNnX2NoYXJnZV9rZXJuZWxfc3RhY2sodm1fYXJlYSkpIHtcbmtlcm5lbC9mb3JrLmM6MzQxOlx0XHRcdHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcik7XG5rZXJuZWwvZm9yay5jLTM0Mi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5rZXJuZWwvZm9yay5jLTM2Ni1cdGlmIChtZW1jZ19jaGFyZ2Vfa2VybmVsX3N0YWNrKHZtX2FyZWEpKSB7XG5rZXJuZWwvZm9yay5jOjM2NzpcdFx0dmZyZWUoc3RhY2spO1xua2VybmVsL2ZvcmsuYy0zNjgtXHRcdHJldHVybiAtRU5PTUVNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1OTUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBNZW1vcnkgVGFnZ2luZyB3aXRoIEtBU0FOIGFuZCB2ZnJlZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHZpcnR1YWwgbWVtb3J5IGFyZWEsIHNwZWNpZmljYWxseSBob3cgYHZtX2FyZWEtJmd0O2FkZHJgIGlzIG1hbmFnZWQgYW5kIHRhZ2dlZC4gSSBuZWVkIHRvIGtub3cgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3ksIGFueSBwb3RlbnRpYWwgdGFnZ2luZyBtZWNoYW5pc21zIHVzZWQsIGFuZCBob3cgdGhlc2UgaW50ZXJhY3Qgd2l0aCB0aGUgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgZmVhdHVyZXMuIEkgc3VzcGVjdCBhIEtBU0FOIGludGVyYWN0aW9uIGFuZCwgZ2l2ZW4gdGhlIGNvbnRleHQsIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGBrYXNhbl9yZXNldF90YWdgIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgdmZyZWVgLiBJIG5lZWQgdG8gdHJhY2sgZG93biBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIGdyZXAuIEkmIzM5O2xsIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBjb2RlIGZvciBpbnN0YW5jZXMgd2hlcmUgYHZmcmVlYCBhbmQgYGthc2FuYCBhcmUgdXNlZCB0b2dldGhlciwgb3Igd2hlcmUgYGthc2FuX3Jlc2V0X3RhZ2AgaXMgY2FsbGVkIGJlZm9yZSBvciBhZnRlciBhIGB2ZnJlZWAgY2FsbC4gU2VlaW5nIHRob3NlIHJlbGF0aW9uc2hpcHMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBtZW1vcnkgc2FmZXR5IGltcGxpY2F0aW9ucyBhbmQsIHBvdGVudGlhbGx5LCBpZiB0aGlzIHJlbGF0ZXMgdG8gc29tZSB2dWxuZXJhYmlsaXR5LiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIHBhdHRlcm5zIGxpa2UgJiMzNDt2ZnJlZS4qa2FzYW4mIzM0OyBvciAmIzM0O2thc2FuX3Jlc2V0X3RhZy4qdmZyZWUmIzM0OyB0byByZXZlYWwgdGhvc2UgcG90ZW50aWFsIGludGVyYWN0aW9ucy4gVGhpcyBzZWFyY2ggc2hvdWxkIHByb3ZpZGUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBLQVNBTiBpcyB1c2VkIHRvIGNoZWNrIG1lbW9yeSBmcmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2FzYW5fcmVzZXRfdGFnXFwoLiphZGRyXFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va2FzYW4uaC0xMi0jZGVmaW5lIGFyY2hfa2FzYW5fc2V0X3RhZyhhZGRyLCB0YWcpXHRfX3RhZ19zZXQoYWRkciwgdGFnKVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rYXNhbi5oOjEzOiNkZWZpbmUgYXJjaF9rYXNhbl9yZXNldF90YWcoYWRkcilcdF9fdGFnX3Jlc2V0KGFkZHIpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2thc2FuLmgtMTQtI2RlZmluZSBhcmNoX2thc2FuX2dldF90YWcoYWRkcilcdF9fdGFnX2dldChhZGRyKVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9MzY5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190dGJyMV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTM3MS1cdC8qIFRUQlIxIGFkZHJlc3NlcyBtYXkgaGF2ZSBhIHRhZyBpZiBLQVNBTl9TV19UQUdTIGlzIGluIHVzZSAqL1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaDozNzI6XHRyZXR1cm4gYXJjaF9rYXNhbl9yZXNldF90YWcoYWRkcikgXHUwMDNlPSBQQUdFX09GRlNFVDtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMzczLX1cbi0tXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmM9MTUwPXN0YXRpYyBpbnQgY2hhbmdlX21lbW9yeV9jb21tb24odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsXG4tLVxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTE4MC1cdCAgICAoKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKCh2b2lkICopZW5kKSBcdTAwM2VcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYzoxODE6XHQgICAgICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZyhhcmVhLVx1MDAzZWFkZHIpICYjNDM7IGFyZWEtXHUwMDNlc2l6ZSkgfHxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0xODItXHQgICAgKChhcmVhLVx1MDAzZWZsYWdzIFx1MDAyNiAoVk1fQUxMT0MgfCBWTV9BTExPV19IVUdFX1ZNQVApKSAhPSBWTV9BTExPQykpXG4tLVxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTE5NC1cdFx0dW5zaWduZWQgbG9uZyBpZHggPSAoKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKCh2b2lkICopc3RhcnQpIC1cbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYzoxOTU6XHRcdFx0XHQgICAgICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZyhhcmVhLVx1MDAzZWFkZHIpKVxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTE5Ni1cdFx0XHRcdCAgICBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi0tXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaD0zNDA9c3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2hpZ2hwYWdlX2thc2FuX3RhZ2dlZChzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaC0zNDMtXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaDozNDQ6XHRjbGVhcl9wYWdlKGthc2FuX3Jlc2V0X3RhZyhrYWRkcikpO1xuaW5jbHVkZS9saW51eC9oaWdobWVtLmgtMzQ1LVx0a3VubWFwX2xvY2FsKGthZGRyKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2thc2FuLmg9NTE0PXN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9yZWNvcmRfYXV4X3N0YWNrKHZvaWQgKnB0cikge31cbi0tXG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTE5LVxuaW5jbHVkZS9saW51eC9rYXNhbi5oOjUyMDpzdGF0aWMgaW5saW5lIHZvaWQgKmthc2FuX3Jlc2V0X3RhZyhjb25zdCB2b2lkICphZGRyKVxuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUyMS17XG5pbmNsdWRlL2xpbnV4L2thc2FuLmg6NTIyOlx0cmV0dXJuICh2b2lkICopYXJjaF9rYXNhbl9yZXNldF90YWcoYWRkcik7XG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTIzLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2thc2FuLmg9NTMyPWJvb2wga2FzYW5fcmVwb3J0KGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLFxuLS1cbmluY2x1ZGUvbGludXgva2FzYW4uaC01MzYtXG5pbmNsdWRlL2xpbnV4L2thc2FuLmg6NTM3OnN0YXRpYyBpbmxpbmUgdm9pZCAqa2FzYW5fcmVzZXRfdGFnKGNvbnN0IHZvaWQgKmFkZHIpXG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTM4LXtcbi0tXG5rZXJuZWwvZm9yay5jPTI3NT1zdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaClcbi0tXG5rZXJuZWwvZm9yay5jLTI4Mi1cbmtlcm5lbC9mb3JrLmM6MjgzOlx0dmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpO1xua2VybmVsL2ZvcmsuYy0yODQtfVxuLS1cbmtlcm5lbC9mb3JrLmM9MzMzPXN0YXRpYyBpbnQgYWxsb2NfdGhyZWFkX3N0YWNrX25vZGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBub2RlKVxuLS1cbmtlcm5lbC9mb3JrLmMtMzQ4LVxua2VybmVsL2ZvcmsuYzozNDk6XHRcdHN0YWNrID0ga2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcik7XG5rZXJuZWwvZm9yay5jLTM1MC1cbi0tXG5tbS9rYXNhbi9rYXNhbi5oPTMzMT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgYWRkcl9oYXNfbWV0YWRhdGEoY29uc3Qgdm9pZCAqYWRkcilcbm1tL2thc2FuL2thc2FuLmgtMzMyLXtcbm1tL2thc2FuL2thc2FuLmg6MzMzOlx0cmV0dXJuIChrYXNhbl9yZXNldF90YWcoYWRkcikgXHUwMDNlPVxubW0va2FzYW4va2FzYW4uaC0zMzQtXHRcdGthc2FuX3NoYWRvd190b19tZW0oKHZvaWQgKilLQVNBTl9TSEFET1dfU1RBUlQpKTtcbi0tXG5tbS9rYXNhbi9rYXNhbi5oPTQ3OT1zdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCB1OCB2YWx1ZSwgYm9vbCBpbml0KVxuLS1cbm1tL2thc2FuL2thc2FuLmgtNDg1LVxubW0va2FzYW4va2FzYW4uaDo0ODY6XHRod19zZXRfbWVtX3RhZ19yYW5nZShrYXNhbl9yZXNldF90YWcoYWRkciksIHNpemUsIHZhbHVlLCBpbml0KTtcbm1tL2thc2FuL2thc2FuLmgtNDg3LX1cbi0tXG5tbS9rYXNhbi9rYXNhbi5oPTQ4OT1zdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fdW5wb2lzb24oY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGJvb2wgaW5pdClcbi0tXG5tbS9rYXNhbi9rYXNhbi5oLTQ5Ni1cbm1tL2thc2FuL2thc2FuLmg6NDk3Olx0aHdfc2V0X21lbV90YWdfcmFuZ2Uoa2FzYW5fcmVzZXRfdGFnKGFkZHIpLCBzaXplLCB0YWcsIGluaXQpO1xubW0va2FzYW4va2FzYW4uaC00OTgtfVxuLS1cbm1tL2thc2FuL3JlcG9ydC5jPTQ3MT1zdGF0aWMgdm9pZCBwcmludF9yZXBvcnQoc3RydWN0IGthc2FuX3JlcG9ydF9pbmZvICppbmZvKVxubW0va2FzYW4vcmVwb3J0LmMtNDcyLXtcbm1tL2thc2FuL3JlcG9ydC5jOjQ3MzpcdHZvaWQgKmFkZHIgPSBrYXNhbl9yZXNldF90YWcoKHZvaWQgKilpbmZvLVx1MDAzZWFjY2Vzc19hZGRyKTtcbm1tL2thc2FuL3JlcG9ydC5jLTQ3NC1cdHU4IHRhZyA9IGdldF90YWcoKHZvaWQgKilpbmZvLVx1MDAzZWFjY2Vzc19hZGRyKTtcbi0tXG5tbS9rYXNhbi9yZXBvcnQuYz00ODk9c3RhdGljIHZvaWQgY29tcGxldGVfcmVwb3J0X2luZm8oc3RydWN0IGthc2FuX3JlcG9ydF9pbmZvICppbmZvKVxubW0va2FzYW4vcmVwb3J0LmMtNDkwLXtcbm1tL2thc2FuL3JlcG9ydC5jOjQ5MTpcdHZvaWQgKmFkZHIgPSBrYXNhbl9yZXNldF90YWcoKHZvaWQgKilpbmZvLVx1MDAzZWFjY2Vzc19hZGRyKTtcbm1tL2thc2FuL3JlcG9ydC5jLTQ5Mi1cdHN0cnVjdCBzbGFiICpzbGFiO1xuLS1cbm1tL2thc2FuL3JlcG9ydF9od190YWdzLmM9MTg9Y29uc3Qgdm9pZCAqa2FzYW5fZmluZF9maXJzdF9iYWRfYWRkcihjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9rYXNhbi9yZXBvcnRfaHdfdGFncy5jLTI2LVx0ICovXG5tbS9rYXNhbi9yZXBvcnRfaHdfdGFncy5jOjI3Olx0cmV0dXJuIGthc2FuX3Jlc2V0X3RhZyhhZGRyKTtcbm1tL2thc2FuL3JlcG9ydF9od190YWdzLmMtMjgtfVxuLS1cbm1tL2thc2FuL3JlcG9ydF9zd190YWdzLmM9MzM9Y29uc3Qgdm9pZCAqa2FzYW5fZmluZF9maXJzdF9iYWRfYWRkcihjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9rYXNhbi9yZXBvcnRfc3dfdGFncy5jLTM1LVx0dTggdGFnID0gZ2V0X3RhZyhhZGRyKTtcbm1tL2thc2FuL3JlcG9ydF9zd190YWdzLmM6MzY6XHR2b2lkICpwID0ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xubW0va2FzYW4vcmVwb3J0X3N3X3RhZ3MuYy0zNy1cdHZvaWQgKmVuZCA9IHAgJiM0Mzsgc2l6ZTtcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYz0xMjQ9dm9pZCBrYXNhbl9wb2lzb24oY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIHU4IHZhbHVlLCBib29sIGluaXQpXG4tLVxubW0va2FzYW4vc2hhZG93LmMtMTM1LVx0ICovXG5tbS9rYXNhbi9zaGFkb3cuYzoxMzY6XHRhZGRyID0ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xubW0va2FzYW4vc2hhZG93LmMtMTM3LVxuLS1cbm1tL2thc2FuL3NoYWRvdy5jPTE2Mz12b2lkIGthc2FuX3VucG9pc29uKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBib29sIGluaXQpXG4tLVxubW0va2FzYW4vc2hhZG93LmMtMTcxLVx0ICovXG5tbS9rYXNhbi9zaGFkb3cuYzoxNzI6XHRhZGRyID0ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xubW0va2FzYW4vc2hhZG93LmMtMTczLVxuLS1cbm1tL2thc2FuL3N3X3RhZ3MuYz03NT1ib29sIGthc2FuX2NoZWNrX3JhbmdlKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBib29sIHdyaXRlLFxuLS1cbm1tL2thc2FuL3N3X3RhZ3MuYy0xMDktXG5tbS9rYXNhbi9zd190YWdzLmM6MTEwOlx0dW50YWdnZWRfYWRkciA9IGthc2FuX3Jlc2V0X3RhZygoY29uc3Qgdm9pZCAqKWFkZHIpO1xubW0va2FzYW4vc3dfdGFncy5jLTExMS1cdGlmICh1bmxpa2VseSghYWRkcl9oYXNfbWV0YWRhdGEodW50YWdnZWRfYWRkcikpKVxuLS1cbm1tL2thc2FuL3N3X3RhZ3MuYz0xMjQ9Ym9vbCBrYXNhbl9ieXRlX2FjY2Vzc2libGUoY29uc3Qgdm9pZCAqYWRkcilcbi0tXG5tbS9rYXNhbi9zd190YWdzLmMtMTI2LVx0dTggdGFnID0gZ2V0X3RhZyhhZGRyKTtcbm1tL2thc2FuL3N3X3RhZ3MuYzoxMjc6XHR2b2lkICp1bnRhZ2dlZF9hZGRyID0ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xubW0va2FzYW4vc3dfdGFncy5jLTEyOC1cdHU4IHNoYWRvd19ieXRlO1xuLS1cbm1tL21lbWJsb2NrLmM9ODk3PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZnJlZV9yZXNlcnZlZF9hcmVhKHBoeXNfYWRkcl90IHN0YXJ0LCBwaHlzX2FkZHJfdCBlbmQsXG4tLVxubW0vbWVtYmxvY2suYy05MjEtXHRcdCAqL1xubW0vbWVtYmxvY2suYzo5MjI6XHRcdGRpcmVjdF9tYXBfYWRkciA9IGthc2FuX3Jlc2V0X3RhZyhkaXJlY3RfbWFwX2FkZHIpO1xubW0vbWVtYmxvY2suYy05MjMtXHRcdGlmICgodW5zaWduZWQgaW50KXBvaXNvbiBcdTAwM2M9IDB4RkYpXG4tLVxubW0vcGFnZV9wb2lzb24uYz0yMj1zdGF0aWMgdm9pZCBwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9wYWdlX3BvaXNvbi5jLTI3LVx0a2FzYW5fZGlzYWJsZV9jdXJyZW50KCk7XG5tbS9wYWdlX3BvaXNvbi5jOjI4Olx0bWVtc2V0KGthc2FuX3Jlc2V0X3RhZyhhZGRyKSwgUEFHRV9QT0lTT04sIFBBR0VfU0laRSk7XG5tbS9wYWdlX3BvaXNvbi5jLTI5LVx0a2FzYW5fZW5hYmxlX2N1cnJlbnQoKTtcbi0tXG5tbS9wYWdlX3BvaXNvbi5jPTc2PXN0YXRpYyB2b2lkIHVucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vcGFnZV9wb2lzb24uYy04Ni1cdCAqL1xubW0vcGFnZV9wb2lzb24uYzo4NzpcdGNoZWNrX3BvaXNvbl9tZW0ocGFnZSwga2FzYW5fcmVzZXRfdGFnKGFkZHIpLCBQQUdFX1NJWkUpO1xubW0vcGFnZV9wb2lzb24uYy04OC1cdGthc2FuX2VuYWJsZV9jdXJyZW50KCk7XG4tLVxubW0vc2x1Yi5jPTU2OD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZyZWVwb2ludGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIHZvaWQgKmZwKVxuLS1cbm1tL3NsdWIuYy01NzUtXG5tbS9zbHViLmM6NTc2Olx0ZnJlZXB0cl9hZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKCh2b2lkICopZnJlZXB0cl9hZGRyKTtcbm1tL3NsdWIuYy01NzctXHQqKGZyZWVwdHJfdCAqKWZyZWVwdHJfYWRkciA9IGZyZWVsaXN0X3B0cl9lbmNvZGUocywgZnAsIGZyZWVwdHJfYWRkcik7XG4tLVxubW0vc2x1Yi5jPTEwNDg9c3RhdGljIHZvaWQgcHJpbnRfc2VjdGlvbihjaGFyICpsZXZlbCwgY2hhciAqdGV4dCwgdTggKmFkZHIsXG4tLVxubW0vc2x1Yi5jLTEwNTItXHRwcmludF9oZXhfZHVtcChsZXZlbCwgdGV4dCwgRFVNUF9QUkVGSVhfQUREUkVTUyxcbm1tL3NsdWIuYzoxMDUzOlx0XHRcdDE2LCAxLCBrYXNhbl9yZXNldF90YWcoKHZvaWQgKilhZGRyKSwgbGVuZ3RoLCAxKTtcbm1tL3NsdWIuYy0xMDU0LVx0bWV0YWRhdGFfYWNjZXNzX2Rpc2FibGUoKTtcbi0tXG5tbS9zbHViLmM9MTczNj12b2lkIHNldHVwX3NsYWJfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICphZGRyKVxuLS1cbm1tL3NsdWIuYy0xNzQxLVx0bWV0YWRhdGFfYWNjZXNzX2VuYWJsZSgpO1xubW0vc2x1Yi5jOjE3NDI6XHRtZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpLCBQT0lTT05fSU5VU0UsIHNsYWJfc2l6ZShzbGFiKSk7XG5tbS9zbHViLmMtMTc0My1cdG1ldGFkYXRhX2FjY2Vzc19kaXNhYmxlKCk7XG4tLVxubW0vc2x1Yi5jPTIyODU9c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIyOTQtXHRcdGFkZHIgPSBzbGFiX2FkZHJlc3Moc2xhYikgJiM0Mzsgb2JqX2V4dHNfb2Zmc2V0X2luX3NsYWIocywgc2xhYik7XG5tbS9zbHViLmM6MjI5NTpcdFx0YWRkciA9IGthc2FuX3Jlc2V0X3RhZyhhZGRyKTtcbm1tL3NsdWIuYy0yMjk2LVx0XHRvYmpfZXh0cyA9ICh1bnNpZ25lZCBsb25nKWFkZHI7XG4tLVxubW0vc2x1Yi5jLTIzMTQtXHRcdGZvcl9lYWNoX29iamVjdChhZGRyLCBzLCBzbGFiX2FkZHJlc3Moc2xhYiksIHNsYWItXHUwMDNlb2JqZWN0cylcbm1tL3NsdWIuYzoyMzE1Olx0XHRcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgJiM0Mzsgb2Zmc2V0LCAwLCBzbGFiX29ial9leHRfc2l6ZShzbGFiKSk7XG5tbS9zbHViLmMtMjMxNi1cdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLS1cbm1tL3ZtYWxsb2MuYz0xMDk5PXN0YXRpYyBzdHJ1Y3Qgdm1hcF9hcmVhICpfX2ZpbmRfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpXG4tLVxubW0vdm1hbGxvYy5jLTExMDItXG5tbS92bWFsbG9jLmM6MTEwMzpcdGFkZHIgPSAodW5zaWduZWQgbG9uZylrYXNhbl9yZXNldF90YWcoKHZvaWQgKilhZGRyKTtcbm1tL3ZtYWxsb2MuYy0xMTA0LVxuLS1cbm1tL3ZtYWxsb2MuYz0xMTIyPV9fZmluZF92bWFwX2FyZWFfZXhjZWVkX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdClcbi0tXG5tbS92bWFsbG9jLmMtMTEyNi1cbm1tL3ZtYWxsb2MuYzoxMTI3Olx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWFkZHIpO1xubW0vdm1hbGxvYy5jLTExMjgtXG4tLVxubW0vdm1hbGxvYy5jPTQ2OTU9bG9uZyB2cmVhZF9pdGVyKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgY29uc3QgY2hhciAqYWRkciwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL3ZtYWxsb2MuYy00NzAzLVxubW0vdm1hbGxvYy5jOjQ3MDQ6XHRhZGRyID0ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xubW0vdm1hbGxvYy5jLTQ3MDUtXG4tLVxuc2NyaXB0cy9nZGIvbGludXgvbW0ucHk9MzQ9Y2xhc3MgeDg2X3BhZ2Vfb3BzKCk6XG4tLVxuc2NyaXB0cy9nZGIvbGludXgvbW0ucHktOTMtXG5zY3JpcHRzL2dkYi9saW51eC9tbS5weTo5NDogICAgZGVmIGthc2FuX3Jlc2V0X3RhZyhzZWxmLCBhZGRyKTpcbnNjcmlwdHMvZ2RiL2xpbnV4L21tLnB5LTk1LSAgICAgICAgcmV0dXJuIGFkZHJcbi0tXG5zY3JpcHRzL2dkYi9saW51eC9tbS5weT0yMDM9Y2xhc3MgYWFyY2g2NF9wYWdlX29wcygpOlxuLS1cbnNjcmlwdHMvZ2RiL2xpbnV4L21tLnB5LTM1OC1cbnNjcmlwdHMvZ2RiL2xpbnV4L21tLnB5OjM1OTogICAgZGVmIGthc2FuX3Jlc2V0X3RhZyhzZWxmLCBhZGRyKTpcbnNjcmlwdHMvZ2RiL2xpbnV4L21tLnB5LTM2MC0gICAgICAgIGlmIGNvbnN0YW50cy5MWF9DT05GSUdfS0FTQU5fU1dfVEFHUyBvciBjb25zdGFudHMuTFhfQ09ORklHX0tBU0FOX0hXX1RBR1M6XG4tLVxudG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oPTI1PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnZpcnRfdG9fcGFnZSh2b2lkICp2aXJ0KVxuLS1cbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaC0zMy1cbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaDozNDpzdGF0aWMgaW5saW5lIHZvaWQgKmthc2FuX3Jlc2V0X3RhZyhjb25zdCB2b2lkICphZGRyKVxudG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oLTM1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLQVNBTiBSZXNldCBUYWcgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIEtBU0FOIGFnYWluLCBzcGVjaWZpY2FsbHkgdGhlIHRhZyByZXNldCBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIHN0YXJ0aW5nIGJ5IGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBuYW1lbHkgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va2FzYW4uaGAgYW5kIGBpbmNsdWRlL2xpbnV4L2thc2FuLmhgLiBUaGUgY29yZSBxdWVzdGlvbiBvbiBteSBtaW5kIGlzLCB3aGF0IGV4YWN0bHkgZG9lcyBga2FzYW5fcmVzZXRfdGFnYCAqZG8qPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgS0FTQU4gZnJhbWV3b3JrLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgaW5jbHVkZS9saW51eC9rYXNhbi5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA1MTUtNTQ1LCBhcyB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IGFyZWEgd2hlcmUgdGhlIGRlZmluaXRpb24gYW5kIHJlbGV2YW50IHVzYWdlIGFyZSBkZXNjcmliZWQuIEZyb20gaGVyZSBJIGhvcGUgdG8gdW5kZXJzdGFuZCB0aGUgcHJhY3RpY2FsIGFzcGVjdHMgb2YgaG93IHRoZSB0YWcgaXMgcmVzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rYXNhbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTU6XHRcbiA1MTY6XHQjZW5kaWYgLyogQ09ORklHX0tBU0FOX0dFTkVSSUMgKi9cbiA1MTc6XHRcbiA1MTg6XHQjaWYgZGVmaW5lZChDT05GSUdfS0FTQU5fU1dfVEFHUykgfHwgZGVmaW5lZChDT05GSUdfS0FTQU5fSFdfVEFHUylcbiA1MTk6XHRcbiA1MjA6XHRzdGF0aWMgaW5saW5lIHZvaWQgKmthc2FuX3Jlc2V0X3RhZyhjb25zdCB2b2lkICphZGRyKVxuIDUyMTpcdHtcbiA1MjI6XHRcdHJldHVybiAodm9pZCAqKWFyY2hfa2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xuIDUyMzpcdH1cbiA1MjQ6XHRcbiA1MjU6XHQvKipcbiA1MjY6XHQgKiBrYXNhbl9yZXBvcnQgLSBwcmludCBhIHJlcG9ydCBhYm91dCBhIGJhZCBtZW1vcnkgYWNjZXNzIGRldGVjdGVkIGJ5IEtBU0FOXG4gNTI3Olx0ICogQGFkZHI6IGFkZHJlc3Mgb2YgdGhlIGJhZCBhY2Nlc3NcbiA1Mjg6XHQgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYmFkIGFjY2Vzc1xuIDUyOTpcdCAqIEBpc193cml0ZTogd2hldGhlciB0aGUgYmFkIGFjY2VzcyBpcyBhIHdyaXRlIG9yIGEgcmVhZFxuIDUzMDpcdCAqIEBpcDogaW5zdHJ1Y3Rpb24gcG9pbnRlciBmb3IgdGhlIGFjY2Vzc2liaWxpdHkgY2hlY2sgb3IgdGhlIGJhZCBhY2Nlc3MgaXRzZWxmXG4gNTMxOlx0ICovXG4gNTMyOlx0Ym9vbCBrYXNhbl9yZXBvcnQoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsXG4gNTMzOlx0XHRcdGJvb2wgaXNfd3JpdGUsIHVuc2lnbmVkIGxvbmcgaXApO1xuIDUzNDpcdFxuIDUzNTpcdCNlbHNlIC8qIENPTkZJR19LQVNBTl9TV19UQUdTIHx8IENPTkZJR19LQVNBTl9IV19UQUdTICovXG4gNTM2Olx0XG4gNTM3Olx0c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcbiA1Mzg6XHR7XG4gNTM5Olx0XHRyZXR1cm4gKHZvaWQgKilhZGRyO1xuIDU0MDpcdH1cbiA1NDE6XHRcbiA1NDI6XHQjZW5kaWYgLyogQ09ORklHX0tBU0FOX1NXX1RBR1MgfHwgQ09ORklHX0tBU0FOX0hXX1RBR1MqL1xuIDU0MzpcdFxuIDU0NDpcdCNpZmRlZiBDT05GSUdfS0FTQU5fSFdfVEFHU1xuIDU0NTpcdFxuIDU0NjpcdHZvaWQga2FzYW5fcmVwb3J0X2FzeW5jKHZvaWQpO1xuIDU0NzpcdFxuIDU0ODpcdCNlbmRpZiAvKiBDT05GSUdfS0FTQU5fSFdfVEFHUyAqL1xuIDU0OTpcdFxuIDU1MDpcdCNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xuIDU1MTpcdHZvaWQgX19pbml0IGthc2FuX2luaXRfZ2VuZXJpYyh2b2lkKTtcbiA1NTI6XHQjZWxzZVxuIDU1MzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9pbml0X2dlbmVyaWModm9pZCkgeyB9XG4gNTU0Olx0I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjA3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS0FTQU4gUmVzZXQgVGFnIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgc2VlIGBrYXNhbl9yZXNldF90YWcoYWRkcilgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJZiBlaXRoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUgS0FTQU4gdGFncyBhcmUgZW5hYmxlZCwgaXQmIzM5O3MgZ29pbmcgdG8gY2FsbCBgYXJjaF9rYXNhbl9yZXNldF90YWcoYWRkcilgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGlzIGlzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFydCwgc28gdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBpcyBsaWtlbHkgZ29pbmcgdG8gcmVzaWRlLiBCdXQgaWYgdGhvc2UgS0FTQU4gb3B0aW9ucyAqYXJlbiYjMzk7dCogZW5hYmxlZCwgdGhlbiB3ZSBqdXN0IGhhdmUgYSBzaW1wbGUgaW5saW5lIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgb3JpZ2luYWwgYWRkcmVzcywgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBuby1vcCwgcGFzc2luZyB0aGUgYWRkcmVzcyB0aHJvdWdoLiBNYWtlcyBzZW5zZSBmb3Igd2hlbiBLQVNBTiBpc24mIzM5O3QgaW4gdXNlLgoKQnV0Li4uIGhhbmcgb24uIFdlIG5lZWQgdG8gY29uc2lkZXIgb3VyIHRhcmdldCBhcmNoaXRlY3R1cmUsIGRvbiYjMzk7dCB3ZT8gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgb24gYW1kNjQuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBDYW4gYW1kNjQgZXZlbiBzdXBwb3J0IGVpdGhlciBgQ09ORklHX0tBU0FOX1NXX1RBR1NgIG9yIGBDT05GSUdfS0FTQU5fSFdfVEFHU2A/IEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGFueXRoaW5nIGhlcmUuIFRoZSBLY29uZmlnIGZpbGVzIHdpbGwgaGF2ZSB0aGUgYW5zd2VycyBmb3Igd2hhdCBpcyBwb3NzaWJsZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFsbG93ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLQVNBTl9TV19UQUdTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmthc2FuPTg5PWNvbmZpZyBLQVNBTl9HRU5FUklDXG4tLVxubGliL0tjb25maWcua2FzYW4tMTAzLVxubGliL0tjb25maWcua2FzYW46MTA0OmNvbmZpZyBLQVNBTl9TV19UQUdTXG5saWIvS2NvbmZpZy5rYXNhbi0xMDUtXHRib29sIFwmIzM0O1NvZnR3YXJlIFRhZy1CYXNlZCBLQVNBTlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE0MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgS2NvbmZpZy5rYXNhbiBGaWxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IHRoZSBLQVNBTiBjb25maWd1cmF0aW9uLCBzbyBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGxpYi9LY29uZmlnLmthc2FuYC4gSSBmaWd1cmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIHNob3VsZCBiZSBzb21ld2hlcmUgYXJvdW5kIGxpbmUgMTAwIHRvIDEzMC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3RhcnRzIHRvIGFwcGVhciBpbiB0aGVzZSBmaWxlcy4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gaG9sZHMgdGhlIGtleSB0byB0aGUgc3BlY2lmaWMgZGV0YWlscyBJJiMzOTttIGFmdGVyLCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgYW5kIGFueSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoYXQgcmFuZ2UuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmthc2FuJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdCAgQ29uc3VtZXMgYWJvdXQgMS84dGggb2YgYXZhaWxhYmxlIG1lbW9yeSBhdCBrZXJuZWwgc3RhcnQgYW5kIGFkZHMgYW5cbiAxMDE6XHRcdCAgb3ZlcmhlYWQgb2YgfjUwJSBmb3IgZHluYW1pYyBhbGxvY2F0aW9ucy5cbiAxMDI6XHRcdCAgVGhlIHBlcmZvcm1hbmNlIHNsb3dkb3duIGlzIH54My5cbiAxMDM6XHRcbiAxMDQ6XHRjb25maWcgS0FTQU5fU1dfVEFHU1xuIDEwNTpcdFx0Ym9vbCBcJiMzNDtTb2Z0d2FyZSBUYWctQmFzZWQgS0FTQU5cJiMzNDtcbiAxMDY6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX0tBU0FOX1NXX1RBR1MgXHUwMDI2XHUwMDI2IENDX0hBU19LQVNBTl9TV19UQUdTXG4gMTA3Olx0XHRkZXBlbmRzIG9uIENDX0hBU19XT1JLSU5HX05PU0FOSVRJWkVfQUREUkVTU1xuIDEwODpcdFx0c2VsZWN0IFNMVUJfREVCVUdcbiAxMDk6XHRcdHNlbGVjdCBDT05TVFJVQ1RPUlNcbiAxMTA6XHRcdGhlbHBcbiAxMTE6XHRcdCAgRW5hYmxlcyBTb2Z0d2FyZSBUYWctQmFzZWQgS0FTQU4uXG4gMTEyOlx0XG4gMTEzOlx0XHQgIFJlcXVpcmVzIEdDQyAxMSYjNDM7IG9yIENsYW5nLlxuIDExNDpcdFxuIDExNTpcdFx0ICBTdXBwb3J0ZWQgb25seSBvbiBhcm02NCBDUFVzIGFuZCByZWxpZXMgb24gVG9wIEJ5dGUgSWdub3JlLlxuIDExNjpcdFxuIDExNzpcdFx0ICBDb25zdW1lcyBhYm91dCAxLzE2dGggb2YgYXZhaWxhYmxlIG1lbW9yeSBhdCBrZXJuZWwgc3RhcnQgYW5kXG4gMTE4Olx0XHQgIGFkZCBhbiBvdmVyaGVhZCBvZiB+MjAlIGZvciBkeW5hbWljIGFsbG9jYXRpb25zLlxuIDExOTpcdFxuIDEyMDpcdFx0ICBNYXkgcG90ZW50aWFsbHkgaW50cm9kdWNlIHByb2JsZW1zIHJlbGF0ZWQgdG8gcG9pbnRlciBjYXN0aW5nIGFuZFxuIDEyMTpcdFx0ICBjb21wYXJpc29uLCBhcyBpdCBlbWJlZHMgYSB0YWcgaW50byB0aGUgdG9wIGJ5dGUgb2YgZWFjaCBwb2ludGVyLlxuIDEyMjpcdFxuIDEyMzpcdGNvbmZpZyBLQVNBTl9IV19UQUdTXG4gMTI0Olx0XHRib29sIFwmIzM0O0hhcmR3YXJlIFRhZy1CYXNlZCBLQVNBTlwmIzM0O1xuIDEyNTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfS0FTQU5fSFdfVEFHU1xuIDEyNjpcdFx0aGVscFxuIDEyNzpcdFx0ICBFbmFibGVzIEhhcmR3YXJlIFRhZy1CYXNlZCBLQVNBTi5cbiAxMjg6XHRcbiAxMjk6XHRcdCAgUmVxdWlyZXMgR0NDIDEwJiM0Mzsgb3IgQ2xhbmcgMTImIzQzOy5cbiAxMzA6XHRcbiAxMzE6XHRcdCAgU3VwcG9ydGVkIG9ubHkgb24gYXJtNjQgQ1BVcyBzdGFydGluZyBmcm9tIEFSTXY4LjUgYW5kIHJlbGllcyBvblxuIDEzMjpcdFx0ICBNZW1vcnkgVGFnZ2luZyBFeHRlbnNpb24gYW5kIFRvcCBCeXRlIElnbm9yZS5cbiAxMzM6XHRcbiAxMzQ6XHRcdCAgQ29uc3VtZXMgYWJvdXQgMS8zMm5kIG9mIGF2YWlsYWJsZSBtZW1vcnkuXG4gMTM1Olx0XG4gMTM2Olx0XHQgIE1heSBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgcHJvYmxlbXMgcmVsYXRlZCB0byBwb2ludGVyIGNhc3RpbmcgYW5kXG4gMTM3Olx0XHQgIGNvbXBhcmlzb24sIGFzIGl0IGVtYmVkcyBhIHRhZyBpbnRvIHRoZSB0b3AgYnl0ZSBvZiBlYWNoIHBvaW50ZXIuXG4gMTM4Olx0XG4gMTM5Olx0ZW5kY2hvaWNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTc5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQWRkcmVzc1Nhbml0aXplciAoS0FTQU4pIFRhZ2dpbmcgRmVhdHVyZSBBc3Nlc3NtZW50KioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIG1lbW9yeSBzYWZldHkgd29yaywgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBsYXkgb2YgdGhlIGxhbmQgcmVnYXJkaW5nIEtBU0FOIHRhZ2dpbmcgc3VwcG9ydCBvbiB0aGlzIGFyY2hpdGVjdHVyZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGFyZSB3ZSBkZWFsaW5nIHdpdGggYSBzb2Z0d2FyZS1iYXNlZCBvciBoYXJkd2FyZS1iYXNlZCB0YWdnaW5nIGltcGxlbWVudGF0aW9uPyBUaGUgZmlyc3QgdGhpbmcgdG8gY29uZmlybSBpcyB3aGV0aGVyIHRoZSBhcmNoaXRlY3R1cmUgZXZlbiAqZGVmaW5lcyogYEhBVkVfQVJDSF9LQVNBTl9TV19UQUdTYCBhbmQgYEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTYC4gVW5kZXJzdGFuZGluZyB3aGljaCB0YWdnaW5nIG1vZGUgaXMgYXZhaWxhYmxlIGlzIGFic29sdXRlbHkgY3JpdGljYWwuIEl0IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgcGVyZm9ybWFuY2UgcHJvZmlsZSBhbmQsIGZyYW5rbHksIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBhcHByb2FjaC4gU29mdHdhcmUtYmFzZWQgdGFnZ2luZyBpcyBvYnZpb3VzbHkgbGVzcyBwZXJmb3JtYW50IGJ1dCBtYXkgYmUgdGhlIG9ubHkgb3B0aW9uIGluIHNvbWUgY2FzZXMuIEhhcmR3YXJlLWJhc2VkLCBvbiB0aGUgb3RoZXIgaGFuZCwgKmNvdWxkKiBicmluZyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgYnkgb2ZmbG9hZGluZyB0aGUgdGFnZ2luZyB3b3JrIHRvIHNwZWNpYWxpemVkIGhhcmR3YXJlLCBpZiBzdXBwb3J0ZWQsIG9mIGNvdXJzZS4gU28sIGxldOKAmXMgc2VlIHdoYXQgd2UmIzM5O3JlIGFjdHVhbGx5IHdvcmtpbmcgd2l0aCBmaXJzdC4gRGV0ZXJtaW5pbmcgdGhlIHByZXNlbmNlIGFuZCBtZWFuaW5nIG9mIHRob3NlIHR3byBLY29uZmlnIHN5bWJvbHMgaXMgdGhlIGtleSBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX0FSQ0hfS0FTQU4uKlRBR1MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE2MC1cdHNlbGVjdCBIQVZFX0FSQ0hfS0FTQU5fVk1BTExPQ1xuYXJjaC9hcm02NC9LY29uZmlnOjE2MTpcdHNlbGVjdCBIQVZFX0FSQ0hfS0FTQU5fU1dfVEFHU1xuYXJjaC9hcm02NC9LY29uZmlnOjE2MjpcdHNlbGVjdCBIQVZFX0FSQ0hfS0FTQU5fSFdfVEFHUyBpZiBBUk02NF9NVEVcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjMtXHQjIFNvbWUgaW5zdHJ1bWVudGF0aW9uIG1heSBiZSB1bnNvdW5kLCBoZW5jZSBFWFBFUlRcbi0tXG5saWIvS2NvbmZpZy5rYXNhbj00PWNvbmZpZyBIQVZFX0FSQ0hfS0FTQU5cbi0tXG5saWIvS2NvbmZpZy5rYXNhbi02LVxubGliL0tjb25maWcua2FzYW46Nzpjb25maWcgSEFWRV9BUkNIX0tBU0FOX1NXX1RBR1NcbmxpYi9LY29uZmlnLmthc2FuLTgtXHRib29sXG5saWIvS2NvbmZpZy5rYXNhbi05LVxubGliL0tjb25maWcua2FzYW46MTA6Y29uZmlnIEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTXG5saWIvS2NvbmZpZy5rYXNhbi0xMS1cdGJvb2xcbi0tXG5saWIvS2NvbmZpZy5rYXNhbj00Nj1tZW51Y29uZmlnIEtBU0FOXG4tLVxubGliL0tjb25maWcua2FzYW4tNDgtXHRkZXBlbmRzIG9uICgoKEhBVkVfQVJDSF9LQVNBTiBcdTAwMjZcdTAwMjYgQ0NfSEFTX0tBU0FOX0dFTkVSSUMpIHx8IFxcXG5saWIvS2NvbmZpZy5rYXNhbjo0OTpcdFx0ICAgICAoSEFWRV9BUkNIX0tBU0FOX1NXX1RBR1MgXHUwMDI2XHUwMDI2IENDX0hBU19LQVNBTl9TV19UQUdTKSkgXHUwMDI2XHUwMDI2IFxcXG5saWIvS2NvbmZpZy5rYXNhbi01MC1cdFx0ICAgIENDX0hBU19XT1JLSU5HX05PU0FOSVRJWkVfQUREUkVTUykgfHwgXFxcbmxpYi9LY29uZmlnLmthc2FuOjUxOlx0XHQgICBIQVZFX0FSQ0hfS0FTQU5fSFdfVEFHU1xubGliL0tjb25maWcua2FzYW4tNTItXHRkZXBlbmRzIG9uIFNZU0ZTIFx1MDAyNlx1MDAyNiAhU0xVQl9USU5ZXG4tLVxubGliL0tjb25maWcua2FzYW49MTA0PWNvbmZpZyBLQVNBTl9TV19UQUdTXG5saWIvS2NvbmZpZy5rYXNhbi0xMDUtXHRib29sIFwmIzM0O1NvZnR3YXJlIFRhZy1CYXNlZCBLQVNBTlwmIzM0O1xubGliL0tjb25maWcua2FzYW46MTA2Olx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfS0FTQU5fU1dfVEFHUyBcdTAwMjZcdTAwMjYgQ0NfSEFTX0tBU0FOX1NXX1RBR1NcbmxpYi9LY29uZmlnLmthc2FuLTEwNy1cdGRlcGVuZHMgb24gQ0NfSEFTX1dPUktJTkdfTk9TQU5JVElaRV9BRERSRVNTXG4tLVxubGliL0tjb25maWcua2FzYW49MTIzPWNvbmZpZyBLQVNBTl9IV19UQUdTXG5saWIvS2NvbmZpZy5rYXNhbi0xMjQtXHRib29sIFwmIzM0O0hhcmR3YXJlIFRhZy1CYXNlZCBLQVNBTlwmIzM0O1xubGliL0tjb25maWcua2FzYW46MTI1Olx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfS0FTQU5fSFdfVEFHU1xubGliL0tjb25maWcua2FzYW4tMTI2LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk0MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIEtBU0FOIFRhZyBTZWxlY3Rpb24gb24geDg2L2FtZDY0KioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgS0FTQU4gb3B0aW9uczogYEhBVkVfQVJDSF9LQVNBTl9TV19UQUdTYCBhbmQgYEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTYC4gVGhlIHRleHQgKnNheXMqIHRoZXkmIzM5O3JlIE9OTFkgZm9yIEFSTTY0LCB3aGljaCByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoaXMsIGJlY2F1c2UgdGhpcyBjb3VsZCBhZmZlY3QgdGhpbmdzIGluIG15IHg4Ni9hbWQ2NCB3b3JrLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHNvbGlkLCBzbyBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGNvcnJlY3QuIEnigJlsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgdmVyaWZ5aW5nIHdoZXRoZXIgeDg2IHNlbGVjdHMgZWl0aGVyIG9mIHRob3NlIEtBU0FOIG9wdGlvbnMuIEkgbmVlZCB0byBzZWUgaWYgdGhlIHg4NiBhcmNoaXRlY3R1cmUgZXhwbGljaXRseSBpbmNsdWRlcyBvciBleGNsdWRlcyB0aGVzZSBmZWF0dXJlcy4gQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUgYW5kIHNlZSB3aGF0IGl0IGhhcyB0byBzYXkuIE5vIGFzc3VtcHRpb25zLCBqdXN0IGNvbmNyZXRlIGV2aWRlbmNlLCB0aGF0JiMzOTtzIHRoZSBvbmx5IHdheSB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9BUkNIX0tBU0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xOTgtXHRzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUxfUkVMQVRJVkVcbmFyY2gveDg2L0tjb25maWc6MTk5Olx0c2VsZWN0IEhBVkVfQVJDSF9LQVNBTlx0XHRcdGlmIFg4Nl82NFxuYXJjaC94ODYvS2NvbmZpZzoyMDA6XHRzZWxlY3QgSEFWRV9BUkNIX0tBU0FOX1ZNQUxMT0NcdFx0aWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnLTIwMS1cdHNlbGVjdCBIQVZFX0FSQ0hfS0ZFTkNFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDAzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtBU0FOIEltcGFjdCBvbiBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCBvbiB4ODZfNjQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBjaGFuZ2UgYW5kIHRyeWluZyB0byBhc3Nlc3MgaXRzIGltcGFjdCwgc3BlY2lmaWNhbGx5IG9uIHg4Nl82NCAoYW1kNjQpLiBJdCBhcHBlYXJzIHRoZSBjaGFuZ2UgaW52b2x2ZXMgd3JhcHBpbmcgYHZtX2FyZWEtJmd0O2FkZHJgIHdpdGggYGthc2FuX3Jlc2V0X3RhZ2AgYmVmb3JlIHBhc3NpbmcgaXQgdG8gYHZmcmVlYC4gVGhlIGluaXRpYWwgYXNzdW1wdGlvbiwgYmFzZWQgb24gdGhlIGB4ODZfNjRgIGNvbmZpZ3VyYXRpb24gb25seSBlbmFibGluZyBgSEFWRV9BUkNIX0tBU0FOYCBhbmQgYEhBVkVfQVJDSF9LQVNBTl9WTUFMTE9DYCwgaXMgdGhhdCBuZWl0aGVyIGBDT05GSUdfS0FTQU5fU1dfVEFHU2Agbm9yIGBDT05GSUdfS0FTQU5fSFdfVEFHU2AgYXJlIGVuYWJsZWQuIFRoaXMgbWVhbnMgb24gYW1kNjQsIHRoZSBga2FzYW5fcmVzZXRfdGFnYCBmdW5jdGlvbiBlZmZlY3RpdmVseSBiZWNvbWVzIGEgbm8tb3A6IGBrYXNhbl9yZXNldF90YWcoeClgIHNpbXBseSBldmFsdWF0ZXMgdG8gYCh2b2lkICopeGAuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgdGhvdWdoLgoKQ2hlY2tpbmcgYGluY2x1ZGUvbGludXgva2FzYW4uaGAgY29uZmlybXMgdGhhdCBpZiBuZWl0aGVyIGBDT05GSUdfS0FTQU5fU1dfVEFHU2Agbm9yIGBDT05GSUdfS0FTQU5fSFdfVEFHU2AgYXJlIGRlZmluZWQsIHRoZW4gYGthc2FuX3Jlc2V0X3RhZ2AgaXMgZGVmaW5lZCBhcyBhIGNhc3QuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBgYXJjaF9rYXNhbl9yZXNldF90YWdgIGlzbiYjMzk7dCB1c2VkLiBPbiB4ODYsIHRoZXJlIGlzIG5vIGBhcmNoX2thc2FuX3Jlc2V0X3RhZ2AsIHNpbmNlIHRhZy1iYXNlZCBLQVNBTiBpcyBhbiBBUk02NC1zcGVjaWZpYyBmZWF0dXJlIChNVEUvVEJJKS4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGRvZXMgdGhpcyBjaGFuZ2Ugd2FycmFudCBhIGZ1enppbmcgcGFzcz8gVGhlIHJ1bGVzIHN0YXRlICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllcyYjMzQ7LiBPbmUgcG90ZW50aWFsIGNhdGVnb3J5IGlzICYjMzQ7Q29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlJiMzNDsuIElzIHRoaXMgcmVsZXZhbnQ/CgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGUgYWZmZWN0ZWQgY29kZSBwYXRoLCBzcGVjaWZpY2FsbHkgYHRocmVhZF9zdGFja19mcmVlX3JjdWAgd2l0aGluIGBrZXJuZWwvZm9yay5jYCwgaXMgY29tcGlsZWQgb24gYW1kNjQuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBpdCBpcy4gVGhlbiB0aGUgY2hhbmdlICptdXN0KiBhbHRlciBsb2dpYyBmb3IgYW1kNjQuCgpPa2F5LCBsZXQmIzM5O3MgdHJhY2UgdGhlIGZsb3cuIEJlZm9yZSwgdGhlIGNvZGUgd2FzIGB2ZnJlZSh2bV9hcmVhLSZndDthZGRyKTtgIEFmdGVyIHRoZSBwYXRjaCwgaXQgYmVjb21lcyBgdmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtJmd0O2FkZHIpKTtgLiBCZWNhdXNlIG9uIGFtZDY0LCBga2FzYW5fcmVzZXRfdGFnKHgpYCBldmFsdWF0ZXMgdG8gYCh2b2lkICopeGAsIHRoZSBuZXQgZWZmZWN0IG9uIGFtZDY0IGFwcGVhcnMgdG8gYmUgbm8gY2hhbmdlOiBgdmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtJmd0O2FkZHIpKWAgYmVjb21lcyBgdmZyZWUodm1fYXJlYS0mZ3Q7YWRkcilgLgoKTGV0IG1lIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIHR5cGUgb2YgYHZtX2FyZWFgIGlzIGBzdHJ1Y3Qgdm1fc3RydWN0ICpgIGFuZCB0aGUgdHlwZSBvZiBgdm1fYXJlYS0mZ3Q7YWRkcmAgaXMgYHZvaWQgKmAuIFNvLCBga2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtJmd0O2FkZHIpYCByZXR1cm5zIGAodm9pZCAqKSh2bV9hcmVhLSZndDthZGRyKWAuIFRoZXJlZm9yZSwgYHZmcmVlKGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLSZndDthZGRyKSlgIGlzLCBhbmQgSSByZXBlYXQsIGlzIGxpdGVyYWxseSBgdmZyZWUodm1fYXJlYS0mZ3Q7YWRkcilgLgoKSSBzaG91bGQgYWxzbyBleGFtaW5lIHdoYXQgaGFwcGVuZWQgaW4gYXJtNjQgdmVyc3VzIGFtZDY0LCBhbmQgd2hhdCB0aGUgb3JpZ2luYWwgYnVnIHRoYXQgcHJvbXB0ZWQgdGhlIGNoYW5nZSB3YXMuIEkgbmVlZCB0byBiZSBzdXJlLiBIb3dldmVyLCB0aGUgbG9naWMgY2xlYXJseSBkb2VzIG5vdCBjaGFuZ2UgY29tcGlsZWQgb3V0cHV0IGZvciBhbWQ2NC4gTG9va2luZyBhdCBsaW5lIDM0OSBvZiBga2VybmVsL2ZvcmsuY2AsIEkgc2VlIGEgdXNlIG9mIGBrYXNhbl9yZXNldF90YWdgIHRoYXQmIzM5O3MgbGlrZWx5IHRoZSBmb2N1cyBvZiB0aGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMDpcdFx0cmV0dXJuIHJldDtcbiAzMzE6XHR9XG4gMzMyOlx0XG4gMzMzOlx0c3RhdGljIGludCBhbGxvY190aHJlYWRfc3RhY2tfbm9kZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IG5vZGUpXG4gMzM0Olx0e1xuIDMzNTpcdFx0c3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYTtcbiAzMzY6XHRcdHZvaWQgKnN0YWNrO1xuIDMzNzpcdFxuIDMzODpcdFx0dm1fYXJlYSA9IGFsbG9jX3RocmVhZF9zdGFja19ub2RlX2Zyb21fY2FjaGUodHNrLCBub2RlKTtcbiAzMzk6XHRcdGlmICh2bV9hcmVhKSB7XG4gMzQwOlx0XHRcdGlmIChtZW1jZ19jaGFyZ2Vfa2VybmVsX3N0YWNrKHZtX2FyZWEpKSB7XG4gMzQxOlx0XHRcdFx0dmZyZWUodm1fYXJlYS1cdTAwM2VhZGRyKTtcbiAzNDI6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzNDM6XHRcdFx0fVxuIDM0NDpcdFxuIDM0NTpcdFx0XHQvKiBSZXNldCBzdGFjayBtZXRhZGF0YS4gKi9cbiAzNDY6XHRcdFx0aWYgKCFrYXNhbl9od190YWdzX2VuYWJsZWQoKSlcbiAzNDc6XHRcdFx0XHRrYXNhbl91bnBvaXNvbl9yYW5nZSh2bV9hcmVhLVx1MDAzZWFkZHIsIFRIUkVBRF9TSVpFKTtcbiAzNDg6XHRcbiAzNDk6XHRcdFx0c3RhY2sgPSBrYXNhbl9yZXNldF90YWcodm1fYXJlYS1cdTAwM2VhZGRyKTtcbiAzNTA6XHRcbiAzNTE6XHRcdFx0LyogQ2xlYXIgc3RhbGUgcG9pbnRlcnMgZnJvbSByZXVzZWQgc3RhY2suICovXG4gMzUyOlx0XHRcdGNsZWFyX3BhZ2VzKHZtX2FyZWEtXHUwMDNlYWRkciwgdm1fYXJlYS1cdTAwM2Vucl9wYWdlcyk7XG4gMzUzOlx0XG4gMzU0Olx0XHRcdHRzay1cdTAwM2VzdGFja192bV9hcmVhID0gdm1fYXJlYTtcbiAzNTU6XHRcdFx0dHNrLVx1MDAzZXN0YWNrID0gc3RhY2s7XG4gMzU2Olx0XHRcdHJldHVybiAwO1xuIDM1NzpcdFx0fVxuIDM1ODpcdFxuIDM1OTpcdFx0c3RhY2sgPSBfX3ZtYWxsb2Nfbm9kZShUSFJFQURfU0laRSwgVEhSRUFEX0FMSUdOLFxuIDM2MDpcdFx0XHRcdFx0ICAgICBHRlBfVk1BUF9TVEFDSyxcbiAzNjE6XHRcdFx0XHRcdCAgICAgbm9kZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiAzNjI6XHRcdGlmICghc3RhY2spXG4gMzYzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM2NDpcdFxuIDM2NTpcdFx0dm1fYXJlYSA9IGZpbmRfdm1fYXJlYShzdGFjayk7XG4gMzY2Olx0XHRpZiAobWVtY2dfY2hhcmdlX2tlcm5lbF9zdGFjayh2bV9hcmVhKSkge1xuIDM2NzpcdFx0XHR2ZnJlZShzdGFjayk7XG4gMzY4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM2OTpcdFx0fVxuIDM3MDpcdFx0LypcbiAzNzE6XHRcdCAqIFdlIGNhbiYjMzk7dCBjYWxsIGZpbmRfdm1fYXJlYSgpIGluIGludGVycnVwdCBjb250ZXh0LCBhbmRcbiAzNzI6XHRcdCAqIGZyZWVfdGhyZWFkX3N0YWNrKCkgY2FuIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCxcbiAzNzM6XHRcdCAqIHNvIGNhY2hlIHRoZSB2bV9zdHJ1Y3QuXG4gMzc0Olx0XHQgKi9cbiAzNzU6XHRcdHRzay1cdTAwM2VzdGFja192bV9hcmVhID0gdm1fYXJlYTtcbiAzNzY6XHRcdHN0YWNrID0ga2FzYW5fcmVzZXRfdGFnKHN0YWNrKTtcbiAzNzc6XHRcdHRzay1cdTAwM2VzdGFjayA9IHN0YWNrO1xuIDM3ODpcdFx0cmV0dXJuIDA7XG4gMzc5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA4NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgTXlzdGVyeSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBMaW5lIDIxMCBvZiBga2VybmVsL2ZvcmsuY2DigKYgbGV0JiMzOTtzIHNlZSwgdGhlcmUmIzM5O3MgdGhpcyBgc3RydWN0IHZtX3N0YWNrYCBkZWZpbmVkLiBJdCYjMzk7cyBnb3QgYW4gYHJjdV9oZWFkYCBhbmQgYSBgdm1fc3RydWN0YCBwb2ludGVyLiBJbnRlcmVzdGluZy4gTm93LCBsb29raW5nIGZ1cnRoZXIgZG93biwgYXQgYGZyZWVfdm1fc3RhY2tfY2FjaGVgIChsaW5lIDI5NCkgYW5kIGB0aHJlYWRfc3RhY2tfZnJlZV9yY3VgLCBzb21ldGhpbmcmIzM5O3Mgbm90IHF1aXRlIGNsaWNraW5nLiBXaHkgaXMgdGhlcmUgYSBgdmZyZWUodm1fYXJlYS0mZ3Q7YWRkcik7YCBjYWxsIGluIGBmcmVlX3ZtX3N0YWNrX2NhY2hlYD8gVGhhdCYjMzk7cyB0aGUga2V5LgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhpc3Rvcnkgb2YgdGhpcy4gV2FzIHRoaXMgaW50cm9kdWNlZCBpbiBhIHNwZWNpZmljIGNvbW1pdCBvciBpcyB0aGVyZSBhIHBhdGNoIHJlbGF0ZWQgdG8gdGhpcz8gSSB3aXNoIEkgaGFkIGBnaXQgbG9nYCB0byBjaGVjayB0aGF0IGRpcmVjdGx5LiBObyB3b3JyaWVzLiBJIGNhbiBzZWFyY2ggdGhlIGtlcm5lbCBjb2RlIGZvciB0aGUgcGF0Y2ggdGl0bGUgb3IgcmVsYXRlZCBjb21taXRzLCBpZiBJIGNhbiBmaW5kIHRoZW0uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmVmb2N1cy4gTGV0JiMzOTtzIHNlYXJjaCBhZ2FpbiBmb3IgYHZtX3N0YWNrYCBpbiBga2VybmVsL2ZvcmsuY2AgYW5kIHRyeSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGlzIGhhbmRsZWQuIExldCYjMzk7cyBsb29rIGF0IGBmcmVlX3ZtX3N0YWNrX2NhY2hlYCAobGluZXMgMjk0LTMxMCkuIE9rYXksIGhlcmUgaXQgaXM6IFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCBhIHBlci1DUFUgY2FjaGUgb2YgYHZtX3N0cnVjdGAgcG9pbnRlcnMgYW5kIGNhbGxzIGB2ZnJlZWAgb24gdGhlIGFzc29jaWF0ZWQgYWRkcmVzcyBpZiB0aGUgYHZtX2FyZWFgIGlzIG5vdCBudWxsLCBhbmQgdGhlbiBzZXRzIHRoZSBwb2ludGVyIHRvIG51bGwuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIGBmcmVlX3RocmVhZF9zdGFja2AsIGxpbmVzIDQzMC00OTAuLi5MZXQmIzM5O3MgcmVhZCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQzMDpcdHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdGhyZWFkX3N0YWNrX2NhY2hlO1xuIDQzMTpcdFxuIDQzMjpcdHN0YXRpYyB2b2lkIHRocmVhZF9zdGFja19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJoKVxuIDQzMzpcdHtcbiA0MzQ6XHRcdGttZW1fY2FjaGVfZnJlZSh0aHJlYWRfc3RhY2tfY2FjaGUsIHJoKTtcbiA0MzU6XHR9XG4gNDM2Olx0XG4gNDM3Olx0c3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX2RlbGF5ZWRfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiA0Mzg6XHR7XG4gNDM5Olx0XHRzdHJ1Y3QgcmN1X2hlYWQgKnJoID0gdHNrLVx1MDAzZXN0YWNrO1xuIDQ0MDpcdFxuIDQ0MTpcdFx0Y2FsbF9yY3UocmgsIHRocmVhZF9zdGFja19mcmVlX3JjdSk7XG4gNDQyOlx0fVxuIDQ0MzpcdFxuIDQ0NDpcdHN0YXRpYyBpbnQgYWxsb2NfdGhyZWFkX3N0YWNrX25vZGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBub2RlKVxuIDQ0NTpcdHtcbiA0NDY6XHRcdHVuc2lnbmVkIGxvbmcgKnN0YWNrO1xuIDQ0NzpcdFx0c3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jX25vZGUodGhyZWFkX3N0YWNrX2NhY2hlLCBUSFJFQURJTkZPX0dGUCwgbm9kZSk7XG4gNDQ4Olx0XHRzdGFjayA9IGthc2FuX3Jlc2V0X3RhZyhzdGFjayk7XG4gNDQ5Olx0XHR0c2stXHUwMDNlc3RhY2sgPSBzdGFjaztcbiA0NTA6XHRcdHJldHVybiBzdGFjayA/IDAgOiAtRU5PTUVNO1xuIDQ1MTpcdH1cbiA0NTI6XHRcbiA0NTM6XHRzdGF0aWMgdm9pZCBmcmVlX3RocmVhZF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiA0NTQ6XHR7XG4gNDU1Olx0XHR0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlKHRzayk7XG4gNDU2Olx0XHR0c2stXHUwMDNlc3RhY2sgPSBOVUxMO1xuIDQ1NzpcdH1cbiA0NTg6XHRcbiA0NTk6XHR2b2lkIHRocmVhZF9zdGFja19jYWNoZV9pbml0KHZvaWQpXG4gNDYwOlx0e1xuIDQ2MTpcdFx0dGhyZWFkX3N0YWNrX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGVfdXNlcmNvcHkoXCYjMzQ7dGhyZWFkX3N0YWNrXCYjMzQ7LFxuIDQ2MjpcdFx0XHRcdFx0XHRUSFJFQURfU0laRSwgVEhSRUFEX1NJWkUsIDAsIDAsXG4gNDYzOlx0XHRcdFx0XHRcdFRIUkVBRF9TSVpFLCBOVUxMKTtcbiA0NjQ6XHRcdEJVR19PTih0aHJlYWRfc3RhY2tfY2FjaGUgPT0gTlVMTCk7XG4gNDY1Olx0fVxuIDQ2NjpcdFxuIDQ2NzpcdCNlbmRpZiAvKiBUSFJFQURfU0laRSBcdTAwM2U9IFBBR0VfU0laRSAqL1xuIDQ2ODpcdCNlbmRpZiAvKiBDT05GSUdfVk1BUF9TVEFDSyAqL1xuIDQ2OTpcdFxuIDQ3MDpcdC8qIFNMQUIgY2FjaGUgZm9yIHNpZ25hbF9zdHJ1Y3Qgc3RydWN0dXJlcyAodHNrLVx1MDAzZXNpZ25hbCkgKi9cbiA0NzE6XHRzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnNpZ25hbF9jYWNoZXA7XG4gNDcyOlx0XG4gNDczOlx0LyogU0xBQiBjYWNoZSBmb3Igc2lnaGFuZF9zdHJ1Y3Qgc3RydWN0dXJlcyAodHNrLVx1MDAzZXNpZ2hhbmQpICovXG4gNDc0Olx0c3RydWN0IGttZW1fY2FjaGUgKnNpZ2hhbmRfY2FjaGVwO1xuIDQ3NTpcdFxuIDQ3NjpcdC8qIFNMQUIgY2FjaGUgZm9yIGZpbGVzX3N0cnVjdCBzdHJ1Y3R1cmVzICh0c2stXHUwMDNlZmlsZXMpICovXG4gNDc3Olx0c3RydWN0IGttZW1fY2FjaGUgKmZpbGVzX2NhY2hlcDtcbiA0Nzg6XHRcbiA0Nzk6XHQvKiBTTEFCIGNhY2hlIGZvciBmc19zdHJ1Y3Qgc3RydWN0dXJlcyAodHNrLVx1MDAzZWZzKSAqL1xuIDQ4MDpcdHN0cnVjdCBrbWVtX2NhY2hlICpmc19jYWNoZXA7XG4gNDgxOlx0XG4gNDgyOlx0LyogU0xBQiBjYWNoZSBmb3IgbW1fc3RydWN0IHN0cnVjdHVyZXMgKHRzay1cdTAwM2VtbSkgKi9cbiA0ODM6XHRzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1tX2NhY2hlcDtcbiA0ODQ6XHRcbiA0ODU6XHRzdGF0aWMgdm9pZCBhY2NvdW50X2tlcm5lbF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGFjY291bnQpXG4gNDg2Olx0e1xuIDQ4NzpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1ZNQVBfU1RBQ0spKSB7XG4gNDg4Olx0XHRcdHN0cnVjdCB2bV9zdHJ1Y3QgKnZtX2FyZWEgPSB0YXNrX3N0YWNrX3ZtX2FyZWEodHNrKTtcbiA0ODk6XHRcdFx0aW50IGk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzkxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpc3NlY3RpbmcgVGhyZWFkIFN0YWNrIEFsbG9jYXRpb24gYW5kIEZyZWVpbmcgd2l0aCBLQVNBTioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYHRocmVhZF9zdGFja19mcmVlX3JjdWAgYW5kIGltbWVkaWF0ZWx5IGhhdmUgYSBxdWVzdGlvbi4gV2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlYD8gTGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGxpbmVzIDI3MC0zMDAgaW4gYGtlcm5lbC9mb3JrLmNgLiBBaCwgZ290IGl0LgoKTm93LCBmb2N1c2luZyBvbiBgdGhyZWFkX3N0YWNrX2RlbGF5ZWRfZnJlZWAsIGB0c2stJmd0O3N0YWNrYCBpcyBhc3NpZ25lZCB0byBhIGB2bV9zdGFja2Agc3RydWN0LiBJbnRlcmVzdGluZy4gVGhlbiBJIGdvIGJhY2sgdG8gc2VlIGBhbGxvY190aHJlYWRfc3RhY2tfbm9kZWAgYW5kIG5vdGUgdGhhdCBgdHNrLSZndDtzdGFja2AgaXMgdGhlbiBhc3NpZ25lZCB0aGUgdmFsdWUgb2YgYHN0YWNrYC4gQmFjayBpbiBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCwgYHZtX3N0YWNrLSZndDtzdGFja192bV9hcmVhYCBlcXVhbHMgYHRzay0mZ3Q7c3RhY2tfdm1fYXJlYWAuIE9rYXksIGFsbCBvZiB0aGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4KCkJ1dCB3aHkgdGhlIGNoYW5nZSBpbiBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCBmcm9tIGB2ZnJlZSh2bV9hcmVhLSZndDthZGRyKWAgdG8gYHZmcmVlKGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLSZndDthZGRyKSlgPyBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uLiBXaGVyZSBkb2VzIGB2bV9hcmVhLSZndDthZGRyYCBjb21lIGZyb20/IEkgbmVlZCB0byB0cmFjZSBpdCBiYWNrLgoKSSBzZWUgdGhhdCBgdm1fYXJlYS0mZ3Q7YWRkcmAgaXMgYXNzaWduZWQgdGhlIGFkZHJlc3MgcmV0dXJuZWQgYnkgYF9fdm1hbGxvY19ub2RlYCB3aXRoaW4gYF9fdm1hbGxvY19ub2RlYCBpdHNlbGYuIE5vdywgY29uc2lkZXJpbmcgS0FTQU4gd2l0aCB0YWdzIChsaWtlIEtBU0FOX1NXX1RBR1Mgb3IgSFcgdGFncyBvbiBBUk02NCksIGRvZXMgYHZtX2FyZWEtJmd0O2FkZHJgIGhhdmUgYSB0YWcgb3Igbm90PyBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIGl0LgoKQmFjayBpbiBgYWxsb2NfdGhyZWFkX3N0YWNrX25vZGVgLCBJIHNlZSBgc3RhY2sgPSBfX3ZtYWxsb2Nfbm9kZSguLi4pYCBhbmQgdGhlIHVzZSBvZiBgR0ZQX1ZNQVBfU1RBQ0tgIHdpdGggYF9fR0ZQX1NLSVBfS0FTQU5gLiBPa2F5LCBzbyBpdCBzZWVtcyBsaWtlIHRoZSBpbml0aWFsIGFsbG9jYXRpb24gKm1pZ2h0KiBza2lwIEtBU0FOLiBCdXQgdGhlbiB0aGVyZSYjMzk7cyBhIHN1YnNlcXVlbnQgYHN0YWNrID0ga2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtJmd0O2FkZHIpO2AgYW5kIHRoZW4gYHN0YWNrID0ga2FzYW5fcmVzZXRfdGFnKHN0YWNrKTtgLiBJcyBgdm1fYXJlYS0mZ3Q7YWRkcmAgYWN0dWFsbHkgdGFnZ2VkIGF0IHRoaXMgcG9pbnQ/IElmIGl0IGlzLCB3aHkgd291bGQgd2UgbmVlZCB0byByZXNldCB0aGUgdGFnIGJlZm9yZSBmcmVlaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLgoKVGhpcyByYWlzZXMgYW5vdGhlciBwb2ludDogd2hhdCBkb2VzIGB2ZnJlZSgpYCAqZG8qIHdpdGggdGFnZ2VkIGFkZHJlc3Nlcz8gVGhpcyBpcyBteSBuZXh0IGF2ZW51ZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdmZyZWUoKWAgaW4gYG1tL3ZtYWxsb2MuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBLQVNBTiBpbnRlcmFjdHMgd2l0aCB0aGlzIGRlYWxsb2NhdGlvbiBwcm9jZXNzIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIGBrYXNhbl9yZXNldF90YWdgIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgdmZyZWVcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC91bS9pbmNsdWRlL3NoYXJlZC91bV9tYWxsb2MuaD0xND1leHRlcm4gdm9pZCAqdm1hbGxvY19ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplKTtcbmFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvdW1fbWFsbG9jLmgtMTUtI2RlZmluZSB2bWFsbG9jKC4uLilcdFx0dm1hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pXG5hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3VtX21hbGxvYy5oOjE2OmV4dGVybiB2b2lkIHZmcmVlKGNvbnN0IHZvaWQgKnB0cik7XG5hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3VtX21hbGxvYy5oLTE3LVxuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTIwND12b2lkICpfX211c3RfY2hlY2sgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsXG4tLVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMjEzLVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6MjE0OmV4dGVybiB2b2lkIHZmcmVlKGNvbnN0IHZvaWQgKmFkZHIpO1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMjE1LWV4dGVybiB2b2lkIHZmcmVlX2F0b21pYyhjb25zdCB2b2lkICphZGRyKTtcbi0tXG5tbS9ub21tdS5jPTY1PXVuc2lnbmVkIGludCBrb2Jqc2l6ZShjb25zdCB2b2lkICpvYmpwKVxuLS1cbm1tL25vbW11LmMtMTA1LVxubW0vbm9tbXUuYzoxMDY6dm9pZCB2ZnJlZShjb25zdCB2b2lkICphZGRyKVxubW0vbm9tbXUuYy0xMDcte1xuLS1cbm1tL3ZtYWxsb2MuYz0zNDYwPXN0YXRpYyB2b2lkIHZtX2FyZWFfZnJlZV9wYWdlcyhzdHJ1Y3Qgdm1fc3RydWN0ICp2bSwgdW5zaWduZWQgbG9uZyBzdGFydF9pZHgsXG4tLVxubW0vdm1hbGxvYy5jLTM0OTEtICovXG5tbS92bWFsbG9jLmM6MzQ5Mjp2b2lkIHZmcmVlKGNvbnN0IHZvaWQgKmFkZHIpXG5tbS92bWFsbG9jLmMtMzQ5My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTIwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIHRoZSBhdWRpZW5jZSBpcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGB2ZnJlZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyYWNrIG9wZW4gYG1tL3ZtYWxsb2MuY2AgYW5kIHplcm8gaW4gb24gdGhlIGB2ZnJlZWAgZnVuY3Rpb24uIEkmIzM5O20ga2VlbiB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHZpcnR1YWwgbWVtb3J5IGlzIG1hbmFnZWQsIHNwZWNpZmljYWxseSB3aGVuIGl0IGNvbWVzIHRvIGRlYWxsb2NhdGluZyBtZW1vcnkgYWxsb2NhdGVkIHdpdGggYHZtYWxsb2NgLiBJIGtub3cgdGhlIGNvcmUgcHJpbmNpcGxlcywgb2YgY291cnNlOiBpdCYjMzk7cyBhYm91dCBmcmVlaW5nIHVwIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgYW5kIHBvdGVudGlhbGx5IHJlbGVhc2luZyBwaHlzaWNhbCBwYWdlcyBiYWNrIHRvIHRoZSBzeXN0ZW0sIGJ1dCBJIHdhbnQgdG8gZ2V0IGEgYml0IG1vcmUgZ3JhbnVsYXIgaGVyZS4KCkkmIzM5O20gdGhpbmtpbmcsIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgdGFibGVzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gaW4gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBgdm1fc3RydWN0YCBhbmQgYHZtX2FyZWFfc3RydWN0YCwgYW5kIGVzcGVjaWFsbHkgdGhlIGNhc2VzIHdoZXJlIHRoZSBhbGxvY2F0ZWQgdmlydHVhbCBtZW1vcnkgaXMgbWFwcGVkIHRvIGNvbnRpZ3VvdXMgcGh5c2ljYWwgcGFnZXMgYXMgdGhleSBhcmUgaW4gdm1hbGxvYy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBncmFjZWZ1bGx5IGhhbmRsZXMgZWRnZSBjYXNlcyBsaWtlIGZyZWVpbmcgYSBwYXJ0aWFsIGFsbG9jYXRpb24gb3IgYSBjb21wbGV0ZWx5IG1pc2FsaWduZWQgcmVnaW9uIOKAkyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gbWVjaGFuaXNtcy4gQWxzbywgSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgaW50ZXJlc3RpbmcgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0aGF0IGFyZSB1c2VkIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSBtYXAgZHVyaW5nIGRlYWxsb2NhdGlvbi4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3B0aW1pemF0aW9ucyB0aGF0IGFyZSBkb25lIGR1cmluZyBkZWFsbG9jYXRpb24uIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJwbGF5IHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQsIG9mIGNvdXJzZSwgYnV0IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljIGRldGFpbHMgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIG15IGFzc3VtcHRpb25zIGFsaWduIHdpdGggdGhlIGFjdHVhbCBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQ5MDpcdCAqIGNvbnZlbnRpb25zIGZvciB2ZnJlZSgpIGFyY2gtZGVwZW5kZW50IHdvdWxkIGJlIGEgcmVhbGx5IGJhZCBpZGVhKS5cbjM0OTE6XHQgKi9cbjM0OTI6XHR2b2lkIHZmcmVlKGNvbnN0IHZvaWQgKmFkZHIpXG4zNDkzOlx0e1xuMzQ5NDpcdFx0c3RydWN0IHZtX3N0cnVjdCAqdm07XG4zNDk1Olx0XG4zNDk2Olx0XHRpZiAodW5saWtlbHkoaW5faW50ZXJydXB0KCkpKSB7XG4zNDk3Olx0XHRcdHZmcmVlX2F0b21pYyhhZGRyKTtcbjM0OTg6XHRcdFx0cmV0dXJuO1xuMzQ5OTpcdFx0fVxuMzUwMDpcdFxuMzUwMTpcdFx0QlVHX09OKGluX25taSgpKTtcbjM1MDI6XHRcdGttZW1sZWFrX2ZyZWUoYWRkcik7XG4zNTAzOlx0XHRtaWdodF9zbGVlcCgpO1xuMzUwNDpcdFxuMzUwNTpcdFx0aWYgKCFhZGRyKVxuMzUwNjpcdFx0XHRyZXR1cm47XG4zNTA3Olx0XG4zNTA4Olx0XHR2bSA9IHJlbW92ZV92bV9hcmVhKGFkZHIpO1xuMzUwOTpcdFx0aWYgKHVubGlrZWx5KCF2bSkpIHtcbjM1MTA6XHRcdFx0V0FSTigxLCBLRVJOX0VSUiBcJiMzNDtUcnlpbmcgdG8gdmZyZWUoKSBub25leGlzdGVudCB2bSBhcmVhICglcClcXG5cJiMzNDssXG4zNTExOlx0XHRcdFx0XHRhZGRyKTtcbjM1MTI6XHRcdFx0cmV0dXJuO1xuMzUxMzpcdFx0fVxuMzUxNDpcdFxuMzUxNTpcdFx0aWYgKHVubGlrZWx5KHZtLVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9GTFVTSF9SRVNFVF9QRVJNUykpXG4zNTE2Olx0XHRcdHZtX3Jlc2V0X3Blcm1zKHZtKTtcbjM1MTc6XHRcbjM1MTg6XHRcdHZtX2FyZWFfZnJlZV9wYWdlcyh2bSwgMCwgdm0tXHUwMDNlbnJfcGFnZXMpO1xuMzUxOTpcdFx0a3ZmcmVlKHZtLVx1MDAzZXBhZ2VzKTtcbjM1MjA6XHRcdGtmcmVlKHZtKTtcbjM1MjE6XHR9XG4zNTIyOlx0RVhQT1JUX1NZTUJPTCh2ZnJlZSk7XG4zNTIzOlx0XG4zNTI0Olx0LyoqXG4zNTI1Olx0ICogdnVubWFwIC0gcmVsZWFzZSB2aXJ0dWFsIG1hcHBpbmcgb2J0YWluZWQgYnkgdm1hcCgpXG4zNTI2Olx0ICogQGFkZHI6ICAgbWVtb3J5IGJhc2UgYWRkcmVzc1xuMzUyNzpcdCAqXG4zNTI4Olx0ICogRnJlZSB0aGUgdmlydHVhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEgc3RhcnRpbmcgYXQgQGFkZHIsXG4zNTI5Olx0ICogd2hpY2ggd2FzIGNyZWF0ZWQgZnJvbSB0aGUgcGFnZSBhcnJheSBwYXNzZWQgdG8gdm1hcCgpLlxuMzUzMDpcdCAqXG4zNTMxOlx0ICogTXVzdCBub3QgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LlxuMzUzMjpcdCAqL1xuMzUzMzpcdHZvaWQgdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIpXG4zNTM0Olx0e1xuMzUzNTpcdFx0c3RydWN0IHZtX3N0cnVjdCAqdm07XG4zNTM2Olx0XG4zNTM3Olx0XHRCVUdfT04oaW5faW50ZXJydXB0KCkpO1xuMzUzODpcdFx0bWlnaHRfc2xlZXAoKTtcbjM1Mzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIGByZW1vdmVfdm1fYXJlYShhZGRyKWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGByZW1vdmVfdm1fYXJlYShhZGRyKWAuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYG1tL3ZtYWxsb2MuY2AsIGFuZCBnZXQgYSBnb29kIGxvb2sgYXQgdGhlIGByZW1vdmVfdm1fYXJlYWAgZnVuY3Rpb24uIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRoaXMgdGhpbmcuIE5vIHBvaW50IGluIGp1c3QgZ3Vlc3NpbmcsIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gc2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgdm1fc3RydWN0IFxcKnJlbW92ZV92bV9hcmVhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0zMzIyPXN0cnVjdCB2bV9zdHJ1Y3QgKmZpbmRfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKVxuLS1cbm1tL3ZtYWxsb2MuYy0zMzQyLSAqL1xubW0vdm1hbGxvYy5jOjMzNDM6c3RydWN0IHZtX3N0cnVjdCAqcmVtb3ZlX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcilcbm1tL3ZtYWxsb2MuYy0zMzQ0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4NjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSByZWFkaW5nIGByZW1vdmVfdm1fYXJlYWAgaW4gYG1tL3ZtYWxsb2MuY2A6CgoqKkRpc3NlY3RpbmcgYHJlbW92ZV92bV9hcmVhYCBpbiBgbW0vdm1hbGxvYy5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZm9jdXNpbmcgb24gYHJlbW92ZV92bV9hcmVhYCBub3csIHNwZWNpZmljYWxseSBpbiBgbW0vdm1hbGxvYy5jYC4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkga25vdyB0aGUgdm1hbGxvYyBhcmVhIGlzIGNydWNpYWwgZm9yIGFsbG9jYXRpbmcgdmlydHVhbCBtZW1vcnkgZm9yIHRoaW5ncyBsaWtlIGtlcm5lbCBtb2R1bGVzLCBhbmQgZHJpdmVycyB0aGF0IHJlcXVpcmUgY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnksIGJ1dCBjYW4mIzM5O3QgYmUgbWFwcGVkIGF0IGEgZml4ZWQgYWRkcmVzcy4gU28sIHJlbW92aW5nIGFuIGFyZWEgaXMgYSBzaWduaWZpY2FudCBvcGVyYXRpb247IGl0IG1lYW5zIGZyZWVpbmcgdXAgcHJldmlvdXNseSBhbGxvY2F0ZWQgdmlydHVhbCBtZW1vcnkuCgpJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBkZWVwIGRpdmUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGxpa2VseSB1c2Ugb2YgdGhlIHJlZC1ibGFjayB0cmVlIChvciBzaW1pbGFyIGRhdGEgc3RydWN0dXJlKSB0byB0cmFjayB0aGUgdm1hbGxvYyBhcmVhLCBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gdGhhdCBjb3VsZCBhcmlzZSBmcm9tIGZyZWVpbmcgYSByZWdpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBga2ZyZWVgIGFuZCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBwcmltaXRpdmVzIHRvIGFjdHVhbGx5IHJlbGVhc2UgdGhlIHBhZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGV5IGhhbmRsZSBhbnkgc3luY2hyb25pemF0aW9uIHRvIGVuc3VyZSBubyByYWNlIGNvbmRpdGlvbnMgaGFwcGVuIHdoZW4gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgYWxzbyByZWZlcmVuY2luZyBvciB1c2luZyB0aGlzIHZtYWxsb2MgYXJlYS4gSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIHRhYmxlcyBhcyB3ZWxsLCB0byBtYWtlIHN1cmUgdGhlIHZpcnR1YWwtdG8tcGh5c2ljYWwgbWFwcGluZyBpcyBwcm9wZXJseSByZW1vdmVkLiBBbmQsIG9mIGNvdXJzZSwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgZXJyb3IgY29uZGl0aW9ucyBhbmQgY29ybmVyIGNhc2VzIGNvcnJlY3RseSwgcGVyaGFwcyBieSBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZSB1bmRlcmx5aW5nIGNhbGxzIGFuZCB0aGUgaGFuZGxpbmcgb2YgdGhlIHJidHJlZSBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzQwOlx0ICpcbjMzNDE6XHQgKiBSZXR1cm46IHRoZSBhcmVhIGRlc2NyaXB0b3Igb24gc3VjY2VzcyBvciAlTlVMTCBvbiBmYWlsdXJlLlxuMzM0MjpcdCAqL1xuMzM0MzpcdHN0cnVjdCB2bV9zdHJ1Y3QgKnJlbW92ZV92bV9hcmVhKGNvbnN0IHZvaWQgKmFkZHIpXG4zMzQ0Olx0e1xuMzM0NTpcdFx0c3RydWN0IHZtYXBfYXJlYSAqdmE7XG4zMzQ2Olx0XHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcbjMzNDc6XHRcbjMzNDg6XHRcdG1pZ2h0X3NsZWVwKCk7XG4zMzQ5Olx0XG4zMzUwOlx0XHRpZiAoV0FSTighUEFHRV9BTElHTkVEKGFkZHIpLCBcJiMzNDtUcnlpbmcgdG8gdmZyZWUoKSBiYWQgYWRkcmVzcyAoJXApXFxuXCYjMzQ7LFxuMzM1MTpcdFx0XHRcdGFkZHIpKVxuMzM1MjpcdFx0XHRyZXR1cm4gTlVMTDtcbjMzNTM6XHRcbjMzNTQ6XHRcdHZhID0gZmluZF91bmxpbmtfdm1hcF9hcmVhKCh1bnNpZ25lZCBsb25nKWFkZHIpO1xuMzM1NTpcdFx0aWYgKCF2YSB8fCAhdmEtXHUwMDNldm0pXG4zMzU2Olx0XHRcdHJldHVybiBOVUxMO1xuMzM1NzpcdFx0dm0gPSB2YS1cdTAwM2V2bTtcbjMzNTg6XHRcbjMzNTk6XHRcdGRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKHZtLVx1MDAzZWFkZHIsIGdldF92bV9hcmVhX3NpemUodm0pKTtcbjMzNjA6XHRcdGRlYnVnX2NoZWNrX25vX29ial9mcmVlZCh2bS1cdTAwM2VhZGRyLCBnZXRfdm1fYXJlYV9zaXplKHZtKSk7XG4zMzYxOlx0XHRrYXNhbl9mcmVlX21vZHVsZV9zaGFkb3codm0pO1xuMzM2MjpcdFx0a2FzYW5fcG9pc29uX3ZtYWxsb2Modm0tXHUwMDNlYWRkciwgZ2V0X3ZtX2FyZWFfc2l6ZSh2bSkpO1xuMzM2MzpcdFxuMzM2NDpcdFx0ZnJlZV91bm1hcF92bWFwX2FyZWEodmEpO1xuMzM2NTpcdFx0cmV0dXJuIHZtO1xuMzM2NjpcdH1cbjMzNjc6XHRcbjMzNjg6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2FyZWFfZGlyZWN0X21hcChjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLFxuMzM2OTpcdFx0XHRcdFx0ICAgICAgIGludCAoKnNldF9kaXJlY3RfbWFwKShzdHJ1Y3QgcGFnZSAqcGFnZSkpXG4zMzcwOlx0e1xuMzM3MTpcdFx0dW5zaWduZWQgbG9uZyBpO1xuMzM3MjpcdFxuMzM3MzpcdFx0LyogSFVHRV9WTUFMTE9DIHBhc3NlcyBzbWFsbCBwYWdlcyB0byBzZXRfZGlyZWN0X21hcCAqL1xuMzM3NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXJlYS1cdTAwM2Vucl9wYWdlczsgaSYjNDM7JiM0MzspXG4zMzc1Olx0XHRcdGlmIChwYWdlX2FkZHJlc3MoYXJlYS1cdTAwM2VwYWdlc1tpXSkpXG4zMzc2Olx0XHRcdFx0c2V0X2RpcmVjdF9tYXAoYXJlYS1cdTAwM2VwYWdlc1tpXSk7XG4zMzc3Olx0fVxuMzM3ODpcdFxuMzM3OTpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODY4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgS0FTQU4gSXNzdWVzIGluIGB2ZnJlZSgpYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBMaW5lIDMzNTAtMzM1NCBvZiB0aGUgY29kZSBjYXRjaGVzIG15IGF0dGVudGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgdmZyZWUoKWAgZnVuY3Rpb24uIEkgc2VlIHRoZSBgV0FSTmAgbWFjcm8gaW1tZWRpYXRlbHksIHdoaWNoIGlzIGEgcmVkIGZsYWcuIEl0JiMzOTtzIGNoZWNraW5nIGlmIHRoZSBhZGRyZXNzIGBhZGRyYCBiZWluZyBwYXNzZWQgaXMgcGFnZS1hbGlnbmVkLCBidXQgd2hhdCYjMzk7cyByZWFsbHkgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2Qgd2l0aCBLQVNBTj8gSSBrbm93IG9uIGFybTY0LCBlc3BlY2lhbGx5IHdpdGggS0FTQU4gSFdfVEFHUyBvciBTV19UQUdTIGVuYWJsZWQsIHRoZSB0b3AgYnl0ZSBvZiBhbiBhZGRyZXNzIGNhbiBjb250YWluIGEgdGFnLiBUaGlzIGlzIGNydWNpYWwuCgpUaGUgY29kZSBjaGVja3MgcGFnZSBhbGlnbm1lbnQsIHByZXN1bWFibHkgYnkgaW5zcGVjdGluZyB0aGUgbG93ZXIgYml0cy4gQnV0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFkZHJlc3MgaXMgKnVzZWQqIGluIHN1YnNlcXVlbnQgY2FsbHMuIGBmaW5kX3VubGlua192bWFwX2FyZWFgIGlzIHRoZSBuZXh0IGZ1bmN0aW9uIGNhbGwgdGhhdCBzZWVtcyB0byB1c2UgdGhpcyBhZGRyZXNzLCBzbyBJIG11c3QgZGlnIGRlZXBlci4KCkxldCYjMzk7cyBsb29rIGF0IGBmaW5kX3VubGlua192bWFwX2FyZWFgLiBBaCwgaXQgY2FsbHMgYF9fZmluZF92bWFwX2FyZWFgLiBBbmQgYmluZ28hIGBfX2ZpbmRfdm1hcF9hcmVhYCBleHBsaWNpdGx5IGNhbGxzIGBrYXNhbl9yZXNldF90YWdgIG9uIHRoZSBhZGRyZXNzLiBUaGlzIHNlZW1zIHRvIG1lYW4gdGhhdCB0aGUgZnVuY3Rpb24gKnJlbW92ZXMqIHRoZSB0YWcuIEJ1dCBpcyBgZmluZF91bmxpbmtfdm1hcF9hcmVhYCBnZXR0aW5nIGEgdGFnIGFzIGlucHV0LCBvciBub3Q/IEkgbXVzdCB2ZXJpZnkuIElzIHRoaXMgYW4gaXNzdWU/IFByb2JhYmx5IG5vdCwgc2luY2UgdGhlIHRhZyBnZXRzIHJlbW92ZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbmRfdW5saW5rX3ZtYXBfYXJlYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9MjUxND1zdHJ1Y3Qgdm1hcF9hcmVhICpmaW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vdm1hbGxvYy5jLTI1NTAtXG5tbS92bWFsbG9jLmM6MjU1MTpzdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqZmluZF91bmxpbmtfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkcilcbm1tL3ZtYWxsb2MuYy0yNTUyLXtcbi0tXG5tbS92bWFsbG9jLmM9MzA0OT12b2lkIHZtX3VubWFwX3JhbShjb25zdCB2b2lkICptZW0sIHVuc2lnbmVkIGludCBjb3VudClcbi0tXG5tbS92bWFsbG9jLmMtMzA2OC1cbm1tL3ZtYWxsb2MuYzozMDY5Olx0dmEgPSBmaW5kX3VubGlua192bWFwX2FyZWEoYWRkcik7XG5tbS92bWFsbG9jLmMtMzA3MC1cdGlmIChXQVJOX09OX09OQ0UoIXZhKSlcbi0tXG5tbS92bWFsbG9jLmM9MzM0Mz1zdHJ1Y3Qgdm1fc3RydWN0ICpyZW1vdmVfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKVxuLS1cbm1tL3ZtYWxsb2MuYy0zMzUzLVxubW0vdm1hbGxvYy5jOjMzNTQ6XHR2YSA9IGZpbmRfdW5saW5rX3ZtYXBfYXJlYSgodW5zaWduZWQgbG9uZylhZGRyKTtcbm1tL3ZtYWxsb2MuYy0zMzU1LVx0aWYgKCF2YSB8fCAhdmEtXHUwMDNldm0pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODY1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGZpbmRfdW5saW5rX3ZtYXBfYXJlYWAgaW4gYG1tL3ZtYWxsb2MuY2AqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYGZpbmRfdW5saW5rX3ZtYXBfYXJlYWAuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWw7IGl0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyB2bWFsbG9jIGFyZWFzIGFyZSBtYW5hZ2VkIGFuZCB1bmxpbmtlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIGZsb3cgKnByZWNpc2VseSosIGVzcGVjaWFsbHkgaG93IGl0IGhhbmRsZXMgdGhlIHVubWFwcGluZyBwcm9jZXNzLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIHBhcnRpY3VsYXJseSB0aGUgdm1hcCBhcmVhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSB0cmF2ZXJzZWQuIFdoYXQgYXJlIHRoZSBrZXkgYXNzdW1wdGlvbnMgaXQgbWFrZXMgYWJvdXQgdGhlIHZtYWxsb2MgcmVnaW9uIGxheW91dD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIG9uIHRoZSBsb29rb3V0IGZvciwgZXNwZWNpYWxseSBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50PyBJIGFsc28gbmVlZCB0byBhc2NlcnRhaW4gaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gbG9naWMg4oCTIGFyZSB0aGVyZSBhbnkgdW51c3VhbCBpbnRlcmFjdGlvbnMgd2l0aCBoYXJkd2FyZT8gU3BlY2lmaWNhbGx5LCB3aGVyZSBhbmQgaG93IGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGUgd2l0aCB0aGUgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzIHRvIGludmFsaWRhdGUgbWFwcGluZ3M/IFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgbWVtb3J5IGJhcnJpZXJzIGhlcmUgaXMgcGFyYW1vdW50LiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBhIGx5bmNocGluIGluIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzIGFuZCBlbnN1cmluZyB0aGUgdm1hbGxvYyBzdWJzeXN0ZW0gb3BlcmF0ZXMgY29ycmVjdGx5LCBzbyBJIG11c3QgZGlzc2VjdCBldmVyeSBsaW5lIHdpdGggYSBmaW5lLXRvb3RoIGNvbWIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTUwOlx0XG4yNTUxOlx0c3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKmZpbmRfdW5saW5rX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpXG4yNTUyOlx0e1xuMjU1MzpcdFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG4yNTU0Olx0XHRzdHJ1Y3Qgdm1hcF9hcmVhICp2YTtcbjI1NTU6XHRcdGludCBpLCBqO1xuMjU1NjpcdFxuMjU1NzpcdFx0LypcbjI1NTg6XHRcdCAqIENoZWNrIHRoZSBjb21tZW50IGluIHRoZSBmaW5kX3ZtYXBfYXJlYSgpIGFib3V0IHRoZSBsb29wLlxuMjU1OTpcdFx0ICovXG4yNTYwOlx0XHRpID0gaiA9IGFkZHJfdG9fbm9kZV9pZChhZGRyKTtcbjI1NjE6XHRcdGRvIHtcbjI1NjI6XHRcdFx0dm4gPSBcdTAwMjZ2bWFwX25vZGVzW2ldO1xuMjU2MzpcdFxuMjU2NDpcdFx0XHRzcGluX2xvY2soXHUwMDI2dm4tXHUwMDNlYnVzeS5sb2NrKTtcbjI1NjU6XHRcdFx0dmEgPSBfX2ZpbmRfdm1hcF9hcmVhKGFkZHIsIFx1MDAyNnZuLVx1MDAzZWJ1c3kucm9vdCk7XG4yNTY2Olx0XHRcdGlmICh2YSlcbjI1Njc6XHRcdFx0XHR1bmxpbmtfdmEodmEsIFx1MDAyNnZuLVx1MDAzZWJ1c3kucm9vdCk7XG4yNTY4Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZuLVx1MDAzZWJ1c3kubG9jayk7XG4yNTY5Olx0XG4yNTcwOlx0XHRcdGlmICh2YSlcbjI1NzE6XHRcdFx0XHRyZXR1cm4gdmE7XG4yNTcyOlx0XHR9IHdoaWxlICgoaSA9IChpICYjNDM7IG5yX3ZtYXBfbm9kZXMgLSAxKSAlIG5yX3ZtYXBfbm9kZXMpICE9IGopO1xuMjU3MzpcdFxuMjU3NDpcdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTM2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgQ29kZTogTGluZSAyNTYwIC0gUG90ZW50aWFsIEJvdHRsZW5lY2s/KioKCkFscmlnaHQsIGxldCYjMzk7cyB6b29tIGluIG9uIGxpbmUgMjU2MCBvZiB0aGlzIGNvZGUuIFRoYXQmIzM5O3Mgd2hlcmUgd2UgaGF2ZSBgaSA9IGogPSBhZGRyX3RvX25vZGVfaWQoYWRkcik7YC4gSW1tZWRpYXRlbHksIHRoZSBgYWRkcl90b19ub2RlX2lkKGFkZHIpYCBmdW5jdGlvbiBjYXRjaGVzIG15IGV5ZS4gSXQmIzM5O3Mgb2J2aW91c2x5IGNyaXRpY2FsLCB0cmFuc2xhdGluZyBhbiBhZGRyZXNzIChgYWRkcmApIGludG8gYSBub2RlIElELiBUaGlzIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWxseSBzZW5zaXRpdmUgYXJlYSBmb3IgcGVyZm9ybWFuY2UsIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uIFRoZSBkb3VibGUgYXNzaWdubWVudCBzdWdnZXN0cyBgaWAgYW5kIGBqYCBhcmUgZGVwZW5kZW50IGFuZCB0aGUgb3BlcmF0aW9uIHdpbGwgYmUgZG9uZSBmb3IgYm90aCEgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nIHVuZGVyIHRoZSBob29kLCBmYXN0LCBhbmQgd2hhdCB0aGUgdGltZSBjb21wbGV4aXR5IG1pZ2h0IGJlLiBUaGlzIGNvdWxkIGJlIGEgYm90dGxlbmVjayBpbiB0aGUgb3ZlcmFsbCBhbGdvcml0aG0gaWYgdGhpcyBmdW5jdGlvbiBpcyBpbmVmZmljaWVudCwgcGFydGljdWxhcmx5IGlmIGl0JiMzOTtzIGNhbGxlZCBmcmVxdWVudGx5IG9yIHdpdGhpbiBhIHRpZ2h0IGxvb3AuIExldCYjMzk7cyBkZWx2ZSBkZWVwZXIgYW5kIGluc3BlY3QgdGhlIGFjdHVhbCBgYWRkcl90b19ub2RlX2lkYCBpbXBsZW1lbnRhdGlvbiB0byBnZXQgYSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZHJfdG9fbm9kZV9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9OTkyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG5tbS92bWFsbG9jLmM6OTkzOmFkZHJfdG9fbm9kZV9pZCh1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS92bWFsbG9jLmMtOTk0LXtcbi0tXG5tbS92bWFsbG9jLmM9OTk5PWFkZHJfdG9fbm9kZSh1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS92bWFsbG9jLmMtMTAwMC17XG5tbS92bWFsbG9jLmM6MTAwMTpcdHJldHVybiBcdTAwMjZ2bWFwX25vZGVzW2FkZHJfdG9fbm9kZV9pZChhZGRyKV07XG5tbS92bWFsbG9jLmMtMTAwMi19XG4tLVxubW0vdm1hbGxvYy5jPTI1MTQ9c3RydWN0IHZtYXBfYXJlYSAqZmluZF92bWFwX2FyZWEodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL3ZtYWxsb2MuYy0yNTIzLVx0Lypcbm1tL3ZtYWxsb2MuYzoyNTI0Olx0ICogQW4gYWRkcl90b19ub2RlX2lkKGFkZHIpIGNvbnZlcnRzIGFuIGFkZHJlc3MgdG8gYSBub2RlIGluZGV4XG5tbS92bWFsbG9jLmMtMjUyNS1cdCAqIHdoZXJlIGEgVkEgaXMgbG9jYXRlZC4gSWYgVkEgc3BhbnMgc2V2ZXJhbCB6b25lcyBhbmQgcGFzc2VkXG4tLVxubW0vdm1hbGxvYy5jLTI1MzUtXHQgKi9cbm1tL3ZtYWxsb2MuYzoyNTM2Olx0aSA9IGogPSBhZGRyX3RvX25vZGVfaWQoYWRkcik7XG5tbS92bWFsbG9jLmMtMjUzNy1cdGRvIHtcbi0tXG5tbS92bWFsbG9jLmM9MjU1MT1zdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqZmluZF91bmxpbmtfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS92bWFsbG9jLmMtMjU1OS1cdCAqL1xubW0vdm1hbGxvYy5jOjI1NjA6XHRpID0gaiA9IGFkZHJfdG9fbm9kZV9pZChhZGRyKTtcbm1tL3ZtYWxsb2MuYy0yNTYxLVx0ZG8ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI1NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBtbS92bWFsbG9jLmNgJiMzOTtzIEFsbG9jYXRpb24gU3RyYXRlZ3kqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgdm1hbGxvYy5jYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDk5MC0xMDEwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgdm1hbGxvY2AgaGFuZGxlcyBsYXJnZSBhbGxvY2F0aW9ucyBhbmQgdGhlIG1lY2hhbmljcyBiZWhpbmQgaXQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBzZWN0aW9uIG9mIGNvZGUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBudWFuY2VzIG9mIHRoaXMgcGFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZXIuIFRoaXMgcmFuZ2UgdHlwaWNhbGx5IGRlYWxzIHdpdGggdGhlIGNyaXRpY2FsIGxvZ2ljIC0gcGVyaGFwcyB0aGUgYWxsb2NhdGlvbiBsb29wLCB0aGUgYWRkcmVzcyBzcGFjZSBsb29rdXBzLCBhbmQgYW55IG5lY2Vzc2FyeSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMuIEnigJltIHRoaW5raW5nIHRoZXJlIGFyZSBsaWtlbHkgc29tZSBjaGVja3MgZm9yIGF2YWlsYWJsZSBjb250aWd1b3VzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSwgdGhlIHNlbGVjdGlvbiBvZiB0aGUgcmlnaHQgVk0gYXJlYSBmbGFncywgb3IgbWF5YmUgZXZlbiBzdWJ0bGUgY29uc2lkZXJhdGlvbnMgYXJvdW5kIG1lbW9yeSBmcmFnbWVudGF0aW9uLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBkZWFscyB3aXRoIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgcmVzZXJ2YXRpb24gcHJvY2Vzcy4gSXMgaXQgdXNpbmcgYSBzaW1wbGUgbGluZWFyIHNjYW4sIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/IFdoYXQgYWJvdXQgbG9ja2luZz8gSXMgdGhlcmUgY29udGVudGlvbiBpbiB0aGlzIHJlZ2lvbj8gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBwcmV0dHkgY29tcGxleCBwb2ludGVyIGFyaXRobWV0aWMsIGdpdmVuIHRoZSBuYXR1cmUgb2YgYHZtYWxsb2NgLiBJIGFsc28gd2FudCB0byBvYnNlcnZlIGlmIHRoZXNlIGxpbmVzIGltcGxlbWVudCBhbiBleHBsaWNpdCBtZWNoYW5pc20gdG8gaGFuZGxlIHBvdGVudGlhbCBmYWlsdXJlcywgd2hpY2ggd291bGQgYmUgZXh0cmVtZWx5IGltcG9ydGFudCBmb3IgYW55IHJvYnVzdCBtZW1vcnkgYWxsb2NhdG9yLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgYWxsb2NhdGlvbiByb3V0aW5lLCBidXQgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc3VidGxlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgYW55IHBvdGVudGlhbCB3ZWFrbmVzc2VzIHRoYXQgY2FuIGNhdXNlIHByb2JsZW1zIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTkwOlx0XHRcdCh2bikgXHUwMDNjIFx1MDAyNnZtYXBfbm9kZXNbbnJfdm1hcF9ub2Rlc107ICh2bikmIzQzOyYjNDM7KVxuIDk5MTpcdFxuIDk5MjpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gOTkzOlx0YWRkcl90b19ub2RlX2lkKHVuc2lnbmVkIGxvbmcgYWRkcilcbiA5OTQ6XHR7XG4gOTk1Olx0XHRyZXR1cm4gKGFkZHIgLyB2bWFwX3pvbmVfc2l6ZSkgJSBucl92bWFwX25vZGVzO1xuIDk5NjpcdH1cbiA5OTc6XHRcbiA5OTg6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCB2bWFwX25vZGUgKlxuIDk5OTpcdGFkZHJfdG9fbm9kZSh1bnNpZ25lZCBsb25nIGFkZHIpXG4xMDAwOlx0e1xuMTAwMTpcdFx0cmV0dXJuIFx1MDAyNnZtYXBfbm9kZXNbYWRkcl90b19ub2RlX2lkKGFkZHIpXTtcbjEwMDI6XHR9XG4xMDAzOlx0XG4xMDA0Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1hcF9ub2RlICpcbjEwMDU6XHRpZF90b19ub2RlKHVuc2lnbmVkIGludCBpZClcbjEwMDY6XHR7XG4xMDA3Olx0XHRyZXR1cm4gXHUwMDI2dm1hcF9ub2Rlc1tpZCAlIG5yX3ZtYXBfbm9kZXNdO1xuMTAwODpcdH1cbjEwMDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4ODcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW1tZWRpYXRlIENvbmNlcm5zIFJlZ2FyZGluZyBBZGRyZXNzIFRhZ2dpbmcgYW5kIGBhZGRyX3RvX25vZGVfaWRgKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBoaXR0aW5nIG1lIHJpZ2h0IG5vdy4gVGhpcyBgYWRkcl90b19ub2RlX2lkKGFkZHIpYCBmdW5jdGlvbiBpcyB1c2luZyBhbiB1bnRhZ2dlZCBhZGRyZXNzIGZvciBpdHMgY2FsY3VsYXRpb24g4oCTIHNwZWNpZmljYWxseSwgYChhZGRyIC8gdm1hcF96b25lX3NpemUpICUgbnJfdm1hcF9ub2Rlc2AuIElmIGBhZGRyYCAqaXMqIHRhZ2dlZCBpbiB0aGF0IHRvcCBieXRlLCB3aGljaCBpcyBhYnNvbHV0ZWx5IHBvc3NpYmxlIGluIGEgdGFnZ2VkIG1lbW9yeSBzeXN0ZW0sIHRoaXMgaXMgZ29pbmcgdG8geWllbGQgYSB0b3RhbGx5IGluY29ycmVjdCBzdGFydGluZyBub2RlLiBUaGF0IGRpdmlzaW9uIGlzIGdvaW5nIHRvIGJlIGNvbXBsZXRlbHkgb2ZmLgoKQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gV2h5IGRpZCB0aGF0IHJlY2VudCBwYXRjaCBtZXNzIHdpdGggYHZmcmVlKGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLSZndDthZGRyKSlgIGluIGBrZXJuZWwvZm9yay5jYD8gVGhhdCYjMzk7cyB3aGF0JiMzOTtzIGdvdCBtZSB0aGlua2luZy4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mICp3aHkqIHRoaXMgY2hhbmdlIGhhcHBlbmVkLgoKUmlnaHQhIExldCYjMzk7cyBnZXQgaW50byBga2VybmVsL2ZvcmsuY2AgYW5kIGRpZyBkZWVwZXIuCgpIYW5nIG9uLi4uIEkmIzM5O20gbm90aWNpbmcgc29tZXRoaW5nIGluIGB0aHJlYWRfc3RhY2tfZnJlZV9yY3VgLi4uCgpBaCEgQW5kIHdoYXQgd2FzIGB2bV9hcmVhLSZndDthZGRyYCBhY3R1YWxseSByZWZlcnJpbmcgdG8/IENvbnRleHQsIGNvbnRleHQsIGNvbnRleHQuCgpXaGVuICppcyogYHZtX2FyZWEtJmd0O2FkZHJgIHRhZ2dlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBsaWZlY3ljbGUuIFdoYXQgYXJlIHdlIGRlYWxpbmcgd2l0aD8KCk9rYXksIHRpbWUgdG8gcHVsbCB1cCB0aGUgc291cmNlIGFuZCBzZWFyY2ggYGtlcm5lbC9mb3JrLmNgIGZvciBpbnN0YW5jZXMgb2YgYHZtX2FyZWEtJmd0O2FkZHJgLiBHb3R0YSB0cmFjZSB0aGlzIGZyb20gdGhlIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1fYXJlYS1cdTAwM2VhZGRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2ZvcmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jPTI3NT1zdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaClcbi0tXG5rZXJuZWwvZm9yay5jLTI4Mi1cbmtlcm5lbC9mb3JrLmM6MjgzOlx0dmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpO1xua2VybmVsL2ZvcmsuYy0yODQtfVxuLS1cbmtlcm5lbC9mb3JrLmM9Mjk0PXN0YXRpYyBpbnQgZnJlZV92bV9zdGFja19jYWNoZSh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbmtlcm5lbC9mb3JrLmMtMzA0LVxua2VybmVsL2ZvcmsuYzozMDU6XHRcdHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcik7XG5rZXJuZWwvZm9yay5jLTMwNi1cdFx0Y2FjaGVkX3ZtX3N0YWNrX2FyZWFzW2ldID0gTlVMTDtcbi0tXG5rZXJuZWwvZm9yay5jPTMzMz1zdGF0aWMgaW50IGFsbG9jX3RocmVhZF9zdGFja19ub2RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgbm9kZSlcbi0tXG5rZXJuZWwvZm9yay5jLTM0MC1cdFx0aWYgKG1lbWNnX2NoYXJnZV9rZXJuZWxfc3RhY2sodm1fYXJlYSkpIHtcbmtlcm5lbC9mb3JrLmM6MzQxOlx0XHRcdHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcik7XG5rZXJuZWwvZm9yay5jLTM0Mi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5rZXJuZWwvZm9yay5jLTM0Ni1cdFx0aWYgKCFrYXNhbl9od190YWdzX2VuYWJsZWQoKSlcbmtlcm5lbC9mb3JrLmM6MzQ3Olx0XHRcdGthc2FuX3VucG9pc29uX3JhbmdlKHZtX2FyZWEtXHUwMDNlYWRkciwgVEhSRUFEX1NJWkUpO1xua2VybmVsL2ZvcmsuYy0zNDgtXG5rZXJuZWwvZm9yay5jOjM0OTpcdFx0c3RhY2sgPSBrYXNhbl9yZXNldF90YWcodm1fYXJlYS1cdTAwM2VhZGRyKTtcbmtlcm5lbC9mb3JrLmMtMzUwLVxua2VybmVsL2ZvcmsuYy0zNTEtXHRcdC8qIENsZWFyIHN0YWxlIHBvaW50ZXJzIGZyb20gcmV1c2VkIHN0YWNrLiAqL1xua2VybmVsL2ZvcmsuYzozNTI6XHRcdGNsZWFyX3BhZ2VzKHZtX2FyZWEtXHUwMDNlYWRkciwgdm1fYXJlYS1cdTAwM2Vucl9wYWdlcyk7XG5rZXJuZWwvZm9yay5jLTM1My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4NTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRocmVhZCBTdGFjayBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyB0aHJlYWQgc3RhY2tzIGFyZSBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgdGhlIEtBU0FOIGFzcGVjdHMuIEZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgYGFsbG9jX3RocmVhZF9zdGFja19ub2RlYC4gSSBzZWUgdGhlIHN0YWNrIG1ldGFkYXRhIHJlc2V0OiBpZiBLQVNBTiBoYXJkd2FyZSB0YWdzIGFyZW4mIzM5O3QgZW5hYmxlZCwgaXQgdW5wb2lzb25zIHRoZSByYW5nZS4gVGhlbiBpdCAqcmVzZXRzKiB0aGUgdGFnIHZpYSBga2FzYW5fcmVzZXRfdGFnYCBhbmQgY2xlYXJzIHRoZSBwYWdlcy4gQ3J1Y2lhbGx5LCB0aGUgY29kZSBzdG9yZXMgYSBgdm1fYXJlYWAgcG9pbnRlciAoYHRzay0mZ3Q7c3RhY2tfdm1fYXJlYWApICphbmQqIHRoZSB0YWdnZWQgc3RhY2sgYWRkcmVzcyAoYHRzay0mZ3Q7c3RhY2tgKS4gIFRoZXJlJiMzOTtzIGEgc2ltaWxhciBwcm9jZXNzIHVzaW5nIHRoZSBzYW1lIHZhcmlhYmxlcy4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgZGV0YWlscyBpbiBtaW5kLgoKTm93LCBJJiMzOTttIHNoaWZ0aW5nIHRvIGB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlYC4gSXQgdGFrZXMgdGhlIGB0YXNrX3N0cnVjdGAsIGdyYWJzIHRoZSBgdm1fc3RhY2tgLCBhbmQgc3RvcmVzIGEgYHN0YWNrX3ZtX2FyZWFgLiBJdCB0aGVuIHVzZXMgYGNhbGxfcmN1YCB0byBkZWZlciB0aGUgZnJlZSB1c2luZyBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YC4KCkluIGB0aHJlYWRfc3RhY2tfZnJlZV9yY3VgLCBpdCBnZXRzIHRoZSBgdm1fc3RhY2tgIGFuZCBpdHMgYXNzb2NpYXRlZCBgdm1fYXJlYWAuICBJdCB0cmllcyB0byByZWxlYXNlIHRoZSBzdGFjayB0byB0aGUgY2FjaGUuIEFuZCBpZiB0aGF0IGZhaWxzLCBpdCBjYWxscyBgdmZyZWVgIG9uIHRoZSAqKnJlc2V0KiogdGFnZ2VkIGFkZHJlc3MgKGB2bV9hcmVhLSZndDthZGRyYCkuIE9rYXksIHRoYXQmIzM5O3MgdGhlIGtpY2tlciEKCk5vdywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIHdoZXJlICpleGFjdGx5KiBpcyBgdm1fYXJlYS0mZ3Q7YWRkcmAgYmVpbmcgdGFnZ2VkPyBUaGUgY29kZSBJIGxvb2tlZCBhdCBpcyBub3Qgd2hlcmUgaXQgYXBwZWFycyB0byBoYXBwZW4uIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIFRoZSBjYWxsIHRvIGBrYXNhbl9yZXNldF90YWdgIGhpbnRzIHRoYXQgdGFnZ2luZyAqaGFwcGVucyogYnV0IGl0JiMzOTtzIG5vdCBwcmVzZW50IGhlcmUuCgpUaW1lIHRvIHNlYXJjaCB3aGVyZSB0aGlzIGB2bV9hcmVhLSZndDthZGRyYCBpcyBzZXQuIEkgbmVlZCB0byBncmVwIHRoZSBjb2RlYmFzZSBmb3IgYHZtLSZndDthZGRyID0gYCBvciBgYXJlYS0mZ3Q7YWRkciA9IGAgdG8gc2VlIGhvdyB0aGlzIHZhbHVlIGdldHMgaW5pdGlhbGl6ZWQuICBUaGF0IHNob3VsZCByZXZlYWwgdGhlIHBvaW50IHdoZXJlIEtBU0FOJiMzOTtzIHRhZ2dpbmcgbWFnaWMgaXMgYWN0dWFsbHkgYXBwbGllZCB0byB0aGUgbWVtb3J5IHJlZ2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7LVx1MDAzZWFkZHIgPSAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTIwMzQ9c3RhdGljIGlubGluZSB2b2lkIHNldHVwX3ZtYWxsb2Nfdm0oc3RydWN0IHZtX3N0cnVjdCAqdm0sXG4tLVxubW0vdm1hbGxvYy5jLTIwMzctXHR2bS1cdTAwM2VmbGFncyA9IGZsYWdzO1xubW0vdm1hbGxvYy5jOjIwMzg6XHR2bS1cdTAwM2VhZGRyID0gKHZvaWQgKil2YS1cdTAwM2V2YV9zdGFydDtcbm1tL3ZtYWxsb2MuYy0yMDM5LVx0dm0tXHUwMDNlc2l6ZSA9IHZtLVx1MDAzZXJlcXVlc3RlZF9zaXplID0gdmFfc2l6ZSh2YSk7XG4tLVxubW0vdm1hbGxvYy5jPTIwNDg9c3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKmFsbG9jX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxubW0vdm1hbGxvYy5jLTIxMzItXHRpZiAodm0pIHtcbm1tL3ZtYWxsb2MuYzoyMTMzOlx0XHR2bS1cdTAwM2VhZGRyID0gKHZvaWQgKil2YS1cdTAwM2V2YV9zdGFydDtcbm1tL3ZtYWxsb2MuYy0yMTM0LVx0XHR2bS1cdTAwM2VzaXplID0gdmFfc2l6ZSh2YSk7XG4tLVxubW0vdm1hbGxvYy5jPTMxOTY9dm9pZCBfX2luaXQgdm1fYXJlYV9yZWdpc3Rlcl9lYXJseShzdHJ1Y3Qgdm1fc3RydWN0ICp2bSwgc2l6ZV90IGFsaWduKVxuLS1cbm1tL3ZtYWxsb2MuYy0zMjA5LVx0QlVHX09OKGFkZHIgXHUwMDNlIFZNQUxMT0NfRU5EIC0gdm0tXHUwMDNlc2l6ZSk7XG5tbS92bWFsbG9jLmM6MzIxMDpcdHZtLVx1MDAzZWFkZHIgPSAodm9pZCAqKWFkZHI7XG5tbS92bWFsbG9jLmMtMzIxMS1cdHZtLVx1MDAzZW5leHQgPSAqcDtcbi0tXG5tbS92bWFsbG9jLmM9MzIyNz1zdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbm1tL3ZtYWxsb2MuYy0zMjcwLVx0aWYgKCEoZmxhZ3MgXHUwMDI2IFZNX0FMTE9DKSlcbm1tL3ZtYWxsb2MuYzozMjcxOlx0XHRhcmVhLVx1MDAzZWFkZHIgPSBrYXNhbl91bnBvaXNvbl92bWFsbG9jKGFyZWEtXHUwMDNlYWRkciwgcmVxdWVzdGVkX3NpemUsXG5tbS92bWFsbG9jLmMtMzI3Mi1cdFx0XHRcdFx0XHQgICAgS0FTQU5fVk1BTExPQ19QUk9UX05PUk1BTCk7XG4tLVxubW0vdm1hbGxvYy5jPTQwMzM9dm9pZCAqX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcbi0tXG5tbS92bWFsbG9jLmMtNDEyOS1cdGlmICghc2tpcF92bWFsbG9jX2thc2FuKVxubW0vdm1hbGxvYy5jOjQxMzA6XHRcdGFyZWEtXHUwMDNlYWRkciA9IGthc2FuX3VucG9pc29uX3ZtYWxsb2MoYXJlYS1cdTAwM2VhZGRyLCBzaXplLCBrYXNhbl9mbGFncyk7XG5tbS92bWFsbG9jLmMtNDEzMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzNTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IFNhbml0aXphdGlvbiBpbiB2bWFsbG9jKioKCk9rYXksIGhlcmUgd2UgYXJlLCBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgYWdhaW4uIExpbmUgNDEzMC4uLiB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdGhhdCBgYXJlYS0mZ3Q7YWRkciA9IGthc2FuX3VucG9pc29uX3ZtYWxsb2MoYXJlYS0mZ3Q7YWRkciwgc2l6ZSwga2FzYW5fZmxhZ3MpO2AgY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgYGthc2FuX3VucG9pc29uX3ZtYWxsb2NgIHJldHVybmluZz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdG8gdGhhdCBgYXJlYS0mZ3Q7YWRkcmAgcG9pbnRlci4gSXMgaXQgYmVpbmcgbW9kaWZpZWQgZGlyZWN0bHk/IElzIHRoZXJlIGEgbmV3IGFkZHJlc3MgYmVpbmcgYXNzaWduZWQ/IElzIHRoZXJlIGEgc3RhdHVzIGluZGljYXRvcj8gTGV0JiMzOTtzIHRyYWNlIGludG8gdGhhdCBga2FzYW5fdW5wb2lzb25fdm1hbGxvY2AgZnVuY3Rpb24gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCB0aGF0IGxldmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgY29tcGxldGVseSB0byBhc3Nlc3MgaXRzIGltcGFjdCBvbiB0aGUgbGFyZ2VyIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRleHQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbnVhbmNlIG9mIHRoZSBLQVNBTiBpbXBsZW1lbnRhdGlvbiBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrYXNhbl91bnBvaXNvbl92bWFsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2FzYW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2FzYW4vY29tbW9uLmM9NTgxPXZvaWQgX19rYXNhbl91bnBvaXNvbl92bWFwX2FyZWFzKHN0cnVjdCB2bV9zdHJ1Y3QgKip2bXMsIGludCBucl92bXMsXG4tLVxubW0va2FzYW4vY29tbW9uLmMtNTk4LVx0YWRkciA9IHZtc1swXS1cdTAwM2VhZGRyO1xubW0va2FzYW4vY29tbW9uLmM6NTk5Olx0dm1zWzBdLVx1MDAzZWFkZHIgPSBfX2thc2FuX3VucG9pc29uX3ZtYWxsb2MoYWRkciwgc2l6ZSwgZmxhZ3MpO1xubW0va2FzYW4vY29tbW9uLmMtNjAwLVx0dGFnID0gZ2V0X3RhZyh2bXNbMF0tXHUwMDNlYWRkcik7XG4tLVxubW0va2FzYW4vY29tbW9uLmMtNjA1LVx0XHR2bXNbYXJlYV0tXHUwMDNlYWRkciA9XG5tbS9rYXNhbi9jb21tb24uYzo2MDY6XHRcdFx0X19rYXNhbl91bnBvaXNvbl92bWFsbG9jKGFkZHIsIHNpemUsIGZsYWdzIHwgS0FTQU5fVk1BTExPQ19LRUVQX1RBRyk7XG5tbS9rYXNhbi9jb21tb24uYy02MDctXHR9XG4tLVxubW0va2FzYW4vY29tbW9uLmM9NjEwPXZvaWQgX19rYXNhbl92cmVhbGxvYyhjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG9sZF9zaXplLFxuLS1cbm1tL2thc2FuL2NvbW1vbi5jLTYyMi1cdFx0b2xkX3NpemUgPSByb3VuZF9kb3duKG9sZF9zaXplLCBLQVNBTl9HUkFOVUxFX1NJWkUpO1xubW0va2FzYW4vY29tbW9uLmM6NjIzOlx0XHRfX2thc2FuX3VucG9pc29uX3ZtYWxsb2MoYWRkciAmIzQzOyBvbGRfc2l6ZSxcbm1tL2thc2FuL2NvbW1vbi5jLTYyNC1cdFx0XHRcdFx0bmV3X3NpemUgLSBvbGRfc2l6ZSxcbi0tXG5tbS9rYXNhbi9od190YWdzLmM9Mjg3PXN0YXRpYyB2b2lkIHVucG9pc29uX3ZtYWxsb2NfcGFnZXMoY29uc3Qgdm9pZCAqYWRkciwgdTggdGFnKVxuLS1cbm1tL2thc2FuL2h3X3RhZ3MuYy0yOTMtXHQgKiBBcyBoYXJkd2FyZSB0YWctYmFzZWQgS0FTQU4gb25seSB0YWdzIFZNX0FMTE9DIHZtYWxsb2MgYWxsb2NhdGlvbnNcbm1tL2thc2FuL2h3X3RhZ3MuYzoyOTQ6XHQgKiAoc2VlIHRoZSBjb21tZW50IGluIF9fa2FzYW5fdW5wb2lzb25fdm1hbGxvYyksIGFsbCBvZiB0aGUgcGFnZXNcbm1tL2thc2FuL2h3X3RhZ3MuYy0yOTUtXHQgKiBzaG91bGQgYmVsb25nIHRvIGEgc2luZ2xlIGFyZWEuXG4tLVxubW0va2FzYW4vaHdfdGFncy5jPTMwOD1zdGF0aWMgdm9pZCBpbml0X3ZtYWxsb2NfcGFnZXMoY29uc3Qgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5tbS9rYXNhbi9od190YWdzLmMtMzE4LVxubW0va2FzYW4vaHdfdGFncy5jOjMxOTp2b2lkICpfX2thc2FuX3VucG9pc29uX3ZtYWxsb2MoY29uc3Qgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbm1tL2thc2FuL2h3X3RhZ3MuYy0zMjAtXHRcdFx0XHRrYXNhbl92bWFsbG9jX2ZsYWdzX3QgZmxhZ3MpXG4tLVxubW0va2FzYW4vc2hhZG93LmM9NTY2PXZvaWQgX19rYXNhbl9yZWxlYXNlX3ZtYWxsb2ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0va2FzYW4vc2hhZG93LmMtNjEyLVxubW0va2FzYW4vc2hhZG93LmM6NjEzOnZvaWQgKl9fa2FzYW5fdW5wb2lzb25fdm1hbGxvYyhjb25zdCB2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxubW0va2FzYW4vc2hhZG93LmMtNjE0LVx0XHRcdCAgICAgICBrYXNhbl92bWFsbG9jX2ZsYWdzX3QgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MzYzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktBU0FOIHZtYWxsb2MgVGFnZ2luZyAtIEEgRGl2ZSBpbnRvIHRoZSBBcmNoaXRlY3R1cmUtU3BlY2lmaWMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IEtBU0FOIGhhbmRsZXMgYHZtYWxsb2NgIGFyZWFzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgdGFnZ2luZyBtZWNoYW5pc20uIE15IGZpcnN0IHBvaW50IG9mIHJlZmVyZW5jZSBpcyBgbW0va2FzYW4vaHdfdGFncy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX19rYXNhbl91bnBvaXNvbl92bWFsbG9jYCBmdW5jdGlvbi4gSSBzZWUgaXQgYXNzaWducyBhIHJhbmRvbSB0YWcsIHJldHVybmluZyBhICYjMzQ7dGFnZ2VkIHBvaW50ZXIsJiMzNDsgYW5kIGNydWNpYWxseSwgaXQgdXBkYXRlcyBgYXJlYS0mZ3Q7YWRkcmAgd2l0aCB0aGlzIHRhZ2dlZCBwb2ludGVyLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZzogdGhpcyB0YWdnZWQgcG9pbnRlciBsb2dpYyBhcHBlYXJzICpvbmx5KiBpbiB0aGUgSFdfVEFHUyBhbmQgU1dfVEFHUyBicmFuY2hlcy4gVGhpcyBtZWFucyB0aGlzIHRhZ2dlZCBwb2ludGVyIGFuZCBhcmVhIHVwZGF0ZSBhcmUgKnNvbGVseSogZm9yIGFybTY0IQoKQnV0IHdoYXQgYWJvdXQgb3RoZXIgYXJjaGl0ZWN0dXJlcywgbGlrZSBhbWQ2ND8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBga2FzYW5fdW5wb2lzb25fdm1hbGxvY2AgKmRvZXMqIG9uIGFtZDY0LiBTbyBJJiMzOTttIG5vdyBzd2l0Y2hpbmcgZ2VhcnMgdG8gYG1tL2thc2FuL3NoYWRvdy5jYC4gTXkgbmV4dCBmb2N1cyBpcyBsaW5lcyA2MTItNjMwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgS0FTQU4gaGFuZGxlcyB0aGUgcG9pbnRlciByZXR1cm4gaW4gdGhpcyBjb250ZXh0OyBzcGVjaWZpY2FsbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBvaW50ZXIgaXMgbm90IHRhZ2dlZCBhbmQgdGhhdCBpdCBpcyB1bnBvaXNvbmVkIGluIHRoZSBzaGFkb3cgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2thc2FuL3NoYWRvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTI6XHRcbiA2MTM6XHR2b2lkICpfX2thc2FuX3VucG9pc29uX3ZtYWxsb2MoY29uc3Qgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiA2MTQ6XHRcdFx0XHQgICAgICAga2FzYW5fdm1hbGxvY19mbGFnc190IGZsYWdzKVxuIDYxNTpcdHtcbiA2MTY6XHRcdC8qXG4gNjE3Olx0XHQgKiBTb2Z0d2FyZSBLQVNBTiBtb2RlcyB1bnBvaXNvbiBib3RoIFZNX0FMTE9DIGFuZCBub24tVk1fQUxMT0NcbiA2MTg6XHRcdCAqIG1hcHBpbmdzLCBzbyB0aGUgS0FTQU5fVk1BTExPQ19WTV9BTExPQyBmbGFnIGlzIGlnbm9yZWQuXG4gNjE5Olx0XHQgKiBTb2Z0d2FyZSBLQVNBTiBtb2RlcyBjYW4mIzM5O3Qgb3B0aW1pemUgemVyb2luZyBtZW1vcnkgYnkgY29tYmluaW5nIGl0XG4gNjIwOlx0XHQgKiB3aXRoIHNldHRpbmcgbWVtb3J5IHRhZ3MsIHNvIHRoZSBLQVNBTl9WTUFMTE9DX0lOSVQgZmxhZyBpcyBpZ25vcmVkLlxuIDYyMTpcdFx0ICovXG4gNjIyOlx0XG4gNjIzOlx0XHRpZiAoIWlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoc3RhcnQpKVxuIDYyNDpcdFx0XHRyZXR1cm4gKHZvaWQgKilzdGFydDtcbiA2MjU6XHRcbiA2MjY6XHRcdC8qXG4gNjI3Olx0XHQgKiBEb24mIzM5O3QgdGFnIGV4ZWN1dGFibGUgbWVtb3J5IHdpdGggdGhlIHRhZy1iYXNlZCBtb2RlLlxuIDYyODpcdFx0ICogVGhlIGtlcm5lbCBkb2VzbiYjMzk7dCB0b2xlcmF0ZSBoYXZpbmcgdGhlIFBDIHJlZ2lzdGVyIHRhZ2dlZC5cbiA2Mjk6XHRcdCAqL1xuIDYzMDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tBU0FOX1NXX1RBR1MpIFx1MDAyNlx1MDAyNlxuIDYzMTpcdFx0ICAgICEoZmxhZ3MgXHUwMDI2IEtBU0FOX1ZNQUxMT0NfUFJPVF9OT1JNQUwpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBfX2thc2FuX3VucG9pc29uX3ZtYWxsb2NgIGluIGBtbS9rYXNhbi9zaGFkb3cuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzIEtBU0FOIHVucG9pc29uaW5nIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYF9fa2FzYW5fdW5wb2lzb25fdm1hbGxvY2Agd29ya3MuIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBpbiB0aGlzIGFyZWEsIHNvIGxldCYjMzk7cyBzZWUgaG93IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIEtBU0FOIHNjaGVtZSBmb3IgdmlydHVhbCBhbGxvY2F0aW9ucy4gSSB3YW50IHRvIHBheSBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hhZG93IG1lbW9yeS4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSB1bnBvaXNvbmluZyBsb2dpYyBpdHNlbGYg4oCTIHdoYXQgcmFuZ2Ugb2YgbWVtb3J5IGRvZXMgaXQgYWZmZWN0LCB3aGF0JiMzOTtzIHRoZSBncmFudWxhciBwcmVjaXNpb24sIGFuZCB3aGF0JiMzOTtzIHRoZSBzdHJhdGVneT8gSSBrbm93IGhvdyBLQVNBTiB3b3JrcyBpbiBwcmluY2lwbGUsIGJ1dCBJIG5lZWQgdG8gc2VlIGhvdyBpdOKAmXMgYXBwbGllZCBzcGVjaWZpY2FsbHkgdG8gYHZtYWxsb2NgLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2FzYW4vc2hhZG93LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYzMDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tBU0FOX1NXX1RBR1MpIFx1MDAyNlx1MDAyNlxuIDYzMTpcdFx0ICAgICEoZmxhZ3MgXHUwMDI2IEtBU0FOX1ZNQUxMT0NfUFJPVF9OT1JNQUwpKVxuIDYzMjpcdFx0XHRyZXR1cm4gKHZvaWQgKilzdGFydDtcbiA2MzM6XHRcbiA2MzQ6XHRcdGlmICh1bmxpa2VseSghKGZsYWdzIFx1MDAyNiBLQVNBTl9WTUFMTE9DX0tFRVBfVEFHKSkpXG4gNjM1Olx0XHRcdHN0YXJ0ID0gc2V0X3RhZyhzdGFydCwga2FzYW5fcmFuZG9tX3RhZygpKTtcbiA2MzY6XHRcbiA2Mzc6XHRcdGthc2FuX3VucG9pc29uKHN0YXJ0LCBzaXplLCBmYWxzZSk7XG4gNjM4Olx0XHRyZXR1cm4gKHZvaWQgKilzdGFydDtcbiA2Mzk6XHR9XG4gNjQwOlx0XG4gNjQxOlx0LypcbiA2NDI6XHQgKiBQb2lzb24gdGhlIHNoYWRvdyBmb3IgYSB2bWFsbG9jIHJlZ2lvbi4gQ2FsbGVkIGFzIHBhcnQgb2YgdGhlXG4gNjQzOlx0ICogZnJlZWluZyBwcm9jZXNzIGF0IHRoZSB0aW1lIHRoZSByZWdpb24gaXMgZnJlZWQuXG4gNjQ0Olx0ICovXG4gNjQ1Olx0dm9pZCBfX2thc2FuX3BvaXNvbl92bWFsbG9jKGNvbnN0IHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4gNjQ2Olx0e1xuIDY0NzpcdFx0aWYgKCFpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKHN0YXJ0KSlcbiA2NDg6XHRcdFx0cmV0dXJuO1xuIDY0OTpcdFxuIDY1MDpcdFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIEtBU0FOX0dSQU5VTEVfU0laRSk7XG4gNjUxOlx0XHRrYXNhbl9wb2lzb24oc3RhcnQsIHNpemUsIEtBU0FOX1ZNQUxMT0NfSU5WQUxJRCwgZmFsc2UpO1xuIDY1MjpcdH1cbiA2NTM6XHRcbiA2NTQ6XHQjZWxzZSAvKiBDT05GSUdfS0FTQU5fVk1BTExPQyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDgzMgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktBU0FOIFRhZ2dpbmcgQ29udW5kcnVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgS0FTQU4gc3R1ZmYsIHNwZWNpZmljYWxseSB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbi4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyBob3cgYENPTkZJR19LQVNBTl9HRU5FUklDYCBhY3R1YWxseSBoYW5kbGVzIHRhZ2dpbmcuIERvZXMgZW5hYmxpbmcgdGhpcyB0aGluZyBzZXQgbWVtb3J5IHRhZ3M/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuCgpPa2F5LCBJIHNlZSBhIGZ1bmN0aW9uIGNhbGw6IGBzZXRfdGFnKHN0YXJ0LCBrYXNhbl9yYW5kb21fdGFnKCkpYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IuIE5vdywgSSBuZWVkIHRvIGtub3cgd2hhdCBgc2V0X3RhZ2AgKmlzKiB3aXRoaW4gdGhpcyBgQ09ORklHX0tBU0FOX0dFTkVSSUNgIGNvbnRleHQuIEkgbmVlZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0LCBzbyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCB0aHJvdWdoIHRoZSBjb2RlIHRvIGZpbmQgd2hlcmUgdGhhdCBgc2V0X3RhZ2AgZnVuY3Rpb24gaXMgZGVmaW5lZCwgb3Igd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCBhcyBhIGZ1bmN0aW9uIGNhbGwuIExldCYjMzk7cyBmaW5kIHRoaXMgZGVmaW5pdGlvbi4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBub3QgYnVyaWVkIHRvbyBkZWVwLiBJIGp1c3QgbmVlZCB0byBkZXRlcm1pbmUgaXRzIGJlaGF2aW9yLCBhbmQgdGhlbiBJIHNob3VsZCBoYXZlIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSB0YWdnaW5nIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgc2V0X3RhZ3xzdGF0aWMgaW5saW5lLipzZXRfdGFnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYXJjaC9hcm02NC9tZW1vcnktdGFnZ2luZy1leHRlbnNpb24ucnN0PTI1MD1FeGFtcGxlIG9mIGNvcnJlY3QgdXNhZ2Vcbi0tXG5Eb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvbWVtb3J5LXRhZ2dpbmctZXh0ZW5zaW9uLnJzdC0zMDQtICAgICAqL1xuRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L21lbW9yeS10YWdnaW5nLWV4dGVuc2lvbi5yc3Q6MzA1OiAgICAjZGVmaW5lIHNldF90YWcodGFnZ2VkX2FkZHIpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG5Eb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvbWVtb3J5LXRhZ2dpbmctZXh0ZW5zaW9uLnJzdC0zMDYtICAgICAgICAgICAgYXNtIHZvbGF0aWxlKFwmIzM0O3N0ZyAlMCwgWyUwXVwmIzM0OyA6IDogXCYjMzQ7clwmIzM0OyAodGFnZ2VkX2FkZHIpIDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTsgXFxcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1X3V0aWxzLmg9NTQ9c3RhdGljIGlubGluZSB2b2lkIHNldF9ldmVudF9tYXNrKHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oLTY1LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oOjY2OnN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGFnX21hc2sodm9pZClcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVfdXRpbHMuaC02Ny17XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oPTk3PXN0YXRpYyBpbmxpbmUgdm9pZCBlbnF1ZXVlX3B1dGxsYyhhZGRyNjQgbHNjc2FfZWEpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oLTExNy1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVfdXRpbHMuaDoxMTg6c3RhdGljIGlubGluZSB2b2lkIHNldF90YWdfdXBkYXRlKHZvaWQpXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1X3V0aWxzLmgtMTE5LXtcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuaD0zMDE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2hjaTEzOTRfaXRfZGF0YV9nZXRfdGFnKGNvbnN0IF9fbGUzMiAqZGF0YSlcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuaC0zMDUtXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuaDozMDY6c3RhdGljIGlubGluZSB2b2lkIG9oY2kxMzk0X2l0X2RhdGFfc2V0X3RhZyhfX2xlMzIgKmRhdGEsIHVuc2lnbmVkIGludCB0YWcpXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuaC0zMDcte1xuLS1cbmRyaXZlcnMvZmlyZXdpcmUvcGFja2V0LWhlYWRlci1kZWZpbml0aW9ucy5oPTIwNj1zdGF0aWMgaW5saW5lIHZvaWQgaXNvY19oZWFkZXJfc2V0X2RhdGFfbGVuZ3RoKHUzMiAqaGVhZGVyLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW5ndGgpXG4tLVxuZHJpdmVycy9maXJld2lyZS9wYWNrZXQtaGVhZGVyLWRlZmluaXRpb25zLmgtMjExLVxuZHJpdmVycy9maXJld2lyZS9wYWNrZXQtaGVhZGVyLWRlZmluaXRpb25zLmg6MjEyOnN0YXRpYyBpbmxpbmUgdm9pZCBpc29jX2hlYWRlcl9zZXRfdGFnKHUzMiAqaGVhZGVyLCB1bnNpZ25lZCBpbnQgdGFnKVxuZHJpdmVycy9maXJld2lyZS9wYWNrZXQtaGVhZGVyLWRlZmluaXRpb25zLmgtMjEzLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2RtYS90aS1jcHBpNS5oPTI3Nj1zdGF0aWMgaW5saW5lIHZvaWQgY3BwaTVfZGVzY19nZXRfdGFnc19pZHMoc3RydWN0IGNwcGk1X2Rlc2NfaGRyX3QgKmRlc2NfaGRyLFxuLS1cbmluY2x1ZGUvbGludXgvZG1hL3RpLWNwcGk1LmgtMjk1LSAqL1xuaW5jbHVkZS9saW51eC9kbWEvdGktY3BwaTUuaDoyOTY6c3RhdGljIGlubGluZSB2b2lkIGNwcGk1X2Rlc2Nfc2V0X3RhZ3NfaWRzKHN0cnVjdCBjcHBpNV9kZXNjX2hkcl90ICpkZXNjX2hkcixcbmluY2x1ZGUvbGludXgvZG1hL3RpLWNwcGk1LmgtMjk3LVx0XHRcdFx0XHQgICB1MzIgc3JjX3RhZ19pZCwgdTMyIGRzdF90YWdfaWQpXG4tLVxuaW5jbHVkZS9saW51eC9kc2Evb2NlbG90Lmg9MjQ3PXN0YXRpYyBpbmxpbmUgdm9pZCBvY2Vsb3RfaWZoX3NldF9zcmModm9pZCAqaW5qZWN0aW9uLCB1NjQgc3JjKVxuLS1cbmluY2x1ZGUvbGludXgvZHNhL29jZWxvdC5oLTI1MS1cbmluY2x1ZGUvbGludXgvZHNhL29jZWxvdC5oOjI1MjpzdGF0aWMgaW5saW5lIHZvaWQgb2NlbG90X2lmaF9zZXRfdGFnX3R5cGUodm9pZCAqaW5qZWN0aW9uLCB1NjQgdGFnX3R5cGUpXG5pbmNsdWRlL2xpbnV4L2RzYS9vY2Vsb3QuaC0yNTMte1xuLS1cbmluY2x1ZGUvbGludXgvaW50ZXJjb25uZWN0Lmg9MTAyPXN0YXRpYyBpbmxpbmUgaW50IGljY19zZXRfYncoc3RydWN0IGljY19wYXRoICpwYXRoLCB1MzIgYXZnX2J3LCB1MzIgcGVha19idylcbi0tXG5pbmNsdWRlL2xpbnV4L2ludGVyY29ubmVjdC5oLTEwNi1cbmluY2x1ZGUvbGludXgvaW50ZXJjb25uZWN0Lmg6MTA3OnN0YXRpYyBpbmxpbmUgdm9pZCBpY2Nfc2V0X3RhZyhzdHJ1Y3QgaWNjX3BhdGggKnBhdGgsIHUzMiB0YWcpXG5pbmNsdWRlL2xpbnV4L2ludGVyY29ubmVjdC5oLTEwOC17XG4tLVxuaW5jbHVkZS9saW51eC9rYXNhbi5oPTUxND1zdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcmVjb3JkX2F1eF9zdGFjayh2b2lkICpwdHIpIHt9XG4tLVxuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUxOS1cbmluY2x1ZGUvbGludXgva2FzYW4uaDo1MjA6c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcbmluY2x1ZGUvbGludXgva2FzYW4uaC01MjEte1xuLS1cbmluY2x1ZGUvbGludXgva2FzYW4uaD01MzI9Ym9vbCBrYXNhbl9yZXBvcnQoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsXG4tLVxuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUzNi1cbmluY2x1ZGUvbGludXgva2FzYW4uaDo1Mzc6c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcbmluY2x1ZGUvbGludXgva2FzYW4uaC01Mzgte1xuLS1cbm1tL2thc2FuL2thc2FuLmg9NDExPXN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9xdWFyYW50aW5lX3JlbW92ZV9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpIHsgfVxuLS1cbm1tL2thc2FuL2thc2FuLmgtNDE0LSNpZm5kZWYgYXJjaF9rYXNhbl9zZXRfdGFnXG5tbS9rYXNhbi9rYXNhbi5oOjQxNTpzdGF0aWMgaW5saW5lIGNvbnN0IHZvaWQgKmFyY2hfa2FzYW5fc2V0X3RhZyhjb25zdCB2b2lkICphZGRyLCB1OCB0YWcpXG5tbS9rYXNhbi9rYXNhbi5oLTQxNi17XG4tLVxubW0va2FzYW4va2FzYW4uaC00MjMtXG5tbS9rYXNhbi9rYXNhbi5oOjQyNDojZGVmaW5lIHNldF90YWcoYWRkciwgdGFnKVx0KCh2b2lkICopYXJjaF9rYXNhbl9zZXRfdGFnKChhZGRyKSwgKHRhZykpKVxubW0va2FzYW4va2FzYW4uaC00MjUtI2RlZmluZSBnZXRfdGFnKGFkZHIpXHRcdGFyY2hfa2FzYW5fZ2V0X3RhZyhhZGRyKVxuLS1cbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaD0yNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICp2aXJ0X3RvX3BhZ2Uodm9pZCAqdmlydClcbi0tXG50b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmgtMzMtXG50b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmg6MzQ6c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaC0zNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjg3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIFNhbml0aXplciYjMzk7cyBDb3JlKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBUaGUgcHJvYmxlbSYjMzk7cyBiZWVuIHBvaW50ZWQgdG93YXJkcyBtZW1vcnkgZXJyb3JzLCBzbyBJJiMzOTttIHRoaW5raW5nIGEgZGVlcCBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgc2FmZXR5IG1lY2hhbmlzbXMgaXMgaW4gb3JkZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyBzdHJhaWdodCBmb3IgYG1tL2thc2FuL2thc2FuLmhgLiBMaW5lIDQxNCDigJMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgY3JpdGljYWwgZGVmaW5pdGlvbnMgb3IgY29uZmlndXJhdGlvbnMgcmVzaWRlLCBvciBwb3RlbnRpYWxseSB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBvbmUgb2YgdGhlIEtBU0FOJiMzOTtzIGNvcmUgbWVtb3J5IGVycm9yIGhhbmRsaW5nIHJvdXRpbmVzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEga2V5IG1hY3JvLCBzdHJ1Y3R1cmUsIG9yIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHRoZXJlIHRoYXQmIzM5O3MgY2VudHJhbCB0byBLQVNBTiYjMzk7cyBvcGVyYXRpb24uIFRoaXMgbGluZSBjb3VsZCBleHBvc2UgdGhlIHRyaWdnZXIgdGhhdCBjYXVzZXMgS0FTQU4gdG8gc3RlcCBpbiBvciBhbiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHJlbGV2YW50IHN0YXRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9rYXNhbi9rYXNhbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTA6XHRzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcXVhcmFudGluZV9yZWR1Y2Uodm9pZCkgeyB9XG4gNDExOlx0c3RhdGljIGlubGluZSB2b2lkIGthc2FuX3F1YXJhbnRpbmVfcmVtb3ZlX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSkgeyB9XG4gNDEyOlx0I2VuZGlmXG4gNDEzOlx0XG4gNDE0Olx0I2lmbmRlZiBhcmNoX2thc2FuX3NldF90YWdcbiA0MTU6XHRzdGF0aWMgaW5saW5lIGNvbnN0IHZvaWQgKmFyY2hfa2FzYW5fc2V0X3RhZyhjb25zdCB2b2lkICphZGRyLCB1OCB0YWcpXG4gNDE2Olx0e1xuIDQxNzpcdFx0cmV0dXJuIGFkZHI7XG4gNDE4Olx0fVxuIDQxOTpcdCNlbmRpZlxuIDQyMDpcdCNpZm5kZWYgYXJjaF9rYXNhbl9nZXRfdGFnXG4gNDIxOlx0I2RlZmluZSBhcmNoX2thc2FuX2dldF90YWcoYWRkcilcdDBcbiA0MjI6XHQjZW5kaWZcbiA0MjM6XHRcbiA0MjQ6XHQjZGVmaW5lIHNldF90YWcoYWRkciwgdGFnKVx0KCh2b2lkICopYXJjaF9rYXNhbl9zZXRfdGFnKChhZGRyKSwgKHRhZykpKVxuIDQyNTpcdCNkZWZpbmUgZ2V0X3RhZyhhZGRyKVx0XHRhcmNoX2thc2FuX2dldF90YWcoYWRkcilcbiA0MjY6XHRcbiA0Mjc6XHQjaWZkZWYgQ09ORklHX0tBU0FOX0hXX1RBR1NcbiA0Mjg6XHRcbiA0Mjk6XHQjZGVmaW5lIGh3X2VuYWJsZV90YWdfY2hlY2tzX3N5bmMoKVx0XHRhcmNoX2VuYWJsZV90YWdfY2hlY2tzX3N5bmMoKVxuIDQzMDpcdCNkZWZpbmUgaHdfZW5hYmxlX3RhZ19jaGVja3NfYXN5bmMoKVx0XHRhcmNoX2VuYWJsZV90YWdfY2hlY2tzX2FzeW5jKClcbiA0MzE6XHQjZGVmaW5lIGh3X2VuYWJsZV90YWdfY2hlY2tzX2FzeW1tKClcdFx0YXJjaF9lbmFibGVfdGFnX2NoZWNrc19hc3ltbSgpXG4gNDMyOlx0I2RlZmluZSBod19zdXBwcmVzc190YWdfY2hlY2tzX3N0YXJ0KClcdFx0YXJjaF9zdXBwcmVzc190YWdfY2hlY2tzX3N0YXJ0KClcbiA0MzM6XHQjZGVmaW5lIGh3X3N1cHByZXNzX3RhZ19jaGVja3Nfc3RvcCgpXHRcdGFyY2hfc3VwcHJlc3NfdGFnX2NoZWNrc19zdG9wKClcbiA0MzQ6XHQjZGVmaW5lIGh3X2ZvcmNlX2FzeW5jX3RhZ19mYXVsdCgpXHRcdGFyY2hfZm9yY2VfYXN5bmNfdGFnX2ZhdWx0KClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0MzMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLQVNBTiBUYWdnaW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGhlcmUgd2UgZ28uIEludGVyZXN0aW5nISBJJiMzOTttIG5vdGljaW5nIHNvbWV0aGluZyBhYm91dCBob3cgYGFyY2hfa2FzYW5fc2V0X3RhZ2AgYmVoYXZlcy4gSXQgc2VlbXMgdGhhdCwgdW5sZXNzIHdlJiMzOTtyZSBvbiBhcm02NCwgdGhhdCBmdW5jdGlvbiBzaW1wbHkgcmV0dXJucyB0aGUgaW5wdXQgYGFkZHJgLiBUaGF0JiMzOTtzIG5vdCB0aGUgdXN1YWwgaW1wbGVtZW50YXRpb24gSSYjMzk7bSBhY2N1c3RvbWVkIHRvIHNlZWluZy4gTm93LCB3aGVyZSBpcyBgYXJjaF9rYXNhbl9yZXNldF90YWdgIGRlZmluZWQ/IEFoLCBJIHNlZSBpdCYjMzk7cyBvbmx5IGluIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2thc2FuLmhgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnkgKm90aGVyKiBhcmNoaXRlY3R1cmUgZGVmaW5lcyAqZWl0aGVyKiBgYXJjaF9rYXNhbl9yZXNldF90YWdgIG9yIGBhcmNoX2thc2FuX3NldF90YWdgLCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgZXh0ZW50IG9mIHRoaXMgYXJtNjQgc3BlY2lmaWMgY29kZS4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYGFyY2hfa2FzYW5fcmVzZXRfdGFnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJjaF9rYXNhbl9yZXNldF90YWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rYXNhbi5oLTEyLSNkZWZpbmUgYXJjaF9rYXNhbl9zZXRfdGFnKGFkZHIsIHRhZylcdF9fdGFnX3NldChhZGRyLCB0YWcpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2thc2FuLmg6MTM6I2RlZmluZSBhcmNoX2thc2FuX3Jlc2V0X3RhZyhhZGRyKVx0X190YWdfcmVzZXQoYWRkcilcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va2FzYW4uaC0xNC0jZGVmaW5lIGFyY2hfa2FzYW5fZ2V0X3RhZyhhZGRyKVx0X190YWdfZ2V0KGFkZHIpXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0zNjk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3R0YnIxX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMzcxLVx0LyogVFRCUjEgYWRkcmVzc2VzIG1heSBoYXZlIGEgdGFnIGlmIEtBU0FOX1NXX1RBR1MgaXMgaW4gdXNlICovXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjM3MjpcdHJldHVybiBhcmNoX2thc2FuX3Jlc2V0X3RhZyhhZGRyKSBcdTAwM2U9IFBBR0VfT0ZGU0VUO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0zNzMtfVxuLS1cbmluY2x1ZGUvbGludXgva2FzYW4uaD01MjA9c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcbmluY2x1ZGUvbGludXgva2FzYW4uaC01MjEte1xuaW5jbHVkZS9saW51eC9rYXNhbi5oOjUyMjpcdHJldHVybiAodm9pZCAqKWFyY2hfa2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUyMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTIxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTI2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IFdvcnRoRnV6emluZz1mYWxzZSBEZWNpc2lvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlZCBhbnkgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgY2hhbmdlcyBmb3IgZnV6emluZy4gIEkgc2VlIHRoYXQgYGFyY2hfa2FzYW5fcmVzZXRfdGFnYCBpcyBkZWZpbmVkIHdpdGhpbiBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rYXNhbi5oYC4gIFRoaXMgaXMgYSByZWQgZmxhZywgcG9pbnRpbmcgdG93YXJkcyBhbiBBUk02NC1zcGVjaWZpYyBmZWF0dXJlLiAgVGhlIGBrYXNhbl9yZXNldF90YWdgIGZ1bmN0aW9uLCB3aGljaCBjYWxscyBgYXJjaF9rYXNhbl9yZXNldF90YWdgLCBpcyBkZWZpbmVkIHdpdGhpbiBgaW5jbHVkZS9saW51eC9rYXNhbi5oYCBhbmQgY29uZGl0aW9uYWxseSBjYWxscyBgYXJjaF9rYXNhbl9yZXNldF90YWdgIG9ubHkgd2hlbiBLQVNBTiYjMzk7cyB0YWdnaW5nIGZlYXR1cmVzIGFyZSBlbmFibGVkLiAgVGhlc2UgZmVhdHVyZXMgKGBDT05GSUdfS0FTQU5fU1dfVEFHU2AgYW5kIGBDT05GSUdfS0FTQU5fSFdfVEFHU2ApIGRlcGVuZCBvbiBgSEFWRV9BUkNIX0tBU0FOX1NXX1RBR1NgIGFuZCBgSEFWRV9BUkNIX0tBU0FOX0hXX1RBR1NgLCB3aGljaCBhcmUgc2VsZWN0ZWQgZXhjbHVzaXZlbHkgd2l0aGluIGBhcmNoL2FybTY0L0tjb25maWdgLgoKTm93LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGtlcm5lbC9mb3JrLmNgLCByZXBsYWNpbmcgYHZmcmVlKHZtX2FyZWEtJmd0O2FkZHIpYCB3aXRoIGB2ZnJlZShrYXNhbl9yZXNldF90YWcodm1fYXJlYS0mZ3Q7YWRkcikpYC4gIEkgaW1tZWRpYXRlbHkgdGhvdWdodCB0byBjaGVjayB0aGUgaW1wYWN0IG9uIGFtZDY0ICh4ODZfNjQpLCBvdXIgdGFyZ2V0LiAgT24gYW1kNjQsIGBrYXNhbl9yZXNldF90YWcodm1fYXJlYS0mZ3Q7YWRkcilgIHNpbXBseSBleHBhbmRzIHRvIGAodm9pZCAqKSh2bV9hcmVhLSZndDthZGRyKWAuICBUaGVyZWZvcmUsIG9uIGFtZDY0LCB0aGUgY29tcGlsZWQgYmluYXJ5IGNvZGUgYmVmb3JlIGFuZCBhZnRlciB0aGlzIHBhdGNoIGlzIGlkZW50aWNhbCEgVGhpcyBpcyBiZWNhdXNlIG1lbW9yeSB0YWdnaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gQU1ENjQuCgpDcnVjaWFsbHksIHRoZSBwcm9tcHQmIzM5O3MgY3JpdGVyaWEgZm9yIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJlY29tZXMgcmVsZXZhbnQuIFRoZSBsYXN0IGJ1bGxldCBwb2ludCBvZiBuZWdhdGl2ZSBjcml0ZXJpYSBjbGVhcmx5IHN0YXRlcyAmIzM0O0NvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSYjMzQ7LiAgVGhpcyBwYXRjaCwgaW4gZWZmZWN0LCBpbnRyb2R1Y2VzIG5vIGNoYW5nZSBvbiBhbWQ2NC4gIEV2ZW4gdGhlIHNlY29uZC10by1sYXN0IGJ1bGxldCBwb2ludCBhcHBsaWVzOiAmIzM0O0J1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4mIzM0OyAtIHRoaXMgaXMgcHJlY2lzZWx5IHRoZSBjYXNlIGhlcmUsIGFzIGBrYXNhbl9yZXNldF90YWdgIGlzIGEgbm8tb3AgbWFjcm8gdGhhdCBkb2VzIG5vdCBhbHRlciBjb21waWxlZCBsb2dpYyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KClRoZXJlZm9yZSwgc2luY2UgS0FTQU4mIzM5O3MgdGFnLWJhc2VkIGZlYXR1cmVzIGFyZSBleGNsdXNpdmVseSBBUk02NC1zcGVjaWZpYywgYW5kIHRoZSBjaGFuZ2UgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggaXMgYSBuby1vcCBvbiBhbWQ2NCwgSSBjb25jbHVkZSB0aGF0IHRoaXMgcGF0Y2ggc2hvdWxkIGJlIG1hcmtlZCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQgaXMgc3RyaWN0bHkgYSBidWcgZml4IGZvciBhbiBBUk02NCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBiZWhhdmlvciBjaGFuZ2VzIG9uIGFtZDY0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2thc2FuX3Jlc2V0X3RhZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5OTAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHg4NiBMQU0gYW5kIEtBU0FOIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHNvbWV0aGluZyBhbmQgbXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXJlJiMzOTtzIG5vdGhpbmcgaW1tZWRpYXRlbHkgcmVsZXZhbnQgaW4gdGhlIGBhcmNoL3g4NmAgZGlyZWN0b3J5LiBNYWtlcyBzZW5zZSwgSSYjMzk7dmUgZ290IGEgZGVjZW50IHVuZGVyc3RhbmRpbmcgb2YgaG93IHg4NiBpcyBzdHJ1Y3R1cmVkLCBhbmQgSSBkb24mIzM5O3QgcmVjYWxsIGFueXRoaW5nIHNwZWNpZmljIGp1bXBpbmcgb3V0IGF0IG1lLiBOb3csIGxldCYjMzk7cyBwaXZvdCB0byBMaW5lYXIgQWRkcmVzcyBNYXNraW5nLCBvciBMQU0uIFRoZSBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIGlzIHdoZXRoZXIgdGhlIHg4NiBpbXBsZW1lbnRhdGlvbiBvZiBMQU0gaW50ZXJhY3RzIHdpdGggS0FTQU4gdGFnZ2luZyBvciBga2FzYW5fcmVzZXRfdGFnYCBpbiBhbnkgd2F5LiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBhbmQgaG93IHRoZXkgbWlnaHQgcmVsYXRlIHRvIHRoaXMgcGFydGljdWxhciB4ODYgZmVhdHVyZS4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIEkgbmVlZCB0byBkbyBhIHF1aWNrIGJ1dCB0aG9yb3VnaCBzZWFyY2guIEkmIzM5O2xsIGZpcmUgb2ZmIGEgZ3JlcCBjb21tYW5kIHRvIGZpbmQgYWxsIGluc3RhbmNlcyB3aGVyZSBgTEFNYCBhbmQgYGthc2FuYCBhcmUgbWVudGlvbmVkIHRvZ2V0aGVyIGluIHRoZSBjb2RlYmFzZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIGludGVyYWN0aW9ucywgaWYgYW55LiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSByZXN1bHRzIGFuZCBwaW5wb2ludCB0aGUgZGV0YWlscyBJJiMzOTttIHNlZWtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19BRERSRVNTX01BU0tJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni9jcHVpbmZvLnJzdD0xNzY9Rm9yIGV4YW1wbGUsIGlmIExpbmVhciBBZGRyZXNzIE1hc2tpbmcgKExBTSkgaXMgbm90IGVuYWJsZWQgd2hlbiBidWlsZGluZyAoaS5lLixcbkRvY3VtZW50YXRpb24vYXJjaC94ODYvY3B1aW5mby5yc3Q6MTc3OkNPTkZJR19BRERSRVNTX01BU0tJTkcgaXMgbm90IHNlbGVjdGVkKSB0aGUgZmxhZyBcJiMzNDtsYW1cJiMzNDsgd2lsbCBub3Qgc2hvdyB1cC5cbkRvY3VtZW50YXRpb24vYXJjaC94ODYvY3B1aW5mby5yc3QtMTc4LUV2ZW4gdGhvdWdoIHRoZSBmZWF0dXJlIHdpbGwgc3RpbGwgYmUgZGV0ZWN0ZWQgdmlhIENQVUlELCB0aGUga2VybmVsIGRpc2FibGVzXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11Lmg9MjU9dHlwZWRlZiBzdHJ1Y3Qge1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL21tdS5oLTUwLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11Lmg6NTE6I2lmZGVmIENPTkZJR19BRERSRVNTX01BU0tJTkdcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21tdS5oLTUyLVx0LyogQWN0aXZlIExBTSBtb2RlOiAgWDg2X0NSM19MQU1fVTQ4IG9yIFg4Nl9DUjNfTEFNX1U1NyBvciAwIChkaXNhYmxlZCkgKi9cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oPTgyPXN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbGR0KHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaC04Ny1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0Lmg6ODg6I2lmZGVmIENPTkZJR19BRERSRVNTX01BU0tJTkdcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgtODktc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1tX2xhbV9jcjNfbWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oPTc0PXN0cnVjdCB0bGJfc3RhdGUge1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtMTA5LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaDoxMTA6I2lmZGVmIENPTkZJR19BRERSRVNTX01BU0tJTkdcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtMTExLVx0Lypcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oPTQ2OD1zdGF0aWMgaW5saW5lIGJvb2wgaHVnZV9wbWRfbmVlZHNfZmx1c2gocG1kX3Qgb2xkcG1kLCBwbWRfdCBuZXdwbWQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaC00ODYtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oOjQ4NzojaWZkZWYgQ09ORklHX0FERFJFU1NfTUFTS0lOR1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaC00ODgtc3RhdGljIGlubGluZSAgdTY0IHRsYnN0YXRlX2xhbV9jcjNfbWFzayh2b2lkKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaD0yMT1leHRlcm4gdW5zaWduZWQgbG9uZyBVU0VSX1BUUl9NQVg7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgtMjItXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0Lmg6MjM6I2lmZGVmIENPTkZJR19BRERSRVNTX01BU0tJTkdcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaC0yNC0vKlxuLS1cbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmM9Nzg2PXN0YXRpYyBsb25nIHByY3RsX21hcF92ZHNvKGNvbnN0IHN0cnVjdCB2ZHNvX2ltYWdlICppbWFnZSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMtNzk3LVxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYzo3OTg6I2lmZGVmIENPTkZJR19BRERSRVNTX01BU0tJTkdcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMtNzk5LVxuLS1cbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmM9ODY2PWxvbmcgZG9fYXJjaF9wcmN0bF82NChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBvcHRpb24sIHVuc2lnbmVkIGxvbmcgYXJnMilcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jLTk1Mi0jZW5kaWZcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmM6OTUzOiNpZmRlZiBDT05GSUdfQUREUkVTU19NQVNLSU5HXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jLTk1NC1cdGNhc2UgQVJDSF9HRVRfVU5UQUdfTUFTSzpcbi0tXG5hcmNoL3g4Ni9tbS9pbml0LmM9MTAxMz1fX3Zpc2libGUgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdGxiX3N0YXRlLCBjcHVfdGxic3RhdGUpID0ge1xuLS1cbmFyY2gveDg2L21tL2luaXQuYy0xMDE4LVxuYXJjaC94ODYvbW0vaW5pdC5jOjEwMTk6I2lmZGVmIENPTkZJR19BRERSRVNTX01BU0tJTkdcbmFyY2gveDg2L21tL2luaXQuYy0xMDIwLURFRklORV9QRVJfQ1BVKHU2NCwgdGxic3RhdGVfdW50YWdfbWFzayk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L2xhbS5jPTEyNz1zdGF0aWMgaW5saW5lIGludCBsYW1faXNfYXZhaWxhYmxlKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L2xhbS5jLTE0MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYW0uYzoxNDE6XHQvKiBSZXR1cm4gMCBpZiBDT05GSUdfQUREUkVTU19NQVNLSU5HIGlzIG5vdCBzZXQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYW0uYy0xNDItXHRyZXQgPSBzeXNjYWxsKFNZU19hcmNoX3ByY3RsLCBBUkNIX0dFVF9NQVhfVEFHX0JJVFMsIFx1MDAyNmJpdHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU1MgoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiAxMDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBQYXRjaDogV29ydGhGdXp6aW5nIEV2YWx1YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY2hhbmdlIG1vZGlmaWVzIHRoZSBgdmZyZWVgIGNhbGwgdG8gaW5jbHVkZSBga2FzYW5fcmVzZXRfdGFnYCBpbiBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCB3aXRoaW4gYGtlcm5lbC9mb3JrLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBLQVNBTi1yZWxhdGVkIGNoYW5nZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJlaGF2aW9yLgoKVGhlIGNyaXRpY2FsIGluc2lnaHQgaGVyZSBpcyB0aGF0IGBrYXNhbl9yZXNldF90YWdgIGlzIG9ubHkgcmVsZXZhbnQgZm9yIGFyY2hpdGVjdHVyZXMgd2l0aCB0YWctYmFzZWQgS0FTQU4sIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IHN1cHBvcnQgYENPTkZJR19LQVNBTl9TV19UQUdTYCBvciBgQ09ORklHX0tBU0FOX0hXX1RBR1NgLiBSaWdodCBub3csIHRoYXQgc2VlbXMgdG8gYmUgZXhjbHVzaXZlIHRvIGBhcm02NGAsIGxldmVyYWdpbmcgZmVhdHVyZXMgbGlrZSBBUk0mIzM5O3MgVG9wIEJ5dGUgSWdub3JlIG9yIE1lbW9yeSBUYWdnaW5nIEV4dGVuc2lvbi4gIE9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBhbWQ2NCwgYGthc2FuX3Jlc2V0X3RhZ2AgaXMgZXNzZW50aWFsbHkgYSBuby1vcCwgZGVmaW5lZCBhcyBhbiBpbmxpbmUgZnVuY3Rpb24gdGhhdCBqdXN0IGNhc3RzIGFuZCByZXR1cm5zIHRoZSBzYW1lIHBvaW50ZXI6IGByZXR1cm4gKHZvaWQgKilhZGRyO2AuCgpUaGVyZWZvcmUsIG9uIGFtZDY0LCB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSBhbmQgYmluYXJ5LWlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwgY29kZS4gSXTigJlzIGEgcHVyZSBjb3NtZXRpYyBvciBjb25kaXRpb25hbCBjaGFuZ2UgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2Ygd2hhdCBnZXRzIGV4ZWN1dGVkIG9uIGFtZDY0LiAgVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoaXMgY2hhbmdlIGlzICpub3QqIHdvcnRoIGZ1enppbmcgb24gYW1kNjQuIEl0IG5lYXRseSBmYWxscyBpbnRvIHRoZSAmIzM0O0NvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSYjMzQ7IG5lZ2F0aXZlIGNyaXRlcmlhIG91dGxpbmVkIGluIFNlY3Rpb24gMi4KClRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIHJldmlldyBTZWN0aW9uIDIgYWdhaW4uIEl0IGNvbmZpcm1zIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiBpcyAqb25seSogcmVsZXZhbnQgdG8gb3RoZXIgYXJjaGl0ZWN0dXJlcy4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBgV29ydGhGdXp6aW5nPWZhbHNlYCBjb25kaXRpb24sIGFuZCBtb3JlIHBhcnRpY3VsYXJseSwgd2hhdCBoYXBwZW5zIHdpdGggYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCB3aGVuIHdlIGdldCB0aGVyZS4gSXQmIzM5O3MgdXN1YWxseSBlbXB0eSwgb3IgYXQgbGVhc3QgYSBudWxsIG9yIGVtcHR5IGxpc3QgaXMgZXhwZWN0ZWQuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgKmFueSogY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIGZ1enppbmcgb24gYW1kNjQsIGJ1dCBpZiB3ZSYjMzk7cmUgbm90IGZ1enppbmcsIHRoZW4gdGhlcmUgc2hvdWxkbiYjMzk7dCBiZS4KCkJhc2VkIG9uIHRoZSBldmlkZW5jZSwgdGhlIGNvcnJlY3QgY2FsbCB0byBgc2V0LXJlc3VsdHNgIHNob3VsZCBiZToKCiogICBgV29ydGhGdXp6aW5nYDogZmFsc2UKKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgY29kZSByZWxhdGVkIHRvIEtBU0FOIHRhZyByZXNldHRpbmcuIFRoZSBga2FzYW5fcmVzZXRfdGFnYCBmdW5jdGlvbiBpcyBvbmx5IGFjdGl2ZSB3aGVuIGBDT05GSUdfS0FTQU5fU1dfVEFHU2Agb3IgYENPTkZJR19LQVNBTl9IV19UQUdTYCBpcyBlbmFibGVkLCB3aGljaCBpcyBjdXJyZW50bHkgbGltaXRlZCB0byBgYXJtNjRgLiBPbiBhbWQ2NCwgYGthc2FuX3Jlc2V0X3RhZ2AgaXMgZGVmaW5lZCBhcyBhIG5vLW9wLCByZXN1bHRpbmcgaW4gbm8gZnVuY3Rpb25hbCBvciBiaW5hcnkgY2hhbmdlLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBmYWxscyB1bmRlciAmIzM0O2NvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSYjMzQ7IGFuZCBpcyBub3Qgd29ydGggZnV6emluZyBvbiBhbWQ2NC4KKiAgIGBGb2N1c1N5bWJvbHNgOiBbXQoqICAgYEVuYWJsZUNvbmZpZ3NgOiBbXQoKVGhhdCBzZWVtcyBzb2xpZCBhbmQgbG9naWNhbGx5IGNvbnNpc3RlbnQuIExldCYjMzk7cyBjYWxsIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGtlcm5lbC9mb3JrLmMgdG8gd3JhcCB2bV9hcmVhLVx1MDAzZWFkZHIgaW4ga2FzYW5fcmVzZXRfdGFnKCkgcHJpb3IgdG8gY2FsbGluZyB2ZnJlZSgpLiBUaGUga2FzYW5fcmVzZXRfdGFnKCkgaGVscGVyIGlzIG9ubHkgYWN0aXZlIHdoZW4gQ09ORklHX0tBU0FOX1NXX1RBR1Mgb3IgQ09ORklHX0tBU0FOX0hXX1RBR1MgaXMgZW5hYmxlZCwgYm90aCBvZiB3aGljaCBhcmUgZXhjbHVzaXZlIHRvIGFybTY0LiBPbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCBrYXNhbl9yZXNldF90YWcoKSBpcyBhbiBpZGVudGl0eSBmdW5jdGlvbiByZXR1cm5pbmcgKHZvaWQgKilhZGRyIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBDb25zZXF1ZW50bHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwgb3IgYmluYXJ5IGNoYW5nZXMgdG8gY29tcGlsZWQgY29kZSBvbiBhbWQ2NCwgZmFsbGluZyB1bmRlciBjaGFuZ2VzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBrZXJuZWwvZm9yay5jIHRvIHdyYXAgdm1fYXJlYS1cdTAwM2VhZGRyIGluIGthc2FuX3Jlc2V0X3RhZygpIHByaW9yIHRvIGNhbGxpbmcgdmZyZWUoKS4gVGhlIGthc2FuX3Jlc2V0X3RhZygpIGhlbHBlciBpcyBvbmx5IGFjdGl2ZSB3aGVuIENPTkZJR19LQVNBTl9TV19UQUdTIG9yIENPTkZJR19LQVNBTl9IV19UQUdTIGlzIGVuYWJsZWQsIGJvdGggb2Ygd2hpY2ggYXJlIGV4Y2x1c2l2ZSB0byBhcm02NC4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwga2FzYW5fcmVzZXRfdGFnKCkgaXMgYW4gaWRlbnRpdHkgZnVuY3Rpb24gcmV0dXJuaW5nICh2b2lkICopYWRkciB3aXRob3V0IG1vZGlmaWNhdGlvbi4gQ29uc2VxdWVudGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIG9yIGJpbmFyeSBjaGFuZ2VzIHRvIGNvbXBpbGVkIGNvZGUgb24gYW1kNjQsIGZhbGxpbmcgdW5kZXIgY2hhbmdlcyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjM5OjUyLjY3NjEwOTUzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDQzOTY4NzExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGtlcm5lbC9mb3JrLmMgdG8gd3JhcCB2bV9hcmVhLVxcdTAwM2VhZGRyIGluIGthc2FuX3Jlc2V0X3RhZygpIHByaW9yIHRvIGNhbGxpbmcgdmZyZWUoKS4gVGhlIGthc2FuX3Jlc2V0X3RhZygpIGhlbHBlciBpcyBvbmx5IGFjdGl2ZSB3aGVuIENPTkZJR19LQVNBTl9TV19UQUdTIG9yIENPTkZJR19LQVNBTl9IV19UQUdTIGlzIGVuYWJsZWQsIGJvdGggb2Ygd2hpY2ggYXJlIGV4Y2x1c2l2ZSB0byBhcm02NC4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwga2FzYW5fcmVzZXRfdGFnKCkgaXMgYW4gaWRlbnRpdHkgZnVuY3Rpb24gcmV0dXJuaW5nICh2b2lkICopYWRkciB3aXRob3V0IG1vZGlmaWNhdGlvbi4gQ29uc2VxdWVudGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIG9yIGJpbmFyeSBjaGFuZ2VzIHRvIGNvbXBpbGVkIGNvZGUgb24gYW1kNjQsIGZhbGxpbmcgdW5kZXIgY2hhbmdlcyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mzk6NTIuNjc2MTEzODMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTEyNjY3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYzI4YmM3MzczYmZjYjY4ZGY5NDJkZDRmMGJkZDBlOGVhN2NkODk5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDE0IDEwOjM5OjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXFxuaW5kZXggNDE2NzU4YzhhM2Q0My4uNmVhZDg3N2Y4N2E4YyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZm9yay5jXFxuKysrIGIva2VybmVsL2ZvcmsuY1xcbkBAIC0yODAsNyArMjgwLDcgQEAgc3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmgpXFxuIFxcdGlmICh0cnlfcmVsZWFzZV90aHJlYWRfc3RhY2tfdG9fY2FjaGUodm1fc3RhY2stXFx1MDAzZXN0YWNrX3ZtX2FyZWEpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHR2ZnJlZSh2bV9hcmVhLVxcdTAwM2VhZGRyKTtcXG4rXFx0dmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXFx1MDAzZWFkZHIpKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX2RlbGF5ZWRfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mzk6NTMuMTY3OTY2OTg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNTk5NDc4MTAxMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGtlcm5lbC9mb3JrLmMgdG8gd3JhcCB2bV9hcmVhLVxcdTAwM2VhZGRyIGluIGthc2FuX3Jlc2V0X3RhZygpIHByaW9yIHRvIGNhbGxpbmcgdmZyZWUoKS4gVGhlIGthc2FuX3Jlc2V0X3RhZygpIGhlbHBlciBpcyBvbmx5IGFjdGl2ZSB3aGVuIENPTkZJR19LQVNBTl9TV19UQUdTIG9yIENPTkZJR19LQVNBTl9IV19UQUdTIGlzIGVuYWJsZWQsIGJvdGggb2Ygd2hpY2ggYXJlIGV4Y2x1c2l2ZSB0byBhcm02NC4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwga2FzYW5fcmVzZXRfdGFnKCkgaXMgYW4gaWRlbnRpdHkgZnVuY3Rpb24gcmV0dXJuaW5nICh2b2lkICopYWRkciB3aXRob3V0IG1vZGlmaWNhdGlvbi4gQ29uc2VxdWVudGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIG9yIGJpbmFyeSBjaGFuZ2VzIHRvIGNvbXBpbGVkIGNvZGUgb24gYW1kNjQsIGZhbGxpbmcgdW5kZXIgY2hhbmdlcyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYzI4YmM3MzczYmZjYjY4ZGY5NDJkZDRmMGJkZDBlOGVhN2NkODk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTA6Mzk6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xuaW5kZXggNDE2NzU4YzhhM2Q0My4uNmVhZDg3N2Y4N2E4YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mb3JrLmNcbisrKyBiL2tlcm5lbC9mb3JrLmNcbkBAIC0yODAsNyArMjgwLDcgQEAgc3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmgpXG4gXHRpZiAodHJ5X3JlbGVhc2VfdGhyZWFkX3N0YWNrX3RvX2NhY2hlKHZtX3N0YWNrLVx1MDAzZXN0YWNrX3ZtX2FyZWEpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR2ZnJlZSh2bV9hcmVhLVx1MDAzZWFkZHIpO1xuK1x0dmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mzk6NTMuMTY3OTY4ODQ1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjI5NzI2MjM5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgRm9yayBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGRpZmYuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBiZWluZyBtb2RpZmllZCBpbiBga2VybmVsL2ZvcmsuY2AuIExvb2tzIGxpa2UgaXQncyBhIGNoYW5nZSByZWxhdGVkIHRvIHRocmVhZCBzdGFjayBkZWFsbG9jYXRpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgYHZmcmVlKClgIGNhbGwsIHdoaWNoIHJlbGVhc2VzIG1lbW9yeSwgaXMgYmVpbmcgdXBkYXRlZC4gSW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIGB2ZnJlZSgpYCBvbiBgdm1fYXJlYS1cdTAwM2VhZGRyYCwgaXQncyBub3cgY2FsbGluZyBga2FzYW5fcmVzZXRfdGFnKClgIG9uIGB2bV9hcmVhLVx1MDAzZWFkZHJgIGJlZm9yZSBwYXNzaW5nIGl0IHRvIGB2ZnJlZSgpYC4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIEtlcm5lbCBBZGRyZXNzIFNhbml0aXplciAoS0FTQU4pLiBUaGUgZmFjdCB0aGF0IGBrYXNhbl9yZXNldF90YWdgIGlzIGludm9sdmVkIGlzIGEgbWFqb3IgY2x1ZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUsIEknbSBnb2luZyB0byBwdWxsIHVwIGBrZXJuZWwvZm9yay5jYCBhbmQgZm9jdXMgb24gdGhlIGNvZGUgYXJvdW5kIGxpbmUgMjgwLiBJIG5lZWQgdG8gc2VlIHdoYXQgYHRocmVhZF9zdGFja19mcmVlX3JjdWAgYW5kIGB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlYCBhcmUgZG9pbmcsIGFuZCBob3cgdGhlIGB2bV9hcmVhYCBpcyBiZWluZyB1c2VkLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIHB1cnBvc2Ugb2YgdGhpcyBjaGFuZ2UgYW5kIHdoZXRoZXIgaXQncyByZWxhdGVkIHRvIG1lbW9yeSBzYWZldHksIHJhY2UgY29uZGl0aW9ucywgb3Igb3B0aW1pemF0aW9uLiBXaGF0J3MgdGhlIHRocmVhZCBzdGFjayBjYWNoZSB0cnlpbmcgdG8gZG8/IElzIHRoaXMgYWJvdXQgY2xlYXJpbmcgbWVtb3J5IHRhZ3MgYmVmb3JlIHJlbGVhc2luZyB0aGUgc3RhY2s/IEkgbmVlZCBtb3JlIGRhdGEgYmVmb3JlIEkgY2FuIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MDo1Ni4xNDA1OTQ3NDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2ZvcmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0fVxcbiAyNDE6XFx0XFxuIDI0MjpcXHRzdGF0aWMgYm9vbCB0cnlfcmVsZWFzZV90aHJlYWRfc3RhY2tfdG9fY2FjaGUoc3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYSlcXG4gMjQzOlxcdHtcXG4gMjQ0OlxcdFxcdHVuc2lnbmVkIGludCBpO1xcbiAyNDU6XFx0XFx0aW50IG5pZDtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0XFx0LypcXG4gMjQ4OlxcdFxcdCAqIERvbid0IGNhY2hlIHN0YWNrcyBpZiBhbnkgb2YgdGhlIHBhZ2VzIGRvbid0IG1hdGNoIHRoZSBsb2NhbCBkb21haW4sIHVubGVzc1xcbiAyNDk6XFx0XFx0ICogdGhlcmUgaXMgbm8gbG9jYWwgbWVtb3J5IHRvIGJlZ2luIHdpdGguXFxuIDI1MDpcXHRcXHQgKlxcbiAyNTE6XFx0XFx0ICogTm90ZSB0aGF0IGxhY2sgb2YgbG9jYWwgbWVtb3J5IGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgbWVhbiBpdCBtYWtlcyBubyBkaWZmZXJlbmNlXFxuIDI1MjpcXHRcXHQgKiBwZXJmb3JtYW5jZS13aXNlIHdoaWNoIG90aGVyIGRvbWFpbiBiYWNrcyB0aGUgc3RhY2suIEluIHRoaXMgY2FzZSB3ZSBhcmUgbWVyZWx5XFxuIDI1MzpcXHRcXHQgKiB0cnlpbmcgdG8gYXZvaWQgY29uc3RhbnRseSBnb2luZyB0byB2bWFsbG9jLlxcbiAyNTQ6XFx0XFx0ICovXFxuIDI1NTpcXHRcXHRzY29wZWRfZ3VhcmQocHJlZW1wdCkge1xcbiAyNTY6XFx0XFx0XFx0bmlkID0gbnVtYV9ub2RlX2lkKCk7XFxuIDI1NzpcXHRcXHRcXHRpZiAobm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSkge1xcbiAyNTg6XFx0XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHZtX2FyZWEtXFx1MDAzZW5yX3BhZ2VzOyBpKyspIHtcXG4gMjU5OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gdm1fYXJlYS1cXHUwMDNlcGFnZXNbaV07XFxuIDI2MDpcXHRcXHRcXHRcXHRcXHRpZiAocGFnZV90b19uaWQocGFnZSkgIT0gbmlkKVxcbiAyNjE6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNjI6XFx0XFx0XFx0XFx0fVxcbiAyNjM6XFx0XFx0XFx0fVxcbiAyNjQ6XFx0XFxuIDI2NTpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfQ0FDSEVEX1NUQUNLUzsgaSsrKSB7XFxuIDI2NjpcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp0bXAgPSBOVUxMO1xcbiAyNjc6XFx0XFxuIDI2ODpcXHRcXHRcXHRcXHRpZiAodGhpc19jcHVfdHJ5X2NtcHhjaGcoY2FjaGVkX3N0YWNrc1tpXSwgXFx1MDAyNnRtcCwgdm1fYXJlYSkpXFxuIDI2OTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjcwOlxcdFxcdFxcdH1cXG4gMjcxOlxcdFxcdH1cXG4gMjcyOlxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjczOlxcdH1cXG4gMjc0OlxcdFxcbiAyNzU6XFx0c3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmgpXFxuIDI3NjpcXHR7XFxuIDI3NzpcXHRcXHRzdHJ1Y3Qgdm1fc3RhY2sgKnZtX3N0YWNrID0gY29udGFpbmVyX29mKHJoLCBzdHJ1Y3Qgdm1fc3RhY2ssIHJjdSk7XFxuIDI3ODpcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhID0gdm1fc3RhY2stXFx1MDAzZXN0YWNrX3ZtX2FyZWE7XFxuIDI3OTpcXHRcXG4gMjgwOlxcdFxcdGlmICh0cnlfcmVsZWFzZV90aHJlYWRfc3RhY2tfdG9fY2FjaGUodm1fc3RhY2stXFx1MDAzZXN0YWNrX3ZtX2FyZWEpKVxcbiAyODE6XFx0XFx0XFx0cmV0dXJuO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHR2ZnJlZShrYXNhbl9yZXNldF90YWcodm1fYXJlYS1cXHUwMDNlYWRkcikpO1xcbiAyODQ6XFx0fVxcbiAyODU6XFx0XFxuIDI4NjpcXHRzdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbiAyODc6XFx0e1xcbiAyODg6XFx0XFx0c3RydWN0IHZtX3N0YWNrICp2bV9zdGFjayA9IHRzay1cXHUwMDNlc3RhY2s7XFxuIDI4OTpcXHRcXG4gMjkwOlxcdFxcdHZtX3N0YWNrLVxcdTAwM2VzdGFja192bV9hcmVhID0gdHNrLVxcdTAwM2VzdGFja192bV9hcmVhO1xcbiAyOTE6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnZtX3N0YWNrLVxcdTAwM2VyY3UsIHRocmVhZF9zdGFja19mcmVlX3JjdSk7XFxuIDI5MjpcXHR9XFxuIDI5MzpcXHRcXG4gMjk0OlxcdHN0YXRpYyBpbnQgZnJlZV92bV9zdGFja19jYWNoZSh1bnNpZ25lZCBpbnQgY3B1KVxcbiAyOTU6XFx0e1xcbiAyOTY6XFx0XFx0c3RydWN0IHZtX3N0cnVjdCAqKmNhY2hlZF92bV9zdGFja19hcmVhcyA9IHBlcl9jcHVfcHRyKGNhY2hlZF9zdGFja3MsIGNwdSk7XFxuIDI5NzpcXHRcXHRpbnQgaTtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0NBQ0hFRF9TVEFDS1M7IGkrKykge1xcbiAzMDA6XFx0XFx0XFx0c3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYSA9IGNhY2hlZF92bV9zdGFja19hcmVhc1tpXTtcXG4gMzAxOlxcdFxcbiAzMDI6XFx0XFx0XFx0aWYgKCF2bV9hcmVhKVxcbiAzMDM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMwNDpcXHRcXG4gMzA1OlxcdFxcdFxcdHZmcmVlKHZtX2FyZWEtXFx1MDAzZWFkZHIpO1xcbiAzMDY6XFx0XFx0XFx0Y2FjaGVkX3ZtX3N0YWNrX2FyZWFzW2ldID0gTlVMTDtcXG4gMzA3OlxcdFxcdH1cXG4gMzA4OlxcdFxcbiAzMDk6XFx0XFx0cmV0dXJuIDA7XFxuIDMxMDpcXHR9XFxuIDMxMTpcXHRcXG4gMzEyOlxcdHN0YXRpYyBpbnQgbWVtY2dfY2hhcmdlX2tlcm5lbF9zdGFjayhzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhKVxcbiAzMTM6XFx0e1xcbiAzMTQ6XFx0XFx0aW50IGk7XFxuIDMxNTpcXHRcXHRpbnQgcmV0O1xcbiAzMTY6XFx0XFx0aW50IG5yX2NoYXJnZWQgPSAwO1xcbiAzMTc6XFx0XFxuIDMxODpcXHRcXHRCVUdfT04odm1fYXJlYS1cXHUwMDNlbnJfcGFnZXMgIT0gVEhSRUFEX1NJWkUgLyBQQUdFX1NJWkUpO1xcbiAzMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQwOjU2LjE0MDczNTczM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5ODE3OTg2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIEZvcmsgQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZm9jdXNpbmcgb24gYGtlcm5lbC9mb3JrLmNgIG5vdy4gRmlyc3QgdGhpbmdzIGZpcnN0OiBpcyB0aGlzIHBhcnQgb2YgdGhlIGBDT05GSUdfVk1BUF9TVEFDS2AgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci4gTXkgbWFpbiBpbnRlcmVzdCBsaWVzIHdpdGhpbiBsaW5lcyAxNTAgdG8gMjUwIG9mIHRoaXMgZmlsZS4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS4gSSdsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHNwZWNpZmljIGxvZ2ljIHdpdGhpbiB0aGF0IHNlY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgZm9yayBwcm9jZXNzIHdpdGhpbiB0aGlzIGNvbnRleHQuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQwOjU4LjEyMjUzNzAxNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvZm9yay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHR2b2lkIF9fd2VhayBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuIDE4MTpcXHR7XFxuIDE4MjpcXHR9XFxuIDE4MzpcXHRcXG4gMTg0OlxcdHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza19zdHJ1Y3RfY2FjaGVwO1xcbiAxODU6XFx0XFxuIDE4NjpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqYWxsb2NfdGFza19zdHJ1Y3Rfbm9kZShpbnQgbm9kZSlcXG4gMTg3OlxcdHtcXG4gMTg4OlxcdFxcdHJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUodGFza19zdHJ1Y3RfY2FjaGVwLCBHRlBfS0VSTkVMLCBub2RlKTtcXG4gMTg5OlxcdH1cXG4gMTkwOlxcdFxcbiAxOTE6XFx0c3RhdGljIGlubGluZSB2b2lkIGZyZWVfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuIDE5MjpcXHR7XFxuIDE5MzpcXHRcXHRrbWVtX2NhY2hlX2ZyZWUodGFza19zdHJ1Y3RfY2FjaGVwLCB0c2spO1xcbiAxOTQ6XFx0fVxcbiAxOTU6XFx0XFxuIDE5NjpcXHQjaWZkZWYgQ09ORklHX1ZNQVBfU1RBQ0tcXG4gMTk3OlxcdC8qXFxuIDE5ODpcXHQgKiB2bWFsbG9jKCkgaXMgYSBiaXQgc2xvdywgYW5kIGNhbGxpbmcgdmZyZWUoKSBlbm91Z2ggdGltZXMgd2lsbCBmb3JjZSBhIFRMQlxcbiAxOTk6XFx0ICogZmx1c2guICBUcnkgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBjYWxscyBieSBjYWNoaW5nIHN0YWNrcy5cXG4gMjAwOlxcdCAqL1xcbiAyMDE6XFx0I2RlZmluZSBOUl9DQUNIRURfU1RBQ0tTIDJcXG4gMjAyOlxcdHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgdm1fc3RydWN0ICosIGNhY2hlZF9zdGFja3NbTlJfQ0FDSEVEX1NUQUNLU10pO1xcbiAyMDM6XFx0LypcXG4gMjA0OlxcdCAqIEFsbG9jYXRlZCBzdGFja3MgYXJlIGNhY2hlZCBhbmQgbGF0ZXIgcmV1c2VkIGJ5IG5ldyB0aHJlYWRzLCBzbyBtZW1jZ1xcbiAyMDU6XFx0ICogYWNjb3VudGluZyBpcyBwZXJmb3JtZWQgYnkgdGhlIGNvZGUgYXNzaWduaW5nL3JlbGVhc2luZyBzdGFja3MgdG8gdGFza3MuXFxuIDIwNjpcXHQgKiBXZSBuZWVkIGEgemVyb2VkIG1lbW9yeSB3aXRob3V0IF9fR0ZQX0FDQ09VTlQuXFxuIDIwNzpcXHQgKi9cXG4gMjA4OlxcdCNkZWZpbmUgR0ZQX1ZNQVBfU1RBQ0sgKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfU0tJUF9LQVNBTilcXG4gMjA5OlxcdFxcbiAyMTA6XFx0c3RydWN0IHZtX3N0YWNrIHtcXG4gMjExOlxcdFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuIDIxMjpcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICpzdGFja192bV9hcmVhO1xcbiAyMTM6XFx0fTtcXG4gMjE0OlxcdFxcbiAyMTU6XFx0c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKmFsbG9jX3RocmVhZF9zdGFja19ub2RlX2Zyb21fY2FjaGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBub2RlKVxcbiAyMTY6XFx0e1xcbiAyMTc6XFx0XFx0c3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYTtcXG4gMjE4OlxcdFxcdHVuc2lnbmVkIGludCBpO1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHQvKlxcbiAyMjE6XFx0XFx0ICogSWYgdGhlIG5vZGUgaGFzIG1lbW9yeSwgd2UgYXJlIGd1YXJhbnRlZWQgdGhlIHN0YWNrcyBhcmUgYmFja2VkIGJ5IGxvY2FsIHBhZ2VzLlxcbiAyMjI6XFx0XFx0ICogT3RoZXJ3aXNlIHRoZSBwYWdlcyBhcmUgYXJiaXRyYXJ5LlxcbiAyMjM6XFx0XFx0ICpcXG4gMjI0OlxcdFxcdCAqIE5vdGUgdGhhdCBkZXBlbmRpbmcgb24gY3B1c2V0IGl0IGlzIHBvc3NpYmxlIHdlIHdpbGwgZ2V0IG1pZ3JhdGVkIHRvIGEgZGlmZmVyZW50XFxuIDIyNTpcXHRcXHQgKiBub2RlIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpbmcgaGVyZSwgc28gdGhpcyBkb2VzICpub3QqIGd1YXJhbnRlZSBsb2NhbGl0eSBmb3JcXG4gMjI2OlxcdFxcdCAqIGFyYml0cmFyeSBjYWxsZXJzLlxcbiAyMjc6XFx0XFx0ICovXFxuIDIyODpcXHRcXHRzY29wZWRfZ3VhcmQocHJlZW1wdCkge1xcbiAyMjk6XFx0XFx0XFx0aWYgKG5vZGUgIT0gTlVNQV9OT19OT0RFIFxcdTAwMjZcXHUwMDI2IG51bWFfbm9kZV9pZCgpICE9IG5vZGUpXFxuIDIzMDpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjMxOlxcdFxcbiAyMzI6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0NBQ0hFRF9TVEFDS1M7IGkrKykge1xcbiAyMzM6XFx0XFx0XFx0XFx0dm1fYXJlYSA9IHRoaXNfY3B1X3hjaGcoY2FjaGVkX3N0YWNrc1tpXSwgTlVMTCk7XFxuIDIzNDpcXHRcXHRcXHRcXHRpZiAodm1fYXJlYSlcXG4gMjM1OlxcdFxcdFxcdFxcdFxcdHJldHVybiB2bV9hcmVhO1xcbiAyMzY6XFx0XFx0XFx0fVxcbiAyMzc6XFx0XFx0fVxcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDA6NTguMTIyNjc2NDM0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTg1NTgzMzIwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgU3VzcGVjdCBNZW1vcnkgUmVsZWFzZSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgdGhpcyBgdmZyZWVgIGNhbGwgcmVsYXRlZCB0byBhIGB2bV9hcmVhLVx1MDAzZWFkZHJgIGFuZCBzb21ldGhpbmcncyBidWdnaW5nIG1lLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBga2FzYW5fcmVzZXRfdGFnYCBjYWxsIHdhc24ndCBhcHBsaWVkIG9yIHdoYXQncyBnb2luZyBvbiBoZXJlLiBUaGUgY29kZSBsb29rcyBsaWtlIGl0J3MgdHJ5aW5nIHRvIHJlbGVhc2Ugc29tZSBtZW1vcnkgaW4gdGhlIGBmcmVlX3ZtX3N0YWNrX2NhY2hlYCBmdW5jdGlvbi4gQnV0IHRoZXJlJ3Mgc29tZXRoaW5nIG9mZi4gSSAqdGhvdWdodCogSSBzYXcgYSBga2FzYW5fcmVzZXRfdGFnYCBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWxsIGVhcmxpZXIsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UgaGlzdG9yeS4gU2luY2UgSSBkb24ndCBoYXZlIGdpdCBsb2cgdG8gaGFuZCwgSSBzaG91bGQgc2VhcmNoIGZvciBga2FzYW5fcmVzZXRfdGFnYCwgYHZmcmVlYCB0byBnZXQgdGhlIGNoYW5nZXMgcXVpY2tseS4gTGluZSAzMDUgbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgYnV0IG1heWJlIHRoZSBjaGFuZ2UgSSB3YXMgbG9va2luZyBmb3Igd2Fzbid0IHRoZXJlIGF0IGFsbCwgb3IgcGVyaGFwcyBpdCB3YXMgcmVtb3ZlZCBpbiBhIHN1YnNlcXVlbnQgY29tbWl0PyBOb3cgSSB0aGluaywgaW5zdGVhZCBvZiBmb2N1c2luZyBvbiBga2FzYW5fcmVzZXRfdGFnYCwgdGhhdCB0aGUgaXNzdWUgbWlnaHQgYmUgd2l0aCBvdGhlciBgdmZyZWVgIGNhbGxzIHdpdGhpbiBmb3JrLmMuIEknbGwgc2VhcmNoIGZvciB0aG9zZSBpbnN0ZWFkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjgzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6MDMuOTc4NTEzOTQ2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjU0OTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZm9yay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mb3JrLmM9MTkxPXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0xOTctLypcXG5rZXJuZWwvZm9yay5jOjE5ODogKiB2bWFsbG9jKCkgaXMgYSBiaXQgc2xvdywgYW5kIGNhbGxpbmcgdmZyZWUoKSBlbm91Z2ggdGltZXMgd2lsbCBmb3JjZSBhIFRMQlxcbmtlcm5lbC9mb3JrLmMtMTk5LSAqIGZsdXNoLiAgVHJ5IHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgY2FsbHMgYnkgY2FjaGluZyBzdGFja3MuXFxuLS1cXG5rZXJuZWwvZm9yay5jPTI3NT1zdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaClcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjgyLVxcbmtlcm5lbC9mb3JrLmM6MjgzOlxcdHZmcmVlKGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVxcdTAwM2VhZGRyKSk7XFxua2VybmVsL2ZvcmsuYy0yODQtfVxcbi0tXFxua2VybmVsL2ZvcmsuYz0yOTQ9c3RhdGljIGludCBmcmVlX3ZtX3N0YWNrX2NhY2hlKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTMwNC1cXG5rZXJuZWwvZm9yay5jOjMwNTpcXHRcXHR2ZnJlZSh2bV9hcmVhLVxcdTAwM2VhZGRyKTtcXG5rZXJuZWwvZm9yay5jLTMwNi1cXHRcXHRjYWNoZWRfdm1fc3RhY2tfYXJlYXNbaV0gPSBOVUxMO1xcbi0tXFxua2VybmVsL2ZvcmsuYz0zMzM9c3RhdGljIGludCBhbGxvY190aHJlYWRfc3RhY2tfbm9kZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IG5vZGUpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTM0MC1cXHRcXHRpZiAobWVtY2dfY2hhcmdlX2tlcm5lbF9zdGFjayh2bV9hcmVhKSkge1xcbmtlcm5lbC9mb3JrLmM6MzQxOlxcdFxcdFxcdHZmcmVlKHZtX2FyZWEtXFx1MDAzZWFkZHIpO1xcbmtlcm5lbC9mb3JrLmMtMzQyLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxua2VybmVsL2ZvcmsuYy0zNjYtXFx0aWYgKG1lbWNnX2NoYXJnZV9rZXJuZWxfc3RhY2sodm1fYXJlYSkpIHtcXG5rZXJuZWwvZm9yay5jOjM2NzpcXHRcXHR2ZnJlZShzdGFjayk7XFxua2VybmVsL2ZvcmsuYy0zNjgtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQxOjA0LjA5MTA2OTQyNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MjczNzE2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBLZXJuZWwgTWVtb3J5IFRhZ2dpbmcgd2l0aCBLQVNBTiBhbmQgdmZyZWUqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHZpcnR1YWwgbWVtb3J5IGFyZWEsIHNwZWNpZmljYWxseSBob3cgYHZtX2FyZWEtXHUwMDNlYWRkcmAgaXMgbWFuYWdlZCBhbmQgdGFnZ2VkLiBJIG5lZWQgdG8ga25vdyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSwgYW55IHBvdGVudGlhbCB0YWdnaW5nIG1lY2hhbmlzbXMgdXNlZCwgYW5kIGhvdyB0aGVzZSBpbnRlcmFjdCB3aXRoIHRoZSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBmZWF0dXJlcy4gSSBzdXNwZWN0IGEgS0FTQU4gaW50ZXJhY3Rpb24gYW5kLCBnaXZlbiB0aGUgY29udGV4dCwgSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBga2FzYW5fcmVzZXRfdGFnYCBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHZmcmVlYC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgZ3JlcC4gSSdsbCBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgY29kZSBmb3IgaW5zdGFuY2VzIHdoZXJlIGB2ZnJlZWAgYW5kIGBrYXNhbmAgYXJlIHVzZWQgdG9nZXRoZXIsIG9yIHdoZXJlIGBrYXNhbl9yZXNldF90YWdgIGlzIGNhbGxlZCBiZWZvcmUgb3IgYWZ0ZXIgYSBgdmZyZWVgIGNhbGwuIFNlZWluZyB0aG9zZSByZWxhdGlvbnNoaXBzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgbWVtb3J5IHNhZmV0eSBpbXBsaWNhdGlvbnMgYW5kLCBwb3RlbnRpYWxseSwgaWYgdGhpcyByZWxhdGVzIHRvIHNvbWUgdnVsbmVyYWJpbGl0eS4gSSdsbCBiZSBzZWFyY2hpbmcgZm9yIHBhdHRlcm5zIGxpa2UgXCJ2ZnJlZS4qa2FzYW5cIiBvciBcImthc2FuX3Jlc2V0X3RhZy4qdmZyZWVcIiB0byByZXZlYWwgdGhvc2UgcG90ZW50aWFsIGludGVyYWN0aW9ucy4gVGhpcyBzZWFyY2ggc2hvdWxkIHByb3ZpZGUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBLQVNBTiBpcyB1c2VkIHRvIGNoZWNrIG1lbW9yeSBmcmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU5NSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQxOjA2LjcxODQ0MzU5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwOTE3OTQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrYXNhbl9yZXNldF90YWdcXFxcKC4qYWRkclxcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20va2FzYW4uaC0xMi0jZGVmaW5lIGFyY2hfa2FzYW5fc2V0X3RhZyhhZGRyLCB0YWcpXFx0X190YWdfc2V0KGFkZHIsIHRhZylcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2thc2FuLmg6MTM6I2RlZmluZSBhcmNoX2thc2FuX3Jlc2V0X3RhZyhhZGRyKVxcdF9fdGFnX3Jlc2V0KGFkZHIpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rYXNhbi5oLTE0LSNkZWZpbmUgYXJjaF9rYXNhbl9nZXRfdGFnKGFkZHIpXFx0X190YWdfZ2V0KGFkZHIpXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTM2OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdHRicjFfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTM3MS1cXHQvKiBUVEJSMSBhZGRyZXNzZXMgbWF5IGhhdmUgYSB0YWcgaWYgS0FTQU5fU1dfVEFHUyBpcyBpbiB1c2UgKi9cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjM3MjpcXHRyZXR1cm4gYXJjaF9rYXNhbl9yZXNldF90YWcoYWRkcikgXFx1MDAzZT0gUEFHRV9PRkZTRVQ7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0zNzMtfVxcbi0tXFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jPTE1MD1zdGF0aWMgaW50IGNoYW5nZV9tZW1vcnlfY29tbW9uKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTE4MC1cXHQgICAgKCh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWVuZCkgXFx1MDAzZVxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYzoxODE6XFx0ICAgICAodW5zaWduZWQgbG9uZylrYXNhbl9yZXNldF90YWcoYXJlYS1cXHUwMDNlYWRkcikgKyBhcmVhLVxcdTAwM2VzaXplKSB8fFxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0xODItXFx0ICAgICgoYXJlYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoVk1fQUxMT0MgfCBWTV9BTExPV19IVUdFX1ZNQVApKSAhPSBWTV9BTExPQykpXFxuLS1cXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMtMTk0LVxcdFxcdHVuc2lnbmVkIGxvbmcgaWR4ID0gKCh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKXN0YXJ0KSAtXFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jOjE5NTpcXHRcXHRcXHRcXHQgICAgICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZyhhcmVhLVxcdTAwM2VhZGRyKSlcXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMtMTk2LVxcdFxcdFxcdFxcdCAgICBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi0tXFxuaW5jbHVkZS9saW51eC9oaWdobWVtLmg9MzQwPXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9oaWdocGFnZV9rYXNhbl90YWdnZWQoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaC0zNDMtXFxuaW5jbHVkZS9saW51eC9oaWdobWVtLmg6MzQ0OlxcdGNsZWFyX3BhZ2Uoa2FzYW5fcmVzZXRfdGFnKGthZGRyKSk7XFxuaW5jbHVkZS9saW51eC9oaWdobWVtLmgtMzQ1LVxcdGt1bm1hcF9sb2NhbChrYWRkcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2thc2FuLmg9NTE0PXN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9yZWNvcmRfYXV4X3N0YWNrKHZvaWQgKnB0cikge31cXG4tLVxcbmluY2x1ZGUvbGludXgva2FzYW4uaC01MTktXFxuaW5jbHVkZS9saW51eC9rYXNhbi5oOjUyMDpzdGF0aWMgaW5saW5lIHZvaWQgKmthc2FuX3Jlc2V0X3RhZyhjb25zdCB2b2lkICphZGRyKVxcbmluY2x1ZGUvbGludXgva2FzYW4uaC01MjEte1xcbmluY2x1ZGUvbGludXgva2FzYW4uaDo1MjI6XFx0cmV0dXJuICh2b2lkICopYXJjaF9rYXNhbl9yZXNldF90YWcoYWRkcik7XFxuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUyMy19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2thc2FuLmg9NTMyPWJvb2wga2FzYW5fcmVwb3J0KGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLFxcbi0tXFxuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUzNi1cXG5pbmNsdWRlL2xpbnV4L2thc2FuLmg6NTM3OnN0YXRpYyBpbmxpbmUgdm9pZCAqa2FzYW5fcmVzZXRfdGFnKGNvbnN0IHZvaWQgKmFkZHIpXFxuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUzOC17XFxuLS1cXG5rZXJuZWwvZm9yay5jPTI3NT1zdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaClcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjgyLVxcbmtlcm5lbC9mb3JrLmM6MjgzOlxcdHZmcmVlKGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVxcdTAwM2VhZGRyKSk7XFxua2VybmVsL2ZvcmsuYy0yODQtfVxcbi0tXFxua2VybmVsL2ZvcmsuYz0zMzM9c3RhdGljIGludCBhbGxvY190aHJlYWRfc3RhY2tfbm9kZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IG5vZGUpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTM0OC1cXG5rZXJuZWwvZm9yay5jOjM0OTpcXHRcXHRzdGFjayA9IGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVxcdTAwM2VhZGRyKTtcXG5rZXJuZWwvZm9yay5jLTM1MC1cXG4tLVxcbm1tL2thc2FuL2thc2FuLmg9MzMxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBhZGRyX2hhc19tZXRhZGF0YShjb25zdCB2b2lkICphZGRyKVxcbm1tL2thc2FuL2thc2FuLmgtMzMyLXtcXG5tbS9rYXNhbi9rYXNhbi5oOjMzMzpcXHRyZXR1cm4gKGthc2FuX3Jlc2V0X3RhZyhhZGRyKSBcXHUwMDNlPVxcbm1tL2thc2FuL2thc2FuLmgtMzM0LVxcdFxcdGthc2FuX3NoYWRvd190b19tZW0oKHZvaWQgKilLQVNBTl9TSEFET1dfU1RBUlQpKTtcXG4tLVxcbm1tL2thc2FuL2thc2FuLmg9NDc5PXN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb24oY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIHU4IHZhbHVlLCBib29sIGluaXQpXFxuLS1cXG5tbS9rYXNhbi9rYXNhbi5oLTQ4NS1cXG5tbS9rYXNhbi9rYXNhbi5oOjQ4NjpcXHRod19zZXRfbWVtX3RhZ19yYW5nZShrYXNhbl9yZXNldF90YWcoYWRkciksIHNpemUsIHZhbHVlLCBpbml0KTtcXG5tbS9rYXNhbi9rYXNhbi5oLTQ4Ny19XFxuLS1cXG5tbS9rYXNhbi9rYXNhbi5oPTQ4OT1zdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fdW5wb2lzb24oY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGJvb2wgaW5pdClcXG4tLVxcbm1tL2thc2FuL2thc2FuLmgtNDk2LVxcbm1tL2thc2FuL2thc2FuLmg6NDk3OlxcdGh3X3NldF9tZW1fdGFnX3JhbmdlKGthc2FuX3Jlc2V0X3RhZyhhZGRyKSwgc2l6ZSwgdGFnLCBpbml0KTtcXG5tbS9rYXNhbi9rYXNhbi5oLTQ5OC19XFxuLS1cXG5tbS9rYXNhbi9yZXBvcnQuYz00NzE9c3RhdGljIHZvaWQgcHJpbnRfcmVwb3J0KHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbylcXG5tbS9rYXNhbi9yZXBvcnQuYy00NzIte1xcbm1tL2thc2FuL3JlcG9ydC5jOjQ3MzpcXHR2b2lkICphZGRyID0ga2FzYW5fcmVzZXRfdGFnKCh2b2lkICopaW5mby1cXHUwMDNlYWNjZXNzX2FkZHIpO1xcbm1tL2thc2FuL3JlcG9ydC5jLTQ3NC1cXHR1OCB0YWcgPSBnZXRfdGFnKCh2b2lkICopaW5mby1cXHUwMDNlYWNjZXNzX2FkZHIpO1xcbi0tXFxubW0va2FzYW4vcmVwb3J0LmM9NDg5PXN0YXRpYyB2b2lkIGNvbXBsZXRlX3JlcG9ydF9pbmZvKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbylcXG5tbS9rYXNhbi9yZXBvcnQuYy00OTAte1xcbm1tL2thc2FuL3JlcG9ydC5jOjQ5MTpcXHR2b2lkICphZGRyID0ga2FzYW5fcmVzZXRfdGFnKCh2b2lkICopaW5mby1cXHUwMDNlYWNjZXNzX2FkZHIpO1xcbm1tL2thc2FuL3JlcG9ydC5jLTQ5Mi1cXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4tLVxcbm1tL2thc2FuL3JlcG9ydF9od190YWdzLmM9MTg9Y29uc3Qgdm9pZCAqa2FzYW5fZmluZF9maXJzdF9iYWRfYWRkcihjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm1tL2thc2FuL3JlcG9ydF9od190YWdzLmMtMjYtXFx0ICovXFxubW0va2FzYW4vcmVwb3J0X2h3X3RhZ3MuYzoyNzpcXHRyZXR1cm4ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xcbm1tL2thc2FuL3JlcG9ydF9od190YWdzLmMtMjgtfVxcbi0tXFxubW0va2FzYW4vcmVwb3J0X3N3X3RhZ3MuYz0zMz1jb25zdCB2b2lkICprYXNhbl9maW5kX2ZpcnN0X2JhZF9hZGRyKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKVxcbi0tXFxubW0va2FzYW4vcmVwb3J0X3N3X3RhZ3MuYy0zNS1cXHR1OCB0YWcgPSBnZXRfdGFnKGFkZHIpO1xcbm1tL2thc2FuL3JlcG9ydF9zd190YWdzLmM6MzY6XFx0dm9pZCAqcCA9IGthc2FuX3Jlc2V0X3RhZyhhZGRyKTtcXG5tbS9rYXNhbi9yZXBvcnRfc3dfdGFncy5jLTM3LVxcdHZvaWQgKmVuZCA9IHAgKyBzaXplO1xcbi0tXFxubW0va2FzYW4vc2hhZG93LmM9MTI0PXZvaWQga2FzYW5fcG9pc29uKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCB1OCB2YWx1ZSwgYm9vbCBpbml0KVxcbi0tXFxubW0va2FzYW4vc2hhZG93LmMtMTM1LVxcdCAqL1xcbm1tL2thc2FuL3NoYWRvdy5jOjEzNjpcXHRhZGRyID0ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xcbm1tL2thc2FuL3NoYWRvdy5jLTEzNy1cXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jPTE2Mz12b2lkIGthc2FuX3VucG9pc29uKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBib29sIGluaXQpXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0xNzEtXFx0ICovXFxubW0va2FzYW4vc2hhZG93LmM6MTcyOlxcdGFkZHIgPSBrYXNhbl9yZXNldF90YWcoYWRkcik7XFxubW0va2FzYW4vc2hhZG93LmMtMTczLVxcbi0tXFxubW0va2FzYW4vc3dfdGFncy5jPTc1PWJvb2wga2FzYW5fY2hlY2tfcmFuZ2UoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGJvb2wgd3JpdGUsXFxuLS1cXG5tbS9rYXNhbi9zd190YWdzLmMtMTA5LVxcbm1tL2thc2FuL3N3X3RhZ3MuYzoxMTA6XFx0dW50YWdnZWRfYWRkciA9IGthc2FuX3Jlc2V0X3RhZygoY29uc3Qgdm9pZCAqKWFkZHIpO1xcbm1tL2thc2FuL3N3X3RhZ3MuYy0xMTEtXFx0aWYgKHVubGlrZWx5KCFhZGRyX2hhc19tZXRhZGF0YSh1bnRhZ2dlZF9hZGRyKSkpXFxuLS1cXG5tbS9rYXNhbi9zd190YWdzLmM9MTI0PWJvb2wga2FzYW5fYnl0ZV9hY2Nlc3NpYmxlKGNvbnN0IHZvaWQgKmFkZHIpXFxuLS1cXG5tbS9rYXNhbi9zd190YWdzLmMtMTI2LVxcdHU4IHRhZyA9IGdldF90YWcoYWRkcik7XFxubW0va2FzYW4vc3dfdGFncy5jOjEyNzpcXHR2b2lkICp1bnRhZ2dlZF9hZGRyID0ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xcbm1tL2thc2FuL3N3X3RhZ3MuYy0xMjgtXFx0dTggc2hhZG93X2J5dGU7XFxuLS1cXG5tbS9tZW1ibG9jay5jPTg5Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZyZWVfcmVzZXJ2ZWRfYXJlYShwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kLFxcbi0tXFxubW0vbWVtYmxvY2suYy05MjEtXFx0XFx0ICovXFxubW0vbWVtYmxvY2suYzo5MjI6XFx0XFx0ZGlyZWN0X21hcF9hZGRyID0ga2FzYW5fcmVzZXRfdGFnKGRpcmVjdF9tYXBfYWRkcik7XFxubW0vbWVtYmxvY2suYy05MjMtXFx0XFx0aWYgKCh1bnNpZ25lZCBpbnQpcG9pc29uIFxcdTAwM2M9IDB4RkYpXFxuLS1cXG5tbS9wYWdlX3BvaXNvbi5jPTIyPXN0YXRpYyB2b2lkIHBvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vcGFnZV9wb2lzb24uYy0yNy1cXHRrYXNhbl9kaXNhYmxlX2N1cnJlbnQoKTtcXG5tbS9wYWdlX3BvaXNvbi5jOjI4OlxcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkciksIFBBR0VfUE9JU09OLCBQQUdFX1NJWkUpO1xcbm1tL3BhZ2VfcG9pc29uLmMtMjktXFx0a2FzYW5fZW5hYmxlX2N1cnJlbnQoKTtcXG4tLVxcbm1tL3BhZ2VfcG9pc29uLmM9NzY9c3RhdGljIHZvaWQgdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL3BhZ2VfcG9pc29uLmMtODYtXFx0ICovXFxubW0vcGFnZV9wb2lzb24uYzo4NzpcXHRjaGVja19wb2lzb25fbWVtKHBhZ2UsIGthc2FuX3Jlc2V0X3RhZyhhZGRyKSwgUEFHRV9TSVpFKTtcXG5tbS9wYWdlX3BvaXNvbi5jLTg4LVxcdGthc2FuX2VuYWJsZV9jdXJyZW50KCk7XFxuLS1cXG5tbS9zbHViLmM9NTY4PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnJlZXBvaW50ZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgdm9pZCAqZnApXFxuLS1cXG5tbS9zbHViLmMtNTc1LVxcbm1tL3NsdWIuYzo1NzY6XFx0ZnJlZXB0cl9hZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKCh2b2lkICopZnJlZXB0cl9hZGRyKTtcXG5tbS9zbHViLmMtNTc3LVxcdCooZnJlZXB0cl90ICopZnJlZXB0cl9hZGRyID0gZnJlZWxpc3RfcHRyX2VuY29kZShzLCBmcCwgZnJlZXB0cl9hZGRyKTtcXG4tLVxcbm1tL3NsdWIuYz0xMDQ4PXN0YXRpYyB2b2lkIHByaW50X3NlY3Rpb24oY2hhciAqbGV2ZWwsIGNoYXIgKnRleHQsIHU4ICphZGRyLFxcbi0tXFxubW0vc2x1Yi5jLTEwNTItXFx0cHJpbnRfaGV4X2R1bXAobGV2ZWwsIHRleHQsIERVTVBfUFJFRklYX0FERFJFU1MsXFxubW0vc2x1Yi5jOjEwNTM6XFx0XFx0XFx0MTYsIDEsIGthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWFkZHIpLCBsZW5ndGgsIDEpO1xcbm1tL3NsdWIuYy0xMDU0LVxcdG1ldGFkYXRhX2FjY2Vzc19kaXNhYmxlKCk7XFxuLS1cXG5tbS9zbHViLmM9MTczNj12b2lkIHNldHVwX3NsYWJfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICphZGRyKVxcbi0tXFxubW0vc2x1Yi5jLTE3NDEtXFx0bWV0YWRhdGFfYWNjZXNzX2VuYWJsZSgpO1xcbm1tL3NsdWIuYzoxNzQyOlxcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkciksIFBPSVNPTl9JTlVTRSwgc2xhYl9zaXplKHNsYWIpKTtcXG5tbS9zbHViLmMtMTc0My1cXHRtZXRhZGF0YV9hY2Nlc3NfZGlzYWJsZSgpO1xcbi0tXFxubW0vc2x1Yi5jPTIyODU9c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtMjI5NC1cXHRcXHRhZGRyID0gc2xhYl9hZGRyZXNzKHNsYWIpICsgb2JqX2V4dHNfb2Zmc2V0X2luX3NsYWIocywgc2xhYik7XFxubW0vc2x1Yi5jOjIyOTU6XFx0XFx0YWRkciA9IGthc2FuX3Jlc2V0X3RhZyhhZGRyKTtcXG5tbS9zbHViLmMtMjI5Ni1cXHRcXHRvYmpfZXh0cyA9ICh1bnNpZ25lZCBsb25nKWFkZHI7XFxuLS1cXG5tbS9zbHViLmMtMjMxNC1cXHRcXHRmb3JfZWFjaF9vYmplY3QoYWRkciwgcywgc2xhYl9hZGRyZXNzKHNsYWIpLCBzbGFiLVxcdTAwM2VvYmplY3RzKVxcbm1tL3NsdWIuYzoyMzE1OlxcdFxcdFxcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgKyBvZmZzZXQsIDAsIHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpKTtcXG5tbS9zbHViLmMtMjMxNi1cXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuLS1cXG5tbS92bWFsbG9jLmM9MTA5OT1zdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqX19maW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCByYl9yb290ICpyb290KVxcbi0tXFxubW0vdm1hbGxvYy5jLTExMDItXFxubW0vdm1hbGxvYy5jOjExMDM6XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWFkZHIpO1xcbm1tL3ZtYWxsb2MuYy0xMTA0LVxcbi0tXFxubW0vdm1hbGxvYy5jPTExMjI9X19maW5kX3ZtYXBfYXJlYV9leGNlZWRfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCByYl9yb290ICpyb290KVxcbi0tXFxubW0vdm1hbGxvYy5jLTExMjYtXFxubW0vdm1hbGxvYy5jOjExMjc6XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWFkZHIpO1xcbm1tL3ZtYWxsb2MuYy0xMTI4LVxcbi0tXFxubW0vdm1hbGxvYy5jPTQ2OTU9bG9uZyB2cmVhZF9pdGVyKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgY29uc3QgY2hhciAqYWRkciwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vdm1hbGxvYy5jLTQ3MDMtXFxubW0vdm1hbGxvYy5jOjQ3MDQ6XFx0YWRkciA9IGthc2FuX3Jlc2V0X3RhZyhhZGRyKTtcXG5tbS92bWFsbG9jLmMtNDcwNS1cXG4tLVxcbnNjcmlwdHMvZ2RiL2xpbnV4L21tLnB5PTM0PWNsYXNzIHg4Nl9wYWdlX29wcygpOlxcbi0tXFxuc2NyaXB0cy9nZGIvbGludXgvbW0ucHktOTMtXFxuc2NyaXB0cy9nZGIvbGludXgvbW0ucHk6OTQ6ICAgIGRlZiBrYXNhbl9yZXNldF90YWcoc2VsZiwgYWRkcik6XFxuc2NyaXB0cy9nZGIvbGludXgvbW0ucHktOTUtICAgICAgICByZXR1cm4gYWRkclxcbi0tXFxuc2NyaXB0cy9nZGIvbGludXgvbW0ucHk9MjAzPWNsYXNzIGFhcmNoNjRfcGFnZV9vcHMoKTpcXG4tLVxcbnNjcmlwdHMvZ2RiL2xpbnV4L21tLnB5LTM1OC1cXG5zY3JpcHRzL2dkYi9saW51eC9tbS5weTozNTk6ICAgIGRlZiBrYXNhbl9yZXNldF90YWcoc2VsZiwgYWRkcik6XFxuc2NyaXB0cy9nZGIvbGludXgvbW0ucHktMzYwLSAgICAgICAgaWYgY29uc3RhbnRzLkxYX0NPTkZJR19LQVNBTl9TV19UQUdTIG9yIGNvbnN0YW50cy5MWF9DT05GSUdfS0FTQU5fSFdfVEFHUzpcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaD0yNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICp2aXJ0X3RvX3BhZ2Uodm9pZCAqdmlydClcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaC0zMy1cXG50b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmg6MzQ6c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcXG50b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmgtMzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MTowOC42Mjc2Mjk2NzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjk0NTMwMDc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLQVNBTiBSZXNldCBUYWcgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBLQVNBTiBhZ2Fpbiwgc3BlY2lmaWNhbGx5IHRoZSB0YWcgcmVzZXQgZnVuY3Rpb25hbGl0eS4gSSdtIHN0YXJ0aW5nIGJ5IGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBuYW1lbHkgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va2FzYW4uaGAgYW5kIGBpbmNsdWRlL2xpbnV4L2thc2FuLmhgLiBUaGUgY29yZSBxdWVzdGlvbiBvbiBteSBtaW5kIGlzLCB3aGF0IGV4YWN0bHkgZG9lcyBga2FzYW5fcmVzZXRfdGFnYCAqZG8qPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgS0FTQU4gZnJhbWV3b3JrLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBpbmNsdWRlL2xpbnV4L2thc2FuLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDUxNS01NDUsIGFzIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgYXJlYSB3aGVyZSB0aGUgZGVmaW5pdGlvbiBhbmQgcmVsZXZhbnQgdXNhZ2UgYXJlIGRlc2NyaWJlZC4gRnJvbSBoZXJlIEkgaG9wZSB0byB1bmRlcnN0YW5kIHRoZSBwcmFjdGljYWwgYXNwZWN0cyBvZiBob3cgdGhlIHRhZyBpcyByZXNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MToxMS41NzI5MzMxNDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgva2FzYW4uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTU6XFx0XFxuIDUxNjpcXHQjZW5kaWYgLyogQ09ORklHX0tBU0FOX0dFTkVSSUMgKi9cXG4gNTE3OlxcdFxcbiA1MTg6XFx0I2lmIGRlZmluZWQoQ09ORklHX0tBU0FOX1NXX1RBR1MpIHx8IGRlZmluZWQoQ09ORklHX0tBU0FOX0hXX1RBR1MpXFxuIDUxOTpcXHRcXG4gNTIwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCAqa2FzYW5fcmVzZXRfdGFnKGNvbnN0IHZvaWQgKmFkZHIpXFxuIDUyMTpcXHR7XFxuIDUyMjpcXHRcXHRyZXR1cm4gKHZvaWQgKilhcmNoX2thc2FuX3Jlc2V0X3RhZyhhZGRyKTtcXG4gNTIzOlxcdH1cXG4gNTI0OlxcdFxcbiA1MjU6XFx0LyoqXFxuIDUyNjpcXHQgKiBrYXNhbl9yZXBvcnQgLSBwcmludCBhIHJlcG9ydCBhYm91dCBhIGJhZCBtZW1vcnkgYWNjZXNzIGRldGVjdGVkIGJ5IEtBU0FOXFxuIDUyNzpcXHQgKiBAYWRkcjogYWRkcmVzcyBvZiB0aGUgYmFkIGFjY2Vzc1xcbiA1Mjg6XFx0ICogQHNpemU6IHNpemUgb2YgdGhlIGJhZCBhY2Nlc3NcXG4gNTI5OlxcdCAqIEBpc193cml0ZTogd2hldGhlciB0aGUgYmFkIGFjY2VzcyBpcyBhIHdyaXRlIG9yIGEgcmVhZFxcbiA1MzA6XFx0ICogQGlwOiBpbnN0cnVjdGlvbiBwb2ludGVyIGZvciB0aGUgYWNjZXNzaWJpbGl0eSBjaGVjayBvciB0aGUgYmFkIGFjY2VzcyBpdHNlbGZcXG4gNTMxOlxcdCAqL1xcbiA1MzI6XFx0Ym9vbCBrYXNhbl9yZXBvcnQoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsXFxuIDUzMzpcXHRcXHRcXHRib29sIGlzX3dyaXRlLCB1bnNpZ25lZCBsb25nIGlwKTtcXG4gNTM0OlxcdFxcbiA1MzU6XFx0I2Vsc2UgLyogQ09ORklHX0tBU0FOX1NXX1RBR1MgfHwgQ09ORklHX0tBU0FOX0hXX1RBR1MgKi9cXG4gNTM2OlxcdFxcbiA1Mzc6XFx0c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcXG4gNTM4OlxcdHtcXG4gNTM5OlxcdFxcdHJldHVybiAodm9pZCAqKWFkZHI7XFxuIDU0MDpcXHR9XFxuIDU0MTpcXHRcXG4gNTQyOlxcdCNlbmRpZiAvKiBDT05GSUdfS0FTQU5fU1dfVEFHUyB8fCBDT05GSUdfS0FTQU5fSFdfVEFHUyovXFxuIDU0MzpcXHRcXG4gNTQ0OlxcdCNpZmRlZiBDT05GSUdfS0FTQU5fSFdfVEFHU1xcbiA1NDU6XFx0XFxuIDU0NjpcXHR2b2lkIGthc2FuX3JlcG9ydF9hc3luYyh2b2lkKTtcXG4gNTQ3OlxcdFxcbiA1NDg6XFx0I2VuZGlmIC8qIENPTkZJR19LQVNBTl9IV19UQUdTICovXFxuIDU0OTpcXHRcXG4gNTUwOlxcdCNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xcbiA1NTE6XFx0dm9pZCBfX2luaXQga2FzYW5faW5pdF9nZW5lcmljKHZvaWQpO1xcbiA1NTI6XFx0I2Vsc2VcXG4gNTUzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9pbml0X2dlbmVyaWModm9pZCkgeyB9XFxuIDU1NDpcXHQjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6MTEuNTczMDQ3MzkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQzMDEzMzI2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLQVNBTiBSZXNldCBUYWcgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBga2FzYW5fcmVzZXRfdGFnKGFkZHIpYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJZiBlaXRoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUgS0FTQU4gdGFncyBhcmUgZW5hYmxlZCwgaXQncyBnb2luZyB0byBjYWxsIGBhcmNoX2thc2FuX3Jlc2V0X3RhZyhhZGRyKWAuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoaXMgaXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYXJ0LCBzbyB0aGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgaXMgbGlrZWx5IGdvaW5nIHRvIHJlc2lkZS4gQnV0IGlmIHRob3NlIEtBU0FOIG9wdGlvbnMgKmFyZW4ndCogZW5hYmxlZCwgdGhlbiB3ZSBqdXN0IGhhdmUgYSBzaW1wbGUgaW5saW5lIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgb3JpZ2luYWwgYWRkcmVzcywgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBuby1vcCwgcGFzc2luZyB0aGUgYWRkcmVzcyB0aHJvdWdoLiBNYWtlcyBzZW5zZSBmb3Igd2hlbiBLQVNBTiBpc24ndCBpbiB1c2UuXG5cbkJ1dC4uLiBoYW5nIG9uLiBXZSBuZWVkIHRvIGNvbnNpZGVyIG91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBkb24ndCB3ZT8gSXQgbG9va3MgbGlrZSB3ZSdyZSBvbiBhbWQ2NC4gVGhhdCdzIGEgY3J1Y2lhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gQ2FuIGFtZDY0IGV2ZW4gc3VwcG9ydCBlaXRoZXIgYENPTkZJR19LQVNBTl9TV19UQUdTYCBvciBgQ09ORklHX0tBU0FOX0hXX1RBR1NgPyBJIGNhbid0IGp1c3QgYXNzdW1lIGFueXRoaW5nIGhlcmUuIFRoZSBLY29uZmlnIGZpbGVzIHdpbGwgaGF2ZSB0aGUgYW5zd2VycyBmb3Igd2hhdCBpcyBwb3NzaWJsZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgYWxsb3dlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MDcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MToxNS44NzQzODM0NDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODcxNzA4OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtBU0FOX1NXX1RBR1NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcua2FzYW49ODk9Y29uZmlnIEtBU0FOX0dFTkVSSUNcXG4tLVxcbmxpYi9LY29uZmlnLmthc2FuLTEwMy1cXG5saWIvS2NvbmZpZy5rYXNhbjoxMDQ6Y29uZmlnIEtBU0FOX1NXX1RBR1NcXG5saWIvS2NvbmZpZy5rYXNhbi0xMDUtXFx0Ym9vbCBcXFwiU29mdHdhcmUgVGFnLUJhc2VkIEtBU0FOXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MToxNy41NjE1NjAzMDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMwODE4NjEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLY29uZmlnLmthc2FuIEZpbGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IHRoZSBLQVNBTiBjb25maWd1cmF0aW9uLCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgbGliL0tjb25maWcua2FzYW5gLiBJIGZpZ3VyZSB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgc2hvdWxkIGJlIHNvbWV3aGVyZSBhcm91bmQgbGluZSAxMDAgdG8gMTMwLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHN0YXJ0cyB0byBhcHBlYXIgaW4gdGhlc2UgZmlsZXMuIEhvcGVmdWxseSwgdGhpcyBzZWN0aW9uIGhvbGRzIHRoZSBrZXkgdG8gdGhlIHNwZWNpZmljIGRldGFpbHMgSSdtIGFmdGVyLCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgYW5kIGFueSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoYXQgcmFuZ2UuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTQyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6MTkuODY5NzQ4NDc5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmthc2FuXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHQgIENvbnN1bWVzIGFib3V0IDEvOHRoIG9mIGF2YWlsYWJsZSBtZW1vcnkgYXQga2VybmVsIHN0YXJ0IGFuZCBhZGRzIGFuXFxuIDEwMTpcXHRcXHQgIG92ZXJoZWFkIG9mIH41MCUgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbnMuXFxuIDEwMjpcXHRcXHQgIFRoZSBwZXJmb3JtYW5jZSBzbG93ZG93biBpcyB+eDMuXFxuIDEwMzpcXHRcXG4gMTA0OlxcdGNvbmZpZyBLQVNBTl9TV19UQUdTXFxuIDEwNTpcXHRcXHRib29sIFxcXCJTb2Z0d2FyZSBUYWctQmFzZWQgS0FTQU5cXFwiXFxuIDEwNjpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9LQVNBTl9TV19UQUdTIFxcdTAwMjZcXHUwMDI2IENDX0hBU19LQVNBTl9TV19UQUdTXFxuIDEwNzpcXHRcXHRkZXBlbmRzIG9uIENDX0hBU19XT1JLSU5HX05PU0FOSVRJWkVfQUREUkVTU1xcbiAxMDg6XFx0XFx0c2VsZWN0IFNMVUJfREVCVUdcXG4gMTA5OlxcdFxcdHNlbGVjdCBDT05TVFJVQ1RPUlNcXG4gMTEwOlxcdFxcdGhlbHBcXG4gMTExOlxcdFxcdCAgRW5hYmxlcyBTb2Z0d2FyZSBUYWctQmFzZWQgS0FTQU4uXFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdCAgUmVxdWlyZXMgR0NDIDExKyBvciBDbGFuZy5cXG4gMTE0OlxcdFxcbiAxMTU6XFx0XFx0ICBTdXBwb3J0ZWQgb25seSBvbiBhcm02NCBDUFVzIGFuZCByZWxpZXMgb24gVG9wIEJ5dGUgSWdub3JlLlxcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHQgIENvbnN1bWVzIGFib3V0IDEvMTZ0aCBvZiBhdmFpbGFibGUgbWVtb3J5IGF0IGtlcm5lbCBzdGFydCBhbmRcXG4gMTE4OlxcdFxcdCAgYWRkIGFuIG92ZXJoZWFkIG9mIH4yMCUgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbnMuXFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdCAgTWF5IHBvdGVudGlhbGx5IGludHJvZHVjZSBwcm9ibGVtcyByZWxhdGVkIHRvIHBvaW50ZXIgY2FzdGluZyBhbmRcXG4gMTIxOlxcdFxcdCAgY29tcGFyaXNvbiwgYXMgaXQgZW1iZWRzIGEgdGFnIGludG8gdGhlIHRvcCBieXRlIG9mIGVhY2ggcG9pbnRlci5cXG4gMTIyOlxcdFxcbiAxMjM6XFx0Y29uZmlnIEtBU0FOX0hXX1RBR1NcXG4gMTI0OlxcdFxcdGJvb2wgXFxcIkhhcmR3YXJlIFRhZy1CYXNlZCBLQVNBTlxcXCJcXG4gMTI1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX0tBU0FOX0hXX1RBR1NcXG4gMTI2OlxcdFxcdGhlbHBcXG4gMTI3OlxcdFxcdCAgRW5hYmxlcyBIYXJkd2FyZSBUYWctQmFzZWQgS0FTQU4uXFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdCAgUmVxdWlyZXMgR0NDIDEwKyBvciBDbGFuZyAxMisuXFxuIDEzMDpcXHRcXG4gMTMxOlxcdFxcdCAgU3VwcG9ydGVkIG9ubHkgb24gYXJtNjQgQ1BVcyBzdGFydGluZyBmcm9tIEFSTXY4LjUgYW5kIHJlbGllcyBvblxcbiAxMzI6XFx0XFx0ICBNZW1vcnkgVGFnZ2luZyBFeHRlbnNpb24gYW5kIFRvcCBCeXRlIElnbm9yZS5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0ICBDb25zdW1lcyBhYm91dCAxLzMybmQgb2YgYXZhaWxhYmxlIG1lbW9yeS5cXG4gMTM1OlxcdFxcbiAxMzY6XFx0XFx0ICBNYXkgcG90ZW50aWFsbHkgaW50cm9kdWNlIHByb2JsZW1zIHJlbGF0ZWQgdG8gcG9pbnRlciBjYXN0aW5nIGFuZFxcbiAxMzc6XFx0XFx0ICBjb21wYXJpc29uLCBhcyBpdCBlbWJlZHMgYSB0YWcgaW50byB0aGUgdG9wIGJ5dGUgb2YgZWFjaCBwb2ludGVyLlxcbiAxMzg6XFx0XFxuIDEzOTpcXHRlbmRjaG9pY2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6MTkuODY5ODE4MjE5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxOTYyNTc2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIEFkZHJlc3NTYW5pdGl6ZXIgKEtBU0FOKSBUYWdnaW5nIEZlYXR1cmUgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIG1lbW9yeSBzYWZldHkgd29yaywgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBsYXkgb2YgdGhlIGxhbmQgcmVnYXJkaW5nIEtBU0FOIHRhZ2dpbmcgc3VwcG9ydCBvbiB0aGlzIGFyY2hpdGVjdHVyZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGFyZSB3ZSBkZWFsaW5nIHdpdGggYSBzb2Z0d2FyZS1iYXNlZCBvciBoYXJkd2FyZS1iYXNlZCB0YWdnaW5nIGltcGxlbWVudGF0aW9uPyBUaGUgZmlyc3QgdGhpbmcgdG8gY29uZmlybSBpcyB3aGV0aGVyIHRoZSBhcmNoaXRlY3R1cmUgZXZlbiAqZGVmaW5lcyogYEhBVkVfQVJDSF9LQVNBTl9TV19UQUdTYCBhbmQgYEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTYC4gVW5kZXJzdGFuZGluZyB3aGljaCB0YWdnaW5nIG1vZGUgaXMgYXZhaWxhYmxlIGlzIGFic29sdXRlbHkgY3JpdGljYWwuIEl0IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgcGVyZm9ybWFuY2UgcHJvZmlsZSBhbmQsIGZyYW5rbHksIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBhcHByb2FjaC4gU29mdHdhcmUtYmFzZWQgdGFnZ2luZyBpcyBvYnZpb3VzbHkgbGVzcyBwZXJmb3JtYW50IGJ1dCBtYXkgYmUgdGhlIG9ubHkgb3B0aW9uIGluIHNvbWUgY2FzZXMuIEhhcmR3YXJlLWJhc2VkLCBvbiB0aGUgb3RoZXIgaGFuZCwgKmNvdWxkKiBicmluZyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgYnkgb2ZmbG9hZGluZyB0aGUgdGFnZ2luZyB3b3JrIHRvIHNwZWNpYWxpemVkIGhhcmR3YXJlLCBpZiBzdXBwb3J0ZWQsIG9mIGNvdXJzZS4gU28sIGxldOKAmXMgc2VlIHdoYXQgd2UncmUgYWN0dWFsbHkgd29ya2luZyB3aXRoIGZpcnN0LiBEZXRlcm1pbmluZyB0aGUgcHJlc2VuY2UgYW5kIG1lYW5pbmcgb2YgdGhvc2UgdHdvIEtjb25maWcgc3ltYm9scyBpcyB0aGUga2V5IGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTc5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MToyMy4wNjYwNzc4MjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDM5MDM5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFWRV9BUkNIX0tBU0FOLipUQUdTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MC1cXHRzZWxlY3QgSEFWRV9BUkNIX0tBU0FOX1ZNQUxMT0NcXG5hcmNoL2FybTY0L0tjb25maWc6MTYxOlxcdHNlbGVjdCBIQVZFX0FSQ0hfS0FTQU5fU1dfVEFHU1xcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNjI6XFx0c2VsZWN0IEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTIGlmIEFSTTY0X01URVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjMtXFx0IyBTb21lIGluc3RydW1lbnRhdGlvbiBtYXkgYmUgdW5zb3VuZCwgaGVuY2UgRVhQRVJUXFxuLS1cXG5saWIvS2NvbmZpZy5rYXNhbj00PWNvbmZpZyBIQVZFX0FSQ0hfS0FTQU5cXG4tLVxcbmxpYi9LY29uZmlnLmthc2FuLTYtXFxubGliL0tjb25maWcua2FzYW46Nzpjb25maWcgSEFWRV9BUkNIX0tBU0FOX1NXX1RBR1NcXG5saWIvS2NvbmZpZy5rYXNhbi04LVxcdGJvb2xcXG5saWIvS2NvbmZpZy5rYXNhbi05LVxcbmxpYi9LY29uZmlnLmthc2FuOjEwOmNvbmZpZyBIQVZFX0FSQ0hfS0FTQU5fSFdfVEFHU1xcbmxpYi9LY29uZmlnLmthc2FuLTExLVxcdGJvb2xcXG4tLVxcbmxpYi9LY29uZmlnLmthc2FuPTQ2PW1lbnVjb25maWcgS0FTQU5cXG4tLVxcbmxpYi9LY29uZmlnLmthc2FuLTQ4LVxcdGRlcGVuZHMgb24gKCgoSEFWRV9BUkNIX0tBU0FOIFxcdTAwMjZcXHUwMDI2IENDX0hBU19LQVNBTl9HRU5FUklDKSB8fCBcXFxcXFxubGliL0tjb25maWcua2FzYW46NDk6XFx0XFx0ICAgICAoSEFWRV9BUkNIX0tBU0FOX1NXX1RBR1MgXFx1MDAyNlxcdTAwMjYgQ0NfSEFTX0tBU0FOX1NXX1RBR1MpKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubGliL0tjb25maWcua2FzYW4tNTAtXFx0XFx0ICAgIENDX0hBU19XT1JLSU5HX05PU0FOSVRJWkVfQUREUkVTUykgfHwgXFxcXFxcbmxpYi9LY29uZmlnLmthc2FuOjUxOlxcdFxcdCAgIEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTXFxubGliL0tjb25maWcua2FzYW4tNTItXFx0ZGVwZW5kcyBvbiBTWVNGUyBcXHUwMDI2XFx1MDAyNiAhU0xVQl9USU5ZXFxuLS1cXG5saWIvS2NvbmZpZy5rYXNhbj0xMDQ9Y29uZmlnIEtBU0FOX1NXX1RBR1NcXG5saWIvS2NvbmZpZy5rYXNhbi0xMDUtXFx0Ym9vbCBcXFwiU29mdHdhcmUgVGFnLUJhc2VkIEtBU0FOXFxcIlxcbmxpYi9LY29uZmlnLmthc2FuOjEwNjpcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9LQVNBTl9TV19UQUdTIFxcdTAwMjZcXHUwMDI2IENDX0hBU19LQVNBTl9TV19UQUdTXFxubGliL0tjb25maWcua2FzYW4tMTA3LVxcdGRlcGVuZHMgb24gQ0NfSEFTX1dPUktJTkdfTk9TQU5JVElaRV9BRERSRVNTXFxuLS1cXG5saWIvS2NvbmZpZy5rYXNhbj0xMjM9Y29uZmlnIEtBU0FOX0hXX1RBR1NcXG5saWIvS2NvbmZpZy5rYXNhbi0xMjQtXFx0Ym9vbCBcXFwiSGFyZHdhcmUgVGFnLUJhc2VkIEtBU0FOXFxcIlxcbmxpYi9LY29uZmlnLmthc2FuOjEyNTpcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTXFxubGliL0tjb25maWcua2FzYW4tMTI2LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6MjQuODY5OTg5MjY0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MTU0MzYwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgS0FTQU4gVGFnIFNlbGVjdGlvbiBvbiB4ODYvYW1kNjQqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlc2UgS0FTQU4gb3B0aW9uczogYEhBVkVfQVJDSF9LQVNBTl9TV19UQUdTYCBhbmQgYEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTYC4gVGhlIHRleHQgKnNheXMqIHRoZXkncmUgT05MWSBmb3IgQVJNNjQsIHdoaWNoIHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhpcywgYmVjYXVzZSB0aGlzIGNvdWxkIGFmZmVjdCB0aGluZ3MgaW4gbXkgeDg2L2FtZDY0IHdvcmsuIE15IHVuZGVyc3RhbmRpbmcgaXMgc29saWQsIHNvIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdC4gSeKAmWxsIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHN0YXJ0IGJ5IHZlcmlmeWluZyB3aGV0aGVyIHg4NiBzZWxlY3RzIGVpdGhlciBvZiB0aG9zZSBLQVNBTiBvcHRpb25zLiBJIG5lZWQgdG8gc2VlIGlmIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGV4cGxpY2l0bHkgaW5jbHVkZXMgb3IgZXhjbHVkZXMgdGhlc2UgZmVhdHVyZXMuIEFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlIGFuZCBzZWUgd2hhdCBpdCBoYXMgdG8gc2F5LiBObyBhc3N1bXB0aW9ucywganVzdCBjb25jcmV0ZSBldmlkZW5jZSwgdGhhdCdzIHRoZSBvbmx5IHdheSB0byBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MToyNy40ODU0Mjc5MjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTU1MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhBVkVfQVJDSF9LQVNBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTk4LVxcdHNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTF9SRUxBVElWRVxcbmFyY2gveDg2L0tjb25maWc6MTk5OlxcdHNlbGVjdCBIQVZFX0FSQ0hfS0FTQU5cXHRcXHRcXHRpZiBYODZfNjRcXG5hcmNoL3g4Ni9LY29uZmlnOjIwMDpcXHRzZWxlY3QgSEFWRV9BUkNIX0tBU0FOX1ZNQUxMT0NcXHRcXHRpZiBYODZfNjRcXG5hcmNoL3g4Ni9LY29uZmlnLTIwMS1cXHRzZWxlY3QgSEFWRV9BUkNIX0tGRU5DRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MToyNy41NDg1ODg4OTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ5MzkzNDU3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLQVNBTiBJbXBhY3Qgb24gYHRocmVhZF9zdGFja19mcmVlX3JjdWAgb24geDg2XzY0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZSBhbmQgdHJ5aW5nIHRvIGFzc2VzcyBpdHMgaW1wYWN0LCBzcGVjaWZpY2FsbHkgb24geDg2XzY0IChhbWQ2NCkuIEl0IGFwcGVhcnMgdGhlIGNoYW5nZSBpbnZvbHZlcyB3cmFwcGluZyBgdm1fYXJlYS1cdTAwM2VhZGRyYCB3aXRoIGBrYXNhbl9yZXNldF90YWdgIGJlZm9yZSBwYXNzaW5nIGl0IHRvIGB2ZnJlZWAuIFRoZSBpbml0aWFsIGFzc3VtcHRpb24sIGJhc2VkIG9uIHRoZSBgeDg2XzY0YCBjb25maWd1cmF0aW9uIG9ubHkgZW5hYmxpbmcgYEhBVkVfQVJDSF9LQVNBTmAgYW5kIGBIQVZFX0FSQ0hfS0FTQU5fVk1BTExPQ2AsIGlzIHRoYXQgbmVpdGhlciBgQ09ORklHX0tBU0FOX1NXX1RBR1NgIG5vciBgQ09ORklHX0tBU0FOX0hXX1RBR1NgIGFyZSBlbmFibGVkLiBUaGlzIG1lYW5zIG9uIGFtZDY0LCB0aGUgYGthc2FuX3Jlc2V0X3RhZ2AgZnVuY3Rpb24gZWZmZWN0aXZlbHkgYmVjb21lcyBhIG5vLW9wOiBga2FzYW5fcmVzZXRfdGFnKHgpYCBzaW1wbHkgZXZhbHVhdGVzIHRvIGAodm9pZCAqKXhgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHRob3VnaC5cblxuQ2hlY2tpbmcgYGluY2x1ZGUvbGludXgva2FzYW4uaGAgY29uZmlybXMgdGhhdCBpZiBuZWl0aGVyIGBDT05GSUdfS0FTQU5fU1dfVEFHU2Agbm9yIGBDT05GSUdfS0FTQU5fSFdfVEFHU2AgYXJlIGRlZmluZWQsIHRoZW4gYGthc2FuX3Jlc2V0X3RhZ2AgaXMgZGVmaW5lZCBhcyBhIGNhc3QuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBgYXJjaF9rYXNhbl9yZXNldF90YWdgIGlzbid0IHVzZWQuIE9uIHg4NiwgdGhlcmUgaXMgbm8gYGFyY2hfa2FzYW5fcmVzZXRfdGFnYCwgc2luY2UgdGFnLWJhc2VkIEtBU0FOIGlzIGFuIEFSTTY0LXNwZWNpZmljIGZlYXR1cmUgKE1URS9UQkkpLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBkb2VzIHRoaXMgY2hhbmdlIHdhcnJhbnQgYSBmdXp6aW5nIHBhc3M/IFRoZSBydWxlcyBzdGF0ZSBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXNcIi4gT25lIHBvdGVudGlhbCBjYXRlZ29yeSBpcyBcIkNvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZVwiLiBJcyB0aGlzIHJlbGV2YW50P1xuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGUgYWZmZWN0ZWQgY29kZSBwYXRoLCBzcGVjaWZpY2FsbHkgYHRocmVhZF9zdGFja19mcmVlX3JjdWAgd2l0aGluIGBrZXJuZWwvZm9yay5jYCwgaXMgY29tcGlsZWQgb24gYW1kNjQuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBpdCBpcy4gVGhlbiB0aGUgY2hhbmdlICptdXN0KiBhbHRlciBsb2dpYyBmb3IgYW1kNjQuXG5cbk9rYXksIGxldCdzIHRyYWNlIHRoZSBmbG93LiBCZWZvcmUsIHRoZSBjb2RlIHdhcyBgdmZyZWUodm1fYXJlYS1cdTAwM2VhZGRyKTtgIEFmdGVyIHRoZSBwYXRjaCwgaXQgYmVjb21lcyBgdmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpO2AuIEJlY2F1c2Ugb24gYW1kNjQsIGBrYXNhbl9yZXNldF90YWcoeClgIGV2YWx1YXRlcyB0byBgKHZvaWQgKil4YCwgdGhlIG5ldCBlZmZlY3Qgb24gYW1kNjQgYXBwZWFycyB0byBiZSBubyBjaGFuZ2U6IGB2ZnJlZShrYXNhbl9yZXNldF90YWcodm1fYXJlYS1cdTAwM2VhZGRyKSlgIGJlY29tZXMgYHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcilgLlxuXG5MZXQgbWUgYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUgdHlwZSBvZiBgdm1fYXJlYWAgaXMgYHN0cnVjdCB2bV9zdHJ1Y3QgKmAgYW5kIHRoZSB0eXBlIG9mIGB2bV9hcmVhLVx1MDAzZWFkZHJgIGlzIGB2b2lkICpgLiBTbywgYGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVx1MDAzZWFkZHIpYCByZXR1cm5zIGAodm9pZCAqKSh2bV9hcmVhLVx1MDAzZWFkZHIpYC4gVGhlcmVmb3JlLCBgdmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpYCBpcywgYW5kIEkgcmVwZWF0LCBpcyBsaXRlcmFsbHkgYHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcilgLlxuXG5JIHNob3VsZCBhbHNvIGV4YW1pbmUgd2hhdCBoYXBwZW5lZCBpbiBhcm02NCB2ZXJzdXMgYW1kNjQsIGFuZCB3aGF0IHRoZSBvcmlnaW5hbCBidWcgdGhhdCBwcm9tcHRlZCB0aGUgY2hhbmdlIHdhcy4gSSBuZWVkIHRvIGJlIHN1cmUuIEhvd2V2ZXIsIHRoZSBsb2dpYyBjbGVhcmx5IGRvZXMgbm90IGNoYW5nZSBjb21waWxlZCBvdXRwdXQgZm9yIGFtZDY0LiBMb29raW5nIGF0IGxpbmUgMzQ5IG9mIGBrZXJuZWwvZm9yay5jYCwgSSBzZWUgYSB1c2Ugb2YgYGthc2FuX3Jlc2V0X3RhZ2AgdGhhdCdzIGxpa2VseSB0aGUgZm9jdXMgb2YgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQxOjQyLjQ4NzkzNzk5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2ZvcmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzA6XFx0XFx0cmV0dXJuIHJldDtcXG4gMzMxOlxcdH1cXG4gMzMyOlxcdFxcbiAzMzM6XFx0c3RhdGljIGludCBhbGxvY190aHJlYWRfc3RhY2tfbm9kZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IG5vZGUpXFxuIDMzNDpcXHR7XFxuIDMzNTpcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhO1xcbiAzMzY6XFx0XFx0dm9pZCAqc3RhY2s7XFxuIDMzNzpcXHRcXG4gMzM4OlxcdFxcdHZtX2FyZWEgPSBhbGxvY190aHJlYWRfc3RhY2tfbm9kZV9mcm9tX2NhY2hlKHRzaywgbm9kZSk7XFxuIDMzOTpcXHRcXHRpZiAodm1fYXJlYSkge1xcbiAzNDA6XFx0XFx0XFx0aWYgKG1lbWNnX2NoYXJnZV9rZXJuZWxfc3RhY2sodm1fYXJlYSkpIHtcXG4gMzQxOlxcdFxcdFxcdFxcdHZmcmVlKHZtX2FyZWEtXFx1MDAzZWFkZHIpO1xcbiAzNDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM0MzpcXHRcXHRcXHR9XFxuIDM0NDpcXHRcXG4gMzQ1OlxcdFxcdFxcdC8qIFJlc2V0IHN0YWNrIG1ldGFkYXRhLiAqL1xcbiAzNDY6XFx0XFx0XFx0aWYgKCFrYXNhbl9od190YWdzX2VuYWJsZWQoKSlcXG4gMzQ3OlxcdFxcdFxcdFxcdGthc2FuX3VucG9pc29uX3JhbmdlKHZtX2FyZWEtXFx1MDAzZWFkZHIsIFRIUkVBRF9TSVpFKTtcXG4gMzQ4OlxcdFxcbiAzNDk6XFx0XFx0XFx0c3RhY2sgPSBrYXNhbl9yZXNldF90YWcodm1fYXJlYS1cXHUwMDNlYWRkcik7XFxuIDM1MDpcXHRcXG4gMzUxOlxcdFxcdFxcdC8qIENsZWFyIHN0YWxlIHBvaW50ZXJzIGZyb20gcmV1c2VkIHN0YWNrLiAqL1xcbiAzNTI6XFx0XFx0XFx0Y2xlYXJfcGFnZXModm1fYXJlYS1cXHUwMDNlYWRkciwgdm1fYXJlYS1cXHUwMDNlbnJfcGFnZXMpO1xcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRcXHR0c2stXFx1MDAzZXN0YWNrX3ZtX2FyZWEgPSB2bV9hcmVhO1xcbiAzNTU6XFx0XFx0XFx0dHNrLVxcdTAwM2VzdGFjayA9IHN0YWNrO1xcbiAzNTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDM1NzpcXHRcXHR9XFxuIDM1ODpcXHRcXG4gMzU5OlxcdFxcdHN0YWNrID0gX192bWFsbG9jX25vZGUoVEhSRUFEX1NJWkUsIFRIUkVBRF9BTElHTixcXG4gMzYwOlxcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX1ZNQVBfU1RBQ0ssXFxuIDM2MTpcXHRcXHRcXHRcXHRcXHQgICAgIG5vZGUsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuIDM2MjpcXHRcXHRpZiAoIXN0YWNrKVxcbiAzNjM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM2NDpcXHRcXG4gMzY1OlxcdFxcdHZtX2FyZWEgPSBmaW5kX3ZtX2FyZWEoc3RhY2spO1xcbiAzNjY6XFx0XFx0aWYgKG1lbWNnX2NoYXJnZV9rZXJuZWxfc3RhY2sodm1fYXJlYSkpIHtcXG4gMzY3OlxcdFxcdFxcdHZmcmVlKHN0YWNrKTtcXG4gMzY4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzNjk6XFx0XFx0fVxcbiAzNzA6XFx0XFx0LypcXG4gMzcxOlxcdFxcdCAqIFdlIGNhbid0IGNhbGwgZmluZF92bV9hcmVhKCkgaW4gaW50ZXJydXB0IGNvbnRleHQsIGFuZFxcbiAzNzI6XFx0XFx0ICogZnJlZV90aHJlYWRfc3RhY2soKSBjYW4gYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LFxcbiAzNzM6XFx0XFx0ICogc28gY2FjaGUgdGhlIHZtX3N0cnVjdC5cXG4gMzc0OlxcdFxcdCAqL1xcbiAzNzU6XFx0XFx0dHNrLVxcdTAwM2VzdGFja192bV9hcmVhID0gdm1fYXJlYTtcXG4gMzc2OlxcdFxcdHN0YWNrID0ga2FzYW5fcmVzZXRfdGFnKHN0YWNrKTtcXG4gMzc3OlxcdFxcdHRzay1cXHUwMDNlc3RhY2sgPSBzdGFjaztcXG4gMzc4OlxcdFxcdHJldHVybiAwO1xcbiAzNzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MTo0Mi40ODgxODY4OTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDM5MzU5NjM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgTXlzdGVyeSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIExpbmUgMjEwIG9mIGBrZXJuZWwvZm9yay5jYOKApiBsZXQncyBzZWUsIHRoZXJlJ3MgdGhpcyBgc3RydWN0IHZtX3N0YWNrYCBkZWZpbmVkLiBJdCdzIGdvdCBhbiBgcmN1X2hlYWRgIGFuZCBhIGB2bV9zdHJ1Y3RgIHBvaW50ZXIuIEludGVyZXN0aW5nLiBOb3csIGxvb2tpbmcgZnVydGhlciBkb3duLCBhdCBgZnJlZV92bV9zdGFja19jYWNoZWAgKGxpbmUgMjk0KSBhbmQgYHRocmVhZF9zdGFja19mcmVlX3JjdWAsIHNvbWV0aGluZydzIG5vdCBxdWl0ZSBjbGlja2luZy4gV2h5IGlzIHRoZXJlIGEgYHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcik7YCBjYWxsIGluIGBmcmVlX3ZtX3N0YWNrX2NhY2hlYD8gVGhhdCdzIHRoZSBrZXkuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoaXN0b3J5IG9mIHRoaXMuIFdhcyB0aGlzIGludHJvZHVjZWQgaW4gYSBzcGVjaWZpYyBjb21taXQgb3IgaXMgdGhlcmUgYSBwYXRjaCByZWxhdGVkIHRvIHRoaXM/IEkgd2lzaCBJIGhhZCBgZ2l0IGxvZ2AgdG8gY2hlY2sgdGhhdCBkaXJlY3RseS4gTm8gd29ycmllcy4gSSBjYW4gc2VhcmNoIHRoZSBrZXJuZWwgY29kZSBmb3IgdGhlIHBhdGNoIHRpdGxlIG9yIHJlbGF0ZWQgY29tbWl0cywgaWYgSSBjYW4gZmluZCB0aGVtLlxuXG5BbHJpZ2h0LCBsZXQncyByZWZvY3VzLiBMZXQncyBzZWFyY2ggYWdhaW4gZm9yIGB2bV9zdGFja2AgaW4gYGtlcm5lbC9mb3JrLmNgIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBpcyBoYW5kbGVkLiBMZXQncyBsb29rIGF0IGBmcmVlX3ZtX3N0YWNrX2NhY2hlYCAobGluZXMgMjk0LTMxMCkuIE9rYXksIGhlcmUgaXQgaXM6IFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCBhIHBlci1DUFUgY2FjaGUgb2YgYHZtX3N0cnVjdGAgcG9pbnRlcnMgYW5kIGNhbGxzIGB2ZnJlZWAgb24gdGhlIGFzc29jaWF0ZWQgYWRkcmVzcyBpZiB0aGUgYHZtX2FyZWFgIGlzIG5vdCBudWxsLCBhbmQgdGhlbiBzZXRzIHRoZSBwb2ludGVyIHRvIG51bGwuXG5cbk5vdywgbGV0J3MgbW92ZSBvbiB0byBgZnJlZV90aHJlYWRfc3RhY2tgLCBsaW5lcyA0MzAtNDkwLi4uTGV0J3MgcmVhZCB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA4NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQxOjQ2Ljg4MTc4NTk3NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2ZvcmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MzA6XFx0c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp0aHJlYWRfc3RhY2tfY2FjaGU7XFxuIDQzMTpcXHRcXG4gNDMyOlxcdHN0YXRpYyB2b2lkIHRocmVhZF9zdGFja19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJoKVxcbiA0MzM6XFx0e1xcbiA0MzQ6XFx0XFx0a21lbV9jYWNoZV9mcmVlKHRocmVhZF9zdGFja19jYWNoZSwgcmgpO1xcbiA0MzU6XFx0fVxcbiA0MzY6XFx0XFxuIDQzNzpcXHRzdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbiA0Mzg6XFx0e1xcbiA0Mzk6XFx0XFx0c3RydWN0IHJjdV9oZWFkICpyaCA9IHRzay1cXHUwMDNlc3RhY2s7XFxuIDQ0MDpcXHRcXG4gNDQxOlxcdFxcdGNhbGxfcmN1KHJoLCB0aHJlYWRfc3RhY2tfZnJlZV9yY3UpO1xcbiA0NDI6XFx0fVxcbiA0NDM6XFx0XFxuIDQ0NDpcXHRzdGF0aWMgaW50IGFsbG9jX3RocmVhZF9zdGFja19ub2RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgbm9kZSlcXG4gNDQ1OlxcdHtcXG4gNDQ2OlxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YWNrO1xcbiA0NDc6XFx0XFx0c3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jX25vZGUodGhyZWFkX3N0YWNrX2NhY2hlLCBUSFJFQURJTkZPX0dGUCwgbm9kZSk7XFxuIDQ0ODpcXHRcXHRzdGFjayA9IGthc2FuX3Jlc2V0X3RhZyhzdGFjayk7XFxuIDQ0OTpcXHRcXHR0c2stXFx1MDAzZXN0YWNrID0gc3RhY2s7XFxuIDQ1MDpcXHRcXHRyZXR1cm4gc3RhY2sgPyAwIDogLUVOT01FTTtcXG4gNDUxOlxcdH1cXG4gNDUyOlxcdFxcbiA0NTM6XFx0c3RhdGljIHZvaWQgZnJlZV90aHJlYWRfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuIDQ1NDpcXHR7XFxuIDQ1NTpcXHRcXHR0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlKHRzayk7XFxuIDQ1NjpcXHRcXHR0c2stXFx1MDAzZXN0YWNrID0gTlVMTDtcXG4gNDU3OlxcdH1cXG4gNDU4OlxcdFxcbiA0NTk6XFx0dm9pZCB0aHJlYWRfc3RhY2tfY2FjaGVfaW5pdCh2b2lkKVxcbiA0NjA6XFx0e1xcbiA0NjE6XFx0XFx0dGhyZWFkX3N0YWNrX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGVfdXNlcmNvcHkoXFxcInRocmVhZF9zdGFja1xcXCIsXFxuIDQ2MjpcXHRcXHRcXHRcXHRcXHRcXHRUSFJFQURfU0laRSwgVEhSRUFEX1NJWkUsIDAsIDAsXFxuIDQ2MzpcXHRcXHRcXHRcXHRcXHRcXHRUSFJFQURfU0laRSwgTlVMTCk7XFxuIDQ2NDpcXHRcXHRCVUdfT04odGhyZWFkX3N0YWNrX2NhY2hlID09IE5VTEwpO1xcbiA0NjU6XFx0fVxcbiA0NjY6XFx0XFxuIDQ2NzpcXHQjZW5kaWYgLyogVEhSRUFEX1NJWkUgXFx1MDAzZT0gUEFHRV9TSVpFICovXFxuIDQ2ODpcXHQjZW5kaWYgLyogQ09ORklHX1ZNQVBfU1RBQ0sgKi9cXG4gNDY5OlxcdFxcbiA0NzA6XFx0LyogU0xBQiBjYWNoZSBmb3Igc2lnbmFsX3N0cnVjdCBzdHJ1Y3R1cmVzICh0c2stXFx1MDAzZXNpZ25hbCkgKi9cXG4gNDcxOlxcdHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqc2lnbmFsX2NhY2hlcDtcXG4gNDcyOlxcdFxcbiA0NzM6XFx0LyogU0xBQiBjYWNoZSBmb3Igc2lnaGFuZF9zdHJ1Y3Qgc3RydWN0dXJlcyAodHNrLVxcdTAwM2VzaWdoYW5kKSAqL1xcbiA0NzQ6XFx0c3RydWN0IGttZW1fY2FjaGUgKnNpZ2hhbmRfY2FjaGVwO1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHQvKiBTTEFCIGNhY2hlIGZvciBmaWxlc19zdHJ1Y3Qgc3RydWN0dXJlcyAodHNrLVxcdTAwM2VmaWxlcykgKi9cXG4gNDc3OlxcdHN0cnVjdCBrbWVtX2NhY2hlICpmaWxlc19jYWNoZXA7XFxuIDQ3ODpcXHRcXG4gNDc5OlxcdC8qIFNMQUIgY2FjaGUgZm9yIGZzX3N0cnVjdCBzdHJ1Y3R1cmVzICh0c2stXFx1MDAzZWZzKSAqL1xcbiA0ODA6XFx0c3RydWN0IGttZW1fY2FjaGUgKmZzX2NhY2hlcDtcXG4gNDgxOlxcdFxcbiA0ODI6XFx0LyogU0xBQiBjYWNoZSBmb3IgbW1fc3RydWN0IHN0cnVjdHVyZXMgKHRzay1cXHUwMDNlbW0pICovXFxuIDQ4MzpcXHRzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1tX2NhY2hlcDtcXG4gNDg0OlxcdFxcbiA0ODU6XFx0c3RhdGljIHZvaWQgYWNjb3VudF9rZXJuZWxfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBhY2NvdW50KVxcbiA0ODY6XFx0e1xcbiA0ODc6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1ZNQVBfU1RBQ0spKSB7XFxuIDQ4ODpcXHRcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhID0gdGFza19zdGFja192bV9hcmVhKHRzayk7XFxuIDQ4OTpcXHRcXHRcXHRpbnQgaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6NDYuODgxOTQyOTc1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUzMTUwNjA0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGlzc2VjdGluZyBUaHJlYWQgU3RhY2sgQWxsb2NhdGlvbiBhbmQgRnJlZWluZyB3aXRoIEtBU0FOKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCBhbmQgaW1tZWRpYXRlbHkgaGF2ZSBhIHF1ZXN0aW9uLiBXaGF0J3MgZ29pbmcgb24gd2l0aCBgdGhyZWFkX3N0YWNrX2RlbGF5ZWRfZnJlZWA/IExldCdzIHRha2UgYSBxdWljayBsb29rIGF0IGxpbmVzIDI3MC0zMDAgaW4gYGtlcm5lbC9mb3JrLmNgLiBBaCwgZ290IGl0LlxuXG5Ob3csIGZvY3VzaW5nIG9uIGB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlYCwgYHRzay1cdTAwM2VzdGFja2AgaXMgYXNzaWduZWQgdG8gYSBgdm1fc3RhY2tgIHN0cnVjdC4gSW50ZXJlc3RpbmcuIFRoZW4gSSBnbyBiYWNrIHRvIHNlZSBgYWxsb2NfdGhyZWFkX3N0YWNrX25vZGVgIGFuZCBub3RlIHRoYXQgYHRzay1cdTAwM2VzdGFja2AgaXMgdGhlbiBhc3NpZ25lZCB0aGUgdmFsdWUgb2YgYHN0YWNrYC4gQmFjayBpbiBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCwgYHZtX3N0YWNrLVx1MDAzZXN0YWNrX3ZtX2FyZWFgIGVxdWFscyBgdHNrLVx1MDAzZXN0YWNrX3ZtX2FyZWFgLiBPa2F5LCBhbGwgb2YgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuXG5cbkJ1dCB3aHkgdGhlIGNoYW5nZSBpbiBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCBmcm9tIGB2ZnJlZSh2bV9hcmVhLVx1MDAzZWFkZHIpYCB0byBgdmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpYD8gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uLiBXaGVyZSBkb2VzIGB2bV9hcmVhLVx1MDAzZWFkZHJgIGNvbWUgZnJvbT8gSSBuZWVkIHRvIHRyYWNlIGl0IGJhY2suXG5cbkkgc2VlIHRoYXQgYHZtX2FyZWEtXHUwMDNlYWRkcmAgaXMgYXNzaWduZWQgdGhlIGFkZHJlc3MgcmV0dXJuZWQgYnkgYF9fdm1hbGxvY19ub2RlYCB3aXRoaW4gYF9fdm1hbGxvY19ub2RlYCBpdHNlbGYuIE5vdywgY29uc2lkZXJpbmcgS0FTQU4gd2l0aCB0YWdzIChsaWtlIEtBU0FOX1NXX1RBR1Mgb3IgSFcgdGFncyBvbiBBUk02NCksIGRvZXMgYHZtX2FyZWEtXHUwMDNlYWRkcmAgaGF2ZSBhIHRhZyBvciBub3Q/IFRoYXQncyB0aGUgY3J1eCBvZiBpdC5cblxuQmFjayBpbiBgYWxsb2NfdGhyZWFkX3N0YWNrX25vZGVgLCBJIHNlZSBgc3RhY2sgPSBfX3ZtYWxsb2Nfbm9kZSguLi4pYCBhbmQgdGhlIHVzZSBvZiBgR0ZQX1ZNQVBfU1RBQ0tgIHdpdGggYF9fR0ZQX1NLSVBfS0FTQU5gLiBPa2F5LCBzbyBpdCBzZWVtcyBsaWtlIHRoZSBpbml0aWFsIGFsbG9jYXRpb24gKm1pZ2h0KiBza2lwIEtBU0FOLiBCdXQgdGhlbiB0aGVyZSdzIGEgc3Vic2VxdWVudCBgc3RhY2sgPSBrYXNhbl9yZXNldF90YWcodm1fYXJlYS1cdTAwM2VhZGRyKTtgIGFuZCB0aGVuIGBzdGFjayA9IGthc2FuX3Jlc2V0X3RhZyhzdGFjayk7YC4gSXMgYHZtX2FyZWEtXHUwMDNlYWRkcmAgYWN0dWFsbHkgdGFnZ2VkIGF0IHRoaXMgcG9pbnQ/IElmIGl0IGlzLCB3aHkgd291bGQgd2UgbmVlZCB0byByZXNldCB0aGUgdGFnIGJlZm9yZSBmcmVlaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLlxuXG5UaGlzIHJhaXNlcyBhbm90aGVyIHBvaW50OiB3aGF0IGRvZXMgYHZmcmVlKClgICpkbyogd2l0aCB0YWdnZWQgYWRkcmVzc2VzPyBUaGlzIGlzIG15IG5leHQgYXZlbnVlLiBMZXQncyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZmcmVlKClgIGluIGBtbS92bWFsbG9jLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgS0FTQU4gaW50ZXJhY3RzIHdpdGggdGhpcyBkZWFsbG9jYXRpb24gcHJvY2VzcyB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBga2FzYW5fcmVzZXRfdGFnYCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc5MSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQxOjUyLjE5NzAwNjEyNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyOTcyMjUzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHZmcmVlXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC91bS9pbmNsdWRlL3NoYXJlZC91bV9tYWxsb2MuaD0xND1leHRlcm4gdm9pZCAqdm1hbGxvY19ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplKTtcXG5hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3VtX21hbGxvYy5oLTE1LSNkZWZpbmUgdm1hbGxvYyguLi4pXFx0XFx0dm1hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pXFxuYXJjaC91bS9pbmNsdWRlL3NoYXJlZC91bV9tYWxsb2MuaDoxNjpleHRlcm4gdm9pZCB2ZnJlZShjb25zdCB2b2lkICpwdHIpO1xcbmFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvdW1fbWFsbG9jLmgtMTctXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0yMDQ9dm9pZCAqX19tdXN0X2NoZWNrIHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLFxcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMjEzLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjIxNDpleHRlcm4gdm9pZCB2ZnJlZShjb25zdCB2b2lkICphZGRyKTtcXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0yMTUtZXh0ZXJuIHZvaWQgdmZyZWVfYXRvbWljKGNvbnN0IHZvaWQgKmFkZHIpO1xcbi0tXFxubW0vbm9tbXUuYz02NT11bnNpZ25lZCBpbnQga29ianNpemUoY29uc3Qgdm9pZCAqb2JqcClcXG4tLVxcbm1tL25vbW11LmMtMTA1LVxcbm1tL25vbW11LmM6MTA2OnZvaWQgdmZyZWUoY29uc3Qgdm9pZCAqYWRkcilcXG5tbS9ub21tdS5jLTEwNy17XFxuLS1cXG5tbS92bWFsbG9jLmM9MzQ2MD1zdGF0aWMgdm9pZCB2bV9hcmVhX2ZyZWVfcGFnZXMoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfaWR4LFxcbi0tXFxubW0vdm1hbGxvYy5jLTM0OTEtICovXFxubW0vdm1hbGxvYy5jOjM0OTI6dm9pZCB2ZnJlZShjb25zdCB2b2lkICphZGRyKVxcbm1tL3ZtYWxsb2MuYy0zNDkzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6NTQuMDI2NzM2OTY4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5OTA5ODc3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgdGhlIGF1ZGllbmNlIGlzIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byBgdmZyZWVgKipcblxuQWxyaWdodCwgbGV0J3MgY3JhY2sgb3BlbiBgbW0vdm1hbGxvYy5jYCBhbmQgemVybyBpbiBvbiB0aGUgYHZmcmVlYCBmdW5jdGlvbi4gSSdtIGtlZW4gdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB2aXJ0dWFsIG1lbW9yeSBpcyBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCBjb21lcyB0byBkZWFsbG9jYXRpbmcgbWVtb3J5IGFsbG9jYXRlZCB3aXRoIGB2bWFsbG9jYC4gSSBrbm93IHRoZSBjb3JlIHByaW5jaXBsZXMsIG9mIGNvdXJzZTogaXQncyBhYm91dCBmcmVlaW5nIHVwIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgYW5kIHBvdGVudGlhbGx5IHJlbGVhc2luZyBwaHlzaWNhbCBwYWdlcyBiYWNrIHRvIHRoZSBzeXN0ZW0sIGJ1dCBJIHdhbnQgdG8gZ2V0IGEgYml0IG1vcmUgZ3JhbnVsYXIgaGVyZS5cblxuSSdtIHRoaW5raW5nLCBJJ2xsIHBheSBhdHRlbnRpb24gdG8gdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgdGFibGVzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gaW4gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gSSdtIGludGVyZXN0ZWQgaW4gaG93IGl0IGRlYWxzIHdpdGggdGhlIGB2bV9zdHJ1Y3RgIGFuZCBgdm1fYXJlYV9zdHJ1Y3RgLCBhbmQgZXNwZWNpYWxseSB0aGUgY2FzZXMgd2hlcmUgdGhlIGFsbG9jYXRlZCB2aXJ0dWFsIG1lbW9yeSBpcyBtYXBwZWQgdG8gY29udGlndW91cyBwaHlzaWNhbCBwYWdlcyBhcyB0aGV5IGFyZSBpbiB2bWFsbG9jLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGdyYWNlZnVsbHkgaGFuZGxlcyBlZGdlIGNhc2VzIGxpa2UgZnJlZWluZyBhIHBhcnRpYWwgYWxsb2NhdGlvbiBvciBhIGNvbXBsZXRlbHkgbWlzYWxpZ25lZCByZWdpb24g4oCTIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgcGFnZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBtZWNoYW5pc21zLiBBbHNvLCBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IGludGVyZXN0aW5nIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdGhhdCBhcmUgdXNlZCB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgdmlydHVhbCBtZW1vcnkgbWFwIGR1cmluZyBkZWFsbG9jYXRpb24uIEknbSBhbHNvIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3B0aW1pemF0aW9ucyB0aGF0IGFyZSBkb25lIGR1cmluZyBkZWFsbG9jYXRpb24uIEknbSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcnBsYXkgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCwgb2YgY291cnNlLCBidXQgSSdtIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBkZXRhaWxzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc2VlIGhvdyB3ZWxsIG15IGFzc3VtcHRpb25zIGFsaWduIHdpdGggdGhlIGFjdHVhbCBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDUyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQxOjU5LjAxNzcyNjgzNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0OTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM0OTA6XFx0ICogY29udmVudGlvbnMgZm9yIHZmcmVlKCkgYXJjaC1kZXBlbmRlbnQgd291bGQgYmUgYSByZWFsbHkgYmFkIGlkZWEpLlxcbjM0OTE6XFx0ICovXFxuMzQ5MjpcXHR2b2lkIHZmcmVlKGNvbnN0IHZvaWQgKmFkZHIpXFxuMzQ5MzpcXHR7XFxuMzQ5NDpcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcXG4zNDk1OlxcdFxcbjM0OTY6XFx0XFx0aWYgKHVubGlrZWx5KGluX2ludGVycnVwdCgpKSkge1xcbjM0OTc6XFx0XFx0XFx0dmZyZWVfYXRvbWljKGFkZHIpO1xcbjM0OTg6XFx0XFx0XFx0cmV0dXJuO1xcbjM0OTk6XFx0XFx0fVxcbjM1MDA6XFx0XFxuMzUwMTpcXHRcXHRCVUdfT04oaW5fbm1pKCkpO1xcbjM1MDI6XFx0XFx0a21lbWxlYWtfZnJlZShhZGRyKTtcXG4zNTAzOlxcdFxcdG1pZ2h0X3NsZWVwKCk7XFxuMzUwNDpcXHRcXG4zNTA1OlxcdFxcdGlmICghYWRkcilcXG4zNTA2OlxcdFxcdFxcdHJldHVybjtcXG4zNTA3OlxcdFxcbjM1MDg6XFx0XFx0dm0gPSByZW1vdmVfdm1fYXJlYShhZGRyKTtcXG4zNTA5OlxcdFxcdGlmICh1bmxpa2VseSghdm0pKSB7XFxuMzUxMDpcXHRcXHRcXHRXQVJOKDEsIEtFUk5fRVJSIFxcXCJUcnlpbmcgdG8gdmZyZWUoKSBub25leGlzdGVudCB2bSBhcmVhICglcClcXFxcblxcXCIsXFxuMzUxMTpcXHRcXHRcXHRcXHRcXHRhZGRyKTtcXG4zNTEyOlxcdFxcdFxcdHJldHVybjtcXG4zNTEzOlxcdFxcdH1cXG4zNTE0OlxcdFxcbjM1MTU6XFx0XFx0aWYgKHVubGlrZWx5KHZtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNX0ZMVVNIX1JFU0VUX1BFUk1TKSlcXG4zNTE2OlxcdFxcdFxcdHZtX3Jlc2V0X3Blcm1zKHZtKTtcXG4zNTE3OlxcdFxcbjM1MTg6XFx0XFx0dm1fYXJlYV9mcmVlX3BhZ2VzKHZtLCAwLCB2bS1cXHUwMDNlbnJfcGFnZXMpO1xcbjM1MTk6XFx0XFx0a3ZmcmVlKHZtLVxcdTAwM2VwYWdlcyk7XFxuMzUyMDpcXHRcXHRrZnJlZSh2bSk7XFxuMzUyMTpcXHR9XFxuMzUyMjpcXHRFWFBPUlRfU1lNQk9MKHZmcmVlKTtcXG4zNTIzOlxcdFxcbjM1MjQ6XFx0LyoqXFxuMzUyNTpcXHQgKiB2dW5tYXAgLSByZWxlYXNlIHZpcnR1YWwgbWFwcGluZyBvYnRhaW5lZCBieSB2bWFwKClcXG4zNTI2OlxcdCAqIEBhZGRyOiAgIG1lbW9yeSBiYXNlIGFkZHJlc3NcXG4zNTI3OlxcdCAqXFxuMzUyODpcXHQgKiBGcmVlIHRoZSB2aXJ0dWFsbHkgY29udGlndW91cyBtZW1vcnkgYXJlYSBzdGFydGluZyBhdCBAYWRkcixcXG4zNTI5OlxcdCAqIHdoaWNoIHdhcyBjcmVhdGVkIGZyb20gdGhlIHBhZ2UgYXJyYXkgcGFzc2VkIHRvIHZtYXAoKS5cXG4zNTMwOlxcdCAqXFxuMzUzMTpcXHQgKiBNdXN0IG5vdCBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuXFxuMzUzMjpcXHQgKi9cXG4zNTMzOlxcdHZvaWQgdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIpXFxuMzUzNDpcXHR7XFxuMzUzNTpcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcXG4zNTM2OlxcdFxcbjM1Mzc6XFx0XFx0QlVHX09OKGluX2ludGVycnVwdCgpKTtcXG4zNTM4OlxcdFxcdG1pZ2h0X3NsZWVwKCk7XFxuMzUzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6NTkuMDE3OTIxNjA0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NTE3NDQ0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgYHJlbW92ZV92bV9hcmVhKGFkZHIpYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGByZW1vdmVfdm1fYXJlYShhZGRyKWAuIFJpZ2h0LCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYG1tL3ZtYWxsb2MuY2AsIGFuZCBnZXQgYSBnb29kIGxvb2sgYXQgdGhlIGByZW1vdmVfdm1fYXJlYWAgZnVuY3Rpb24uIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRoaXMgdGhpbmcuIE5vIHBvaW50IGluIGp1c3QgZ3Vlc3NpbmcsIGxldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTQ2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MjowMC44Njk2NjgzNzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMTUxMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB2bV9zdHJ1Y3QgXFxcXCpyZW1vdmVfdm1fYXJlYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTMzMjI9c3RydWN0IHZtX3N0cnVjdCAqZmluZF92bV9hcmVhKGNvbnN0IHZvaWQgKmFkZHIpXFxuLS1cXG5tbS92bWFsbG9jLmMtMzM0Mi0gKi9cXG5tbS92bWFsbG9jLmM6MzM0MzpzdHJ1Y3Qgdm1fc3RydWN0ICpyZW1vdmVfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKVxcbm1tL3ZtYWxsb2MuYy0zMzQ0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDI6MDAuOTQxODI1NDY1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyNDEyOTY4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSByZWFkaW5nIGByZW1vdmVfdm1fYXJlYWAgaW4gYG1tL3ZtYWxsb2MuY2A6XG5cbioqRGlzc2VjdGluZyBgcmVtb3ZlX3ZtX2FyZWFgIGluIGBtbS92bWFsbG9jLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBmb2N1c2luZyBvbiBgcmVtb3ZlX3ZtX2FyZWFgIG5vdywgc3BlY2lmaWNhbGx5IGluIGBtbS92bWFsbG9jLmNgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSBrbm93IHRoZSB2bWFsbG9jIGFyZWEgaXMgY3J1Y2lhbCBmb3IgYWxsb2NhdGluZyB2aXJ0dWFsIG1lbW9yeSBmb3IgdGhpbmdzIGxpa2Uga2VybmVsIG1vZHVsZXMsIGFuZCBkcml2ZXJzIHRoYXQgcmVxdWlyZSBjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeSwgYnV0IGNhbid0IGJlIG1hcHBlZCBhdCBhIGZpeGVkIGFkZHJlc3MuIFNvLCByZW1vdmluZyBhbiBhcmVhIGlzIGEgc2lnbmlmaWNhbnQgb3BlcmF0aW9uOyBpdCBtZWFucyBmcmVlaW5nIHVwIHByZXZpb3VzbHkgYWxsb2NhdGVkIHZpcnR1YWwgbWVtb3J5LlxuXG5JJ20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBsaWtlbHkgdXNlIG9mIHRoZSByZWQtYmxhY2sgdHJlZSAob3Igc2ltaWxhciBkYXRhIHN0cnVjdHVyZSkgdG8gdHJhY2sgdGhlIHZtYWxsb2MgYXJlYSwgYW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIHRoYXQgY291bGQgYXJpc2UgZnJvbSBmcmVlaW5nIGEgcmVnaW9uLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBga2ZyZWVgIGFuZCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBwcmltaXRpdmVzIHRvIGFjdHVhbGx5IHJlbGVhc2UgdGhlIHBhZ2VzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkgaGFuZGxlIGFueSBzeW5jaHJvbml6YXRpb24gdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBoYXBwZW4gd2hlbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBhbHNvIHJlZmVyZW5jaW5nIG9yIHVzaW5nIHRoaXMgdm1hbGxvYyBhcmVhLiBJJ20gcHJvYmFibHkgZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZXMgYXMgd2VsbCwgdG8gbWFrZSBzdXJlIHRoZSB2aXJ0dWFsLXRvLXBoeXNpY2FsIG1hcHBpbmcgaXMgcHJvcGVybHkgcmVtb3ZlZC4gQW5kLCBvZiBjb3Vyc2UsIEknbSBhbnRpY2lwYXRpbmcgdGhhdCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBlcnJvciBjb25kaXRpb25zIGFuZCBjb3JuZXIgY2FzZXMgY29ycmVjdGx5LCBwZXJoYXBzIGJ5IGNoZWNraW5nIHRoZSByZXR1cm4gdmFsdWVzIGZyb20gdGhlIHVuZGVybHlpbmcgY2FsbHMgYW5kIHRoZSBoYW5kbGluZyBvZiB0aGUgcmJ0cmVlIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MjowNC4xODMxMjQzMjdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzQwOlxcdCAqXFxuMzM0MTpcXHQgKiBSZXR1cm46IHRoZSBhcmVhIGRlc2NyaXB0b3Igb24gc3VjY2VzcyBvciAlTlVMTCBvbiBmYWlsdXJlLlxcbjMzNDI6XFx0ICovXFxuMzM0MzpcXHRzdHJ1Y3Qgdm1fc3RydWN0ICpyZW1vdmVfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKVxcbjMzNDQ6XFx0e1xcbjMzNDU6XFx0XFx0c3RydWN0IHZtYXBfYXJlYSAqdmE7XFxuMzM0NjpcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcXG4zMzQ3OlxcdFxcbjMzNDg6XFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4zMzQ5OlxcdFxcbjMzNTA6XFx0XFx0aWYgKFdBUk4oIVBBR0VfQUxJR05FRChhZGRyKSwgXFxcIlRyeWluZyB0byB2ZnJlZSgpIGJhZCBhZGRyZXNzICglcClcXFxcblxcXCIsXFxuMzM1MTpcXHRcXHRcXHRcXHRhZGRyKSlcXG4zMzUyOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjMzNTM6XFx0XFxuMzM1NDpcXHRcXHR2YSA9IGZpbmRfdW5saW5rX3ZtYXBfYXJlYSgodW5zaWduZWQgbG9uZylhZGRyKTtcXG4zMzU1OlxcdFxcdGlmICghdmEgfHwgIXZhLVxcdTAwM2V2bSlcXG4zMzU2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjMzNTc6XFx0XFx0dm0gPSB2YS1cXHUwMDNldm07XFxuMzM1ODpcXHRcXG4zMzU5OlxcdFxcdGRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKHZtLVxcdTAwM2VhZGRyLCBnZXRfdm1fYXJlYV9zaXplKHZtKSk7XFxuMzM2MDpcXHRcXHRkZWJ1Z19jaGVja19ub19vYmpfZnJlZWQodm0tXFx1MDAzZWFkZHIsIGdldF92bV9hcmVhX3NpemUodm0pKTtcXG4zMzYxOlxcdFxcdGthc2FuX2ZyZWVfbW9kdWxlX3NoYWRvdyh2bSk7XFxuMzM2MjpcXHRcXHRrYXNhbl9wb2lzb25fdm1hbGxvYyh2bS1cXHUwMDNlYWRkciwgZ2V0X3ZtX2FyZWFfc2l6ZSh2bSkpO1xcbjMzNjM6XFx0XFxuMzM2NDpcXHRcXHRmcmVlX3VubWFwX3ZtYXBfYXJlYSh2YSk7XFxuMzM2NTpcXHRcXHRyZXR1cm4gdm07XFxuMzM2NjpcXHR9XFxuMzM2NzpcXHRcXG4zMzY4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXJlYV9kaXJlY3RfbWFwKGNvbnN0IHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsXFxuMzM2OTpcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50ICgqc2V0X2RpcmVjdF9tYXApKHN0cnVjdCBwYWdlICpwYWdlKSlcXG4zMzcwOlxcdHtcXG4zMzcxOlxcdFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4zMzcyOlxcdFxcbjMzNzM6XFx0XFx0LyogSFVHRV9WTUFMTE9DIHBhc3NlcyBzbWFsbCBwYWdlcyB0byBzZXRfZGlyZWN0X21hcCAqL1xcbjMzNzQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFyZWEtXFx1MDAzZW5yX3BhZ2VzOyBpKyspXFxuMzM3NTpcXHRcXHRcXHRpZiAocGFnZV9hZGRyZXNzKGFyZWEtXFx1MDAzZXBhZ2VzW2ldKSlcXG4zMzc2OlxcdFxcdFxcdFxcdHNldF9kaXJlY3RfbWFwKGFyZWEtXFx1MDAzZXBhZ2VzW2ldKTtcXG4zMzc3OlxcdH1cXG4zMzc4OlxcdFxcbjMzNzk6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDI6MDQuMTgzNDI0MTE2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQwMjI2NTY1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBLQVNBTiBJc3N1ZXMgaW4gYHZmcmVlKClgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBMaW5lIDMzNTAtMzM1NCBvZiB0aGUgY29kZSBjYXRjaGVzIG15IGF0dGVudGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgdmZyZWUoKWAgZnVuY3Rpb24uIEkgc2VlIHRoZSBgV0FSTmAgbWFjcm8gaW1tZWRpYXRlbHksIHdoaWNoIGlzIGEgcmVkIGZsYWcuIEl0J3MgY2hlY2tpbmcgaWYgdGhlIGFkZHJlc3MgYGFkZHJgIGJlaW5nIHBhc3NlZCBpcyBwYWdlLWFsaWduZWQsIGJ1dCB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIHdpdGggS0FTQU4/IEkga25vdyBvbiBhcm02NCwgZXNwZWNpYWxseSB3aXRoIEtBU0FOIEhXX1RBR1Mgb3IgU1dfVEFHUyBlbmFibGVkLCB0aGUgdG9wIGJ5dGUgb2YgYW4gYWRkcmVzcyBjYW4gY29udGFpbiBhIHRhZy4gVGhpcyBpcyBjcnVjaWFsLlxuXG5UaGUgY29kZSBjaGVja3MgcGFnZSBhbGlnbm1lbnQsIHByZXN1bWFibHkgYnkgaW5zcGVjdGluZyB0aGUgbG93ZXIgYml0cy4gQnV0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFkZHJlc3MgaXMgKnVzZWQqIGluIHN1YnNlcXVlbnQgY2FsbHMuIGBmaW5kX3VubGlua192bWFwX2FyZWFgIGlzIHRoZSBuZXh0IGZ1bmN0aW9uIGNhbGwgdGhhdCBzZWVtcyB0byB1c2UgdGhpcyBhZGRyZXNzLCBzbyBJIG11c3QgZGlnIGRlZXBlci5cblxuTGV0J3MgbG9vayBhdCBgZmluZF91bmxpbmtfdm1hcF9hcmVhYC4gQWgsIGl0IGNhbGxzIGBfX2ZpbmRfdm1hcF9hcmVhYC4gQW5kIGJpbmdvISBgX19maW5kX3ZtYXBfYXJlYWAgZXhwbGljaXRseSBjYWxscyBga2FzYW5fcmVzZXRfdGFnYCBvbiB0aGUgYWRkcmVzcy4gVGhpcyBzZWVtcyB0byBtZWFuIHRoYXQgdGhlIGZ1bmN0aW9uICpyZW1vdmVzKiB0aGUgdGFnLiBCdXQgaXMgYGZpbmRfdW5saW5rX3ZtYXBfYXJlYWAgZ2V0dGluZyBhIHRhZyBhcyBpbnB1dCwgb3Igbm90PyBJIG11c3QgdmVyaWZ5LiBJcyB0aGlzIGFuIGlzc3VlPyBQcm9iYWJseSBub3QsIHNpbmNlIHRoZSB0YWcgZ2V0cyByZW1vdmVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg2OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQyOjA4LjIwNjA4MzAzNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzOTMwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmluZF91bmxpbmtfdm1hcF9hcmVhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9MjUxND1zdHJ1Y3Qgdm1hcF9hcmVhICpmaW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS92bWFsbG9jLmMtMjU1MC1cXG5tbS92bWFsbG9jLmM6MjU1MTpzdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqZmluZF91bmxpbmtfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkcilcXG5tbS92bWFsbG9jLmMtMjU1Mi17XFxuLS1cXG5tbS92bWFsbG9jLmM9MzA0OT12b2lkIHZtX3VubWFwX3JhbShjb25zdCB2b2lkICptZW0sIHVuc2lnbmVkIGludCBjb3VudClcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zMDY4LVxcbm1tL3ZtYWxsb2MuYzozMDY5OlxcdHZhID0gZmluZF91bmxpbmtfdm1hcF9hcmVhKGFkZHIpO1xcbm1tL3ZtYWxsb2MuYy0zMDcwLVxcdGlmIChXQVJOX09OX09OQ0UoIXZhKSlcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zMzQzPXN0cnVjdCB2bV9zdHJ1Y3QgKnJlbW92ZV92bV9hcmVhKGNvbnN0IHZvaWQgKmFkZHIpXFxuLS1cXG5tbS92bWFsbG9jLmMtMzM1My1cXG5tbS92bWFsbG9jLmM6MzM1NDpcXHR2YSA9IGZpbmRfdW5saW5rX3ZtYXBfYXJlYSgodW5zaWduZWQgbG9uZylhZGRyKTtcXG5tbS92bWFsbG9jLmMtMzM1NS1cXHRpZiAoIXZhIHx8ICF2YS1cXHUwMDNldm0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQyOjA4LjI1MTQ4MzgzNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NjQ0NDI3MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgZmluZF91bmxpbmtfdm1hcF9hcmVhYCBpbiBgbW0vdm1hbGxvYy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBmaW5kX3VubGlua192bWFwX2FyZWFgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsOyBpdCdzIHRoZSBjb3JlIG9mIGhvdyB2bWFsbG9jIGFyZWFzIGFyZSBtYW5hZ2VkIGFuZCB1bmxpbmtlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIGZsb3cgKnByZWNpc2VseSosIGVzcGVjaWFsbHkgaG93IGl0IGhhbmRsZXMgdGhlIHVubWFwcGluZyBwcm9jZXNzLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIHBhcnRpY3VsYXJseSB0aGUgdm1hcCBhcmVhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5J3JlIHRyYXZlcnNlZC4gV2hhdCBhcmUgdGhlIGtleSBhc3N1bXB0aW9ucyBpdCBtYWtlcyBhYm91dCB0aGUgdm1hbGxvYyByZWdpb24gbGF5b3V0PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yLCBlc3BlY2lhbGx5IGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQ/IEkgYWxzbyBuZWVkIHRvIGFzY2VydGFpbiBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBsb2dpYyDigJMgYXJlIHRoZXJlIGFueSB1bnVzdWFsIGludGVyYWN0aW9ucyB3aXRoIGhhcmR3YXJlPyBTcGVjaWZpY2FsbHksIHdoZXJlIGFuZCBob3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZSB3aXRoIHRoZSBwYWdlIHRhYmxlIHN0cnVjdHVyZXMgdG8gaW52YWxpZGF0ZSBtYXBwaW5ncz8gVW5kZXJzdGFuZGluZyB0aGUgbnVhbmNlcyBvZiBtZW1vcnkgYmFycmllcnMgaGVyZSBpcyBwYXJhbW91bnQuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGEgbHluY2hwaW4gaW4gcHJldmVudGluZyBtZW1vcnkgbGVha3MgYW5kIGVuc3VyaW5nIHRoZSB2bWFsbG9jIHN1YnN5c3RlbSBvcGVyYXRlcyBjb3JyZWN0bHksIHNvIEkgbXVzdCBkaXNzZWN0IGV2ZXJ5IGxpbmUgd2l0aCBhIGZpbmUtdG9vdGggY29tYi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4NjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MjoxMy44OTU5MTMxMTFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTUwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTUwOlxcdFxcbjI1NTE6XFx0c3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKmZpbmRfdW5saW5rX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpXFxuMjU1MjpcXHR7XFxuMjU1MzpcXHRcXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcXG4yNTU0OlxcdFxcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xcbjI1NTU6XFx0XFx0aW50IGksIGo7XFxuMjU1NjpcXHRcXG4yNTU3OlxcdFxcdC8qXFxuMjU1ODpcXHRcXHQgKiBDaGVjayB0aGUgY29tbWVudCBpbiB0aGUgZmluZF92bWFwX2FyZWEoKSBhYm91dCB0aGUgbG9vcC5cXG4yNTU5OlxcdFxcdCAqL1xcbjI1NjA6XFx0XFx0aSA9IGogPSBhZGRyX3RvX25vZGVfaWQoYWRkcik7XFxuMjU2MTpcXHRcXHRkbyB7XFxuMjU2MjpcXHRcXHRcXHR2biA9IFxcdTAwMjZ2bWFwX25vZGVzW2ldO1xcbjI1NjM6XFx0XFxuMjU2NDpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnZuLVxcdTAwM2VidXN5LmxvY2spO1xcbjI1NjU6XFx0XFx0XFx0dmEgPSBfX2ZpbmRfdm1hcF9hcmVhKGFkZHIsIFxcdTAwMjZ2bi1cXHUwMDNlYnVzeS5yb290KTtcXG4yNTY2OlxcdFxcdFxcdGlmICh2YSlcXG4yNTY3OlxcdFxcdFxcdFxcdHVubGlua192YSh2YSwgXFx1MDAyNnZuLVxcdTAwM2VidXN5LnJvb3QpO1xcbjI1Njg6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZuLVxcdTAwM2VidXN5LmxvY2spO1xcbjI1Njk6XFx0XFxuMjU3MDpcXHRcXHRcXHRpZiAodmEpXFxuMjU3MTpcXHRcXHRcXHRcXHRyZXR1cm4gdmE7XFxuMjU3MjpcXHRcXHR9IHdoaWxlICgoaSA9IChpICsgbnJfdm1hcF9ub2RlcyAtIDEpICUgbnJfdm1hcF9ub2RlcykgIT0gaik7XFxuMjU3MzpcXHRcXG4yNTc0OlxcdFxcdHJldHVybiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MjoxMy44OTYxMDY5OTFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMwNDM2ODA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBMaW5lIDI1NjAgLSBQb3RlbnRpYWwgQm90dGxlbmVjaz8qKlxuXG5BbHJpZ2h0LCBsZXQncyB6b29tIGluIG9uIGxpbmUgMjU2MCBvZiB0aGlzIGNvZGUuIFRoYXQncyB3aGVyZSB3ZSBoYXZlIGBpID0gaiA9IGFkZHJfdG9fbm9kZV9pZChhZGRyKTtgLiBJbW1lZGlhdGVseSwgdGhlIGBhZGRyX3RvX25vZGVfaWQoYWRkcilgIGZ1bmN0aW9uIGNhdGNoZXMgbXkgZXllLiBJdCdzIG9idmlvdXNseSBjcml0aWNhbCwgdHJhbnNsYXRpbmcgYW4gYWRkcmVzcyAoYGFkZHJgKSBpbnRvIGEgbm9kZSBJRC4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGFyZWEgZm9yIHBlcmZvcm1hbmNlLCBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLiBUaGUgZG91YmxlIGFzc2lnbm1lbnQgc3VnZ2VzdHMgYGlgIGFuZCBgamAgYXJlIGRlcGVuZGVudCBhbmQgdGhlIG9wZXJhdGlvbiB3aWxsIGJlIGRvbmUgZm9yIGJvdGghIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZyB1bmRlciB0aGUgaG9vZCwgZmFzdCwgYW5kIHdoYXQgdGhlIHRpbWUgY29tcGxleGl0eSBtaWdodCBiZS4gVGhpcyBjb3VsZCBiZSBhIGJvdHRsZW5lY2sgaW4gdGhlIG92ZXJhbGwgYWxnb3JpdGhtIGlmIHRoaXMgZnVuY3Rpb24gaXMgaW5lZmZpY2llbnQsIHBhcnRpY3VsYXJseSBpZiBpdCdzIGNhbGxlZCBmcmVxdWVudGx5IG9yIHdpdGhpbiBhIHRpZ2h0IGxvb3AuIExldCdzIGRlbHZlIGRlZXBlciBhbmQgaW5zcGVjdCB0aGUgYWN0dWFsIGBhZGRyX3RvX25vZGVfaWRgIGltcGxlbWVudGF0aW9uIHRvIGdldCBhIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQyOjE3LjIwMDQ3NzA3MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1NjkyMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRkcl90b19ub2RlX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9OTkyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XFxubW0vdm1hbGxvYy5jOjk5MzphZGRyX3RvX25vZGVfaWQodW5zaWduZWQgbG9uZyBhZGRyKVxcbm1tL3ZtYWxsb2MuYy05OTQte1xcbi0tXFxubW0vdm1hbGxvYy5jPTk5OT1hZGRyX3RvX25vZGUodW5zaWduZWQgbG9uZyBhZGRyKVxcbm1tL3ZtYWxsb2MuYy0xMDAwLXtcXG5tbS92bWFsbG9jLmM6MTAwMTpcXHRyZXR1cm4gXFx1MDAyNnZtYXBfbm9kZXNbYWRkcl90b19ub2RlX2lkKGFkZHIpXTtcXG5tbS92bWFsbG9jLmMtMTAwMi19XFxuLS1cXG5tbS92bWFsbG9jLmM9MjUxND1zdHJ1Y3Qgdm1hcF9hcmVhICpmaW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS92bWFsbG9jLmMtMjUyMy1cXHQvKlxcbm1tL3ZtYWxsb2MuYzoyNTI0OlxcdCAqIEFuIGFkZHJfdG9fbm9kZV9pZChhZGRyKSBjb252ZXJ0cyBhbiBhZGRyZXNzIHRvIGEgbm9kZSBpbmRleFxcbm1tL3ZtYWxsb2MuYy0yNTI1LVxcdCAqIHdoZXJlIGEgVkEgaXMgbG9jYXRlZC4gSWYgVkEgc3BhbnMgc2V2ZXJhbCB6b25lcyBhbmQgcGFzc2VkXFxuLS1cXG5tbS92bWFsbG9jLmMtMjUzNS1cXHQgKi9cXG5tbS92bWFsbG9jLmM6MjUzNjpcXHRpID0gaiA9IGFkZHJfdG9fbm9kZV9pZChhZGRyKTtcXG5tbS92bWFsbG9jLmMtMjUzNy1cXHRkbyB7XFxuLS1cXG5tbS92bWFsbG9jLmM9MjU1MT1zdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqZmluZF91bmxpbmtfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yNTU5LVxcdCAqL1xcbm1tL3ZtYWxsb2MuYzoyNTYwOlxcdGkgPSBqID0gYWRkcl90b19ub2RlX2lkKGFkZHIpO1xcbm1tL3ZtYWxsb2MuYy0yNTYxLVxcdGRvIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDI6MTcuMjQ4MDUxNzcxWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY0NTY0Mzc5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBtbS92bWFsbG9jLmNgJ3MgQWxsb2NhdGlvbiBTdHJhdGVneSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgdm1hbGxvYy5jYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDk5MC0xMDEwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgdm1hbGxvY2AgaGFuZGxlcyBsYXJnZSBhbGxvY2F0aW9ucyBhbmQgdGhlIG1lY2hhbmljcyBiZWhpbmQgaXQuIEknbSBmb2N1c2luZyBvbiB0aGF0IHNlY3Rpb24gb2YgY29kZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG51YW5jZXMgb2YgdGhpcyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlci4gVGhpcyByYW5nZSB0eXBpY2FsbHkgZGVhbHMgd2l0aCB0aGUgY3JpdGljYWwgbG9naWMgLSBwZXJoYXBzIHRoZSBhbGxvY2F0aW9uIGxvb3AsIHRoZSBhZGRyZXNzIHNwYWNlIGxvb2t1cHMsIGFuZCBhbnkgbmVjZXNzYXJ5IHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgYXJlIGxpa2VseSBzb21lIGNoZWNrcyBmb3IgYXZhaWxhYmxlIGNvbnRpZ3VvdXMgdmlydHVhbCBhZGRyZXNzIHNwYWNlLCB0aGUgc2VsZWN0aW9uIG9mIHRoZSByaWdodCBWTSBhcmVhIGZsYWdzLCBvciBtYXliZSBldmVuIHN1YnRsZSBjb25zaWRlcmF0aW9ucyBhcm91bmQgbWVtb3J5IGZyYWdtZW50YXRpb24uIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHJlc2VydmF0aW9uIHByb2Nlc3MuIElzIGl0IHVzaW5nIGEgc2ltcGxlIGxpbmVhciBzY2FuLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyBXaGF0IGFib3V0IGxvY2tpbmc/IElzIHRoZXJlIGNvbnRlbnRpb24gaW4gdGhpcyByZWdpb24/IEknbSBleHBlY3Rpbmcgc29tZSBwcmV0dHkgY29tcGxleCBwb2ludGVyIGFyaXRobWV0aWMsIGdpdmVuIHRoZSBuYXR1cmUgb2YgYHZtYWxsb2NgLiBJIGFsc28gd2FudCB0byBvYnNlcnZlIGlmIHRoZXNlIGxpbmVzIGltcGxlbWVudCBhbiBleHBsaWNpdCBtZWNoYW5pc20gdG8gaGFuZGxlIHBvdGVudGlhbCBmYWlsdXJlcywgd2hpY2ggd291bGQgYmUgZXh0cmVtZWx5IGltcG9ydGFudCBmb3IgYW55IHJvYnVzdCBtZW1vcnkgYWxsb2NhdG9yLiBVbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBhbGxvY2F0aW9uIHJvdXRpbmUsIGJ1dCBJJ20gbG9va2luZyBmb3IgdGhlIHN1YnRsZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIGFueSBwb3RlbnRpYWwgd2Vha25lc3NlcyB0aGF0IGNhbiBjYXVzZSBwcm9ibGVtcyBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyNTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MjoyMy43MDQ0OTE2MTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5OTA6XFx0XFx0XFx0KHZuKSBcXHUwMDNjIFxcdTAwMjZ2bWFwX25vZGVzW25yX3ZtYXBfbm9kZXNdOyAodm4pKyspXFxuIDk5MTpcXHRcXG4gOTkyOlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XFxuIDk5MzpcXHRhZGRyX3RvX25vZGVfaWQodW5zaWduZWQgbG9uZyBhZGRyKVxcbiA5OTQ6XFx0e1xcbiA5OTU6XFx0XFx0cmV0dXJuIChhZGRyIC8gdm1hcF96b25lX3NpemUpICUgbnJfdm1hcF9ub2RlcztcXG4gOTk2OlxcdH1cXG4gOTk3OlxcdFxcbiA5OTg6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1hcF9ub2RlICpcXG4gOTk5OlxcdGFkZHJfdG9fbm9kZSh1bnNpZ25lZCBsb25nIGFkZHIpXFxuMTAwMDpcXHR7XFxuMTAwMTpcXHRcXHRyZXR1cm4gXFx1MDAyNnZtYXBfbm9kZXNbYWRkcl90b19ub2RlX2lkKGFkZHIpXTtcXG4xMDAyOlxcdH1cXG4xMDAzOlxcdFxcbjEwMDQ6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1hcF9ub2RlICpcXG4xMDA1OlxcdGlkX3RvX25vZGUodW5zaWduZWQgaW50IGlkKVxcbjEwMDY6XFx0e1xcbjEwMDc6XFx0XFx0cmV0dXJuIFxcdTAwMjZ2bWFwX25vZGVzW2lkICUgbnJfdm1hcF9ub2Rlc107XFxuMTAwODpcXHR9XFxuMTAwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDI6MjMuNzA0Njc3Njg1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5MDA5Nzc2ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEltbWVkaWF0ZSBDb25jZXJucyBSZWdhcmRpbmcgQWRkcmVzcyBUYWdnaW5nIGFuZCBgYWRkcl90b19ub2RlX2lkYCoqXG5cbk9rYXksIGhlcmUncyB3aGF0J3MgaGl0dGluZyBtZSByaWdodCBub3cuIFRoaXMgYGFkZHJfdG9fbm9kZV9pZChhZGRyKWAgZnVuY3Rpb24gaXMgdXNpbmcgYW4gdW50YWdnZWQgYWRkcmVzcyBmb3IgaXRzIGNhbGN1bGF0aW9uIOKAkyBzcGVjaWZpY2FsbHksIGAoYWRkciAvIHZtYXBfem9uZV9zaXplKSAlIG5yX3ZtYXBfbm9kZXNgLiBJZiBgYWRkcmAgKmlzKiB0YWdnZWQgaW4gdGhhdCB0b3AgYnl0ZSwgd2hpY2ggaXMgYWJzb2x1dGVseSBwb3NzaWJsZSBpbiBhIHRhZ2dlZCBtZW1vcnkgc3lzdGVtLCB0aGlzIGlzIGdvaW5nIHRvIHlpZWxkIGEgdG90YWxseSBpbmNvcnJlY3Qgc3RhcnRpbmcgbm9kZS4gVGhhdCBkaXZpc2lvbiBpcyBnb2luZyB0byBiZSBjb21wbGV0ZWx5IG9mZi5cblxuQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gV2h5IGRpZCB0aGF0IHJlY2VudCBwYXRjaCBtZXNzIHdpdGggYHZmcmVlKGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVx1MDAzZWFkZHIpKWAgaW4gYGtlcm5lbC9mb3JrLmNgPyBUaGF0J3Mgd2hhdCdzIGdvdCBtZSB0aGlua2luZy4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mICp3aHkqIHRoaXMgY2hhbmdlIGhhcHBlbmVkLlxuXG5SaWdodCEgTGV0J3MgZ2V0IGludG8gYGtlcm5lbC9mb3JrLmNgIGFuZCBkaWcgZGVlcGVyLlxuXG5IYW5nIG9uLi4uIEknbSBub3RpY2luZyBzb21ldGhpbmcgaW4gYHRocmVhZF9zdGFja19mcmVlX3JjdWAuLi5cblxuQWghIEFuZCB3aGF0IHdhcyBgdm1fYXJlYS1cdTAwM2VhZGRyYCBhY3R1YWxseSByZWZlcnJpbmcgdG8/IENvbnRleHQsIGNvbnRleHQsIGNvbnRleHQuXG5cbldoZW4gKmlzKiBgdm1fYXJlYS1cdTAwM2VhZGRyYCB0YWdnZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgbGlmZWN5Y2xlLiBXaGF0IGFyZSB3ZSBkZWFsaW5nIHdpdGg/XG5cbk9rYXksIHRpbWUgdG8gcHVsbCB1cCB0aGUgc291cmNlIGFuZCBzZWFyY2ggYGtlcm5lbC9mb3JrLmNgIGZvciBpbnN0YW5jZXMgb2YgYHZtX2FyZWEtXHUwMDNlYWRkcmAuIEdvdHRhIHRyYWNlIHRoaXMgZnJvbSB0aGUgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg4NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQyOjQyLjcxNDQ1NzI4MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MjM5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1fYXJlYS1cXHUwMDNlYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZm9yay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mb3JrLmM9Mjc1PXN0YXRpYyB2b2lkIHRocmVhZF9zdGFja19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJoKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0yODItXFxua2VybmVsL2ZvcmsuYzoyODM6XFx0dmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXFx1MDAzZWFkZHIpKTtcXG5rZXJuZWwvZm9yay5jLTI4NC19XFxuLS1cXG5rZXJuZWwvZm9yay5jPTI5ND1zdGF0aWMgaW50IGZyZWVfdm1fc3RhY2tfY2FjaGUodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMzA0LVxcbmtlcm5lbC9mb3JrLmM6MzA1OlxcdFxcdHZmcmVlKHZtX2FyZWEtXFx1MDAzZWFkZHIpO1xcbmtlcm5lbC9mb3JrLmMtMzA2LVxcdFxcdGNhY2hlZF92bV9zdGFja19hcmVhc1tpXSA9IE5VTEw7XFxuLS1cXG5rZXJuZWwvZm9yay5jPTMzMz1zdGF0aWMgaW50IGFsbG9jX3RocmVhZF9zdGFja19ub2RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgbm9kZSlcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMzQwLVxcdFxcdGlmIChtZW1jZ19jaGFyZ2Vfa2VybmVsX3N0YWNrKHZtX2FyZWEpKSB7XFxua2VybmVsL2ZvcmsuYzozNDE6XFx0XFx0XFx0dmZyZWUodm1fYXJlYS1cXHUwMDNlYWRkcik7XFxua2VybmVsL2ZvcmsuYy0zNDItXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5rZXJuZWwvZm9yay5jLTM0Ni1cXHRcXHRpZiAoIWthc2FuX2h3X3RhZ3NfZW5hYmxlZCgpKVxcbmtlcm5lbC9mb3JrLmM6MzQ3OlxcdFxcdFxcdGthc2FuX3VucG9pc29uX3JhbmdlKHZtX2FyZWEtXFx1MDAzZWFkZHIsIFRIUkVBRF9TSVpFKTtcXG5rZXJuZWwvZm9yay5jLTM0OC1cXG5rZXJuZWwvZm9yay5jOjM0OTpcXHRcXHRzdGFjayA9IGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVxcdTAwM2VhZGRyKTtcXG5rZXJuZWwvZm9yay5jLTM1MC1cXG5rZXJuZWwvZm9yay5jLTM1MS1cXHRcXHQvKiBDbGVhciBzdGFsZSBwb2ludGVycyBmcm9tIHJldXNlZCBzdGFjay4gKi9cXG5rZXJuZWwvZm9yay5jOjM1MjpcXHRcXHRjbGVhcl9wYWdlcyh2bV9hcmVhLVxcdTAwM2VhZGRyLCB2bV9hcmVhLVxcdTAwM2Vucl9wYWdlcyk7XFxua2VybmVsL2ZvcmsuYy0zNTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQyOjQyLjc1OTg4NDMzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NzI5ODc1OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaHJlYWQgU3RhY2sgQWxsb2NhdGlvbiBhbmQgRGVhbGxvY2F0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBmb2N1c2luZyBvbiBob3cgdGhyZWFkIHN0YWNrcyBhcmUgbWFuYWdlZCwgcGFydGljdWxhcmx5IHRoZSBLQVNBTiBhc3BlY3RzLiBGaXJzdCwgSSdtIGxvb2tpbmcgYXQgYGFsbG9jX3RocmVhZF9zdGFja19ub2RlYC4gSSBzZWUgdGhlIHN0YWNrIG1ldGFkYXRhIHJlc2V0OiBpZiBLQVNBTiBoYXJkd2FyZSB0YWdzIGFyZW4ndCBlbmFibGVkLCBpdCB1bnBvaXNvbnMgdGhlIHJhbmdlLiBUaGVuIGl0ICpyZXNldHMqIHRoZSB0YWcgdmlhIGBrYXNhbl9yZXNldF90YWdgIGFuZCBjbGVhcnMgdGhlIHBhZ2VzLiBDcnVjaWFsbHksIHRoZSBjb2RlIHN0b3JlcyBhIGB2bV9hcmVhYCBwb2ludGVyIChgdHNrLVx1MDAzZXN0YWNrX3ZtX2FyZWFgKSAqYW5kKiB0aGUgdGFnZ2VkIHN0YWNrIGFkZHJlc3MgKGB0c2stXHUwMDNlc3RhY2tgKS4gIFRoZXJlJ3MgYSBzaW1pbGFyIHByb2Nlc3MgdXNpbmcgdGhlIHNhbWUgdmFyaWFibGVzLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBkZXRhaWxzIGluIG1pbmQuXG5cbk5vdywgSSdtIHNoaWZ0aW5nIHRvIGB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlYC4gSXQgdGFrZXMgdGhlIGB0YXNrX3N0cnVjdGAsIGdyYWJzIHRoZSBgdm1fc3RhY2tgLCBhbmQgc3RvcmVzIGEgYHN0YWNrX3ZtX2FyZWFgLiBJdCB0aGVuIHVzZXMgYGNhbGxfcmN1YCB0byBkZWZlciB0aGUgZnJlZSB1c2luZyBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YC5cblxuSW4gYHRocmVhZF9zdGFja19mcmVlX3JjdWAsIGl0IGdldHMgdGhlIGB2bV9zdGFja2AgYW5kIGl0cyBhc3NvY2lhdGVkIGB2bV9hcmVhYC4gIEl0IHRyaWVzIHRvIHJlbGVhc2UgdGhlIHN0YWNrIHRvIHRoZSBjYWNoZS4gQW5kIGlmIHRoYXQgZmFpbHMsIGl0IGNhbGxzIGB2ZnJlZWAgb24gdGhlICoqcmVzZXQqKiB0YWdnZWQgYWRkcmVzcyAoYHZtX2FyZWEtXHUwMDNlYWRkcmApLiBPa2F5LCB0aGF0J3MgdGhlIGtpY2tlciFcblxuTm93LCB0aGUgcXVlc3Rpb24gYmVjb21lcywgd2hlcmUgKmV4YWN0bHkqIGlzIGB2bV9hcmVhLVx1MDAzZWFkZHJgIGJlaW5nIHRhZ2dlZD8gVGhlIGNvZGUgSSBsb29rZWQgYXQgaXMgbm90IHdoZXJlIGl0IGFwcGVhcnMgdG8gaGFwcGVuLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBUaGUgY2FsbCB0byBga2FzYW5fcmVzZXRfdGFnYCBoaW50cyB0aGF0IHRhZ2dpbmcgKmhhcHBlbnMqIGJ1dCBpdCdzIG5vdCBwcmVzZW50IGhlcmUuXG5cblRpbWUgdG8gc2VhcmNoIHdoZXJlIHRoaXMgYHZtX2FyZWEtXHUwMDNlYWRkcmAgaXMgc2V0LiBJIG5lZWQgdG8gZ3JlcCB0aGUgY29kZWJhc2UgZm9yIGB2bS1cdTAwM2VhZGRyID0gYCBvciBgYXJlYS1cdTAwM2VhZGRyID0gYCB0byBzZWUgaG93IHRoaXMgdmFsdWUgZ2V0cyBpbml0aWFsaXplZC4gIFRoYXQgc2hvdWxkIHJldmVhbCB0aGUgcG9pbnQgd2hlcmUgS0FTQU4ncyB0YWdnaW5nIG1hZ2ljIGlzIGFjdHVhbGx5IGFwcGxpZWQgdG8gdGhlIG1lbW9yeSByZWdpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODU2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQyOjU3LjQ4OTc2MzRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzA1OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNlYWRkciA9IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTIwMzQ9c3RhdGljIGlubGluZSB2b2lkIHNldHVwX3ZtYWxsb2Nfdm0oc3RydWN0IHZtX3N0cnVjdCAqdm0sXFxuLS1cXG5tbS92bWFsbG9jLmMtMjAzNy1cXHR2bS1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG5tbS92bWFsbG9jLmM6MjAzODpcXHR2bS1cXHUwMDNlYWRkciA9ICh2b2lkICopdmEtXFx1MDAzZXZhX3N0YXJ0O1xcbm1tL3ZtYWxsb2MuYy0yMDM5LVxcdHZtLVxcdTAwM2VzaXplID0gdm0tXFx1MDAzZXJlcXVlc3RlZF9zaXplID0gdmFfc2l6ZSh2YSk7XFxuLS1cXG5tbS92bWFsbG9jLmM9MjA0OD1zdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqYWxsb2Nfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yMTMyLVxcdGlmICh2bSkge1xcbm1tL3ZtYWxsb2MuYzoyMTMzOlxcdFxcdHZtLVxcdTAwM2VhZGRyID0gKHZvaWQgKil2YS1cXHUwMDNldmFfc3RhcnQ7XFxubW0vdm1hbGxvYy5jLTIxMzQtXFx0XFx0dm0tXFx1MDAzZXNpemUgPSB2YV9zaXplKHZhKTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zMTk2PXZvaWQgX19pbml0IHZtX2FyZWFfcmVnaXN0ZXJfZWFybHkoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHNpemVfdCBhbGlnbilcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zMjA5LVxcdEJVR19PTihhZGRyIFxcdTAwM2UgVk1BTExPQ19FTkQgLSB2bS1cXHUwMDNlc2l6ZSk7XFxubW0vdm1hbGxvYy5jOjMyMTA6XFx0dm0tXFx1MDAzZWFkZHIgPSAodm9pZCAqKWFkZHI7XFxubW0vdm1hbGxvYy5jLTMyMTEtXFx0dm0tXFx1MDAzZW5leHQgPSAqcDtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zMjI3PXN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzI3MC1cXHRpZiAoIShmbGFncyBcXHUwMDI2IFZNX0FMTE9DKSlcXG5tbS92bWFsbG9jLmM6MzI3MTpcXHRcXHRhcmVhLVxcdTAwM2VhZGRyID0ga2FzYW5fdW5wb2lzb25fdm1hbGxvYyhhcmVhLVxcdTAwM2VhZGRyLCByZXF1ZXN0ZWRfc2l6ZSxcXG5tbS92bWFsbG9jLmMtMzI3Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgS0FTQU5fVk1BTExPQ19QUk9UX05PUk1BTCk7XFxuLS1cXG5tbS92bWFsbG9jLmM9NDAzMz12b2lkICpfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxcbi0tXFxubW0vdm1hbGxvYy5jLTQxMjktXFx0aWYgKCFza2lwX3ZtYWxsb2Nfa2FzYW4pXFxubW0vdm1hbGxvYy5jOjQxMzA6XFx0XFx0YXJlYS1cXHUwMDNlYWRkciA9IGthc2FuX3VucG9pc29uX3ZtYWxsb2MoYXJlYS1cXHUwMDNlYWRkciwgc2l6ZSwga2FzYW5fZmxhZ3MpO1xcbm1tL3ZtYWxsb2MuYy00MTMxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0Mjo1Ny41MzUwNzU4MTlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQ0ODkyOTQ4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IFNhbml0aXphdGlvbiBpbiB2bWFsbG9jKipcblxuT2theSwgaGVyZSB3ZSBhcmUsIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhZ2Fpbi4gTGluZSA0MTMwLi4uIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIGl0J3MgdGhhdCBgYXJlYS1cdTAwM2VhZGRyID0ga2FzYW5fdW5wb2lzb25fdm1hbGxvYyhhcmVhLVx1MDAzZWFkZHIsIHNpemUsIGthc2FuX2ZsYWdzKTtgIGNhbGwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgYGthc2FuX3VucG9pc29uX3ZtYWxsb2NgIHJldHVybmluZz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB0byB0aGF0IGBhcmVhLVx1MDAzZWFkZHJgIHBvaW50ZXIuIElzIGl0IGJlaW5nIG1vZGlmaWVkIGRpcmVjdGx5PyBJcyB0aGVyZSBhIG5ldyBhZGRyZXNzIGJlaW5nIGFzc2lnbmVkPyBJcyB0aGVyZSBhIHN0YXR1cyBpbmRpY2F0b3I/IExldCdzIHRyYWNlIGludG8gdGhhdCBga2FzYW5fdW5wb2lzb25fdm1hbGxvY2AgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIGF0IHRoYXQgbGV2ZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBjb21wbGV0ZWx5IHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9uIHRoZSBsYXJnZXIgbWVtb3J5IGFsbG9jYXRpb24gY29udGV4dC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBudWFuY2Ugb2YgdGhlIEtBU0FOIGltcGxlbWVudGF0aW9uIGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzUzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDM6MDMuOTg0MDA3OTAzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc1NTg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrYXNhbl91bnBvaXNvbl92bWFsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2thc2FuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2thc2FuL2NvbW1vbi5jPTU4MT12b2lkIF9fa2FzYW5fdW5wb2lzb25fdm1hcF9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zLFxcbi0tXFxubW0va2FzYW4vY29tbW9uLmMtNTk4LVxcdGFkZHIgPSB2bXNbMF0tXFx1MDAzZWFkZHI7XFxubW0va2FzYW4vY29tbW9uLmM6NTk5OlxcdHZtc1swXS1cXHUwMDNlYWRkciA9IF9fa2FzYW5fdW5wb2lzb25fdm1hbGxvYyhhZGRyLCBzaXplLCBmbGFncyk7XFxubW0va2FzYW4vY29tbW9uLmMtNjAwLVxcdHRhZyA9IGdldF90YWcodm1zWzBdLVxcdTAwM2VhZGRyKTtcXG4tLVxcbm1tL2thc2FuL2NvbW1vbi5jLTYwNS1cXHRcXHR2bXNbYXJlYV0tXFx1MDAzZWFkZHIgPVxcbm1tL2thc2FuL2NvbW1vbi5jOjYwNjpcXHRcXHRcXHRfX2thc2FuX3VucG9pc29uX3ZtYWxsb2MoYWRkciwgc2l6ZSwgZmxhZ3MgfCBLQVNBTl9WTUFMTE9DX0tFRVBfVEFHKTtcXG5tbS9rYXNhbi9jb21tb24uYy02MDctXFx0fVxcbi0tXFxubW0va2FzYW4vY29tbW9uLmM9NjEwPXZvaWQgX19rYXNhbl92cmVhbGxvYyhjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG9sZF9zaXplLFxcbi0tXFxubW0va2FzYW4vY29tbW9uLmMtNjIyLVxcdFxcdG9sZF9zaXplID0gcm91bmRfZG93bihvbGRfc2l6ZSwgS0FTQU5fR1JBTlVMRV9TSVpFKTtcXG5tbS9rYXNhbi9jb21tb24uYzo2MjM6XFx0XFx0X19rYXNhbl91bnBvaXNvbl92bWFsbG9jKGFkZHIgKyBvbGRfc2l6ZSxcXG5tbS9rYXNhbi9jb21tb24uYy02MjQtXFx0XFx0XFx0XFx0XFx0bmV3X3NpemUgLSBvbGRfc2l6ZSxcXG4tLVxcbm1tL2thc2FuL2h3X3RhZ3MuYz0yODc9c3RhdGljIHZvaWQgdW5wb2lzb25fdm1hbGxvY19wYWdlcyhjb25zdCB2b2lkICphZGRyLCB1OCB0YWcpXFxuLS1cXG5tbS9rYXNhbi9od190YWdzLmMtMjkzLVxcdCAqIEFzIGhhcmR3YXJlIHRhZy1iYXNlZCBLQVNBTiBvbmx5IHRhZ3MgVk1fQUxMT0Mgdm1hbGxvYyBhbGxvY2F0aW9uc1xcbm1tL2thc2FuL2h3X3RhZ3MuYzoyOTQ6XFx0ICogKHNlZSB0aGUgY29tbWVudCBpbiBfX2thc2FuX3VucG9pc29uX3ZtYWxsb2MpLCBhbGwgb2YgdGhlIHBhZ2VzXFxubW0va2FzYW4vaHdfdGFncy5jLTI5NS1cXHQgKiBzaG91bGQgYmVsb25nIHRvIGEgc2luZ2xlIGFyZWEuXFxuLS1cXG5tbS9rYXNhbi9od190YWdzLmM9MzA4PXN0YXRpYyB2b2lkIGluaXRfdm1hbGxvY19wYWdlcyhjb25zdCB2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxubW0va2FzYW4vaHdfdGFncy5jLTMxOC1cXG5tbS9rYXNhbi9od190YWdzLmM6MzE5OnZvaWQgKl9fa2FzYW5fdW5wb2lzb25fdm1hbGxvYyhjb25zdCB2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbm1tL2thc2FuL2h3X3RhZ3MuYy0zMjAtXFx0XFx0XFx0XFx0a2FzYW5fdm1hbGxvY19mbGFnc190IGZsYWdzKVxcbi0tXFxubW0va2FzYW4vc2hhZG93LmM9NTY2PXZvaWQgX19rYXNhbl9yZWxlYXNlX3ZtYWxsb2ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy02MTItXFxubW0va2FzYW4vc2hhZG93LmM6NjEzOnZvaWQgKl9fa2FzYW5fdW5wb2lzb25fdm1hbGxvYyhjb25zdCB2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbm1tL2thc2FuL3NoYWRvdy5jLTYxNC1cXHRcXHRcXHQgICAgICAga2FzYW5fdm1hbGxvY19mbGFnc190IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MzowNC4wMjg3NzE1NTNaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY3NTQzOTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLQVNBTiB2bWFsbG9jIFRhZ2dpbmcgLSBBIERpdmUgaW50byB0aGUgQXJjaGl0ZWN0dXJlLVNwZWNpZmljIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgS0FTQU4gaGFuZGxlcyBgdm1hbGxvY2AgYXJlYXMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSB0YWdnaW5nIG1lY2hhbmlzbS4gTXkgZmlyc3QgcG9pbnQgb2YgcmVmZXJlbmNlIGlzIGBtbS9rYXNhbi9od190YWdzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2thc2FuX3VucG9pc29uX3ZtYWxsb2NgIGZ1bmN0aW9uLiBJIHNlZSBpdCBhc3NpZ25zIGEgcmFuZG9tIHRhZywgcmV0dXJuaW5nIGEgXCJ0YWdnZWQgcG9pbnRlcixcIiBhbmQgY3J1Y2lhbGx5LCBpdCB1cGRhdGVzIGBhcmVhLVx1MDAzZWFkZHJgIHdpdGggdGhpcyB0YWdnZWQgcG9pbnRlci4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBzb21ldGhpbmc6IHRoaXMgdGFnZ2VkIHBvaW50ZXIgbG9naWMgYXBwZWFycyAqb25seSogaW4gdGhlIEhXX1RBR1MgYW5kIFNXX1RBR1MgYnJhbmNoZXMuIFRoaXMgbWVhbnMgdGhpcyB0YWdnZWQgcG9pbnRlciBhbmQgYXJlYSB1cGRhdGUgYXJlICpzb2xlbHkqIGZvciBhcm02NCFcblxuQnV0IHdoYXQgYWJvdXQgb3RoZXIgYXJjaGl0ZWN0dXJlcywgbGlrZSBhbWQ2ND8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBga2FzYW5fdW5wb2lzb25fdm1hbGxvY2AgKmRvZXMqIG9uIGFtZDY0LiBTbyBJJ20gbm93IHN3aXRjaGluZyBnZWFycyB0byBgbW0va2FzYW4vc2hhZG93LmNgLiBNeSBuZXh0IGZvY3VzIGlzIGxpbmVzIDYxMi02MzAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBLQVNBTiBoYW5kbGVzIHRoZSBwb2ludGVyIHJldHVybiBpbiB0aGlzIGNvbnRleHQ7IHNwZWNpZmljYWxseSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcG9pbnRlciBpcyBub3QgdGFnZ2VkIGFuZCB0aGF0IGl0IGlzIHVucG9pc29uZWQgaW4gdGhlIHNoYWRvdyBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQzOjA2LjcwNDIxMjU4MloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9rYXNhbi9zaGFkb3cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTI6XFx0XFxuIDYxMzpcXHR2b2lkICpfX2thc2FuX3VucG9pc29uX3ZtYWxsb2MoY29uc3Qgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4gNjE0OlxcdFxcdFxcdFxcdCAgICAgICBrYXNhbl92bWFsbG9jX2ZsYWdzX3QgZmxhZ3MpXFxuIDYxNTpcXHR7XFxuIDYxNjpcXHRcXHQvKlxcbiA2MTc6XFx0XFx0ICogU29mdHdhcmUgS0FTQU4gbW9kZXMgdW5wb2lzb24gYm90aCBWTV9BTExPQyBhbmQgbm9uLVZNX0FMTE9DXFxuIDYxODpcXHRcXHQgKiBtYXBwaW5ncywgc28gdGhlIEtBU0FOX1ZNQUxMT0NfVk1fQUxMT0MgZmxhZyBpcyBpZ25vcmVkLlxcbiA2MTk6XFx0XFx0ICogU29mdHdhcmUgS0FTQU4gbW9kZXMgY2FuJ3Qgb3B0aW1pemUgemVyb2luZyBtZW1vcnkgYnkgY29tYmluaW5nIGl0XFxuIDYyMDpcXHRcXHQgKiB3aXRoIHNldHRpbmcgbWVtb3J5IHRhZ3MsIHNvIHRoZSBLQVNBTl9WTUFMTE9DX0lOSVQgZmxhZyBpcyBpZ25vcmVkLlxcbiA2MjE6XFx0XFx0ICovXFxuIDYyMjpcXHRcXG4gNjIzOlxcdFxcdGlmICghaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcihzdGFydCkpXFxuIDYyNDpcXHRcXHRcXHRyZXR1cm4gKHZvaWQgKilzdGFydDtcXG4gNjI1OlxcdFxcbiA2MjY6XFx0XFx0LypcXG4gNjI3OlxcdFxcdCAqIERvbid0IHRhZyBleGVjdXRhYmxlIG1lbW9yeSB3aXRoIHRoZSB0YWctYmFzZWQgbW9kZS5cXG4gNjI4OlxcdFxcdCAqIFRoZSBrZXJuZWwgZG9lc24ndCB0b2xlcmF0ZSBoYXZpbmcgdGhlIFBDIHJlZ2lzdGVyIHRhZ2dlZC5cXG4gNjI5OlxcdFxcdCAqL1xcbiA2MzA6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tBU0FOX1NXX1RBR1MpIFxcdTAwMjZcXHUwMDI2XFxuIDYzMTpcXHRcXHQgICAgIShmbGFncyBcXHUwMDI2IEtBU0FOX1ZNQUxMT0NfUFJPVF9OT1JNQUwpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MzowNi43MDQyOTE0NTNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI3ODkxOTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYF9fa2FzYW5fdW5wb2lzb25fdm1hbGxvY2AgaW4gYG1tL2thc2FuL3NoYWRvdy5jYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzIEtBU0FOIHVucG9pc29uaW5nIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYF9fa2FzYW5fdW5wb2lzb25fdm1hbGxvY2Agd29ya3MuIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoaXMgYXJlYSwgc28gbGV0J3Mgc2VlIGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBLQVNBTiBzY2hlbWUgZm9yIHZpcnR1YWwgYWxsb2NhdGlvbnMuIEkgd2FudCB0byBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHNoYWRvdyBtZW1vcnkuIEknbSBpbnRlcmVzdGVkIGluIHRoZSB1bnBvaXNvbmluZyBsb2dpYyBpdHNlbGYg4oCTIHdoYXQgcmFuZ2Ugb2YgbWVtb3J5IGRvZXMgaXQgYWZmZWN0LCB3aGF0J3MgdGhlIGdyYW51bGFyIHByZWNpc2lvbiwgYW5kIHdoYXQncyB0aGUgc3RyYXRlZ3k/IEkga25vdyBob3cgS0FTQU4gd29ya3MgaW4gcHJpbmNpcGxlLCBidXQgSSBuZWVkIHRvIHNlZSBob3cgaXTigJlzIGFwcGxpZWQgc3BlY2lmaWNhbGx5IHRvIGB2bWFsbG9jYC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTcyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MzowOC45ODMyMTI4ODhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2FzYW4vc2hhZG93LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjMwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjMwOlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LQVNBTl9TV19UQUdTKSBcXHUwMDI2XFx1MDAyNlxcbiA2MzE6XFx0XFx0ICAgICEoZmxhZ3MgXFx1MDAyNiBLQVNBTl9WTUFMTE9DX1BST1RfTk9STUFMKSlcXG4gNjMyOlxcdFxcdFxcdHJldHVybiAodm9pZCAqKXN0YXJ0O1xcbiA2MzM6XFx0XFxuIDYzNDpcXHRcXHRpZiAodW5saWtlbHkoIShmbGFncyBcXHUwMDI2IEtBU0FOX1ZNQUxMT0NfS0VFUF9UQUcpKSlcXG4gNjM1OlxcdFxcdFxcdHN0YXJ0ID0gc2V0X3RhZyhzdGFydCwga2FzYW5fcmFuZG9tX3RhZygpKTtcXG4gNjM2OlxcdFxcbiA2Mzc6XFx0XFx0a2FzYW5fdW5wb2lzb24oc3RhcnQsIHNpemUsIGZhbHNlKTtcXG4gNjM4OlxcdFxcdHJldHVybiAodm9pZCAqKXN0YXJ0O1xcbiA2Mzk6XFx0fVxcbiA2NDA6XFx0XFxuIDY0MTpcXHQvKlxcbiA2NDI6XFx0ICogUG9pc29uIHRoZSBzaGFkb3cgZm9yIGEgdm1hbGxvYyByZWdpb24uIENhbGxlZCBhcyBwYXJ0IG9mIHRoZVxcbiA2NDM6XFx0ICogZnJlZWluZyBwcm9jZXNzIGF0IHRoZSB0aW1lIHRoZSByZWdpb24gaXMgZnJlZWQuXFxuIDY0NDpcXHQgKi9cXG4gNjQ1OlxcdHZvaWQgX19rYXNhbl9wb2lzb25fdm1hbGxvYyhjb25zdCB2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbiA2NDY6XFx0e1xcbiA2NDc6XFx0XFx0aWYgKCFpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKHN0YXJ0KSlcXG4gNjQ4OlxcdFxcdFxcdHJldHVybjtcXG4gNjQ5OlxcdFxcbiA2NTA6XFx0XFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIEtBU0FOX0dSQU5VTEVfU0laRSk7XFxuIDY1MTpcXHRcXHRrYXNhbl9wb2lzb24oc3RhcnQsIHNpemUsIEtBU0FOX1ZNQUxMT0NfSU5WQUxJRCwgZmFsc2UpO1xcbiA2NTI6XFx0fVxcbiA2NTM6XFx0XFxuIDY1NDpcXHQjZWxzZSAvKiBDT05GSUdfS0FTQU5fVk1BTExPQyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MzowOC45ODMzMDg1ODhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDg2NzA5OTUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLQVNBTiBUYWdnaW5nIENvbnVuZHJ1bSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIEtBU0FOIHN0dWZmLCBzcGVjaWZpY2FsbHkgdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24uIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgaXMgaG93IGBDT05GSUdfS0FTQU5fR0VORVJJQ2AgYWN0dWFsbHkgaGFuZGxlcyB0YWdnaW5nLiBEb2VzIGVuYWJsaW5nIHRoaXMgdGhpbmcgc2V0IG1lbW9yeSB0YWdzPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LlxuXG5Pa2F5LCBJIHNlZSBhIGZ1bmN0aW9uIGNhbGw6IGBzZXRfdGFnKHN0YXJ0LCBrYXNhbl9yYW5kb21fdGFnKCkpYC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvci4gTm93LCBJIG5lZWQgdG8ga25vdyB3aGF0IGBzZXRfdGFnYCAqaXMqIHdpdGhpbiB0aGlzIGBDT05GSUdfS0FTQU5fR0VORVJJQ2AgY29udGV4dC4gSSBuZWVkIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQsIHNvIEknbSBnb2luZyB0byBxdWlja2x5IGdyZXAgdGhyb3VnaCB0aGUgY29kZSB0byBmaW5kIHdoZXJlIHRoYXQgYHNldF90YWdgIGZ1bmN0aW9uIGlzIGRlZmluZWQsIG9yIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBhcyBhIGZ1bmN0aW9uIGNhbGwuIExldCdzIGZpbmQgdGhpcyBkZWZpbml0aW9uLiBIb3BlZnVsbHksIGl0J3Mgbm90IGJ1cmllZCB0b28gZGVlcC4gSSBqdXN0IG5lZWQgdG8gZGV0ZXJtaW5lIGl0cyBiZWhhdmlvciwgYW5kIHRoZW4gSSBzaG91bGQgaGF2ZSBhIGdvb2QgcGljdHVyZSBvZiB0aGUgdGFnZ2luZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDgzMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDM6MTMuODUwNDExNDg2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc1NTg3Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgc2V0X3RhZ3xzdGF0aWMgaW5saW5lLipzZXRfdGFnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYXJjaC9hcm02NC9tZW1vcnktdGFnZ2luZy1leHRlbnNpb24ucnN0PTI1MD1FeGFtcGxlIG9mIGNvcnJlY3QgdXNhZ2VcXG4tLVxcbkRvY3VtZW50YXRpb24vYXJjaC9hcm02NC9tZW1vcnktdGFnZ2luZy1leHRlbnNpb24ucnN0LTMwNC0gICAgICovXFxuRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L21lbW9yeS10YWdnaW5nLWV4dGVuc2lvbi5yc3Q6MzA1OiAgICAjZGVmaW5lIHNldF90YWcodGFnZ2VkX2FkZHIpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG5Eb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvbWVtb3J5LXRhZ2dpbmctZXh0ZW5zaW9uLnJzdC0zMDYtICAgICAgICAgICAgYXNtIHZvbGF0aWxlKFxcXCJzdGcgJTAsIFslMF1cXFwiIDogOiBcXFwiclxcXCIgKHRhZ2dlZF9hZGRyKSA6IFxcXCJtZW1vcnlcXFwiKTsgXFxcXFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oPTU0PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZXZlbnRfbWFzayh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oLTY1LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVfdXRpbHMuaDo2NjpzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3RhZ19tYXNrKHZvaWQpXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oLTY3LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVfdXRpbHMuaD05Nz1zdGF0aWMgaW5saW5lIHZvaWQgZW5xdWV1ZV9wdXRsbGMoYWRkcjY0IGxzY3NhX2VhKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oLTExNy1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1X3V0aWxzLmg6MTE4OnN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGFnX3VwZGF0ZSh2b2lkKVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVfdXRpbHMuaC0xMTkte1xcbi0tXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmg9MzAxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9oY2kxMzk0X2l0X2RhdGFfZ2V0X3RhZyhjb25zdCBfX2xlMzIgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuaC0zMDUtXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmg6MzA2OnN0YXRpYyBpbmxpbmUgdm9pZCBvaGNpMTM5NF9pdF9kYXRhX3NldF90YWcoX19sZTMyICpkYXRhLCB1bnNpZ25lZCBpbnQgdGFnKVxcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5oLTMwNy17XFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL3BhY2tldC1oZWFkZXItZGVmaW5pdGlvbnMuaD0yMDY9c3RhdGljIGlubGluZSB2b2lkIGlzb2NfaGVhZGVyX3NldF9kYXRhX2xlbmd0aCh1MzIgKmhlYWRlciwgdW5zaWduZWQgaW50IGRhdGFfbGVuZ3RoKVxcbi0tXFxuZHJpdmVycy9maXJld2lyZS9wYWNrZXQtaGVhZGVyLWRlZmluaXRpb25zLmgtMjExLVxcbmRyaXZlcnMvZmlyZXdpcmUvcGFja2V0LWhlYWRlci1kZWZpbml0aW9ucy5oOjIxMjpzdGF0aWMgaW5saW5lIHZvaWQgaXNvY19oZWFkZXJfc2V0X3RhZyh1MzIgKmhlYWRlciwgdW5zaWduZWQgaW50IHRhZylcXG5kcml2ZXJzL2ZpcmV3aXJlL3BhY2tldC1oZWFkZXItZGVmaW5pdGlvbnMuaC0yMTMte1xcbi0tXFxuaW5jbHVkZS9saW51eC9kbWEvdGktY3BwaTUuaD0yNzY9c3RhdGljIGlubGluZSB2b2lkIGNwcGk1X2Rlc2NfZ2V0X3RhZ3NfaWRzKHN0cnVjdCBjcHBpNV9kZXNjX2hkcl90ICpkZXNjX2hkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvZG1hL3RpLWNwcGk1LmgtMjk1LSAqL1xcbmluY2x1ZGUvbGludXgvZG1hL3RpLWNwcGk1Lmg6Mjk2OnN0YXRpYyBpbmxpbmUgdm9pZCBjcHBpNV9kZXNjX3NldF90YWdzX2lkcyhzdHJ1Y3QgY3BwaTVfZGVzY19oZHJfdCAqZGVzY19oZHIsXFxuaW5jbHVkZS9saW51eC9kbWEvdGktY3BwaTUuaC0yOTctXFx0XFx0XFx0XFx0XFx0ICAgdTMyIHNyY190YWdfaWQsIHUzMiBkc3RfdGFnX2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9kc2Evb2NlbG90Lmg9MjQ3PXN0YXRpYyBpbmxpbmUgdm9pZCBvY2Vsb3RfaWZoX3NldF9zcmModm9pZCAqaW5qZWN0aW9uLCB1NjQgc3JjKVxcbi0tXFxuaW5jbHVkZS9saW51eC9kc2Evb2NlbG90LmgtMjUxLVxcbmluY2x1ZGUvbGludXgvZHNhL29jZWxvdC5oOjI1MjpzdGF0aWMgaW5saW5lIHZvaWQgb2NlbG90X2lmaF9zZXRfdGFnX3R5cGUodm9pZCAqaW5qZWN0aW9uLCB1NjQgdGFnX3R5cGUpXFxuaW5jbHVkZS9saW51eC9kc2Evb2NlbG90LmgtMjUzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvaW50ZXJjb25uZWN0Lmg9MTAyPXN0YXRpYyBpbmxpbmUgaW50IGljY19zZXRfYncoc3RydWN0IGljY19wYXRoICpwYXRoLCB1MzIgYXZnX2J3LCB1MzIgcGVha19idylcXG4tLVxcbmluY2x1ZGUvbGludXgvaW50ZXJjb25uZWN0LmgtMTA2LVxcbmluY2x1ZGUvbGludXgvaW50ZXJjb25uZWN0Lmg6MTA3OnN0YXRpYyBpbmxpbmUgdm9pZCBpY2Nfc2V0X3RhZyhzdHJ1Y3QgaWNjX3BhdGggKnBhdGgsIHUzMiB0YWcpXFxuaW5jbHVkZS9saW51eC9pbnRlcmNvbm5lY3QuaC0xMDgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9rYXNhbi5oPTUxND1zdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcmVjb3JkX2F1eF9zdGFjayh2b2lkICpwdHIpIHt9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTE5LVxcbmluY2x1ZGUvbGludXgva2FzYW4uaDo1MjA6c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcXG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTIxLXtcXG4tLVxcbmluY2x1ZGUvbGludXgva2FzYW4uaD01MzI9Ym9vbCBrYXNhbl9yZXBvcnQoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTM2LVxcbmluY2x1ZGUvbGludXgva2FzYW4uaDo1Mzc6c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcXG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTM4LXtcXG4tLVxcbm1tL2thc2FuL2thc2FuLmg9NDExPXN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9xdWFyYW50aW5lX3JlbW92ZV9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpIHsgfVxcbi0tXFxubW0va2FzYW4va2FzYW4uaC00MTQtI2lmbmRlZiBhcmNoX2thc2FuX3NldF90YWdcXG5tbS9rYXNhbi9rYXNhbi5oOjQxNTpzdGF0aWMgaW5saW5lIGNvbnN0IHZvaWQgKmFyY2hfa2FzYW5fc2V0X3RhZyhjb25zdCB2b2lkICphZGRyLCB1OCB0YWcpXFxubW0va2FzYW4va2FzYW4uaC00MTYte1xcbi0tXFxubW0va2FzYW4va2FzYW4uaC00MjMtXFxubW0va2FzYW4va2FzYW4uaDo0MjQ6I2RlZmluZSBzZXRfdGFnKGFkZHIsIHRhZylcXHQoKHZvaWQgKilhcmNoX2thc2FuX3NldF90YWcoKGFkZHIpLCAodGFnKSkpXFxubW0va2FzYW4va2FzYW4uaC00MjUtI2RlZmluZSBnZXRfdGFnKGFkZHIpXFx0XFx0YXJjaF9rYXNhbl9nZXRfdGFnKGFkZHIpXFxuLS1cXG50b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmg9MjU9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqdmlydF90b19wYWdlKHZvaWQgKnZpcnQpXFxuLS1cXG50b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmgtMzMtXFxudG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oOjM0OnN0YXRpYyBpbmxpbmUgdm9pZCAqa2FzYW5fcmVzZXRfdGFnKGNvbnN0IHZvaWQgKmFkZHIpXFxudG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oLTM1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDM6MTYuMTI2MDA0NjAyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNDQ4OTM1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBTYW5pdGl6ZXIncyBDb3JlKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIFRoZSBwcm9ibGVtJ3MgYmVlbiBwb2ludGVkIHRvd2FyZHMgbWVtb3J5IGVycm9ycywgc28gSSdtIHRoaW5raW5nIGEgZGVlcCBkaXZlIGludG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBzYWZldHkgbWVjaGFuaXNtcyBpcyBpbiBvcmRlci4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgc3RyYWlnaHQgZm9yIGBtbS9rYXNhbi9rYXNhbi5oYC4gTGluZSA0MTQg4oCTIHRoYXQncyBvZnRlbiB3aGVyZSB0aGUgY3JpdGljYWwgZGVmaW5pdGlvbnMgb3IgY29uZmlndXJhdGlvbnMgcmVzaWRlLCBvciBwb3RlbnRpYWxseSB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBvbmUgb2YgdGhlIEtBU0FOJ3MgY29yZSBtZW1vcnkgZXJyb3IgaGFuZGxpbmcgcm91dGluZXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIGtleSBtYWNybywgc3RydWN0dXJlLCBvciBmdW5jdGlvbiBkZWNsYXJhdGlvbiB0aGVyZSB0aGF0J3MgY2VudHJhbCB0byBLQVNBTidzIG9wZXJhdGlvbi4gVGhpcyBsaW5lIGNvdWxkIGV4cG9zZSB0aGUgdHJpZ2dlciB0aGF0IGNhdXNlcyBLQVNBTiB0byBzdGVwIGluIG9yIGFuIGludGVybmFsIGRhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgcmVsZXZhbnQgc3RhdGUuIExldCdzIHNlZSB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI2ODcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MzoxOC4zNzA5MDEwMDhaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2FzYW4va2FzYW4uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MTA6XFx0c3RhdGljIGlubGluZSB2b2lkIGthc2FuX3F1YXJhbnRpbmVfcmVkdWNlKHZvaWQpIHsgfVxcbiA0MTE6XFx0c3RhdGljIGlubGluZSB2b2lkIGthc2FuX3F1YXJhbnRpbmVfcmVtb3ZlX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSkgeyB9XFxuIDQxMjpcXHQjZW5kaWZcXG4gNDEzOlxcdFxcbiA0MTQ6XFx0I2lmbmRlZiBhcmNoX2thc2FuX3NldF90YWdcXG4gNDE1OlxcdHN0YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqYXJjaF9rYXNhbl9zZXRfdGFnKGNvbnN0IHZvaWQgKmFkZHIsIHU4IHRhZylcXG4gNDE2OlxcdHtcXG4gNDE3OlxcdFxcdHJldHVybiBhZGRyO1xcbiA0MTg6XFx0fVxcbiA0MTk6XFx0I2VuZGlmXFxuIDQyMDpcXHQjaWZuZGVmIGFyY2hfa2FzYW5fZ2V0X3RhZ1xcbiA0MjE6XFx0I2RlZmluZSBhcmNoX2thc2FuX2dldF90YWcoYWRkcilcXHQwXFxuIDQyMjpcXHQjZW5kaWZcXG4gNDIzOlxcdFxcbiA0MjQ6XFx0I2RlZmluZSBzZXRfdGFnKGFkZHIsIHRhZylcXHQoKHZvaWQgKilhcmNoX2thc2FuX3NldF90YWcoKGFkZHIpLCAodGFnKSkpXFxuIDQyNTpcXHQjZGVmaW5lIGdldF90YWcoYWRkcilcXHRcXHRhcmNoX2thc2FuX2dldF90YWcoYWRkcilcXG4gNDI2OlxcdFxcbiA0Mjc6XFx0I2lmZGVmIENPTkZJR19LQVNBTl9IV19UQUdTXFxuIDQyODpcXHRcXG4gNDI5OlxcdCNkZWZpbmUgaHdfZW5hYmxlX3RhZ19jaGVja3Nfc3luYygpXFx0XFx0YXJjaF9lbmFibGVfdGFnX2NoZWNrc19zeW5jKClcXG4gNDMwOlxcdCNkZWZpbmUgaHdfZW5hYmxlX3RhZ19jaGVja3NfYXN5bmMoKVxcdFxcdGFyY2hfZW5hYmxlX3RhZ19jaGVja3NfYXN5bmMoKVxcbiA0MzE6XFx0I2RlZmluZSBod19lbmFibGVfdGFnX2NoZWNrc19hc3ltbSgpXFx0XFx0YXJjaF9lbmFibGVfdGFnX2NoZWNrc19hc3ltbSgpXFxuIDQzMjpcXHQjZGVmaW5lIGh3X3N1cHByZXNzX3RhZ19jaGVja3Nfc3RhcnQoKVxcdFxcdGFyY2hfc3VwcHJlc3NfdGFnX2NoZWNrc19zdGFydCgpXFxuIDQzMzpcXHQjZGVmaW5lIGh3X3N1cHByZXNzX3RhZ19jaGVja3Nfc3RvcCgpXFx0XFx0YXJjaF9zdXBwcmVzc190YWdfY2hlY2tzX3N0b3AoKVxcbiA0MzQ6XFx0I2RlZmluZSBod19mb3JjZV9hc3luY190YWdfZmF1bHQoKVxcdFxcdGFyY2hfZm9yY2VfYXN5bmNfdGFnX2ZhdWx0KClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDM6MTguMzcwOTg0OTI4WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2NzY2NjQ5NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgS0FTQU4gVGFnZ2luZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGhlcmUgd2UgZ28uIEludGVyZXN0aW5nISBJJ20gbm90aWNpbmcgc29tZXRoaW5nIGFib3V0IGhvdyBgYXJjaF9rYXNhbl9zZXRfdGFnYCBiZWhhdmVzLiBJdCBzZWVtcyB0aGF0LCB1bmxlc3Mgd2UncmUgb24gYXJtNjQsIHRoYXQgZnVuY3Rpb24gc2ltcGx5IHJldHVybnMgdGhlIGlucHV0IGBhZGRyYC4gVGhhdCdzIG5vdCB0aGUgdXN1YWwgaW1wbGVtZW50YXRpb24gSSdtIGFjY3VzdG9tZWQgdG8gc2VlaW5nLiBOb3csIHdoZXJlIGlzIGBhcmNoX2thc2FuX3Jlc2V0X3RhZ2AgZGVmaW5lZD8gQWgsIEkgc2VlIGl0J3Mgb25seSBpbiBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rYXNhbi5oYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYW55ICpvdGhlciogYXJjaGl0ZWN0dXJlIGRlZmluZXMgKmVpdGhlciogYGFyY2hfa2FzYW5fcmVzZXRfdGFnYCBvciBgYXJjaF9rYXNhbl9zZXRfdGFnYCwgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGV4dGVudCBvZiB0aGlzIGFybTY0IHNwZWNpZmljIGNvZGUuIExldCdzIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYGFyY2hfa2FzYW5fcmVzZXRfdGFnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0MzMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MzozNS4xMzc2Mzc1NDhaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjA5NDE1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJjaF9rYXNhbl9yZXNldF90YWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rYXNhbi5oLTEyLSNkZWZpbmUgYXJjaF9rYXNhbl9zZXRfdGFnKGFkZHIsIHRhZylcXHRfX3RhZ19zZXQoYWRkciwgdGFnKVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va2FzYW4uaDoxMzojZGVmaW5lIGFyY2hfa2FzYW5fcmVzZXRfdGFnKGFkZHIpXFx0X190YWdfcmVzZXQoYWRkcilcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2thc2FuLmgtMTQtI2RlZmluZSBhcmNoX2thc2FuX2dldF90YWcoYWRkcilcXHRfX3RhZ19nZXQoYWRkcilcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9MzY5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190dGJyMV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMzcxLVxcdC8qIFRUQlIxIGFkZHJlc3NlcyBtYXkgaGF2ZSBhIHRhZyBpZiBLQVNBTl9TV19UQUdTIGlzIGluIHVzZSAqL1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MzcyOlxcdHJldHVybiBhcmNoX2thc2FuX3Jlc2V0X3RhZyhhZGRyKSBcXHUwMDNlPSBQQUdFX09GRlNFVDtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTM3My19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2thc2FuLmg9NTIwPXN0YXRpYyBpbmxpbmUgdm9pZCAqa2FzYW5fcmVzZXRfdGFnKGNvbnN0IHZvaWQgKmFkZHIpXFxuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUyMS17XFxuaW5jbHVkZS9saW51eC9rYXNhbi5oOjUyMjpcXHRyZXR1cm4gKHZvaWQgKilhcmNoX2thc2FuX3Jlc2V0X3RhZyhhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTIzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDM6MzYuNjU4NTg2MDU1WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExMzE0OTg0NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQYXRjaDogV29ydGhGdXp6aW5nPWZhbHNlIERlY2lzaW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlZCBhbnkgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgY2hhbmdlcyBmb3IgZnV6emluZy4gIEkgc2VlIHRoYXQgYGFyY2hfa2FzYW5fcmVzZXRfdGFnYCBpcyBkZWZpbmVkIHdpdGhpbiBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rYXNhbi5oYC4gIFRoaXMgaXMgYSByZWQgZmxhZywgcG9pbnRpbmcgdG93YXJkcyBhbiBBUk02NC1zcGVjaWZpYyBmZWF0dXJlLiAgVGhlIGBrYXNhbl9yZXNldF90YWdgIGZ1bmN0aW9uLCB3aGljaCBjYWxscyBgYXJjaF9rYXNhbl9yZXNldF90YWdgLCBpcyBkZWZpbmVkIHdpdGhpbiBgaW5jbHVkZS9saW51eC9rYXNhbi5oYCBhbmQgY29uZGl0aW9uYWxseSBjYWxscyBgYXJjaF9rYXNhbl9yZXNldF90YWdgIG9ubHkgd2hlbiBLQVNBTidzIHRhZ2dpbmcgZmVhdHVyZXMgYXJlIGVuYWJsZWQuICBUaGVzZSBmZWF0dXJlcyAoYENPTkZJR19LQVNBTl9TV19UQUdTYCBhbmQgYENPTkZJR19LQVNBTl9IV19UQUdTYCkgZGVwZW5kIG9uIGBIQVZFX0FSQ0hfS0FTQU5fU1dfVEFHU2AgYW5kIGBIQVZFX0FSQ0hfS0FTQU5fSFdfVEFHU2AsIHdoaWNoIGFyZSBzZWxlY3RlZCBleGNsdXNpdmVseSB3aXRoaW4gYGFyY2gvYXJtNjQvS2NvbmZpZ2AuXG5cbk5vdywgdGhlIHBhdGNoIG1vZGlmaWVzIGBrZXJuZWwvZm9yay5jYCwgcmVwbGFjaW5nIGB2ZnJlZSh2bV9hcmVhLVx1MDAzZWFkZHIpYCB3aXRoIGB2ZnJlZShrYXNhbl9yZXNldF90YWcodm1fYXJlYS1cdTAwM2VhZGRyKSlgLiAgSSBpbW1lZGlhdGVseSB0aG91Z2h0IHRvIGNoZWNrIHRoZSBpbXBhY3Qgb24gYW1kNjQgKHg4Nl82NCksIG91ciB0YXJnZXQuICBPbiBhbWQ2NCwgYGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVx1MDAzZWFkZHIpYCBzaW1wbHkgZXhwYW5kcyB0byBgKHZvaWQgKikodm1fYXJlYS1cdTAwM2VhZGRyKWAuICBUaGVyZWZvcmUsIG9uIGFtZDY0LCB0aGUgY29tcGlsZWQgYmluYXJ5IGNvZGUgYmVmb3JlIGFuZCBhZnRlciB0aGlzIHBhdGNoIGlzIGlkZW50aWNhbCEgVGhpcyBpcyBiZWNhdXNlIG1lbW9yeSB0YWdnaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gQU1ENjQuXG5cbkNydWNpYWxseSwgdGhlIHByb21wdCdzIGNyaXRlcmlhIGZvciBgV29ydGhGdXp6aW5nPWZhbHNlYCBiZWNvbWVzIHJlbGV2YW50LiBUaGUgbGFzdCBidWxsZXQgcG9pbnQgb2YgbmVnYXRpdmUgY3JpdGVyaWEgY2xlYXJseSBzdGF0ZXMgXCJDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmVcIi4gIFRoaXMgcGF0Y2gsIGluIGVmZmVjdCwgaW50cm9kdWNlcyBubyBjaGFuZ2Ugb24gYW1kNjQuICBFdmVuIHRoZSBzZWNvbmQtdG8tbGFzdCBidWxsZXQgcG9pbnQgYXBwbGllczogXCJCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXCIgLSB0aGlzIGlzIHByZWNpc2VseSB0aGUgY2FzZSBoZXJlLCBhcyBga2FzYW5fcmVzZXRfdGFnYCBpcyBhIG5vLW9wIG1hY3JvIHRoYXQgZG9lcyBub3QgYWx0ZXIgY29tcGlsZWQgbG9naWMgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cblRoZXJlZm9yZSwgc2luY2UgS0FTQU4ncyB0YWctYmFzZWQgZmVhdHVyZXMgYXJlIGV4Y2x1c2l2ZWx5IEFSTTY0LXNwZWNpZmljLCBhbmQgdGhlIGNoYW5nZSBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBpcyBhIG5vLW9wIG9uIGFtZDY0LCBJIGNvbmNsdWRlIHRoYXQgdGhpcyBwYXRjaCBzaG91bGQgYmUgbWFya2VkIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJdCBpcyBzdHJpY3RseSBhIGJ1ZyBmaXggZm9yIGFuIEFSTTY0IG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGJlaGF2aW9yIGNoYW5nZXMgb24gYW1kNjQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MTIxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0Mzo0Ny45NzM1NzMxMDJaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNDE0Mjg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrYXNhbl9yZXNldF90YWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQzOjQ4LjAzNjk5NTk2MloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjMzNTU2MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgeDg2IExBTSBhbmQgS0FTQU4gSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHNvbWV0aGluZyBhbmQgbXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXJlJ3Mgbm90aGluZyBpbW1lZGlhdGVseSByZWxldmFudCBpbiB0aGUgYGFyY2gveDg2YCBkaXJlY3RvcnkuIE1ha2VzIHNlbnNlLCBJJ3ZlIGdvdCBhIGRlY2VudCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB4ODYgaXMgc3RydWN0dXJlZCwgYW5kIEkgZG9uJ3QgcmVjYWxsIGFueXRoaW5nIHNwZWNpZmljIGp1bXBpbmcgb3V0IGF0IG1lLiBOb3csIGxldCdzIHBpdm90IHRvIExpbmVhciBBZGRyZXNzIE1hc2tpbmcsIG9yIExBTS4gVGhlIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXMgd2hldGhlciB0aGUgeDg2IGltcGxlbWVudGF0aW9uIG9mIExBTSBpbnRlcmFjdHMgd2l0aCBLQVNBTiB0YWdnaW5nIG9yIGBrYXNhbl9yZXNldF90YWdgIGluIGFueSB3YXkuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGFuZCBob3cgdGhleSBtaWdodCByZWxhdGUgdG8gdGhpcyBwYXJ0aWN1bGFyIHg4NiBmZWF0dXJlLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIGRvIGEgcXVpY2sgYnV0IHRob3JvdWdoIHNlYXJjaC4gSSdsbCBmaXJlIG9mZiBhIGdyZXAgY29tbWFuZCB0byBmaW5kIGFsbCBpbnN0YW5jZXMgd2hlcmUgYExBTWAgYW5kIGBrYXNhbmAgYXJlIG1lbnRpb25lZCB0b2dldGhlciBpbiB0aGUgY29kZWJhc2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFuZCBpbnRlcmFjdGlvbnMsIGlmIGFueS4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgcmVzdWx0cyBhbmQgcGlucG9pbnQgdGhlIGRldGFpbHMgSSdtIHNlZWtpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTkwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDM6NTAuMjcwNTU0NjQ4WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcxODk4MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19BRERSRVNTX01BU0tJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni9jcHVpbmZvLnJzdD0xNzY9Rm9yIGV4YW1wbGUsIGlmIExpbmVhciBBZGRyZXNzIE1hc2tpbmcgKExBTSkgaXMgbm90IGVuYWJsZWQgd2hlbiBidWlsZGluZyAoaS5lLixcXG5Eb2N1bWVudGF0aW9uL2FyY2gveDg2L2NwdWluZm8ucnN0OjE3NzpDT05GSUdfQUREUkVTU19NQVNLSU5HIGlzIG5vdCBzZWxlY3RlZCkgdGhlIGZsYWcgXFxcImxhbVxcXCIgd2lsbCBub3Qgc2hvdyB1cC5cXG5Eb2N1bWVudGF0aW9uL2FyY2gveDg2L2NwdWluZm8ucnN0LTE3OC1FdmVuIHRob3VnaCB0aGUgZmVhdHVyZSB3aWxsIHN0aWxsIGJlIGRldGVjdGVkIHZpYSBDUFVJRCwgdGhlIGtlcm5lbCBkaXNhYmxlc1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11Lmg9MjU9dHlwZWRlZiBzdHJ1Y3Qge1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11LmgtNTAtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11Lmg6NTE6I2lmZGVmIENPTkZJR19BRERSRVNTX01BU0tJTkdcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXUuaC01Mi1cXHQvKiBBY3RpdmUgTEFNIG1vZGU6ICBYODZfQ1IzX0xBTV9VNDggb3IgWDg2X0NSM19MQU1fVTU3IG9yIDAgKGRpc2FibGVkKSAqL1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaD04Mj1zdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX2xkdChzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0KVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaC04Ny1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oOjg4OiNpZmRlZiBDT05GSUdfQUREUkVTU19NQVNLSU5HXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaC04OS1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fbGFtX2NyM19tYXNrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaD03ND1zdHJ1Y3QgdGxiX3N0YXRlIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtMTA5LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmg6MTEwOiNpZmRlZiBDT05GSUdfQUREUkVTU19NQVNLSU5HXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaC0xMTEtXFx0LypcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmg9NDY4PXN0YXRpYyBpbmxpbmUgYm9vbCBodWdlX3BtZF9uZWVkc19mbHVzaChwbWRfdCBvbGRwbWQsIHBtZF90IG5ld3BtZClcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtNDg2LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmg6NDg3OiNpZmRlZiBDT05GSUdfQUREUkVTU19NQVNLSU5HXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaC00ODgtc3RhdGljIGlubGluZSAgdTY0IHRsYnN0YXRlX2xhbV9jcjNfbWFzayh2b2lkKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oPTIxPWV4dGVybiB1bnNpZ25lZCBsb25nIFVTRVJfUFRSX01BWDtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgtMjItXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oOjIzOiNpZmRlZiBDT05GSUdfQUREUkVTU19NQVNLSU5HXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oLTI0LS8qXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jPTc4Nj1zdGF0aWMgbG9uZyBwcmN0bF9tYXBfdmRzbyhjb25zdCBzdHJ1Y3QgdmRzb19pbWFnZSAqaW1hZ2UsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMtNzk3LVxcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmM6Nzk4OiNpZmRlZiBDT05GSUdfQUREUkVTU19NQVNLSU5HXFxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYy03OTktXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jPTg2Nj1sb25nIGRvX2FyY2hfcHJjdGxfNjQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgb3B0aW9uLCB1bnNpZ25lZCBsb25nIGFyZzIpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jLTk1Mi0jZW5kaWZcXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jOjk1MzojaWZkZWYgQ09ORklHX0FERFJFU1NfTUFTS0lOR1xcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMtOTU0LVxcdGNhc2UgQVJDSF9HRVRfVU5UQUdfTUFTSzpcXG4tLVxcbmFyY2gveDg2L21tL2luaXQuYz0xMDEzPV9fdmlzaWJsZSBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB0bGJfc3RhdGUsIGNwdV90bGJzdGF0ZSkgPSB7XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0LmMtMTAxOC1cXG5hcmNoL3g4Ni9tbS9pbml0LmM6MTAxOTojaWZkZWYgQ09ORklHX0FERFJFU1NfTUFTS0lOR1xcbmFyY2gveDg2L21tL2luaXQuYy0xMDIwLURFRklORV9QRVJfQ1BVKHU2NCwgdGxic3RhdGVfdW50YWdfbWFzayk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvbGFtLmM9MTI3PXN0YXRpYyBpbmxpbmUgaW50IGxhbV9pc19hdmFpbGFibGUodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYW0uYy0xNDAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L2xhbS5jOjE0MTpcXHQvKiBSZXR1cm4gMCBpZiBDT05GSUdfQUREUkVTU19NQVNLSU5HIGlzIG5vdCBzZXQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvbGFtLmMtMTQyLVxcdHJldCA9IHN5c2NhbGwoU1lTX2FyY2hfcHJjdGwsIEFSQ0hfR0VUX01BWF9UQUdfQklUUywgXFx1MDAyNmJpdHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0Mzo1MS44NDI0NjE4MTZaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjEyNzMyODIxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIFBhdGNoOiBXb3J0aEZ1enppbmcgRXZhbHVhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY2hhbmdlIG1vZGlmaWVzIHRoZSBgdmZyZWVgIGNhbGwgdG8gaW5jbHVkZSBga2FzYW5fcmVzZXRfdGFnYCBpbiBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCB3aXRoaW4gYGtlcm5lbC9mb3JrLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBLQVNBTi1yZWxhdGVkIGNoYW5nZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJlaGF2aW9yLlxuXG5UaGUgY3JpdGljYWwgaW5zaWdodCBoZXJlIGlzIHRoYXQgYGthc2FuX3Jlc2V0X3RhZ2AgaXMgb25seSByZWxldmFudCBmb3IgYXJjaGl0ZWN0dXJlcyB3aXRoIHRhZy1iYXNlZCBLQVNBTiwgc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQgc3VwcG9ydCBgQ09ORklHX0tBU0FOX1NXX1RBR1NgIG9yIGBDT05GSUdfS0FTQU5fSFdfVEFHU2AuIFJpZ2h0IG5vdywgdGhhdCBzZWVtcyB0byBiZSBleGNsdXNpdmUgdG8gYGFybTY0YCwgbGV2ZXJhZ2luZyBmZWF0dXJlcyBsaWtlIEFSTSdzIFRvcCBCeXRlIElnbm9yZSBvciBNZW1vcnkgVGFnZ2luZyBFeHRlbnNpb24uICBPbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYW1kNjQsIGBrYXNhbl9yZXNldF90YWdgIGlzIGVzc2VudGlhbGx5IGEgbm8tb3AsIGRlZmluZWQgYXMgYW4gaW5saW5lIGZ1bmN0aW9uIHRoYXQganVzdCBjYXN0cyBhbmQgcmV0dXJucyB0aGUgc2FtZSBwb2ludGVyOiBgcmV0dXJuICh2b2lkICopYWRkcjtgLlxuXG5UaGVyZWZvcmUsIG9uIGFtZDY0LCB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSBhbmQgYmluYXJ5LWlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwgY29kZS4gSXTigJlzIGEgcHVyZSBjb3NtZXRpYyBvciBjb25kaXRpb25hbCBjaGFuZ2UgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2Ygd2hhdCBnZXRzIGV4ZWN1dGVkIG9uIGFtZDY0LiAgVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoaXMgY2hhbmdlIGlzICpub3QqIHdvcnRoIGZ1enppbmcgb24gYW1kNjQuIEl0IG5lYXRseSBmYWxscyBpbnRvIHRoZSBcIkNvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZVwiIG5lZ2F0aXZlIGNyaXRlcmlhIG91dGxpbmVkIGluIFNlY3Rpb24gMi5cblxuVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyByZXZpZXcgU2VjdGlvbiAyIGFnYWluLiBJdCBjb25maXJtcyB0aGF0IHRoZSBtb2RpZmljYXRpb24gaXMgKm9ubHkqIHJlbGV2YW50IHRvIG90aGVyIGFyY2hpdGVjdHVyZXMuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgdGhlIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGNvbmRpdGlvbiwgYW5kIG1vcmUgcGFydGljdWxhcmx5LCB3aGF0IGhhcHBlbnMgd2l0aCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHdoZW4gd2UgZ2V0IHRoZXJlLiBJdCdzIHVzdWFsbHkgZW1wdHksIG9yIGF0IGxlYXN0IGEgbnVsbCBvciBlbXB0eSBsaXN0IGlzIGV4cGVjdGVkLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgKmFueSogY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIGZ1enppbmcgb24gYW1kNjQsIGJ1dCBpZiB3ZSdyZSBub3QgZnV6emluZywgdGhlbiB0aGVyZSBzaG91bGRuJ3QgYmUuXG5cbkJhc2VkIG9uIHRoZSBldmlkZW5jZSwgdGhlIGNvcnJlY3QgY2FsbCB0byBgc2V0LXJlc3VsdHNgIHNob3VsZCBiZTpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBmYWxzZVxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgY29kZSByZWxhdGVkIHRvIEtBU0FOIHRhZyByZXNldHRpbmcuIFRoZSBga2FzYW5fcmVzZXRfdGFnYCBmdW5jdGlvbiBpcyBvbmx5IGFjdGl2ZSB3aGVuIGBDT05GSUdfS0FTQU5fU1dfVEFHU2Agb3IgYENPTkZJR19LQVNBTl9IV19UQUdTYCBpcyBlbmFibGVkLCB3aGljaCBpcyBjdXJyZW50bHkgbGltaXRlZCB0byBgYXJtNjRgLiBPbiBhbWQ2NCwgYGthc2FuX3Jlc2V0X3RhZ2AgaXMgZGVmaW5lZCBhcyBhIG5vLW9wLCByZXN1bHRpbmcgaW4gbm8gZnVuY3Rpb25hbCBvciBiaW5hcnkgY2hhbmdlLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBmYWxscyB1bmRlciBcImNvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZVwiIGFuZCBpcyBub3Qgd29ydGggZnV6emluZyBvbiBhbWQ2NC5cbiogICBgRm9jdXNTeW1ib2xzYDogW11cbiogICBgRW5hYmxlQ29uZmlnc2A6IFtdXG5cblRoYXQgc2VlbXMgc29saWQgYW5kIGxvZ2ljYWxseSBjb25zaXN0ZW50LiBMZXQncyBjYWxsIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjozNzU1MiwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQ0OjEzLjExNTc0NjM1OFoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGtlcm5lbC9mb3JrLmMgdG8gd3JhcCB2bV9hcmVhLVxcdTAwM2VhZGRyIGluIGthc2FuX3Jlc2V0X3RhZygpIHByaW9yIHRvIGNhbGxpbmcgdmZyZWUoKS4gVGhlIGthc2FuX3Jlc2V0X3RhZygpIGhlbHBlciBpcyBvbmx5IGFjdGl2ZSB3aGVuIENPTkZJR19LQVNBTl9TV19UQUdTIG9yIENPTkZJR19LQVNBTl9IV19UQUdTIGlzIGVuYWJsZWQsIGJvdGggb2Ygd2hpY2ggYXJlIGV4Y2x1c2l2ZSB0byBhcm02NC4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwga2FzYW5fcmVzZXRfdGFnKCkgaXMgYW4gaWRlbnRpdHkgZnVuY3Rpb24gcmV0dXJuaW5nICh2b2lkICopYWRkciB3aXRob3V0IG1vZGlmaWNhdGlvbi4gQ29uc2VxdWVudGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIG9yIGJpbmFyeSBjaGFuZ2VzIHRvIGNvbXBpbGVkIGNvZGUgb24gYW1kNjQsIGZhbGxpbmcgdW5kZXIgY2hhbmdlcyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMga2VybmVsL2ZvcmsuYyB0byB3cmFwIHZtX2FyZWEtXFx1MDAzZWFkZHIgaW4ga2FzYW5fcmVzZXRfdGFnKCkgcHJpb3IgdG8gY2FsbGluZyB2ZnJlZSgpLiBUaGUga2FzYW5fcmVzZXRfdGFnKCkgaGVscGVyIGlzIG9ubHkgYWN0aXZlIHdoZW4gQ09ORklHX0tBU0FOX1NXX1RBR1Mgb3IgQ09ORklHX0tBU0FOX0hXX1RBR1MgaXMgZW5hYmxlZCwgYm90aCBvZiB3aGljaCBhcmUgZXhjbHVzaXZlIHRvIGFybTY0LiBPbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCBrYXNhbl9yZXNldF90YWcoKSBpcyBhbiBpZGVudGl0eSBmdW5jdGlvbiByZXR1cm5pbmcgKHZvaWQgKilhZGRyIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBDb25zZXF1ZW50bHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwgb3IgYmluYXJ5IGNoYW5nZXMgdG8gY29tcGlsZWQgY29kZSBvbiBhbWQ2NCwgZmFsbGluZyB1bmRlciBjaGFuZ2VzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0NDoxMy4xMTU3ODI5MzhaIiwiU2VxIjo2MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd8kg9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 10:37:51 +0000 UTC FinishedAt: 2026-09-14 10:44:13 +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+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMga2VybmVsL2ZvcmsuYyB0byB3cmFwIHZtX2FyZWEtXHUwMDNlYWRkciBpbiBrYXNhbl9yZXNldF90YWcoKSBwcmlvciB0byBjYWxsaW5nIHZmcmVlKCkuIFRoZSBrYXNhbl9yZXNldF90YWcoKSBoZWxwZXIgaXMgb25seSBhY3RpdmUgd2hlbiBDT05GSUdfS0FTQU5fU1dfVEFHUyBvciBDT05GSUdfS0FTQU5fSFdfVEFHUyBpcyBlbmFibGVkLCBib3RoIG9mIHdoaWNoIGFyZSBleGNsdXNpdmUgdG8gYXJtNjQuIE9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCksIGthc2FuX3Jlc2V0X3RhZygpIGlzIGFuIGlkZW50aXR5IGZ1bmN0aW9uIHJldHVybmluZyAodm9pZCAqKWFkZHIgd2l0aG91dCBtb2RpZmljYXRpb24uIENvbnNlcXVlbnRseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbm8gZnVuY3Rpb25hbCBvciBiaW5hcnkgY2hhbmdlcyB0byBjb21waWxlZCBjb2RlIG9uIGFtZDY0LCBmYWxsaW5nIHVuZGVyIGNoYW5nZXMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYzI4YmM3MzczYmZjYjY4ZGY5NDJkZDRmMGJkZDBlOGVhN2NkODk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTA6Mzk6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcbmluZGV4IDQxNjc1OGM4YTNkNDMuLjZlYWQ4NzdmODdhOGMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZm9yay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZm9yay5jXG5AQCAtMjgwLDcgJiM0MzsyODAsNyBAQCBzdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaClcbiBcdGlmICh0cnlfcmVsZWFzZV90aHJlYWRfc3RhY2tfdG9fY2FjaGUodm1fc3RhY2stXHUwMDNlc3RhY2tfdm1fYXJlYSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcik7XG4mIzQzO1x0dmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGtlcm5lbC9mb3JrLmMgdG8gd3JhcCB2bV9hcmVhLVx1MDAzZWFkZHIgaW4ga2FzYW5fcmVzZXRfdGFnKCkgcHJpb3IgdG8gY2FsbGluZyB2ZnJlZSgpLiBUaGUga2FzYW5fcmVzZXRfdGFnKCkgaGVscGVyIGlzIG9ubHkgYWN0aXZlIHdoZW4gQ09ORklHX0tBU0FOX1NXX1RBR1Mgb3IgQ09ORklHX0tBU0FOX0hXX1RBR1MgaXMgZW5hYmxlZCwgYm90aCBvZiB3aGljaCBhcmUgZXhjbHVzaXZlIHRvIGFybTY0LiBPbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCBrYXNhbl9yZXNldF90YWcoKSBpcyBhbiBpZGVudGl0eSBmdW5jdGlvbiByZXR1cm5pbmcgKHZvaWQgKilhZGRyIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBDb25zZXF1ZW50bHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwgb3IgYmluYXJ5IGNoYW5nZXMgdG8gY29tcGlsZWQgY29kZSBvbiBhbWQ2NCwgZmFsbGluZyB1bmRlciBjaGFuZ2VzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2MyOGJjNzM3M2JmY2I2OGRmOTQyZGQ0ZjBiZGQwZThlYTdjZDg5OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDEwOjM5OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggNDE2NzU4YzhhM2Q0My4uNmVhZDg3N2Y4N2E4YyAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZm9yay5jCkBAIC0yODAsNyAmIzQzOzI4MCw3IEBAIHN0YXRpYyB2b2lkIHRocmVhZF9zdGFja19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJoKQogCWlmICh0cnlfcmVsZWFzZV90aHJlYWRfc3RhY2tfdG9fY2FjaGUodm1fc3RhY2stJmd0O3N0YWNrX3ZtX2FyZWEpKQogCQlyZXR1cm47CiAKLQl2ZnJlZSh2bV9hcmVhLSZndDthZGRyKTsKJiM0MzsJdmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtJmd0O2FkZHIpKTsKIH0KIAogc3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX2RlbGF5ZWRfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBGb3JrIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBkaWZmLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkIGluIGBrZXJuZWwvZm9yay5jYC4gTG9va3MgbGlrZSBpdCYjMzk7cyBhIGNoYW5nZSByZWxhdGVkIHRvIHRocmVhZCBzdGFjayBkZWFsbG9jYXRpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgYHZmcmVlKClgIGNhbGwsIHdoaWNoIHJlbGVhc2VzIG1lbW9yeSwgaXMgYmVpbmcgdXBkYXRlZC4gSW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIGB2ZnJlZSgpYCBvbiBgdm1fYXJlYS0mZ3Q7YWRkcmAsIGl0JiMzOTtzIG5vdyBjYWxsaW5nIGBrYXNhbl9yZXNldF90YWcoKWAgb24gYHZtX2FyZWEtJmd0O2FkZHJgIGJlZm9yZSBwYXNzaW5nIGl0IHRvIGB2ZnJlZSgpYC4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIEtlcm5lbCBBZGRyZXNzIFNhbml0aXplciAoS0FTQU4pLiBUaGUgZmFjdCB0aGF0IGBrYXNhbl9yZXNldF90YWdgIGlzIGludm9sdmVkIGlzIGEgbWFqb3IgY2x1ZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYGtlcm5lbC9mb3JrLmNgIGFuZCBmb2N1cyBvbiB0aGUgY29kZSBhcm91bmQgbGluZSAyODAuIEkgbmVlZCB0byBzZWUgd2hhdCBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCBhbmQgYHRocmVhZF9zdGFja19kZWxheWVkX2ZyZWVgIGFyZSBkb2luZywgYW5kIGhvdyB0aGUgYHZtX2FyZWFgIGlzIGJlaW5nIHVzZWQuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgcHVycG9zZSBvZiB0aGlzIGNoYW5nZSBhbmQgd2hldGhlciBpdCYjMzk7cyByZWxhdGVkIHRvIG1lbW9yeSBzYWZldHksIHJhY2UgY29uZGl0aW9ucywgb3Igb3B0aW1pemF0aW9uLiBXaGF0JiMzOTtzIHRoZSB0aHJlYWQgc3RhY2sgY2FjaGUgdHJ5aW5nIHRvIGRvPyBJcyB0aGlzIGFib3V0IGNsZWFyaW5nIG1lbW9yeSB0YWdzIGJlZm9yZSByZWxlYXNpbmcgdGhlIHN0YWNrPyBJIG5lZWQgbW9yZSBkYXRhIGJlZm9yZSBJIGNhbiBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2ZvcmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0fVxuIDI0MTpcdFxuIDI0MjpcdHN0YXRpYyBib29sIHRyeV9yZWxlYXNlX3RocmVhZF9zdGFja190b19jYWNoZShzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhKVxuIDI0MzpcdHtcbiAyNDQ6XHRcdHVuc2lnbmVkIGludCBpO1xuIDI0NTpcdFx0aW50IG5pZDtcbiAyNDY6XHRcbiAyNDc6XHRcdC8qXG4gMjQ4Olx0XHQgKiBEb24mIzM5O3QgY2FjaGUgc3RhY2tzIGlmIGFueSBvZiB0aGUgcGFnZXMgZG9uJiMzOTt0IG1hdGNoIHRoZSBsb2NhbCBkb21haW4sIHVubGVzc1xuIDI0OTpcdFx0ICogdGhlcmUgaXMgbm8gbG9jYWwgbWVtb3J5IHRvIGJlZ2luIHdpdGguXG4gMjUwOlx0XHQgKlxuIDI1MTpcdFx0ICogTm90ZSB0aGF0IGxhY2sgb2YgbG9jYWwgbWVtb3J5IGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgbWVhbiBpdCBtYWtlcyBubyBkaWZmZXJlbmNlXG4gMjUyOlx0XHQgKiBwZXJmb3JtYW5jZS13aXNlIHdoaWNoIG90aGVyIGRvbWFpbiBiYWNrcyB0aGUgc3RhY2suIEluIHRoaXMgY2FzZSB3ZSBhcmUgbWVyZWx5XG4gMjUzOlx0XHQgKiB0cnlpbmcgdG8gYXZvaWQgY29uc3RhbnRseSBnb2luZyB0byB2bWFsbG9jLlxuIDI1NDpcdFx0ICovXG4gMjU1Olx0XHRzY29wZWRfZ3VhcmQocHJlZW1wdCkge1xuIDI1NjpcdFx0XHRuaWQgPSBudW1hX25vZGVfaWQoKTtcbiAyNTc6XHRcdFx0aWYgKG5vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkpIHtcbiAyNTg6XHRcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2bV9hcmVhLVx1MDAzZW5yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuIDI1OTpcdFx0XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSB2bV9hcmVhLVx1MDAzZXBhZ2VzW2ldO1xuIDI2MDpcdFx0XHRcdFx0aWYgKHBhZ2VfdG9fbmlkKHBhZ2UpICE9IG5pZClcbiAyNjE6XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI2MjpcdFx0XHRcdH1cbiAyNjM6XHRcdFx0fVxuIDI2NDpcdFxuIDI2NTpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9DQUNIRURfU1RBQ0tTOyBpJiM0MzsmIzQzOykge1xuIDI2NjpcdFx0XHRcdHN0cnVjdCB2bV9zdHJ1Y3QgKnRtcCA9IE5VTEw7XG4gMjY3Olx0XG4gMjY4Olx0XHRcdFx0aWYgKHRoaXNfY3B1X3RyeV9jbXB4Y2hnKGNhY2hlZF9zdGFja3NbaV0sIFx1MDAyNnRtcCwgdm1fYXJlYSkpXG4gMjY5Olx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyNzA6XHRcdFx0fVxuIDI3MTpcdFx0fVxuIDI3MjpcdFx0cmV0dXJuIGZhbHNlO1xuIDI3MzpcdH1cbiAyNzQ6XHRcbiAyNzU6XHRzdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaClcbiAyNzY6XHR7XG4gMjc3Olx0XHRzdHJ1Y3Qgdm1fc3RhY2sgKnZtX3N0YWNrID0gY29udGFpbmVyX29mKHJoLCBzdHJ1Y3Qgdm1fc3RhY2ssIHJjdSk7XG4gMjc4Olx0XHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhID0gdm1fc3RhY2stXHUwMDNlc3RhY2tfdm1fYXJlYTtcbiAyNzk6XHRcbiAyODA6XHRcdGlmICh0cnlfcmVsZWFzZV90aHJlYWRfc3RhY2tfdG9fY2FjaGUodm1fc3RhY2stXHUwMDNlc3RhY2tfdm1fYXJlYSkpXG4gMjgxOlx0XHRcdHJldHVybjtcbiAyODI6XHRcbiAyODM6XHRcdHZmcmVlKGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVx1MDAzZWFkZHIpKTtcbiAyODQ6XHR9XG4gMjg1Olx0XG4gMjg2Olx0c3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX2RlbGF5ZWRfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiAyODc6XHR7XG4gMjg4Olx0XHRzdHJ1Y3Qgdm1fc3RhY2sgKnZtX3N0YWNrID0gdHNrLVx1MDAzZXN0YWNrO1xuIDI4OTpcdFxuIDI5MDpcdFx0dm1fc3RhY2stXHUwMDNlc3RhY2tfdm1fYXJlYSA9IHRzay1cdTAwM2VzdGFja192bV9hcmVhO1xuIDI5MTpcdFx0Y2FsbF9yY3UoXHUwMDI2dm1fc3RhY2stXHUwMDNlcmN1LCB0aHJlYWRfc3RhY2tfZnJlZV9yY3UpO1xuIDI5MjpcdH1cbiAyOTM6XHRcbiAyOTQ6XHRzdGF0aWMgaW50IGZyZWVfdm1fc3RhY2tfY2FjaGUodW5zaWduZWQgaW50IGNwdSlcbiAyOTU6XHR7XG4gMjk2Olx0XHRzdHJ1Y3Qgdm1fc3RydWN0ICoqY2FjaGVkX3ZtX3N0YWNrX2FyZWFzID0gcGVyX2NwdV9wdHIoY2FjaGVkX3N0YWNrcywgY3B1KTtcbiAyOTc6XHRcdGludCBpO1xuIDI5ODpcdFxuIDI5OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfQ0FDSEVEX1NUQUNLUzsgaSYjNDM7JiM0MzspIHtcbiAzMDA6XHRcdFx0c3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYSA9IGNhY2hlZF92bV9zdGFja19hcmVhc1tpXTtcbiAzMDE6XHRcbiAzMDI6XHRcdFx0aWYgKCF2bV9hcmVhKVxuIDMwMzpcdFx0XHRcdGNvbnRpbnVlO1xuIDMwNDpcdFxuIDMwNTpcdFx0XHR2ZnJlZSh2bV9hcmVhLVx1MDAzZWFkZHIpO1xuIDMwNjpcdFx0XHRjYWNoZWRfdm1fc3RhY2tfYXJlYXNbaV0gPSBOVUxMO1xuIDMwNzpcdFx0fVxuIDMwODpcdFxuIDMwOTpcdFx0cmV0dXJuIDA7XG4gMzEwOlx0fVxuIDMxMTpcdFxuIDMxMjpcdHN0YXRpYyBpbnQgbWVtY2dfY2hhcmdlX2tlcm5lbF9zdGFjayhzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhKVxuIDMxMzpcdHtcbiAzMTQ6XHRcdGludCBpO1xuIDMxNTpcdFx0aW50IHJldDtcbiAzMTY6XHRcdGludCBucl9jaGFyZ2VkID0gMDtcbiAzMTc6XHRcbiAzMTg6XHRcdEJVR19PTih2bV9hcmVhLVx1MDAzZW5yX3BhZ2VzICE9IFRIUkVBRF9TSVpFIC8gUEFHRV9TSVpFKTtcbiAzMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTU1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIEZvcmsgQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gYGtlcm5lbC9mb3JrLmNgIG5vdy4gRmlyc3QgdGhpbmdzIGZpcnN0OiBpcyB0aGlzIHBhcnQgb2YgdGhlIGBDT05GSUdfVk1BUF9TVEFDS2AgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci4gTXkgbWFpbiBpbnRlcmVzdCBsaWVzIHdpdGhpbiBsaW5lcyAxNTAgdG8gMjUwIG9mIHRoaXMgZmlsZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHNwZWNpZmljIGxvZ2ljIHdpdGhpbiB0aGF0IHNlY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgZm9yayBwcm9jZXNzIHdpdGhpbiB0aGlzIGNvbnRleHQuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHR2b2lkIF9fd2VhayBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4gMTgxOlx0e1xuIDE4MjpcdH1cbiAxODM6XHRcbiAxODQ6XHRzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnRhc2tfc3RydWN0X2NhY2hlcDtcbiAxODU6XHRcbiAxODY6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqYWxsb2NfdGFza19zdHJ1Y3Rfbm9kZShpbnQgbm9kZSlcbiAxODc6XHR7XG4gMTg4Olx0XHRyZXR1cm4ga21lbV9jYWNoZV9hbGxvY19ub2RlKHRhc2tfc3RydWN0X2NhY2hlcCwgR0ZQX0tFUk5FTCwgbm9kZSk7XG4gMTg5Olx0fVxuIDE5MDpcdFxuIDE5MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIDE5MjpcdHtcbiAxOTM6XHRcdGttZW1fY2FjaGVfZnJlZSh0YXNrX3N0cnVjdF9jYWNoZXAsIHRzayk7XG4gMTk0Olx0fVxuIDE5NTpcdFxuIDE5NjpcdCNpZmRlZiBDT05GSUdfVk1BUF9TVEFDS1xuIDE5NzpcdC8qXG4gMTk4Olx0ICogdm1hbGxvYygpIGlzIGEgYml0IHNsb3csIGFuZCBjYWxsaW5nIHZmcmVlKCkgZW5vdWdoIHRpbWVzIHdpbGwgZm9yY2UgYSBUTEJcbiAxOTk6XHQgKiBmbHVzaC4gIFRyeSB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGNhbGxzIGJ5IGNhY2hpbmcgc3RhY2tzLlxuIDIwMDpcdCAqL1xuIDIwMTpcdCNkZWZpbmUgTlJfQ0FDSEVEX1NUQUNLUyAyXG4gMjAyOlx0c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2bV9zdHJ1Y3QgKiwgY2FjaGVkX3N0YWNrc1tOUl9DQUNIRURfU1RBQ0tTXSk7XG4gMjAzOlx0LypcbiAyMDQ6XHQgKiBBbGxvY2F0ZWQgc3RhY2tzIGFyZSBjYWNoZWQgYW5kIGxhdGVyIHJldXNlZCBieSBuZXcgdGhyZWFkcywgc28gbWVtY2dcbiAyMDU6XHQgKiBhY2NvdW50aW5nIGlzIHBlcmZvcm1lZCBieSB0aGUgY29kZSBhc3NpZ25pbmcvcmVsZWFzaW5nIHN0YWNrcyB0byB0YXNrcy5cbiAyMDY6XHQgKiBXZSBuZWVkIGEgemVyb2VkIG1lbW9yeSB3aXRob3V0IF9fR0ZQX0FDQ09VTlQuXG4gMjA3Olx0ICovXG4gMjA4Olx0I2RlZmluZSBHRlBfVk1BUF9TVEFDSyAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9TS0lQX0tBU0FOKVxuIDIwOTpcdFxuIDIxMDpcdHN0cnVjdCB2bV9zdGFjayB7XG4gMjExOlx0XHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIDIxMjpcdFx0c3RydWN0IHZtX3N0cnVjdCAqc3RhY2tfdm1fYXJlYTtcbiAyMTM6XHR9O1xuIDIxNDpcdFxuIDIxNTpcdHN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICphbGxvY190aHJlYWRfc3RhY2tfbm9kZV9mcm9tX2NhY2hlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgbm9kZSlcbiAyMTY6XHR7XG4gMjE3Olx0XHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhO1xuIDIxODpcdFx0dW5zaWduZWQgaW50IGk7XG4gMjE5Olx0XG4gMjIwOlx0XHQvKlxuIDIyMTpcdFx0ICogSWYgdGhlIG5vZGUgaGFzIG1lbW9yeSwgd2UgYXJlIGd1YXJhbnRlZWQgdGhlIHN0YWNrcyBhcmUgYmFja2VkIGJ5IGxvY2FsIHBhZ2VzLlxuIDIyMjpcdFx0ICogT3RoZXJ3aXNlIHRoZSBwYWdlcyBhcmUgYXJiaXRyYXJ5LlxuIDIyMzpcdFx0ICpcbiAyMjQ6XHRcdCAqIE5vdGUgdGhhdCBkZXBlbmRpbmcgb24gY3B1c2V0IGl0IGlzIHBvc3NpYmxlIHdlIHdpbGwgZ2V0IG1pZ3JhdGVkIHRvIGEgZGlmZmVyZW50XG4gMjI1Olx0XHQgKiBub2RlIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpbmcgaGVyZSwgc28gdGhpcyBkb2VzICpub3QqIGd1YXJhbnRlZSBsb2NhbGl0eSBmb3JcbiAyMjY6XHRcdCAqIGFyYml0cmFyeSBjYWxsZXJzLlxuIDIyNzpcdFx0ICovXG4gMjI4Olx0XHRzY29wZWRfZ3VhcmQocHJlZW1wdCkge1xuIDIyOTpcdFx0XHRpZiAobm9kZSAhPSBOVU1BX05PX05PREUgXHUwMDI2XHUwMDI2IG51bWFfbm9kZV9pZCgpICE9IG5vZGUpXG4gMjMwOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gMjMxOlx0XG4gMjMyOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0NBQ0hFRF9TVEFDS1M7IGkmIzQzOyYjNDM7KSB7XG4gMjMzOlx0XHRcdFx0dm1fYXJlYSA9IHRoaXNfY3B1X3hjaGcoY2FjaGVkX3N0YWNrc1tpXSwgTlVMTCk7XG4gMjM0Olx0XHRcdFx0aWYgKHZtX2FyZWEpXG4gMjM1Olx0XHRcdFx0XHRyZXR1cm4gdm1fYXJlYTtcbiAyMzY6XHRcdFx0fVxuIDIzNzpcdFx0fVxuIDIzODpcdFxuIDIzOTpcdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY4MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgU3VzcGVjdCBNZW1vcnkgUmVsZWFzZSoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIGB2ZnJlZWAgY2FsbCByZWxhdGVkIHRvIGEgYHZtX2FyZWEtJmd0O2FkZHJgIGFuZCBzb21ldGhpbmcmIzM5O3MgYnVnZ2luZyBtZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgYGthc2FuX3Jlc2V0X3RhZ2AgY2FsbCB3YXNuJiMzOTt0IGFwcGxpZWQgb3Igd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBUaGUgY29kZSBsb29rcyBsaWtlIGl0JiMzOTtzIHRyeWluZyB0byByZWxlYXNlIHNvbWUgbWVtb3J5IGluIHRoZSBgZnJlZV92bV9zdGFja19jYWNoZWAgZnVuY3Rpb24uIEJ1dCB0aGVyZSYjMzk7cyBzb21ldGhpbmcgb2ZmLiBJICp0aG91Z2h0KiBJIHNhdyBhIGBrYXNhbl9yZXNldF90YWdgIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhbGwgZWFybGllciwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZSBoaXN0b3J5LiBTaW5jZSBJIGRvbiYjMzk7dCBoYXZlIGdpdCBsb2cgdG8gaGFuZCwgSSBzaG91bGQgc2VhcmNoIGZvciBga2FzYW5fcmVzZXRfdGFnYCwgYHZmcmVlYCB0byBnZXQgdGhlIGNoYW5nZXMgcXVpY2tseS4gTGluZSAzMDUgbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgYnV0IG1heWJlIHRoZSBjaGFuZ2UgSSB3YXMgbG9va2luZyBmb3Igd2FzbiYjMzk7dCB0aGVyZSBhdCBhbGwsIG9yIHBlcmhhcHMgaXQgd2FzIHJlbW92ZWQgaW4gYSBzdWJzZXF1ZW50IGNvbW1pdD8gTm93IEkgdGhpbmssIGluc3RlYWQgb2YgZm9jdXNpbmcgb24gYGthc2FuX3Jlc2V0X3RhZ2AsIHRoYXQgdGhlIGlzc3VlIG1pZ2h0IGJlIHdpdGggb3RoZXIgYHZmcmVlYCBjYWxscyB3aXRoaW4gZm9yay5jLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHRob3NlIGluc3RlYWQgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmM9MTkxPXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmtlcm5lbC9mb3JrLmMtMTk3LS8qXG5rZXJuZWwvZm9yay5jOjE5ODogKiB2bWFsbG9jKCkgaXMgYSBiaXQgc2xvdywgYW5kIGNhbGxpbmcgdmZyZWUoKSBlbm91Z2ggdGltZXMgd2lsbCBmb3JjZSBhIFRMQlxua2VybmVsL2ZvcmsuYy0xOTktICogZmx1c2guICBUcnkgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBjYWxscyBieSBjYWNoaW5nIHN0YWNrcy5cbi0tXG5rZXJuZWwvZm9yay5jPTI3NT1zdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaClcbi0tXG5rZXJuZWwvZm9yay5jLTI4Mi1cbmtlcm5lbC9mb3JrLmM6MjgzOlx0dmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpO1xua2VybmVsL2ZvcmsuYy0yODQtfVxuLS1cbmtlcm5lbC9mb3JrLmM9Mjk0PXN0YXRpYyBpbnQgZnJlZV92bV9zdGFja19jYWNoZSh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbmtlcm5lbC9mb3JrLmMtMzA0LVxua2VybmVsL2ZvcmsuYzozMDU6XHRcdHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcik7XG5rZXJuZWwvZm9yay5jLTMwNi1cdFx0Y2FjaGVkX3ZtX3N0YWNrX2FyZWFzW2ldID0gTlVMTDtcbi0tXG5rZXJuZWwvZm9yay5jPTMzMz1zdGF0aWMgaW50IGFsbG9jX3RocmVhZF9zdGFja19ub2RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgbm9kZSlcbi0tXG5rZXJuZWwvZm9yay5jLTM0MC1cdFx0aWYgKG1lbWNnX2NoYXJnZV9rZXJuZWxfc3RhY2sodm1fYXJlYSkpIHtcbmtlcm5lbC9mb3JrLmM6MzQxOlx0XHRcdHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcik7XG5rZXJuZWwvZm9yay5jLTM0Mi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5rZXJuZWwvZm9yay5jLTM2Ni1cdGlmIChtZW1jZ19jaGFyZ2Vfa2VybmVsX3N0YWNrKHZtX2FyZWEpKSB7XG5rZXJuZWwvZm9yay5jOjM2NzpcdFx0dmZyZWUoc3RhY2spO1xua2VybmVsL2ZvcmsuYy0zNjgtXHRcdHJldHVybiAtRU5PTUVNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1OTUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBNZW1vcnkgVGFnZ2luZyB3aXRoIEtBU0FOIGFuZCB2ZnJlZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHZpcnR1YWwgbWVtb3J5IGFyZWEsIHNwZWNpZmljYWxseSBob3cgYHZtX2FyZWEtJmd0O2FkZHJgIGlzIG1hbmFnZWQgYW5kIHRhZ2dlZC4gSSBuZWVkIHRvIGtub3cgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3ksIGFueSBwb3RlbnRpYWwgdGFnZ2luZyBtZWNoYW5pc21zIHVzZWQsIGFuZCBob3cgdGhlc2UgaW50ZXJhY3Qgd2l0aCB0aGUgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgZmVhdHVyZXMuIEkgc3VzcGVjdCBhIEtBU0FOIGludGVyYWN0aW9uIGFuZCwgZ2l2ZW4gdGhlIGNvbnRleHQsIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGBrYXNhbl9yZXNldF90YWdgIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgdmZyZWVgLiBJIG5lZWQgdG8gdHJhY2sgZG93biBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIGdyZXAuIEkmIzM5O2xsIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBjb2RlIGZvciBpbnN0YW5jZXMgd2hlcmUgYHZmcmVlYCBhbmQgYGthc2FuYCBhcmUgdXNlZCB0b2dldGhlciwgb3Igd2hlcmUgYGthc2FuX3Jlc2V0X3RhZ2AgaXMgY2FsbGVkIGJlZm9yZSBvciBhZnRlciBhIGB2ZnJlZWAgY2FsbC4gU2VlaW5nIHRob3NlIHJlbGF0aW9uc2hpcHMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBtZW1vcnkgc2FmZXR5IGltcGxpY2F0aW9ucyBhbmQsIHBvdGVudGlhbGx5LCBpZiB0aGlzIHJlbGF0ZXMgdG8gc29tZSB2dWxuZXJhYmlsaXR5LiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIHBhdHRlcm5zIGxpa2UgJiMzNDt2ZnJlZS4qa2FzYW4mIzM0OyBvciAmIzM0O2thc2FuX3Jlc2V0X3RhZy4qdmZyZWUmIzM0OyB0byByZXZlYWwgdGhvc2UgcG90ZW50aWFsIGludGVyYWN0aW9ucy4gVGhpcyBzZWFyY2ggc2hvdWxkIHByb3ZpZGUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBLQVNBTiBpcyB1c2VkIHRvIGNoZWNrIG1lbW9yeSBmcmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2FzYW5fcmVzZXRfdGFnXFwoLiphZGRyXFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va2FzYW4uaC0xMi0jZGVmaW5lIGFyY2hfa2FzYW5fc2V0X3RhZyhhZGRyLCB0YWcpXHRfX3RhZ19zZXQoYWRkciwgdGFnKVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rYXNhbi5oOjEzOiNkZWZpbmUgYXJjaF9rYXNhbl9yZXNldF90YWcoYWRkcilcdF9fdGFnX3Jlc2V0KGFkZHIpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2thc2FuLmgtMTQtI2RlZmluZSBhcmNoX2thc2FuX2dldF90YWcoYWRkcilcdF9fdGFnX2dldChhZGRyKVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9MzY5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190dGJyMV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTM3MS1cdC8qIFRUQlIxIGFkZHJlc3NlcyBtYXkgaGF2ZSBhIHRhZyBpZiBLQVNBTl9TV19UQUdTIGlzIGluIHVzZSAqL1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaDozNzI6XHRyZXR1cm4gYXJjaF9rYXNhbl9yZXNldF90YWcoYWRkcikgXHUwMDNlPSBQQUdFX09GRlNFVDtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMzczLX1cbi0tXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmM9MTUwPXN0YXRpYyBpbnQgY2hhbmdlX21lbW9yeV9jb21tb24odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsXG4tLVxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTE4MC1cdCAgICAoKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKCh2b2lkICopZW5kKSBcdTAwM2VcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYzoxODE6XHQgICAgICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZyhhcmVhLVx1MDAzZWFkZHIpICYjNDM7IGFyZWEtXHUwMDNlc2l6ZSkgfHxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0xODItXHQgICAgKChhcmVhLVx1MDAzZWZsYWdzIFx1MDAyNiAoVk1fQUxMT0MgfCBWTV9BTExPV19IVUdFX1ZNQVApKSAhPSBWTV9BTExPQykpXG4tLVxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTE5NC1cdFx0dW5zaWduZWQgbG9uZyBpZHggPSAoKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKCh2b2lkICopc3RhcnQpIC1cbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYzoxOTU6XHRcdFx0XHQgICAgICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZyhhcmVhLVx1MDAzZWFkZHIpKVxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTE5Ni1cdFx0XHRcdCAgICBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi0tXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaD0zNDA9c3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2hpZ2hwYWdlX2thc2FuX3RhZ2dlZChzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaC0zNDMtXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaDozNDQ6XHRjbGVhcl9wYWdlKGthc2FuX3Jlc2V0X3RhZyhrYWRkcikpO1xuaW5jbHVkZS9saW51eC9oaWdobWVtLmgtMzQ1LVx0a3VubWFwX2xvY2FsKGthZGRyKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2thc2FuLmg9NTE0PXN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9yZWNvcmRfYXV4X3N0YWNrKHZvaWQgKnB0cikge31cbi0tXG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTE5LVxuaW5jbHVkZS9saW51eC9rYXNhbi5oOjUyMDpzdGF0aWMgaW5saW5lIHZvaWQgKmthc2FuX3Jlc2V0X3RhZyhjb25zdCB2b2lkICphZGRyKVxuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUyMS17XG5pbmNsdWRlL2xpbnV4L2thc2FuLmg6NTIyOlx0cmV0dXJuICh2b2lkICopYXJjaF9rYXNhbl9yZXNldF90YWcoYWRkcik7XG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTIzLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2thc2FuLmg9NTMyPWJvb2wga2FzYW5fcmVwb3J0KGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLFxuLS1cbmluY2x1ZGUvbGludXgva2FzYW4uaC01MzYtXG5pbmNsdWRlL2xpbnV4L2thc2FuLmg6NTM3OnN0YXRpYyBpbmxpbmUgdm9pZCAqa2FzYW5fcmVzZXRfdGFnKGNvbnN0IHZvaWQgKmFkZHIpXG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTM4LXtcbi0tXG5rZXJuZWwvZm9yay5jPTI3NT1zdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaClcbi0tXG5rZXJuZWwvZm9yay5jLTI4Mi1cbmtlcm5lbC9mb3JrLmM6MjgzOlx0dmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpO1xua2VybmVsL2ZvcmsuYy0yODQtfVxuLS1cbmtlcm5lbC9mb3JrLmM9MzMzPXN0YXRpYyBpbnQgYWxsb2NfdGhyZWFkX3N0YWNrX25vZGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBub2RlKVxuLS1cbmtlcm5lbC9mb3JrLmMtMzQ4LVxua2VybmVsL2ZvcmsuYzozNDk6XHRcdHN0YWNrID0ga2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcik7XG5rZXJuZWwvZm9yay5jLTM1MC1cbi0tXG5tbS9rYXNhbi9rYXNhbi5oPTMzMT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgYWRkcl9oYXNfbWV0YWRhdGEoY29uc3Qgdm9pZCAqYWRkcilcbm1tL2thc2FuL2thc2FuLmgtMzMyLXtcbm1tL2thc2FuL2thc2FuLmg6MzMzOlx0cmV0dXJuIChrYXNhbl9yZXNldF90YWcoYWRkcikgXHUwMDNlPVxubW0va2FzYW4va2FzYW4uaC0zMzQtXHRcdGthc2FuX3NoYWRvd190b19tZW0oKHZvaWQgKilLQVNBTl9TSEFET1dfU1RBUlQpKTtcbi0tXG5tbS9rYXNhbi9rYXNhbi5oPTQ3OT1zdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcG9pc29uKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCB1OCB2YWx1ZSwgYm9vbCBpbml0KVxuLS1cbm1tL2thc2FuL2thc2FuLmgtNDg1LVxubW0va2FzYW4va2FzYW4uaDo0ODY6XHRod19zZXRfbWVtX3RhZ19yYW5nZShrYXNhbl9yZXNldF90YWcoYWRkciksIHNpemUsIHZhbHVlLCBpbml0KTtcbm1tL2thc2FuL2thc2FuLmgtNDg3LX1cbi0tXG5tbS9rYXNhbi9rYXNhbi5oPTQ4OT1zdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fdW5wb2lzb24oY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGJvb2wgaW5pdClcbi0tXG5tbS9rYXNhbi9rYXNhbi5oLTQ5Ni1cbm1tL2thc2FuL2thc2FuLmg6NDk3Olx0aHdfc2V0X21lbV90YWdfcmFuZ2Uoa2FzYW5fcmVzZXRfdGFnKGFkZHIpLCBzaXplLCB0YWcsIGluaXQpO1xubW0va2FzYW4va2FzYW4uaC00OTgtfVxuLS1cbm1tL2thc2FuL3JlcG9ydC5jPTQ3MT1zdGF0aWMgdm9pZCBwcmludF9yZXBvcnQoc3RydWN0IGthc2FuX3JlcG9ydF9pbmZvICppbmZvKVxubW0va2FzYW4vcmVwb3J0LmMtNDcyLXtcbm1tL2thc2FuL3JlcG9ydC5jOjQ3MzpcdHZvaWQgKmFkZHIgPSBrYXNhbl9yZXNldF90YWcoKHZvaWQgKilpbmZvLVx1MDAzZWFjY2Vzc19hZGRyKTtcbm1tL2thc2FuL3JlcG9ydC5jLTQ3NC1cdHU4IHRhZyA9IGdldF90YWcoKHZvaWQgKilpbmZvLVx1MDAzZWFjY2Vzc19hZGRyKTtcbi0tXG5tbS9rYXNhbi9yZXBvcnQuYz00ODk9c3RhdGljIHZvaWQgY29tcGxldGVfcmVwb3J0X2luZm8oc3RydWN0IGthc2FuX3JlcG9ydF9pbmZvICppbmZvKVxubW0va2FzYW4vcmVwb3J0LmMtNDkwLXtcbm1tL2thc2FuL3JlcG9ydC5jOjQ5MTpcdHZvaWQgKmFkZHIgPSBrYXNhbl9yZXNldF90YWcoKHZvaWQgKilpbmZvLVx1MDAzZWFjY2Vzc19hZGRyKTtcbm1tL2thc2FuL3JlcG9ydC5jLTQ5Mi1cdHN0cnVjdCBzbGFiICpzbGFiO1xuLS1cbm1tL2thc2FuL3JlcG9ydF9od190YWdzLmM9MTg9Y29uc3Qgdm9pZCAqa2FzYW5fZmluZF9maXJzdF9iYWRfYWRkcihjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9rYXNhbi9yZXBvcnRfaHdfdGFncy5jLTI2LVx0ICovXG5tbS9rYXNhbi9yZXBvcnRfaHdfdGFncy5jOjI3Olx0cmV0dXJuIGthc2FuX3Jlc2V0X3RhZyhhZGRyKTtcbm1tL2thc2FuL3JlcG9ydF9od190YWdzLmMtMjgtfVxuLS1cbm1tL2thc2FuL3JlcG9ydF9zd190YWdzLmM9MzM9Y29uc3Qgdm9pZCAqa2FzYW5fZmluZF9maXJzdF9iYWRfYWRkcihjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9rYXNhbi9yZXBvcnRfc3dfdGFncy5jLTM1LVx0dTggdGFnID0gZ2V0X3RhZyhhZGRyKTtcbm1tL2thc2FuL3JlcG9ydF9zd190YWdzLmM6MzY6XHR2b2lkICpwID0ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xubW0va2FzYW4vcmVwb3J0X3N3X3RhZ3MuYy0zNy1cdHZvaWQgKmVuZCA9IHAgJiM0Mzsgc2l6ZTtcbi0tXG5tbS9rYXNhbi9zaGFkb3cuYz0xMjQ9dm9pZCBrYXNhbl9wb2lzb24oY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIHU4IHZhbHVlLCBib29sIGluaXQpXG4tLVxubW0va2FzYW4vc2hhZG93LmMtMTM1LVx0ICovXG5tbS9rYXNhbi9zaGFkb3cuYzoxMzY6XHRhZGRyID0ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xubW0va2FzYW4vc2hhZG93LmMtMTM3LVxuLS1cbm1tL2thc2FuL3NoYWRvdy5jPTE2Mz12b2lkIGthc2FuX3VucG9pc29uKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBib29sIGluaXQpXG4tLVxubW0va2FzYW4vc2hhZG93LmMtMTcxLVx0ICovXG5tbS9rYXNhbi9zaGFkb3cuYzoxNzI6XHRhZGRyID0ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xubW0va2FzYW4vc2hhZG93LmMtMTczLVxuLS1cbm1tL2thc2FuL3N3X3RhZ3MuYz03NT1ib29sIGthc2FuX2NoZWNrX3JhbmdlKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBib29sIHdyaXRlLFxuLS1cbm1tL2thc2FuL3N3X3RhZ3MuYy0xMDktXG5tbS9rYXNhbi9zd190YWdzLmM6MTEwOlx0dW50YWdnZWRfYWRkciA9IGthc2FuX3Jlc2V0X3RhZygoY29uc3Qgdm9pZCAqKWFkZHIpO1xubW0va2FzYW4vc3dfdGFncy5jLTExMS1cdGlmICh1bmxpa2VseSghYWRkcl9oYXNfbWV0YWRhdGEodW50YWdnZWRfYWRkcikpKVxuLS1cbm1tL2thc2FuL3N3X3RhZ3MuYz0xMjQ9Ym9vbCBrYXNhbl9ieXRlX2FjY2Vzc2libGUoY29uc3Qgdm9pZCAqYWRkcilcbi0tXG5tbS9rYXNhbi9zd190YWdzLmMtMTI2LVx0dTggdGFnID0gZ2V0X3RhZyhhZGRyKTtcbm1tL2thc2FuL3N3X3RhZ3MuYzoxMjc6XHR2b2lkICp1bnRhZ2dlZF9hZGRyID0ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xubW0va2FzYW4vc3dfdGFncy5jLTEyOC1cdHU4IHNoYWRvd19ieXRlO1xuLS1cbm1tL21lbWJsb2NrLmM9ODk3PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZnJlZV9yZXNlcnZlZF9hcmVhKHBoeXNfYWRkcl90IHN0YXJ0LCBwaHlzX2FkZHJfdCBlbmQsXG4tLVxubW0vbWVtYmxvY2suYy05MjEtXHRcdCAqL1xubW0vbWVtYmxvY2suYzo5MjI6XHRcdGRpcmVjdF9tYXBfYWRkciA9IGthc2FuX3Jlc2V0X3RhZyhkaXJlY3RfbWFwX2FkZHIpO1xubW0vbWVtYmxvY2suYy05MjMtXHRcdGlmICgodW5zaWduZWQgaW50KXBvaXNvbiBcdTAwM2M9IDB4RkYpXG4tLVxubW0vcGFnZV9wb2lzb24uYz0yMj1zdGF0aWMgdm9pZCBwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9wYWdlX3BvaXNvbi5jLTI3LVx0a2FzYW5fZGlzYWJsZV9jdXJyZW50KCk7XG5tbS9wYWdlX3BvaXNvbi5jOjI4Olx0bWVtc2V0KGthc2FuX3Jlc2V0X3RhZyhhZGRyKSwgUEFHRV9QT0lTT04sIFBBR0VfU0laRSk7XG5tbS9wYWdlX3BvaXNvbi5jLTI5LVx0a2FzYW5fZW5hYmxlX2N1cnJlbnQoKTtcbi0tXG5tbS9wYWdlX3BvaXNvbi5jPTc2PXN0YXRpYyB2b2lkIHVucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vcGFnZV9wb2lzb24uYy04Ni1cdCAqL1xubW0vcGFnZV9wb2lzb24uYzo4NzpcdGNoZWNrX3BvaXNvbl9tZW0ocGFnZSwga2FzYW5fcmVzZXRfdGFnKGFkZHIpLCBQQUdFX1NJWkUpO1xubW0vcGFnZV9wb2lzb24uYy04OC1cdGthc2FuX2VuYWJsZV9jdXJyZW50KCk7XG4tLVxubW0vc2x1Yi5jPTU2OD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZyZWVwb2ludGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIHZvaWQgKmZwKVxuLS1cbm1tL3NsdWIuYy01NzUtXG5tbS9zbHViLmM6NTc2Olx0ZnJlZXB0cl9hZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKCh2b2lkICopZnJlZXB0cl9hZGRyKTtcbm1tL3NsdWIuYy01NzctXHQqKGZyZWVwdHJfdCAqKWZyZWVwdHJfYWRkciA9IGZyZWVsaXN0X3B0cl9lbmNvZGUocywgZnAsIGZyZWVwdHJfYWRkcik7XG4tLVxubW0vc2x1Yi5jPTEwNDg9c3RhdGljIHZvaWQgcHJpbnRfc2VjdGlvbihjaGFyICpsZXZlbCwgY2hhciAqdGV4dCwgdTggKmFkZHIsXG4tLVxubW0vc2x1Yi5jLTEwNTItXHRwcmludF9oZXhfZHVtcChsZXZlbCwgdGV4dCwgRFVNUF9QUkVGSVhfQUREUkVTUyxcbm1tL3NsdWIuYzoxMDUzOlx0XHRcdDE2LCAxLCBrYXNhbl9yZXNldF90YWcoKHZvaWQgKilhZGRyKSwgbGVuZ3RoLCAxKTtcbm1tL3NsdWIuYy0xMDU0LVx0bWV0YWRhdGFfYWNjZXNzX2Rpc2FibGUoKTtcbi0tXG5tbS9zbHViLmM9MTczNj12b2lkIHNldHVwX3NsYWJfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICphZGRyKVxuLS1cbm1tL3NsdWIuYy0xNzQxLVx0bWV0YWRhdGFfYWNjZXNzX2VuYWJsZSgpO1xubW0vc2x1Yi5jOjE3NDI6XHRtZW1zZXQoa2FzYW5fcmVzZXRfdGFnKGFkZHIpLCBQT0lTT05fSU5VU0UsIHNsYWJfc2l6ZShzbGFiKSk7XG5tbS9zbHViLmMtMTc0My1cdG1ldGFkYXRhX2FjY2Vzc19kaXNhYmxlKCk7XG4tLVxubW0vc2x1Yi5jPTIyODU9c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIyOTQtXHRcdGFkZHIgPSBzbGFiX2FkZHJlc3Moc2xhYikgJiM0Mzsgb2JqX2V4dHNfb2Zmc2V0X2luX3NsYWIocywgc2xhYik7XG5tbS9zbHViLmM6MjI5NTpcdFx0YWRkciA9IGthc2FuX3Jlc2V0X3RhZyhhZGRyKTtcbm1tL3NsdWIuYy0yMjk2LVx0XHRvYmpfZXh0cyA9ICh1bnNpZ25lZCBsb25nKWFkZHI7XG4tLVxubW0vc2x1Yi5jLTIzMTQtXHRcdGZvcl9lYWNoX29iamVjdChhZGRyLCBzLCBzbGFiX2FkZHJlc3Moc2xhYiksIHNsYWItXHUwMDNlb2JqZWN0cylcbm1tL3NsdWIuYzoyMzE1Olx0XHRcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgJiM0Mzsgb2Zmc2V0LCAwLCBzbGFiX29ial9leHRfc2l6ZShzbGFiKSk7XG5tbS9zbHViLmMtMjMxNi1cdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xuLS1cbm1tL3ZtYWxsb2MuYz0xMDk5PXN0YXRpYyBzdHJ1Y3Qgdm1hcF9hcmVhICpfX2ZpbmRfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpXG4tLVxubW0vdm1hbGxvYy5jLTExMDItXG5tbS92bWFsbG9jLmM6MTEwMzpcdGFkZHIgPSAodW5zaWduZWQgbG9uZylrYXNhbl9yZXNldF90YWcoKHZvaWQgKilhZGRyKTtcbm1tL3ZtYWxsb2MuYy0xMTA0LVxuLS1cbm1tL3ZtYWxsb2MuYz0xMTIyPV9fZmluZF92bWFwX2FyZWFfZXhjZWVkX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdClcbi0tXG5tbS92bWFsbG9jLmMtMTEyNi1cbm1tL3ZtYWxsb2MuYzoxMTI3Olx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWFkZHIpO1xubW0vdm1hbGxvYy5jLTExMjgtXG4tLVxubW0vdm1hbGxvYy5jPTQ2OTU9bG9uZyB2cmVhZF9pdGVyKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgY29uc3QgY2hhciAqYWRkciwgc2l6ZV90IGNvdW50KVxuLS1cbm1tL3ZtYWxsb2MuYy00NzAzLVxubW0vdm1hbGxvYy5jOjQ3MDQ6XHRhZGRyID0ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xubW0vdm1hbGxvYy5jLTQ3MDUtXG4tLVxuc2NyaXB0cy9nZGIvbGludXgvbW0ucHk9MzQ9Y2xhc3MgeDg2X3BhZ2Vfb3BzKCk6XG4tLVxuc2NyaXB0cy9nZGIvbGludXgvbW0ucHktOTMtXG5zY3JpcHRzL2dkYi9saW51eC9tbS5weTo5NDogICAgZGVmIGthc2FuX3Jlc2V0X3RhZyhzZWxmLCBhZGRyKTpcbnNjcmlwdHMvZ2RiL2xpbnV4L21tLnB5LTk1LSAgICAgICAgcmV0dXJuIGFkZHJcbi0tXG5zY3JpcHRzL2dkYi9saW51eC9tbS5weT0yMDM9Y2xhc3MgYWFyY2g2NF9wYWdlX29wcygpOlxuLS1cbnNjcmlwdHMvZ2RiL2xpbnV4L21tLnB5LTM1OC1cbnNjcmlwdHMvZ2RiL2xpbnV4L21tLnB5OjM1OTogICAgZGVmIGthc2FuX3Jlc2V0X3RhZyhzZWxmLCBhZGRyKTpcbnNjcmlwdHMvZ2RiL2xpbnV4L21tLnB5LTM2MC0gICAgICAgIGlmIGNvbnN0YW50cy5MWF9DT05GSUdfS0FTQU5fU1dfVEFHUyBvciBjb25zdGFudHMuTFhfQ09ORklHX0tBU0FOX0hXX1RBR1M6XG4tLVxudG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oPTI1PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnZpcnRfdG9fcGFnZSh2b2lkICp2aXJ0KVxuLS1cbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaC0zMy1cbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaDozNDpzdGF0aWMgaW5saW5lIHZvaWQgKmthc2FuX3Jlc2V0X3RhZyhjb25zdCB2b2lkICphZGRyKVxudG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oLTM1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLQVNBTiBSZXNldCBUYWcgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIEtBU0FOIGFnYWluLCBzcGVjaWZpY2FsbHkgdGhlIHRhZyByZXNldCBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIHN0YXJ0aW5nIGJ5IGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBuYW1lbHkgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va2FzYW4uaGAgYW5kIGBpbmNsdWRlL2xpbnV4L2thc2FuLmhgLiBUaGUgY29yZSBxdWVzdGlvbiBvbiBteSBtaW5kIGlzLCB3aGF0IGV4YWN0bHkgZG9lcyBga2FzYW5fcmVzZXRfdGFnYCAqZG8qPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgS0FTQU4gZnJhbWV3b3JrLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgaW5jbHVkZS9saW51eC9rYXNhbi5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA1MTUtNTQ1LCBhcyB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IGFyZWEgd2hlcmUgdGhlIGRlZmluaXRpb24gYW5kIHJlbGV2YW50IHVzYWdlIGFyZSBkZXNjcmliZWQuIEZyb20gaGVyZSBJIGhvcGUgdG8gdW5kZXJzdGFuZCB0aGUgcHJhY3RpY2FsIGFzcGVjdHMgb2YgaG93IHRoZSB0YWcgaXMgcmVzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rYXNhbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTU6XHRcbiA1MTY6XHQjZW5kaWYgLyogQ09ORklHX0tBU0FOX0dFTkVSSUMgKi9cbiA1MTc6XHRcbiA1MTg6XHQjaWYgZGVmaW5lZChDT05GSUdfS0FTQU5fU1dfVEFHUykgfHwgZGVmaW5lZChDT05GSUdfS0FTQU5fSFdfVEFHUylcbiA1MTk6XHRcbiA1MjA6XHRzdGF0aWMgaW5saW5lIHZvaWQgKmthc2FuX3Jlc2V0X3RhZyhjb25zdCB2b2lkICphZGRyKVxuIDUyMTpcdHtcbiA1MjI6XHRcdHJldHVybiAodm9pZCAqKWFyY2hfa2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xuIDUyMzpcdH1cbiA1MjQ6XHRcbiA1MjU6XHQvKipcbiA1MjY6XHQgKiBrYXNhbl9yZXBvcnQgLSBwcmludCBhIHJlcG9ydCBhYm91dCBhIGJhZCBtZW1vcnkgYWNjZXNzIGRldGVjdGVkIGJ5IEtBU0FOXG4gNTI3Olx0ICogQGFkZHI6IGFkZHJlc3Mgb2YgdGhlIGJhZCBhY2Nlc3NcbiA1Mjg6XHQgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYmFkIGFjY2Vzc1xuIDUyOTpcdCAqIEBpc193cml0ZTogd2hldGhlciB0aGUgYmFkIGFjY2VzcyBpcyBhIHdyaXRlIG9yIGEgcmVhZFxuIDUzMDpcdCAqIEBpcDogaW5zdHJ1Y3Rpb24gcG9pbnRlciBmb3IgdGhlIGFjY2Vzc2liaWxpdHkgY2hlY2sgb3IgdGhlIGJhZCBhY2Nlc3MgaXRzZWxmXG4gNTMxOlx0ICovXG4gNTMyOlx0Ym9vbCBrYXNhbl9yZXBvcnQoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsXG4gNTMzOlx0XHRcdGJvb2wgaXNfd3JpdGUsIHVuc2lnbmVkIGxvbmcgaXApO1xuIDUzNDpcdFxuIDUzNTpcdCNlbHNlIC8qIENPTkZJR19LQVNBTl9TV19UQUdTIHx8IENPTkZJR19LQVNBTl9IV19UQUdTICovXG4gNTM2Olx0XG4gNTM3Olx0c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcbiA1Mzg6XHR7XG4gNTM5Olx0XHRyZXR1cm4gKHZvaWQgKilhZGRyO1xuIDU0MDpcdH1cbiA1NDE6XHRcbiA1NDI6XHQjZW5kaWYgLyogQ09ORklHX0tBU0FOX1NXX1RBR1MgfHwgQ09ORklHX0tBU0FOX0hXX1RBR1MqL1xuIDU0MzpcdFxuIDU0NDpcdCNpZmRlZiBDT05GSUdfS0FTQU5fSFdfVEFHU1xuIDU0NTpcdFxuIDU0NjpcdHZvaWQga2FzYW5fcmVwb3J0X2FzeW5jKHZvaWQpO1xuIDU0NzpcdFxuIDU0ODpcdCNlbmRpZiAvKiBDT05GSUdfS0FTQU5fSFdfVEFHUyAqL1xuIDU0OTpcdFxuIDU1MDpcdCNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xuIDU1MTpcdHZvaWQgX19pbml0IGthc2FuX2luaXRfZ2VuZXJpYyh2b2lkKTtcbiA1NTI6XHQjZWxzZVxuIDU1MzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9pbml0X2dlbmVyaWModm9pZCkgeyB9XG4gNTU0Olx0I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjA3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS0FTQU4gUmVzZXQgVGFnIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgc2VlIGBrYXNhbl9yZXNldF90YWcoYWRkcilgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJZiBlaXRoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUgS0FTQU4gdGFncyBhcmUgZW5hYmxlZCwgaXQmIzM5O3MgZ29pbmcgdG8gY2FsbCBgYXJjaF9rYXNhbl9yZXNldF90YWcoYWRkcilgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGlzIGlzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFydCwgc28gdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBpcyBsaWtlbHkgZ29pbmcgdG8gcmVzaWRlLiBCdXQgaWYgdGhvc2UgS0FTQU4gb3B0aW9ucyAqYXJlbiYjMzk7dCogZW5hYmxlZCwgdGhlbiB3ZSBqdXN0IGhhdmUgYSBzaW1wbGUgaW5saW5lIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgb3JpZ2luYWwgYWRkcmVzcywgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBuby1vcCwgcGFzc2luZyB0aGUgYWRkcmVzcyB0aHJvdWdoLiBNYWtlcyBzZW5zZSBmb3Igd2hlbiBLQVNBTiBpc24mIzM5O3QgaW4gdXNlLgoKQnV0Li4uIGhhbmcgb24uIFdlIG5lZWQgdG8gY29uc2lkZXIgb3VyIHRhcmdldCBhcmNoaXRlY3R1cmUsIGRvbiYjMzk7dCB3ZT8gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgb24gYW1kNjQuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBDYW4gYW1kNjQgZXZlbiBzdXBwb3J0IGVpdGhlciBgQ09ORklHX0tBU0FOX1NXX1RBR1NgIG9yIGBDT05GSUdfS0FTQU5fSFdfVEFHU2A/IEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGFueXRoaW5nIGhlcmUuIFRoZSBLY29uZmlnIGZpbGVzIHdpbGwgaGF2ZSB0aGUgYW5zd2VycyBmb3Igd2hhdCBpcyBwb3NzaWJsZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFsbG93ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLQVNBTl9TV19UQUdTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmthc2FuPTg5PWNvbmZpZyBLQVNBTl9HRU5FUklDXG4tLVxubGliL0tjb25maWcua2FzYW4tMTAzLVxubGliL0tjb25maWcua2FzYW46MTA0OmNvbmZpZyBLQVNBTl9TV19UQUdTXG5saWIvS2NvbmZpZy5rYXNhbi0xMDUtXHRib29sIFwmIzM0O1NvZnR3YXJlIFRhZy1CYXNlZCBLQVNBTlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE0MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgS2NvbmZpZy5rYXNhbiBGaWxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IHRoZSBLQVNBTiBjb25maWd1cmF0aW9uLCBzbyBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGxpYi9LY29uZmlnLmthc2FuYC4gSSBmaWd1cmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIHNob3VsZCBiZSBzb21ld2hlcmUgYXJvdW5kIGxpbmUgMTAwIHRvIDEzMC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3RhcnRzIHRvIGFwcGVhciBpbiB0aGVzZSBmaWxlcy4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gaG9sZHMgdGhlIGtleSB0byB0aGUgc3BlY2lmaWMgZGV0YWlscyBJJiMzOTttIGFmdGVyLCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgYW5kIGFueSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoYXQgcmFuZ2UuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmthc2FuJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdCAgQ29uc3VtZXMgYWJvdXQgMS84dGggb2YgYXZhaWxhYmxlIG1lbW9yeSBhdCBrZXJuZWwgc3RhcnQgYW5kIGFkZHMgYW5cbiAxMDE6XHRcdCAgb3ZlcmhlYWQgb2YgfjUwJSBmb3IgZHluYW1pYyBhbGxvY2F0aW9ucy5cbiAxMDI6XHRcdCAgVGhlIHBlcmZvcm1hbmNlIHNsb3dkb3duIGlzIH54My5cbiAxMDM6XHRcbiAxMDQ6XHRjb25maWcgS0FTQU5fU1dfVEFHU1xuIDEwNTpcdFx0Ym9vbCBcJiMzNDtTb2Z0d2FyZSBUYWctQmFzZWQgS0FTQU5cJiMzNDtcbiAxMDY6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX0tBU0FOX1NXX1RBR1MgXHUwMDI2XHUwMDI2IENDX0hBU19LQVNBTl9TV19UQUdTXG4gMTA3Olx0XHRkZXBlbmRzIG9uIENDX0hBU19XT1JLSU5HX05PU0FOSVRJWkVfQUREUkVTU1xuIDEwODpcdFx0c2VsZWN0IFNMVUJfREVCVUdcbiAxMDk6XHRcdHNlbGVjdCBDT05TVFJVQ1RPUlNcbiAxMTA6XHRcdGhlbHBcbiAxMTE6XHRcdCAgRW5hYmxlcyBTb2Z0d2FyZSBUYWctQmFzZWQgS0FTQU4uXG4gMTEyOlx0XG4gMTEzOlx0XHQgIFJlcXVpcmVzIEdDQyAxMSYjNDM7IG9yIENsYW5nLlxuIDExNDpcdFxuIDExNTpcdFx0ICBTdXBwb3J0ZWQgb25seSBvbiBhcm02NCBDUFVzIGFuZCByZWxpZXMgb24gVG9wIEJ5dGUgSWdub3JlLlxuIDExNjpcdFxuIDExNzpcdFx0ICBDb25zdW1lcyBhYm91dCAxLzE2dGggb2YgYXZhaWxhYmxlIG1lbW9yeSBhdCBrZXJuZWwgc3RhcnQgYW5kXG4gMTE4Olx0XHQgIGFkZCBhbiBvdmVyaGVhZCBvZiB+MjAlIGZvciBkeW5hbWljIGFsbG9jYXRpb25zLlxuIDExOTpcdFxuIDEyMDpcdFx0ICBNYXkgcG90ZW50aWFsbHkgaW50cm9kdWNlIHByb2JsZW1zIHJlbGF0ZWQgdG8gcG9pbnRlciBjYXN0aW5nIGFuZFxuIDEyMTpcdFx0ICBjb21wYXJpc29uLCBhcyBpdCBlbWJlZHMgYSB0YWcgaW50byB0aGUgdG9wIGJ5dGUgb2YgZWFjaCBwb2ludGVyLlxuIDEyMjpcdFxuIDEyMzpcdGNvbmZpZyBLQVNBTl9IV19UQUdTXG4gMTI0Olx0XHRib29sIFwmIzM0O0hhcmR3YXJlIFRhZy1CYXNlZCBLQVNBTlwmIzM0O1xuIDEyNTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfS0FTQU5fSFdfVEFHU1xuIDEyNjpcdFx0aGVscFxuIDEyNzpcdFx0ICBFbmFibGVzIEhhcmR3YXJlIFRhZy1CYXNlZCBLQVNBTi5cbiAxMjg6XHRcbiAxMjk6XHRcdCAgUmVxdWlyZXMgR0NDIDEwJiM0Mzsgb3IgQ2xhbmcgMTImIzQzOy5cbiAxMzA6XHRcbiAxMzE6XHRcdCAgU3VwcG9ydGVkIG9ubHkgb24gYXJtNjQgQ1BVcyBzdGFydGluZyBmcm9tIEFSTXY4LjUgYW5kIHJlbGllcyBvblxuIDEzMjpcdFx0ICBNZW1vcnkgVGFnZ2luZyBFeHRlbnNpb24gYW5kIFRvcCBCeXRlIElnbm9yZS5cbiAxMzM6XHRcbiAxMzQ6XHRcdCAgQ29uc3VtZXMgYWJvdXQgMS8zMm5kIG9mIGF2YWlsYWJsZSBtZW1vcnkuXG4gMTM1Olx0XG4gMTM2Olx0XHQgIE1heSBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgcHJvYmxlbXMgcmVsYXRlZCB0byBwb2ludGVyIGNhc3RpbmcgYW5kXG4gMTM3Olx0XHQgIGNvbXBhcmlzb24sIGFzIGl0IGVtYmVkcyBhIHRhZyBpbnRvIHRoZSB0b3AgYnl0ZSBvZiBlYWNoIHBvaW50ZXIuXG4gMTM4Olx0XG4gMTM5Olx0ZW5kY2hvaWNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTc5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQWRkcmVzc1Nhbml0aXplciAoS0FTQU4pIFRhZ2dpbmcgRmVhdHVyZSBBc3Nlc3NtZW50KioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIG1lbW9yeSBzYWZldHkgd29yaywgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBsYXkgb2YgdGhlIGxhbmQgcmVnYXJkaW5nIEtBU0FOIHRhZ2dpbmcgc3VwcG9ydCBvbiB0aGlzIGFyY2hpdGVjdHVyZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGFyZSB3ZSBkZWFsaW5nIHdpdGggYSBzb2Z0d2FyZS1iYXNlZCBvciBoYXJkd2FyZS1iYXNlZCB0YWdnaW5nIGltcGxlbWVudGF0aW9uPyBUaGUgZmlyc3QgdGhpbmcgdG8gY29uZmlybSBpcyB3aGV0aGVyIHRoZSBhcmNoaXRlY3R1cmUgZXZlbiAqZGVmaW5lcyogYEhBVkVfQVJDSF9LQVNBTl9TV19UQUdTYCBhbmQgYEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTYC4gVW5kZXJzdGFuZGluZyB3aGljaCB0YWdnaW5nIG1vZGUgaXMgYXZhaWxhYmxlIGlzIGFic29sdXRlbHkgY3JpdGljYWwuIEl0IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgcGVyZm9ybWFuY2UgcHJvZmlsZSBhbmQsIGZyYW5rbHksIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBhcHByb2FjaC4gU29mdHdhcmUtYmFzZWQgdGFnZ2luZyBpcyBvYnZpb3VzbHkgbGVzcyBwZXJmb3JtYW50IGJ1dCBtYXkgYmUgdGhlIG9ubHkgb3B0aW9uIGluIHNvbWUgY2FzZXMuIEhhcmR3YXJlLWJhc2VkLCBvbiB0aGUgb3RoZXIgaGFuZCwgKmNvdWxkKiBicmluZyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgYnkgb2ZmbG9hZGluZyB0aGUgdGFnZ2luZyB3b3JrIHRvIHNwZWNpYWxpemVkIGhhcmR3YXJlLCBpZiBzdXBwb3J0ZWQsIG9mIGNvdXJzZS4gU28sIGxldOKAmXMgc2VlIHdoYXQgd2UmIzM5O3JlIGFjdHVhbGx5IHdvcmtpbmcgd2l0aCBmaXJzdC4gRGV0ZXJtaW5pbmcgdGhlIHByZXNlbmNlIGFuZCBtZWFuaW5nIG9mIHRob3NlIHR3byBLY29uZmlnIHN5bWJvbHMgaXMgdGhlIGtleSBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIQVZFX0FSQ0hfS0FTQU4uKlRBR1MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE2MC1cdHNlbGVjdCBIQVZFX0FSQ0hfS0FTQU5fVk1BTExPQ1xuYXJjaC9hcm02NC9LY29uZmlnOjE2MTpcdHNlbGVjdCBIQVZFX0FSQ0hfS0FTQU5fU1dfVEFHU1xuYXJjaC9hcm02NC9LY29uZmlnOjE2MjpcdHNlbGVjdCBIQVZFX0FSQ0hfS0FTQU5fSFdfVEFHUyBpZiBBUk02NF9NVEVcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjMtXHQjIFNvbWUgaW5zdHJ1bWVudGF0aW9uIG1heSBiZSB1bnNvdW5kLCBoZW5jZSBFWFBFUlRcbi0tXG5saWIvS2NvbmZpZy5rYXNhbj00PWNvbmZpZyBIQVZFX0FSQ0hfS0FTQU5cbi0tXG5saWIvS2NvbmZpZy5rYXNhbi02LVxubGliL0tjb25maWcua2FzYW46Nzpjb25maWcgSEFWRV9BUkNIX0tBU0FOX1NXX1RBR1NcbmxpYi9LY29uZmlnLmthc2FuLTgtXHRib29sXG5saWIvS2NvbmZpZy5rYXNhbi05LVxubGliL0tjb25maWcua2FzYW46MTA6Y29uZmlnIEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTXG5saWIvS2NvbmZpZy5rYXNhbi0xMS1cdGJvb2xcbi0tXG5saWIvS2NvbmZpZy5rYXNhbj00Nj1tZW51Y29uZmlnIEtBU0FOXG4tLVxubGliL0tjb25maWcua2FzYW4tNDgtXHRkZXBlbmRzIG9uICgoKEhBVkVfQVJDSF9LQVNBTiBcdTAwMjZcdTAwMjYgQ0NfSEFTX0tBU0FOX0dFTkVSSUMpIHx8IFxcXG5saWIvS2NvbmZpZy5rYXNhbjo0OTpcdFx0ICAgICAoSEFWRV9BUkNIX0tBU0FOX1NXX1RBR1MgXHUwMDI2XHUwMDI2IENDX0hBU19LQVNBTl9TV19UQUdTKSkgXHUwMDI2XHUwMDI2IFxcXG5saWIvS2NvbmZpZy5rYXNhbi01MC1cdFx0ICAgIENDX0hBU19XT1JLSU5HX05PU0FOSVRJWkVfQUREUkVTUykgfHwgXFxcbmxpYi9LY29uZmlnLmthc2FuOjUxOlx0XHQgICBIQVZFX0FSQ0hfS0FTQU5fSFdfVEFHU1xubGliL0tjb25maWcua2FzYW4tNTItXHRkZXBlbmRzIG9uIFNZU0ZTIFx1MDAyNlx1MDAyNiAhU0xVQl9USU5ZXG4tLVxubGliL0tjb25maWcua2FzYW49MTA0PWNvbmZpZyBLQVNBTl9TV19UQUdTXG5saWIvS2NvbmZpZy5rYXNhbi0xMDUtXHRib29sIFwmIzM0O1NvZnR3YXJlIFRhZy1CYXNlZCBLQVNBTlwmIzM0O1xubGliL0tjb25maWcua2FzYW46MTA2Olx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfS0FTQU5fU1dfVEFHUyBcdTAwMjZcdTAwMjYgQ0NfSEFTX0tBU0FOX1NXX1RBR1NcbmxpYi9LY29uZmlnLmthc2FuLTEwNy1cdGRlcGVuZHMgb24gQ0NfSEFTX1dPUktJTkdfTk9TQU5JVElaRV9BRERSRVNTXG4tLVxubGliL0tjb25maWcua2FzYW49MTIzPWNvbmZpZyBLQVNBTl9IV19UQUdTXG5saWIvS2NvbmZpZy5rYXNhbi0xMjQtXHRib29sIFwmIzM0O0hhcmR3YXJlIFRhZy1CYXNlZCBLQVNBTlwmIzM0O1xubGliL0tjb25maWcua2FzYW46MTI1Olx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfS0FTQU5fSFdfVEFHU1xubGliL0tjb25maWcua2FzYW4tMTI2LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk0MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIEtBU0FOIFRhZyBTZWxlY3Rpb24gb24geDg2L2FtZDY0KioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgS0FTQU4gb3B0aW9uczogYEhBVkVfQVJDSF9LQVNBTl9TV19UQUdTYCBhbmQgYEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTYC4gVGhlIHRleHQgKnNheXMqIHRoZXkmIzM5O3JlIE9OTFkgZm9yIEFSTTY0LCB3aGljaCByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoaXMsIGJlY2F1c2UgdGhpcyBjb3VsZCBhZmZlY3QgdGhpbmdzIGluIG15IHg4Ni9hbWQ2NCB3b3JrLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHNvbGlkLCBzbyBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGNvcnJlY3QuIEnigJlsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgdmVyaWZ5aW5nIHdoZXRoZXIgeDg2IHNlbGVjdHMgZWl0aGVyIG9mIHRob3NlIEtBU0FOIG9wdGlvbnMuIEkgbmVlZCB0byBzZWUgaWYgdGhlIHg4NiBhcmNoaXRlY3R1cmUgZXhwbGljaXRseSBpbmNsdWRlcyBvciBleGNsdWRlcyB0aGVzZSBmZWF0dXJlcy4gQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUgYW5kIHNlZSB3aGF0IGl0IGhhcyB0byBzYXkuIE5vIGFzc3VtcHRpb25zLCBqdXN0IGNvbmNyZXRlIGV2aWRlbmNlLCB0aGF0JiMzOTtzIHRoZSBvbmx5IHdheSB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9BUkNIX0tBU0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xOTgtXHRzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUxfUkVMQVRJVkVcbmFyY2gveDg2L0tjb25maWc6MTk5Olx0c2VsZWN0IEhBVkVfQVJDSF9LQVNBTlx0XHRcdGlmIFg4Nl82NFxuYXJjaC94ODYvS2NvbmZpZzoyMDA6XHRzZWxlY3QgSEFWRV9BUkNIX0tBU0FOX1ZNQUxMT0NcdFx0aWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnLTIwMS1cdHNlbGVjdCBIQVZFX0FSQ0hfS0ZFTkNFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDAzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtBU0FOIEltcGFjdCBvbiBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCBvbiB4ODZfNjQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBjaGFuZ2UgYW5kIHRyeWluZyB0byBhc3Nlc3MgaXRzIGltcGFjdCwgc3BlY2lmaWNhbGx5IG9uIHg4Nl82NCAoYW1kNjQpLiBJdCBhcHBlYXJzIHRoZSBjaGFuZ2UgaW52b2x2ZXMgd3JhcHBpbmcgYHZtX2FyZWEtJmd0O2FkZHJgIHdpdGggYGthc2FuX3Jlc2V0X3RhZ2AgYmVmb3JlIHBhc3NpbmcgaXQgdG8gYHZmcmVlYC4gVGhlIGluaXRpYWwgYXNzdW1wdGlvbiwgYmFzZWQgb24gdGhlIGB4ODZfNjRgIGNvbmZpZ3VyYXRpb24gb25seSBlbmFibGluZyBgSEFWRV9BUkNIX0tBU0FOYCBhbmQgYEhBVkVfQVJDSF9LQVNBTl9WTUFMTE9DYCwgaXMgdGhhdCBuZWl0aGVyIGBDT05GSUdfS0FTQU5fU1dfVEFHU2Agbm9yIGBDT05GSUdfS0FTQU5fSFdfVEFHU2AgYXJlIGVuYWJsZWQuIFRoaXMgbWVhbnMgb24gYW1kNjQsIHRoZSBga2FzYW5fcmVzZXRfdGFnYCBmdW5jdGlvbiBlZmZlY3RpdmVseSBiZWNvbWVzIGEgbm8tb3A6IGBrYXNhbl9yZXNldF90YWcoeClgIHNpbXBseSBldmFsdWF0ZXMgdG8gYCh2b2lkICopeGAuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgdGhvdWdoLgoKQ2hlY2tpbmcgYGluY2x1ZGUvbGludXgva2FzYW4uaGAgY29uZmlybXMgdGhhdCBpZiBuZWl0aGVyIGBDT05GSUdfS0FTQU5fU1dfVEFHU2Agbm9yIGBDT05GSUdfS0FTQU5fSFdfVEFHU2AgYXJlIGRlZmluZWQsIHRoZW4gYGthc2FuX3Jlc2V0X3RhZ2AgaXMgZGVmaW5lZCBhcyBhIGNhc3QuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBgYXJjaF9rYXNhbl9yZXNldF90YWdgIGlzbiYjMzk7dCB1c2VkLiBPbiB4ODYsIHRoZXJlIGlzIG5vIGBhcmNoX2thc2FuX3Jlc2V0X3RhZ2AsIHNpbmNlIHRhZy1iYXNlZCBLQVNBTiBpcyBhbiBBUk02NC1zcGVjaWZpYyBmZWF0dXJlIChNVEUvVEJJKS4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGRvZXMgdGhpcyBjaGFuZ2Ugd2FycmFudCBhIGZ1enppbmcgcGFzcz8gVGhlIHJ1bGVzIHN0YXRlICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllcyYjMzQ7LiBPbmUgcG90ZW50aWFsIGNhdGVnb3J5IGlzICYjMzQ7Q29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlJiMzNDsuIElzIHRoaXMgcmVsZXZhbnQ/CgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGUgYWZmZWN0ZWQgY29kZSBwYXRoLCBzcGVjaWZpY2FsbHkgYHRocmVhZF9zdGFja19mcmVlX3JjdWAgd2l0aGluIGBrZXJuZWwvZm9yay5jYCwgaXMgY29tcGlsZWQgb24gYW1kNjQuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBpdCBpcy4gVGhlbiB0aGUgY2hhbmdlICptdXN0KiBhbHRlciBsb2dpYyBmb3IgYW1kNjQuCgpPa2F5LCBsZXQmIzM5O3MgdHJhY2UgdGhlIGZsb3cuIEJlZm9yZSwgdGhlIGNvZGUgd2FzIGB2ZnJlZSh2bV9hcmVhLSZndDthZGRyKTtgIEFmdGVyIHRoZSBwYXRjaCwgaXQgYmVjb21lcyBgdmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtJmd0O2FkZHIpKTtgLiBCZWNhdXNlIG9uIGFtZDY0LCBga2FzYW5fcmVzZXRfdGFnKHgpYCBldmFsdWF0ZXMgdG8gYCh2b2lkICopeGAsIHRoZSBuZXQgZWZmZWN0IG9uIGFtZDY0IGFwcGVhcnMgdG8gYmUgbm8gY2hhbmdlOiBgdmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtJmd0O2FkZHIpKWAgYmVjb21lcyBgdmZyZWUodm1fYXJlYS0mZ3Q7YWRkcilgLgoKTGV0IG1lIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIHR5cGUgb2YgYHZtX2FyZWFgIGlzIGBzdHJ1Y3Qgdm1fc3RydWN0ICpgIGFuZCB0aGUgdHlwZSBvZiBgdm1fYXJlYS0mZ3Q7YWRkcmAgaXMgYHZvaWQgKmAuIFNvLCBga2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtJmd0O2FkZHIpYCByZXR1cm5zIGAodm9pZCAqKSh2bV9hcmVhLSZndDthZGRyKWAuIFRoZXJlZm9yZSwgYHZmcmVlKGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLSZndDthZGRyKSlgIGlzLCBhbmQgSSByZXBlYXQsIGlzIGxpdGVyYWxseSBgdmZyZWUodm1fYXJlYS0mZ3Q7YWRkcilgLgoKSSBzaG91bGQgYWxzbyBleGFtaW5lIHdoYXQgaGFwcGVuZWQgaW4gYXJtNjQgdmVyc3VzIGFtZDY0LCBhbmQgd2hhdCB0aGUgb3JpZ2luYWwgYnVnIHRoYXQgcHJvbXB0ZWQgdGhlIGNoYW5nZSB3YXMuIEkgbmVlZCB0byBiZSBzdXJlLiBIb3dldmVyLCB0aGUgbG9naWMgY2xlYXJseSBkb2VzIG5vdCBjaGFuZ2UgY29tcGlsZWQgb3V0cHV0IGZvciBhbWQ2NC4gTG9va2luZyBhdCBsaW5lIDM0OSBvZiBga2VybmVsL2ZvcmsuY2AsIEkgc2VlIGEgdXNlIG9mIGBrYXNhbl9yZXNldF90YWdgIHRoYXQmIzM5O3MgbGlrZWx5IHRoZSBmb2N1cyBvZiB0aGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMDpcdFx0cmV0dXJuIHJldDtcbiAzMzE6XHR9XG4gMzMyOlx0XG4gMzMzOlx0c3RhdGljIGludCBhbGxvY190aHJlYWRfc3RhY2tfbm9kZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IG5vZGUpXG4gMzM0Olx0e1xuIDMzNTpcdFx0c3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYTtcbiAzMzY6XHRcdHZvaWQgKnN0YWNrO1xuIDMzNzpcdFxuIDMzODpcdFx0dm1fYXJlYSA9IGFsbG9jX3RocmVhZF9zdGFja19ub2RlX2Zyb21fY2FjaGUodHNrLCBub2RlKTtcbiAzMzk6XHRcdGlmICh2bV9hcmVhKSB7XG4gMzQwOlx0XHRcdGlmIChtZW1jZ19jaGFyZ2Vfa2VybmVsX3N0YWNrKHZtX2FyZWEpKSB7XG4gMzQxOlx0XHRcdFx0dmZyZWUodm1fYXJlYS1cdTAwM2VhZGRyKTtcbiAzNDI6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzNDM6XHRcdFx0fVxuIDM0NDpcdFxuIDM0NTpcdFx0XHQvKiBSZXNldCBzdGFjayBtZXRhZGF0YS4gKi9cbiAzNDY6XHRcdFx0aWYgKCFrYXNhbl9od190YWdzX2VuYWJsZWQoKSlcbiAzNDc6XHRcdFx0XHRrYXNhbl91bnBvaXNvbl9yYW5nZSh2bV9hcmVhLVx1MDAzZWFkZHIsIFRIUkVBRF9TSVpFKTtcbiAzNDg6XHRcbiAzNDk6XHRcdFx0c3RhY2sgPSBrYXNhbl9yZXNldF90YWcodm1fYXJlYS1cdTAwM2VhZGRyKTtcbiAzNTA6XHRcbiAzNTE6XHRcdFx0LyogQ2xlYXIgc3RhbGUgcG9pbnRlcnMgZnJvbSByZXVzZWQgc3RhY2suICovXG4gMzUyOlx0XHRcdGNsZWFyX3BhZ2VzKHZtX2FyZWEtXHUwMDNlYWRkciwgdm1fYXJlYS1cdTAwM2Vucl9wYWdlcyk7XG4gMzUzOlx0XG4gMzU0Olx0XHRcdHRzay1cdTAwM2VzdGFja192bV9hcmVhID0gdm1fYXJlYTtcbiAzNTU6XHRcdFx0dHNrLVx1MDAzZXN0YWNrID0gc3RhY2s7XG4gMzU2Olx0XHRcdHJldHVybiAwO1xuIDM1NzpcdFx0fVxuIDM1ODpcdFxuIDM1OTpcdFx0c3RhY2sgPSBfX3ZtYWxsb2Nfbm9kZShUSFJFQURfU0laRSwgVEhSRUFEX0FMSUdOLFxuIDM2MDpcdFx0XHRcdFx0ICAgICBHRlBfVk1BUF9TVEFDSyxcbiAzNjE6XHRcdFx0XHRcdCAgICAgbm9kZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiAzNjI6XHRcdGlmICghc3RhY2spXG4gMzYzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM2NDpcdFxuIDM2NTpcdFx0dm1fYXJlYSA9IGZpbmRfdm1fYXJlYShzdGFjayk7XG4gMzY2Olx0XHRpZiAobWVtY2dfY2hhcmdlX2tlcm5lbF9zdGFjayh2bV9hcmVhKSkge1xuIDM2NzpcdFx0XHR2ZnJlZShzdGFjayk7XG4gMzY4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM2OTpcdFx0fVxuIDM3MDpcdFx0LypcbiAzNzE6XHRcdCAqIFdlIGNhbiYjMzk7dCBjYWxsIGZpbmRfdm1fYXJlYSgpIGluIGludGVycnVwdCBjb250ZXh0LCBhbmRcbiAzNzI6XHRcdCAqIGZyZWVfdGhyZWFkX3N0YWNrKCkgY2FuIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCxcbiAzNzM6XHRcdCAqIHNvIGNhY2hlIHRoZSB2bV9zdHJ1Y3QuXG4gMzc0Olx0XHQgKi9cbiAzNzU6XHRcdHRzay1cdTAwM2VzdGFja192bV9hcmVhID0gdm1fYXJlYTtcbiAzNzY6XHRcdHN0YWNrID0ga2FzYW5fcmVzZXRfdGFnKHN0YWNrKTtcbiAzNzc6XHRcdHRzay1cdTAwM2VzdGFjayA9IHN0YWNrO1xuIDM3ODpcdFx0cmV0dXJuIDA7XG4gMzc5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA4NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgTXlzdGVyeSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBMaW5lIDIxMCBvZiBga2VybmVsL2ZvcmsuY2DigKYgbGV0JiMzOTtzIHNlZSwgdGhlcmUmIzM5O3MgdGhpcyBgc3RydWN0IHZtX3N0YWNrYCBkZWZpbmVkLiBJdCYjMzk7cyBnb3QgYW4gYHJjdV9oZWFkYCBhbmQgYSBgdm1fc3RydWN0YCBwb2ludGVyLiBJbnRlcmVzdGluZy4gTm93LCBsb29raW5nIGZ1cnRoZXIgZG93biwgYXQgYGZyZWVfdm1fc3RhY2tfY2FjaGVgIChsaW5lIDI5NCkgYW5kIGB0aHJlYWRfc3RhY2tfZnJlZV9yY3VgLCBzb21ldGhpbmcmIzM5O3Mgbm90IHF1aXRlIGNsaWNraW5nLiBXaHkgaXMgdGhlcmUgYSBgdmZyZWUodm1fYXJlYS0mZ3Q7YWRkcik7YCBjYWxsIGluIGBmcmVlX3ZtX3N0YWNrX2NhY2hlYD8gVGhhdCYjMzk7cyB0aGUga2V5LgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhpc3Rvcnkgb2YgdGhpcy4gV2FzIHRoaXMgaW50cm9kdWNlZCBpbiBhIHNwZWNpZmljIGNvbW1pdCBvciBpcyB0aGVyZSBhIHBhdGNoIHJlbGF0ZWQgdG8gdGhpcz8gSSB3aXNoIEkgaGFkIGBnaXQgbG9nYCB0byBjaGVjayB0aGF0IGRpcmVjdGx5LiBObyB3b3JyaWVzLiBJIGNhbiBzZWFyY2ggdGhlIGtlcm5lbCBjb2RlIGZvciB0aGUgcGF0Y2ggdGl0bGUgb3IgcmVsYXRlZCBjb21taXRzLCBpZiBJIGNhbiBmaW5kIHRoZW0uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmVmb2N1cy4gTGV0JiMzOTtzIHNlYXJjaCBhZ2FpbiBmb3IgYHZtX3N0YWNrYCBpbiBga2VybmVsL2ZvcmsuY2AgYW5kIHRyeSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGlzIGhhbmRsZWQuIExldCYjMzk7cyBsb29rIGF0IGBmcmVlX3ZtX3N0YWNrX2NhY2hlYCAobGluZXMgMjk0LTMxMCkuIE9rYXksIGhlcmUgaXQgaXM6IFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCBhIHBlci1DUFUgY2FjaGUgb2YgYHZtX3N0cnVjdGAgcG9pbnRlcnMgYW5kIGNhbGxzIGB2ZnJlZWAgb24gdGhlIGFzc29jaWF0ZWQgYWRkcmVzcyBpZiB0aGUgYHZtX2FyZWFgIGlzIG5vdCBudWxsLCBhbmQgdGhlbiBzZXRzIHRoZSBwb2ludGVyIHRvIG51bGwuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIGBmcmVlX3RocmVhZF9zdGFja2AsIGxpbmVzIDQzMC00OTAuLi5MZXQmIzM5O3MgcmVhZCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQzMDpcdHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdGhyZWFkX3N0YWNrX2NhY2hlO1xuIDQzMTpcdFxuIDQzMjpcdHN0YXRpYyB2b2lkIHRocmVhZF9zdGFja19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJoKVxuIDQzMzpcdHtcbiA0MzQ6XHRcdGttZW1fY2FjaGVfZnJlZSh0aHJlYWRfc3RhY2tfY2FjaGUsIHJoKTtcbiA0MzU6XHR9XG4gNDM2Olx0XG4gNDM3Olx0c3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX2RlbGF5ZWRfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiA0Mzg6XHR7XG4gNDM5Olx0XHRzdHJ1Y3QgcmN1X2hlYWQgKnJoID0gdHNrLVx1MDAzZXN0YWNrO1xuIDQ0MDpcdFxuIDQ0MTpcdFx0Y2FsbF9yY3UocmgsIHRocmVhZF9zdGFja19mcmVlX3JjdSk7XG4gNDQyOlx0fVxuIDQ0MzpcdFxuIDQ0NDpcdHN0YXRpYyBpbnQgYWxsb2NfdGhyZWFkX3N0YWNrX25vZGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBub2RlKVxuIDQ0NTpcdHtcbiA0NDY6XHRcdHVuc2lnbmVkIGxvbmcgKnN0YWNrO1xuIDQ0NzpcdFx0c3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jX25vZGUodGhyZWFkX3N0YWNrX2NhY2hlLCBUSFJFQURJTkZPX0dGUCwgbm9kZSk7XG4gNDQ4Olx0XHRzdGFjayA9IGthc2FuX3Jlc2V0X3RhZyhzdGFjayk7XG4gNDQ5Olx0XHR0c2stXHUwMDNlc3RhY2sgPSBzdGFjaztcbiA0NTA6XHRcdHJldHVybiBzdGFjayA/IDAgOiAtRU5PTUVNO1xuIDQ1MTpcdH1cbiA0NTI6XHRcbiA0NTM6XHRzdGF0aWMgdm9pZCBmcmVlX3RocmVhZF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbiA0NTQ6XHR7XG4gNDU1Olx0XHR0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlKHRzayk7XG4gNDU2Olx0XHR0c2stXHUwMDNlc3RhY2sgPSBOVUxMO1xuIDQ1NzpcdH1cbiA0NTg6XHRcbiA0NTk6XHR2b2lkIHRocmVhZF9zdGFja19jYWNoZV9pbml0KHZvaWQpXG4gNDYwOlx0e1xuIDQ2MTpcdFx0dGhyZWFkX3N0YWNrX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGVfdXNlcmNvcHkoXCYjMzQ7dGhyZWFkX3N0YWNrXCYjMzQ7LFxuIDQ2MjpcdFx0XHRcdFx0XHRUSFJFQURfU0laRSwgVEhSRUFEX1NJWkUsIDAsIDAsXG4gNDYzOlx0XHRcdFx0XHRcdFRIUkVBRF9TSVpFLCBOVUxMKTtcbiA0NjQ6XHRcdEJVR19PTih0aHJlYWRfc3RhY2tfY2FjaGUgPT0gTlVMTCk7XG4gNDY1Olx0fVxuIDQ2NjpcdFxuIDQ2NzpcdCNlbmRpZiAvKiBUSFJFQURfU0laRSBcdTAwM2U9IFBBR0VfU0laRSAqL1xuIDQ2ODpcdCNlbmRpZiAvKiBDT05GSUdfVk1BUF9TVEFDSyAqL1xuIDQ2OTpcdFxuIDQ3MDpcdC8qIFNMQUIgY2FjaGUgZm9yIHNpZ25hbF9zdHJ1Y3Qgc3RydWN0dXJlcyAodHNrLVx1MDAzZXNpZ25hbCkgKi9cbiA0NzE6XHRzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnNpZ25hbF9jYWNoZXA7XG4gNDcyOlx0XG4gNDczOlx0LyogU0xBQiBjYWNoZSBmb3Igc2lnaGFuZF9zdHJ1Y3Qgc3RydWN0dXJlcyAodHNrLVx1MDAzZXNpZ2hhbmQpICovXG4gNDc0Olx0c3RydWN0IGttZW1fY2FjaGUgKnNpZ2hhbmRfY2FjaGVwO1xuIDQ3NTpcdFxuIDQ3NjpcdC8qIFNMQUIgY2FjaGUgZm9yIGZpbGVzX3N0cnVjdCBzdHJ1Y3R1cmVzICh0c2stXHUwMDNlZmlsZXMpICovXG4gNDc3Olx0c3RydWN0IGttZW1fY2FjaGUgKmZpbGVzX2NhY2hlcDtcbiA0Nzg6XHRcbiA0Nzk6XHQvKiBTTEFCIGNhY2hlIGZvciBmc19zdHJ1Y3Qgc3RydWN0dXJlcyAodHNrLVx1MDAzZWZzKSAqL1xuIDQ4MDpcdHN0cnVjdCBrbWVtX2NhY2hlICpmc19jYWNoZXA7XG4gNDgxOlx0XG4gNDgyOlx0LyogU0xBQiBjYWNoZSBmb3IgbW1fc3RydWN0IHN0cnVjdHVyZXMgKHRzay1cdTAwM2VtbSkgKi9cbiA0ODM6XHRzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1tX2NhY2hlcDtcbiA0ODQ6XHRcbiA0ODU6XHRzdGF0aWMgdm9pZCBhY2NvdW50X2tlcm5lbF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGFjY291bnQpXG4gNDg2Olx0e1xuIDQ4NzpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1ZNQVBfU1RBQ0spKSB7XG4gNDg4Olx0XHRcdHN0cnVjdCB2bV9zdHJ1Y3QgKnZtX2FyZWEgPSB0YXNrX3N0YWNrX3ZtX2FyZWEodHNrKTtcbiA0ODk6XHRcdFx0aW50IGk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzkxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpc3NlY3RpbmcgVGhyZWFkIFN0YWNrIEFsbG9jYXRpb24gYW5kIEZyZWVpbmcgd2l0aCBLQVNBTioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYHRocmVhZF9zdGFja19mcmVlX3JjdWAgYW5kIGltbWVkaWF0ZWx5IGhhdmUgYSBxdWVzdGlvbi4gV2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlYD8gTGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGxpbmVzIDI3MC0zMDAgaW4gYGtlcm5lbC9mb3JrLmNgLiBBaCwgZ290IGl0LgoKTm93LCBmb2N1c2luZyBvbiBgdGhyZWFkX3N0YWNrX2RlbGF5ZWRfZnJlZWAsIGB0c2stJmd0O3N0YWNrYCBpcyBhc3NpZ25lZCB0byBhIGB2bV9zdGFja2Agc3RydWN0LiBJbnRlcmVzdGluZy4gVGhlbiBJIGdvIGJhY2sgdG8gc2VlIGBhbGxvY190aHJlYWRfc3RhY2tfbm9kZWAgYW5kIG5vdGUgdGhhdCBgdHNrLSZndDtzdGFja2AgaXMgdGhlbiBhc3NpZ25lZCB0aGUgdmFsdWUgb2YgYHN0YWNrYC4gQmFjayBpbiBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCwgYHZtX3N0YWNrLSZndDtzdGFja192bV9hcmVhYCBlcXVhbHMgYHRzay0mZ3Q7c3RhY2tfdm1fYXJlYWAuIE9rYXksIGFsbCBvZiB0aGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4KCkJ1dCB3aHkgdGhlIGNoYW5nZSBpbiBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCBmcm9tIGB2ZnJlZSh2bV9hcmVhLSZndDthZGRyKWAgdG8gYHZmcmVlKGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLSZndDthZGRyKSlgPyBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uLiBXaGVyZSBkb2VzIGB2bV9hcmVhLSZndDthZGRyYCBjb21lIGZyb20/IEkgbmVlZCB0byB0cmFjZSBpdCBiYWNrLgoKSSBzZWUgdGhhdCBgdm1fYXJlYS0mZ3Q7YWRkcmAgaXMgYXNzaWduZWQgdGhlIGFkZHJlc3MgcmV0dXJuZWQgYnkgYF9fdm1hbGxvY19ub2RlYCB3aXRoaW4gYF9fdm1hbGxvY19ub2RlYCBpdHNlbGYuIE5vdywgY29uc2lkZXJpbmcgS0FTQU4gd2l0aCB0YWdzIChsaWtlIEtBU0FOX1NXX1RBR1Mgb3IgSFcgdGFncyBvbiBBUk02NCksIGRvZXMgYHZtX2FyZWEtJmd0O2FkZHJgIGhhdmUgYSB0YWcgb3Igbm90PyBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIGl0LgoKQmFjayBpbiBgYWxsb2NfdGhyZWFkX3N0YWNrX25vZGVgLCBJIHNlZSBgc3RhY2sgPSBfX3ZtYWxsb2Nfbm9kZSguLi4pYCBhbmQgdGhlIHVzZSBvZiBgR0ZQX1ZNQVBfU1RBQ0tgIHdpdGggYF9fR0ZQX1NLSVBfS0FTQU5gLiBPa2F5LCBzbyBpdCBzZWVtcyBsaWtlIHRoZSBpbml0aWFsIGFsbG9jYXRpb24gKm1pZ2h0KiBza2lwIEtBU0FOLiBCdXQgdGhlbiB0aGVyZSYjMzk7cyBhIHN1YnNlcXVlbnQgYHN0YWNrID0ga2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtJmd0O2FkZHIpO2AgYW5kIHRoZW4gYHN0YWNrID0ga2FzYW5fcmVzZXRfdGFnKHN0YWNrKTtgLiBJcyBgdm1fYXJlYS0mZ3Q7YWRkcmAgYWN0dWFsbHkgdGFnZ2VkIGF0IHRoaXMgcG9pbnQ/IElmIGl0IGlzLCB3aHkgd291bGQgd2UgbmVlZCB0byByZXNldCB0aGUgdGFnIGJlZm9yZSBmcmVlaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLgoKVGhpcyByYWlzZXMgYW5vdGhlciBwb2ludDogd2hhdCBkb2VzIGB2ZnJlZSgpYCAqZG8qIHdpdGggdGFnZ2VkIGFkZHJlc3Nlcz8gVGhpcyBpcyBteSBuZXh0IGF2ZW51ZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdmZyZWUoKWAgaW4gYG1tL3ZtYWxsb2MuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBLQVNBTiBpbnRlcmFjdHMgd2l0aCB0aGlzIGRlYWxsb2NhdGlvbiBwcm9jZXNzIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIGBrYXNhbl9yZXNldF90YWdgIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgdmZyZWVcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC91bS9pbmNsdWRlL3NoYXJlZC91bV9tYWxsb2MuaD0xND1leHRlcm4gdm9pZCAqdm1hbGxvY19ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplKTtcbmFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvdW1fbWFsbG9jLmgtMTUtI2RlZmluZSB2bWFsbG9jKC4uLilcdFx0dm1hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pXG5hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3VtX21hbGxvYy5oOjE2OmV4dGVybiB2b2lkIHZmcmVlKGNvbnN0IHZvaWQgKnB0cik7XG5hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3VtX21hbGxvYy5oLTE3LVxuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTIwND12b2lkICpfX211c3RfY2hlY2sgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsXG4tLVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMjEzLVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6MjE0OmV4dGVybiB2b2lkIHZmcmVlKGNvbnN0IHZvaWQgKmFkZHIpO1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMjE1LWV4dGVybiB2b2lkIHZmcmVlX2F0b21pYyhjb25zdCB2b2lkICphZGRyKTtcbi0tXG5tbS9ub21tdS5jPTY1PXVuc2lnbmVkIGludCBrb2Jqc2l6ZShjb25zdCB2b2lkICpvYmpwKVxuLS1cbm1tL25vbW11LmMtMTA1LVxubW0vbm9tbXUuYzoxMDY6dm9pZCB2ZnJlZShjb25zdCB2b2lkICphZGRyKVxubW0vbm9tbXUuYy0xMDcte1xuLS1cbm1tL3ZtYWxsb2MuYz0zNDYwPXN0YXRpYyB2b2lkIHZtX2FyZWFfZnJlZV9wYWdlcyhzdHJ1Y3Qgdm1fc3RydWN0ICp2bSwgdW5zaWduZWQgbG9uZyBzdGFydF9pZHgsXG4tLVxubW0vdm1hbGxvYy5jLTM0OTEtICovXG5tbS92bWFsbG9jLmM6MzQ5Mjp2b2lkIHZmcmVlKGNvbnN0IHZvaWQgKmFkZHIpXG5tbS92bWFsbG9jLmMtMzQ5My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTIwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIHRoZSBhdWRpZW5jZSBpcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGB2ZnJlZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyYWNrIG9wZW4gYG1tL3ZtYWxsb2MuY2AgYW5kIHplcm8gaW4gb24gdGhlIGB2ZnJlZWAgZnVuY3Rpb24uIEkmIzM5O20ga2VlbiB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHZpcnR1YWwgbWVtb3J5IGlzIG1hbmFnZWQsIHNwZWNpZmljYWxseSB3aGVuIGl0IGNvbWVzIHRvIGRlYWxsb2NhdGluZyBtZW1vcnkgYWxsb2NhdGVkIHdpdGggYHZtYWxsb2NgLiBJIGtub3cgdGhlIGNvcmUgcHJpbmNpcGxlcywgb2YgY291cnNlOiBpdCYjMzk7cyBhYm91dCBmcmVlaW5nIHVwIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgYW5kIHBvdGVudGlhbGx5IHJlbGVhc2luZyBwaHlzaWNhbCBwYWdlcyBiYWNrIHRvIHRoZSBzeXN0ZW0sIGJ1dCBJIHdhbnQgdG8gZ2V0IGEgYml0IG1vcmUgZ3JhbnVsYXIgaGVyZS4KCkkmIzM5O20gdGhpbmtpbmcsIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgdGFibGVzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gaW4gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBgdm1fc3RydWN0YCBhbmQgYHZtX2FyZWFfc3RydWN0YCwgYW5kIGVzcGVjaWFsbHkgdGhlIGNhc2VzIHdoZXJlIHRoZSBhbGxvY2F0ZWQgdmlydHVhbCBtZW1vcnkgaXMgbWFwcGVkIHRvIGNvbnRpZ3VvdXMgcGh5c2ljYWwgcGFnZXMgYXMgdGhleSBhcmUgaW4gdm1hbGxvYy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBncmFjZWZ1bGx5IGhhbmRsZXMgZWRnZSBjYXNlcyBsaWtlIGZyZWVpbmcgYSBwYXJ0aWFsIGFsbG9jYXRpb24gb3IgYSBjb21wbGV0ZWx5IG1pc2FsaWduZWQgcmVnaW9uIOKAkyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gbWVjaGFuaXNtcy4gQWxzbywgSSYjMzk7bGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgaW50ZXJlc3RpbmcgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0aGF0IGFyZSB1c2VkIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSBtYXAgZHVyaW5nIGRlYWxsb2NhdGlvbi4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3B0aW1pemF0aW9ucyB0aGF0IGFyZSBkb25lIGR1cmluZyBkZWFsbG9jYXRpb24uIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJwbGF5IHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQsIG9mIGNvdXJzZSwgYnV0IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljIGRldGFpbHMgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIG15IGFzc3VtcHRpb25zIGFsaWduIHdpdGggdGhlIGFjdHVhbCBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQ5MDpcdCAqIGNvbnZlbnRpb25zIGZvciB2ZnJlZSgpIGFyY2gtZGVwZW5kZW50IHdvdWxkIGJlIGEgcmVhbGx5IGJhZCBpZGVhKS5cbjM0OTE6XHQgKi9cbjM0OTI6XHR2b2lkIHZmcmVlKGNvbnN0IHZvaWQgKmFkZHIpXG4zNDkzOlx0e1xuMzQ5NDpcdFx0c3RydWN0IHZtX3N0cnVjdCAqdm07XG4zNDk1Olx0XG4zNDk2Olx0XHRpZiAodW5saWtlbHkoaW5faW50ZXJydXB0KCkpKSB7XG4zNDk3Olx0XHRcdHZmcmVlX2F0b21pYyhhZGRyKTtcbjM0OTg6XHRcdFx0cmV0dXJuO1xuMzQ5OTpcdFx0fVxuMzUwMDpcdFxuMzUwMTpcdFx0QlVHX09OKGluX25taSgpKTtcbjM1MDI6XHRcdGttZW1sZWFrX2ZyZWUoYWRkcik7XG4zNTAzOlx0XHRtaWdodF9zbGVlcCgpO1xuMzUwNDpcdFxuMzUwNTpcdFx0aWYgKCFhZGRyKVxuMzUwNjpcdFx0XHRyZXR1cm47XG4zNTA3Olx0XG4zNTA4Olx0XHR2bSA9IHJlbW92ZV92bV9hcmVhKGFkZHIpO1xuMzUwOTpcdFx0aWYgKHVubGlrZWx5KCF2bSkpIHtcbjM1MTA6XHRcdFx0V0FSTigxLCBLRVJOX0VSUiBcJiMzNDtUcnlpbmcgdG8gdmZyZWUoKSBub25leGlzdGVudCB2bSBhcmVhICglcClcXG5cJiMzNDssXG4zNTExOlx0XHRcdFx0XHRhZGRyKTtcbjM1MTI6XHRcdFx0cmV0dXJuO1xuMzUxMzpcdFx0fVxuMzUxNDpcdFxuMzUxNTpcdFx0aWYgKHVubGlrZWx5KHZtLVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9GTFVTSF9SRVNFVF9QRVJNUykpXG4zNTE2Olx0XHRcdHZtX3Jlc2V0X3Blcm1zKHZtKTtcbjM1MTc6XHRcbjM1MTg6XHRcdHZtX2FyZWFfZnJlZV9wYWdlcyh2bSwgMCwgdm0tXHUwMDNlbnJfcGFnZXMpO1xuMzUxOTpcdFx0a3ZmcmVlKHZtLVx1MDAzZXBhZ2VzKTtcbjM1MjA6XHRcdGtmcmVlKHZtKTtcbjM1MjE6XHR9XG4zNTIyOlx0RVhQT1JUX1NZTUJPTCh2ZnJlZSk7XG4zNTIzOlx0XG4zNTI0Olx0LyoqXG4zNTI1Olx0ICogdnVubWFwIC0gcmVsZWFzZSB2aXJ0dWFsIG1hcHBpbmcgb2J0YWluZWQgYnkgdm1hcCgpXG4zNTI2Olx0ICogQGFkZHI6ICAgbWVtb3J5IGJhc2UgYWRkcmVzc1xuMzUyNzpcdCAqXG4zNTI4Olx0ICogRnJlZSB0aGUgdmlydHVhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEgc3RhcnRpbmcgYXQgQGFkZHIsXG4zNTI5Olx0ICogd2hpY2ggd2FzIGNyZWF0ZWQgZnJvbSB0aGUgcGFnZSBhcnJheSBwYXNzZWQgdG8gdm1hcCgpLlxuMzUzMDpcdCAqXG4zNTMxOlx0ICogTXVzdCBub3QgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LlxuMzUzMjpcdCAqL1xuMzUzMzpcdHZvaWQgdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIpXG4zNTM0Olx0e1xuMzUzNTpcdFx0c3RydWN0IHZtX3N0cnVjdCAqdm07XG4zNTM2Olx0XG4zNTM3Olx0XHRCVUdfT04oaW5faW50ZXJydXB0KCkpO1xuMzUzODpcdFx0bWlnaHRfc2xlZXAoKTtcbjM1Mzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIGByZW1vdmVfdm1fYXJlYShhZGRyKWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGByZW1vdmVfdm1fYXJlYShhZGRyKWAuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYG1tL3ZtYWxsb2MuY2AsIGFuZCBnZXQgYSBnb29kIGxvb2sgYXQgdGhlIGByZW1vdmVfdm1fYXJlYWAgZnVuY3Rpb24uIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRoaXMgdGhpbmcuIE5vIHBvaW50IGluIGp1c3QgZ3Vlc3NpbmcsIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gc2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgdm1fc3RydWN0IFxcKnJlbW92ZV92bV9hcmVhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0zMzIyPXN0cnVjdCB2bV9zdHJ1Y3QgKmZpbmRfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKVxuLS1cbm1tL3ZtYWxsb2MuYy0zMzQyLSAqL1xubW0vdm1hbGxvYy5jOjMzNDM6c3RydWN0IHZtX3N0cnVjdCAqcmVtb3ZlX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcilcbm1tL3ZtYWxsb2MuYy0zMzQ0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4NjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSByZWFkaW5nIGByZW1vdmVfdm1fYXJlYWAgaW4gYG1tL3ZtYWxsb2MuY2A6CgoqKkRpc3NlY3RpbmcgYHJlbW92ZV92bV9hcmVhYCBpbiBgbW0vdm1hbGxvYy5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZm9jdXNpbmcgb24gYHJlbW92ZV92bV9hcmVhYCBub3csIHNwZWNpZmljYWxseSBpbiBgbW0vdm1hbGxvYy5jYC4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkga25vdyB0aGUgdm1hbGxvYyBhcmVhIGlzIGNydWNpYWwgZm9yIGFsbG9jYXRpbmcgdmlydHVhbCBtZW1vcnkgZm9yIHRoaW5ncyBsaWtlIGtlcm5lbCBtb2R1bGVzLCBhbmQgZHJpdmVycyB0aGF0IHJlcXVpcmUgY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnksIGJ1dCBjYW4mIzM5O3QgYmUgbWFwcGVkIGF0IGEgZml4ZWQgYWRkcmVzcy4gU28sIHJlbW92aW5nIGFuIGFyZWEgaXMgYSBzaWduaWZpY2FudCBvcGVyYXRpb247IGl0IG1lYW5zIGZyZWVpbmcgdXAgcHJldmlvdXNseSBhbGxvY2F0ZWQgdmlydHVhbCBtZW1vcnkuCgpJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBkZWVwIGRpdmUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGxpa2VseSB1c2Ugb2YgdGhlIHJlZC1ibGFjayB0cmVlIChvciBzaW1pbGFyIGRhdGEgc3RydWN0dXJlKSB0byB0cmFjayB0aGUgdm1hbGxvYyBhcmVhLCBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gdGhhdCBjb3VsZCBhcmlzZSBmcm9tIGZyZWVpbmcgYSByZWdpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBga2ZyZWVgIGFuZCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBwcmltaXRpdmVzIHRvIGFjdHVhbGx5IHJlbGVhc2UgdGhlIHBhZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGV5IGhhbmRsZSBhbnkgc3luY2hyb25pemF0aW9uIHRvIGVuc3VyZSBubyByYWNlIGNvbmRpdGlvbnMgaGFwcGVuIHdoZW4gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgYWxzbyByZWZlcmVuY2luZyBvciB1c2luZyB0aGlzIHZtYWxsb2MgYXJlYS4gSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIHRhYmxlcyBhcyB3ZWxsLCB0byBtYWtlIHN1cmUgdGhlIHZpcnR1YWwtdG8tcGh5c2ljYWwgbWFwcGluZyBpcyBwcm9wZXJseSByZW1vdmVkLiBBbmQsIG9mIGNvdXJzZSwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgZXJyb3IgY29uZGl0aW9ucyBhbmQgY29ybmVyIGNhc2VzIGNvcnJlY3RseSwgcGVyaGFwcyBieSBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZSB1bmRlcmx5aW5nIGNhbGxzIGFuZCB0aGUgaGFuZGxpbmcgb2YgdGhlIHJidHJlZSBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzQwOlx0ICpcbjMzNDE6XHQgKiBSZXR1cm46IHRoZSBhcmVhIGRlc2NyaXB0b3Igb24gc3VjY2VzcyBvciAlTlVMTCBvbiBmYWlsdXJlLlxuMzM0MjpcdCAqL1xuMzM0MzpcdHN0cnVjdCB2bV9zdHJ1Y3QgKnJlbW92ZV92bV9hcmVhKGNvbnN0IHZvaWQgKmFkZHIpXG4zMzQ0Olx0e1xuMzM0NTpcdFx0c3RydWN0IHZtYXBfYXJlYSAqdmE7XG4zMzQ2Olx0XHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcbjMzNDc6XHRcbjMzNDg6XHRcdG1pZ2h0X3NsZWVwKCk7XG4zMzQ5Olx0XG4zMzUwOlx0XHRpZiAoV0FSTighUEFHRV9BTElHTkVEKGFkZHIpLCBcJiMzNDtUcnlpbmcgdG8gdmZyZWUoKSBiYWQgYWRkcmVzcyAoJXApXFxuXCYjMzQ7LFxuMzM1MTpcdFx0XHRcdGFkZHIpKVxuMzM1MjpcdFx0XHRyZXR1cm4gTlVMTDtcbjMzNTM6XHRcbjMzNTQ6XHRcdHZhID0gZmluZF91bmxpbmtfdm1hcF9hcmVhKCh1bnNpZ25lZCBsb25nKWFkZHIpO1xuMzM1NTpcdFx0aWYgKCF2YSB8fCAhdmEtXHUwMDNldm0pXG4zMzU2Olx0XHRcdHJldHVybiBOVUxMO1xuMzM1NzpcdFx0dm0gPSB2YS1cdTAwM2V2bTtcbjMzNTg6XHRcbjMzNTk6XHRcdGRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKHZtLVx1MDAzZWFkZHIsIGdldF92bV9hcmVhX3NpemUodm0pKTtcbjMzNjA6XHRcdGRlYnVnX2NoZWNrX25vX29ial9mcmVlZCh2bS1cdTAwM2VhZGRyLCBnZXRfdm1fYXJlYV9zaXplKHZtKSk7XG4zMzYxOlx0XHRrYXNhbl9mcmVlX21vZHVsZV9zaGFkb3codm0pO1xuMzM2MjpcdFx0a2FzYW5fcG9pc29uX3ZtYWxsb2Modm0tXHUwMDNlYWRkciwgZ2V0X3ZtX2FyZWFfc2l6ZSh2bSkpO1xuMzM2MzpcdFxuMzM2NDpcdFx0ZnJlZV91bm1hcF92bWFwX2FyZWEodmEpO1xuMzM2NTpcdFx0cmV0dXJuIHZtO1xuMzM2NjpcdH1cbjMzNjc6XHRcbjMzNjg6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2FyZWFfZGlyZWN0X21hcChjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLFxuMzM2OTpcdFx0XHRcdFx0ICAgICAgIGludCAoKnNldF9kaXJlY3RfbWFwKShzdHJ1Y3QgcGFnZSAqcGFnZSkpXG4zMzcwOlx0e1xuMzM3MTpcdFx0dW5zaWduZWQgbG9uZyBpO1xuMzM3MjpcdFxuMzM3MzpcdFx0LyogSFVHRV9WTUFMTE9DIHBhc3NlcyBzbWFsbCBwYWdlcyB0byBzZXRfZGlyZWN0X21hcCAqL1xuMzM3NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYXJlYS1cdTAwM2Vucl9wYWdlczsgaSYjNDM7JiM0MzspXG4zMzc1Olx0XHRcdGlmIChwYWdlX2FkZHJlc3MoYXJlYS1cdTAwM2VwYWdlc1tpXSkpXG4zMzc2Olx0XHRcdFx0c2V0X2RpcmVjdF9tYXAoYXJlYS1cdTAwM2VwYWdlc1tpXSk7XG4zMzc3Olx0fVxuMzM3ODpcdFxuMzM3OTpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODY4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgS0FTQU4gSXNzdWVzIGluIGB2ZnJlZSgpYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBMaW5lIDMzNTAtMzM1NCBvZiB0aGUgY29kZSBjYXRjaGVzIG15IGF0dGVudGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgdmZyZWUoKWAgZnVuY3Rpb24uIEkgc2VlIHRoZSBgV0FSTmAgbWFjcm8gaW1tZWRpYXRlbHksIHdoaWNoIGlzIGEgcmVkIGZsYWcuIEl0JiMzOTtzIGNoZWNraW5nIGlmIHRoZSBhZGRyZXNzIGBhZGRyYCBiZWluZyBwYXNzZWQgaXMgcGFnZS1hbGlnbmVkLCBidXQgd2hhdCYjMzk7cyByZWFsbHkgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2Qgd2l0aCBLQVNBTj8gSSBrbm93IG9uIGFybTY0LCBlc3BlY2lhbGx5IHdpdGggS0FTQU4gSFdfVEFHUyBvciBTV19UQUdTIGVuYWJsZWQsIHRoZSB0b3AgYnl0ZSBvZiBhbiBhZGRyZXNzIGNhbiBjb250YWluIGEgdGFnLiBUaGlzIGlzIGNydWNpYWwuCgpUaGUgY29kZSBjaGVja3MgcGFnZSBhbGlnbm1lbnQsIHByZXN1bWFibHkgYnkgaW5zcGVjdGluZyB0aGUgbG93ZXIgYml0cy4gQnV0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFkZHJlc3MgaXMgKnVzZWQqIGluIHN1YnNlcXVlbnQgY2FsbHMuIGBmaW5kX3VubGlua192bWFwX2FyZWFgIGlzIHRoZSBuZXh0IGZ1bmN0aW9uIGNhbGwgdGhhdCBzZWVtcyB0byB1c2UgdGhpcyBhZGRyZXNzLCBzbyBJIG11c3QgZGlnIGRlZXBlci4KCkxldCYjMzk7cyBsb29rIGF0IGBmaW5kX3VubGlua192bWFwX2FyZWFgLiBBaCwgaXQgY2FsbHMgYF9fZmluZF92bWFwX2FyZWFgLiBBbmQgYmluZ28hIGBfX2ZpbmRfdm1hcF9hcmVhYCBleHBsaWNpdGx5IGNhbGxzIGBrYXNhbl9yZXNldF90YWdgIG9uIHRoZSBhZGRyZXNzLiBUaGlzIHNlZW1zIHRvIG1lYW4gdGhhdCB0aGUgZnVuY3Rpb24gKnJlbW92ZXMqIHRoZSB0YWcuIEJ1dCBpcyBgZmluZF91bmxpbmtfdm1hcF9hcmVhYCBnZXR0aW5nIGEgdGFnIGFzIGlucHV0LCBvciBub3Q/IEkgbXVzdCB2ZXJpZnkuIElzIHRoaXMgYW4gaXNzdWU/IFByb2JhYmx5IG5vdCwgc2luY2UgdGhlIHRhZyBnZXRzIHJlbW92ZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbmRfdW5saW5rX3ZtYXBfYXJlYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9MjUxND1zdHJ1Y3Qgdm1hcF9hcmVhICpmaW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vdm1hbGxvYy5jLTI1NTAtXG5tbS92bWFsbG9jLmM6MjU1MTpzdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqZmluZF91bmxpbmtfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkcilcbm1tL3ZtYWxsb2MuYy0yNTUyLXtcbi0tXG5tbS92bWFsbG9jLmM9MzA0OT12b2lkIHZtX3VubWFwX3JhbShjb25zdCB2b2lkICptZW0sIHVuc2lnbmVkIGludCBjb3VudClcbi0tXG5tbS92bWFsbG9jLmMtMzA2OC1cbm1tL3ZtYWxsb2MuYzozMDY5Olx0dmEgPSBmaW5kX3VubGlua192bWFwX2FyZWEoYWRkcik7XG5tbS92bWFsbG9jLmMtMzA3MC1cdGlmIChXQVJOX09OX09OQ0UoIXZhKSlcbi0tXG5tbS92bWFsbG9jLmM9MzM0Mz1zdHJ1Y3Qgdm1fc3RydWN0ICpyZW1vdmVfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKVxuLS1cbm1tL3ZtYWxsb2MuYy0zMzUzLVxubW0vdm1hbGxvYy5jOjMzNTQ6XHR2YSA9IGZpbmRfdW5saW5rX3ZtYXBfYXJlYSgodW5zaWduZWQgbG9uZylhZGRyKTtcbm1tL3ZtYWxsb2MuYy0zMzU1LVx0aWYgKCF2YSB8fCAhdmEtXHUwMDNldm0pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODY1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGZpbmRfdW5saW5rX3ZtYXBfYXJlYWAgaW4gYG1tL3ZtYWxsb2MuY2AqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYGZpbmRfdW5saW5rX3ZtYXBfYXJlYWAuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWw7IGl0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyB2bWFsbG9jIGFyZWFzIGFyZSBtYW5hZ2VkIGFuZCB1bmxpbmtlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIGZsb3cgKnByZWNpc2VseSosIGVzcGVjaWFsbHkgaG93IGl0IGhhbmRsZXMgdGhlIHVubWFwcGluZyBwcm9jZXNzLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIHBhcnRpY3VsYXJseSB0aGUgdm1hcCBhcmVhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSB0cmF2ZXJzZWQuIFdoYXQgYXJlIHRoZSBrZXkgYXNzdW1wdGlvbnMgaXQgbWFrZXMgYWJvdXQgdGhlIHZtYWxsb2MgcmVnaW9uIGxheW91dD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIG9uIHRoZSBsb29rb3V0IGZvciwgZXNwZWNpYWxseSBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50PyBJIGFsc28gbmVlZCB0byBhc2NlcnRhaW4gaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gbG9naWMg4oCTIGFyZSB0aGVyZSBhbnkgdW51c3VhbCBpbnRlcmFjdGlvbnMgd2l0aCBoYXJkd2FyZT8gU3BlY2lmaWNhbGx5LCB3aGVyZSBhbmQgaG93IGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGUgd2l0aCB0aGUgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzIHRvIGludmFsaWRhdGUgbWFwcGluZ3M/IFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgbWVtb3J5IGJhcnJpZXJzIGhlcmUgaXMgcGFyYW1vdW50LiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBhIGx5bmNocGluIGluIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzIGFuZCBlbnN1cmluZyB0aGUgdm1hbGxvYyBzdWJzeXN0ZW0gb3BlcmF0ZXMgY29ycmVjdGx5LCBzbyBJIG11c3QgZGlzc2VjdCBldmVyeSBsaW5lIHdpdGggYSBmaW5lLXRvb3RoIGNvbWIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTUwOlx0XG4yNTUxOlx0c3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKmZpbmRfdW5saW5rX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpXG4yNTUyOlx0e1xuMjU1MzpcdFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG4yNTU0Olx0XHRzdHJ1Y3Qgdm1hcF9hcmVhICp2YTtcbjI1NTU6XHRcdGludCBpLCBqO1xuMjU1NjpcdFxuMjU1NzpcdFx0LypcbjI1NTg6XHRcdCAqIENoZWNrIHRoZSBjb21tZW50IGluIHRoZSBmaW5kX3ZtYXBfYXJlYSgpIGFib3V0IHRoZSBsb29wLlxuMjU1OTpcdFx0ICovXG4yNTYwOlx0XHRpID0gaiA9IGFkZHJfdG9fbm9kZV9pZChhZGRyKTtcbjI1NjE6XHRcdGRvIHtcbjI1NjI6XHRcdFx0dm4gPSBcdTAwMjZ2bWFwX25vZGVzW2ldO1xuMjU2MzpcdFxuMjU2NDpcdFx0XHRzcGluX2xvY2soXHUwMDI2dm4tXHUwMDNlYnVzeS5sb2NrKTtcbjI1NjU6XHRcdFx0dmEgPSBfX2ZpbmRfdm1hcF9hcmVhKGFkZHIsIFx1MDAyNnZuLVx1MDAzZWJ1c3kucm9vdCk7XG4yNTY2Olx0XHRcdGlmICh2YSlcbjI1Njc6XHRcdFx0XHR1bmxpbmtfdmEodmEsIFx1MDAyNnZuLVx1MDAzZWJ1c3kucm9vdCk7XG4yNTY4Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZuLVx1MDAzZWJ1c3kubG9jayk7XG4yNTY5Olx0XG4yNTcwOlx0XHRcdGlmICh2YSlcbjI1NzE6XHRcdFx0XHRyZXR1cm4gdmE7XG4yNTcyOlx0XHR9IHdoaWxlICgoaSA9IChpICYjNDM7IG5yX3ZtYXBfbm9kZXMgLSAxKSAlIG5yX3ZtYXBfbm9kZXMpICE9IGopO1xuMjU3MzpcdFxuMjU3NDpcdFx0cmV0dXJuIE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTM2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgQ29kZTogTGluZSAyNTYwIC0gUG90ZW50aWFsIEJvdHRsZW5lY2s/KioKCkFscmlnaHQsIGxldCYjMzk7cyB6b29tIGluIG9uIGxpbmUgMjU2MCBvZiB0aGlzIGNvZGUuIFRoYXQmIzM5O3Mgd2hlcmUgd2UgaGF2ZSBgaSA9IGogPSBhZGRyX3RvX25vZGVfaWQoYWRkcik7YC4gSW1tZWRpYXRlbHksIHRoZSBgYWRkcl90b19ub2RlX2lkKGFkZHIpYCBmdW5jdGlvbiBjYXRjaGVzIG15IGV5ZS4gSXQmIzM5O3Mgb2J2aW91c2x5IGNyaXRpY2FsLCB0cmFuc2xhdGluZyBhbiBhZGRyZXNzIChgYWRkcmApIGludG8gYSBub2RlIElELiBUaGlzIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWxseSBzZW5zaXRpdmUgYXJlYSBmb3IgcGVyZm9ybWFuY2UsIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uIFRoZSBkb3VibGUgYXNzaWdubWVudCBzdWdnZXN0cyBgaWAgYW5kIGBqYCBhcmUgZGVwZW5kZW50IGFuZCB0aGUgb3BlcmF0aW9uIHdpbGwgYmUgZG9uZSBmb3IgYm90aCEgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nIHVuZGVyIHRoZSBob29kLCBmYXN0LCBhbmQgd2hhdCB0aGUgdGltZSBjb21wbGV4aXR5IG1pZ2h0IGJlLiBUaGlzIGNvdWxkIGJlIGEgYm90dGxlbmVjayBpbiB0aGUgb3ZlcmFsbCBhbGdvcml0aG0gaWYgdGhpcyBmdW5jdGlvbiBpcyBpbmVmZmljaWVudCwgcGFydGljdWxhcmx5IGlmIGl0JiMzOTtzIGNhbGxlZCBmcmVxdWVudGx5IG9yIHdpdGhpbiBhIHRpZ2h0IGxvb3AuIExldCYjMzk7cyBkZWx2ZSBkZWVwZXIgYW5kIGluc3BlY3QgdGhlIGFjdHVhbCBgYWRkcl90b19ub2RlX2lkYCBpbXBsZW1lbnRhdGlvbiB0byBnZXQgYSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZHJfdG9fbm9kZV9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9OTkyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG5tbS92bWFsbG9jLmM6OTkzOmFkZHJfdG9fbm9kZV9pZCh1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS92bWFsbG9jLmMtOTk0LXtcbi0tXG5tbS92bWFsbG9jLmM9OTk5PWFkZHJfdG9fbm9kZSh1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS92bWFsbG9jLmMtMTAwMC17XG5tbS92bWFsbG9jLmM6MTAwMTpcdHJldHVybiBcdTAwMjZ2bWFwX25vZGVzW2FkZHJfdG9fbm9kZV9pZChhZGRyKV07XG5tbS92bWFsbG9jLmMtMTAwMi19XG4tLVxubW0vdm1hbGxvYy5jPTI1MTQ9c3RydWN0IHZtYXBfYXJlYSAqZmluZF92bWFwX2FyZWEodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL3ZtYWxsb2MuYy0yNTIzLVx0Lypcbm1tL3ZtYWxsb2MuYzoyNTI0Olx0ICogQW4gYWRkcl90b19ub2RlX2lkKGFkZHIpIGNvbnZlcnRzIGFuIGFkZHJlc3MgdG8gYSBub2RlIGluZGV4XG5tbS92bWFsbG9jLmMtMjUyNS1cdCAqIHdoZXJlIGEgVkEgaXMgbG9jYXRlZC4gSWYgVkEgc3BhbnMgc2V2ZXJhbCB6b25lcyBhbmQgcGFzc2VkXG4tLVxubW0vdm1hbGxvYy5jLTI1MzUtXHQgKi9cbm1tL3ZtYWxsb2MuYzoyNTM2Olx0aSA9IGogPSBhZGRyX3RvX25vZGVfaWQoYWRkcik7XG5tbS92bWFsbG9jLmMtMjUzNy1cdGRvIHtcbi0tXG5tbS92bWFsbG9jLmM9MjU1MT1zdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqZmluZF91bmxpbmtfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS92bWFsbG9jLmMtMjU1OS1cdCAqL1xubW0vdm1hbGxvYy5jOjI1NjA6XHRpID0gaiA9IGFkZHJfdG9fbm9kZV9pZChhZGRyKTtcbm1tL3ZtYWxsb2MuYy0yNTYxLVx0ZG8ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI1NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBtbS92bWFsbG9jLmNgJiMzOTtzIEFsbG9jYXRpb24gU3RyYXRlZ3kqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgdm1hbGxvYy5jYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDk5MC0xMDEwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgdm1hbGxvY2AgaGFuZGxlcyBsYXJnZSBhbGxvY2F0aW9ucyBhbmQgdGhlIG1lY2hhbmljcyBiZWhpbmQgaXQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBzZWN0aW9uIG9mIGNvZGUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBudWFuY2VzIG9mIHRoaXMgcGFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZXIuIFRoaXMgcmFuZ2UgdHlwaWNhbGx5IGRlYWxzIHdpdGggdGhlIGNyaXRpY2FsIGxvZ2ljIC0gcGVyaGFwcyB0aGUgYWxsb2NhdGlvbiBsb29wLCB0aGUgYWRkcmVzcyBzcGFjZSBsb29rdXBzLCBhbmQgYW55IG5lY2Vzc2FyeSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMuIEnigJltIHRoaW5raW5nIHRoZXJlIGFyZSBsaWtlbHkgc29tZSBjaGVja3MgZm9yIGF2YWlsYWJsZSBjb250aWd1b3VzIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSwgdGhlIHNlbGVjdGlvbiBvZiB0aGUgcmlnaHQgVk0gYXJlYSBmbGFncywgb3IgbWF5YmUgZXZlbiBzdWJ0bGUgY29uc2lkZXJhdGlvbnMgYXJvdW5kIG1lbW9yeSBmcmFnbWVudGF0aW9uLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBkZWFscyB3aXRoIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgcmVzZXJ2YXRpb24gcHJvY2Vzcy4gSXMgaXQgdXNpbmcgYSBzaW1wbGUgbGluZWFyIHNjYW4sIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/IFdoYXQgYWJvdXQgbG9ja2luZz8gSXMgdGhlcmUgY29udGVudGlvbiBpbiB0aGlzIHJlZ2lvbj8gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBwcmV0dHkgY29tcGxleCBwb2ludGVyIGFyaXRobWV0aWMsIGdpdmVuIHRoZSBuYXR1cmUgb2YgYHZtYWxsb2NgLiBJIGFsc28gd2FudCB0byBvYnNlcnZlIGlmIHRoZXNlIGxpbmVzIGltcGxlbWVudCBhbiBleHBsaWNpdCBtZWNoYW5pc20gdG8gaGFuZGxlIHBvdGVudGlhbCBmYWlsdXJlcywgd2hpY2ggd291bGQgYmUgZXh0cmVtZWx5IGltcG9ydGFudCBmb3IgYW55IHJvYnVzdCBtZW1vcnkgYWxsb2NhdG9yLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgYWxsb2NhdGlvbiByb3V0aW5lLCBidXQgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc3VidGxlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgYW55IHBvdGVudGlhbCB3ZWFrbmVzc2VzIHRoYXQgY2FuIGNhdXNlIHByb2JsZW1zIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTkwOlx0XHRcdCh2bikgXHUwMDNjIFx1MDAyNnZtYXBfbm9kZXNbbnJfdm1hcF9ub2Rlc107ICh2bikmIzQzOyYjNDM7KVxuIDk5MTpcdFxuIDk5MjpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gOTkzOlx0YWRkcl90b19ub2RlX2lkKHVuc2lnbmVkIGxvbmcgYWRkcilcbiA5OTQ6XHR7XG4gOTk1Olx0XHRyZXR1cm4gKGFkZHIgLyB2bWFwX3pvbmVfc2l6ZSkgJSBucl92bWFwX25vZGVzO1xuIDk5NjpcdH1cbiA5OTc6XHRcbiA5OTg6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCB2bWFwX25vZGUgKlxuIDk5OTpcdGFkZHJfdG9fbm9kZSh1bnNpZ25lZCBsb25nIGFkZHIpXG4xMDAwOlx0e1xuMTAwMTpcdFx0cmV0dXJuIFx1MDAyNnZtYXBfbm9kZXNbYWRkcl90b19ub2RlX2lkKGFkZHIpXTtcbjEwMDI6XHR9XG4xMDAzOlx0XG4xMDA0Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1hcF9ub2RlICpcbjEwMDU6XHRpZF90b19ub2RlKHVuc2lnbmVkIGludCBpZClcbjEwMDY6XHR7XG4xMDA3Olx0XHRyZXR1cm4gXHUwMDI2dm1hcF9ub2Rlc1tpZCAlIG5yX3ZtYXBfbm9kZXNdO1xuMTAwODpcdH1cbjEwMDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4ODcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW1tZWRpYXRlIENvbmNlcm5zIFJlZ2FyZGluZyBBZGRyZXNzIFRhZ2dpbmcgYW5kIGBhZGRyX3RvX25vZGVfaWRgKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBoaXR0aW5nIG1lIHJpZ2h0IG5vdy4gVGhpcyBgYWRkcl90b19ub2RlX2lkKGFkZHIpYCBmdW5jdGlvbiBpcyB1c2luZyBhbiB1bnRhZ2dlZCBhZGRyZXNzIGZvciBpdHMgY2FsY3VsYXRpb24g4oCTIHNwZWNpZmljYWxseSwgYChhZGRyIC8gdm1hcF96b25lX3NpemUpICUgbnJfdm1hcF9ub2Rlc2AuIElmIGBhZGRyYCAqaXMqIHRhZ2dlZCBpbiB0aGF0IHRvcCBieXRlLCB3aGljaCBpcyBhYnNvbHV0ZWx5IHBvc3NpYmxlIGluIGEgdGFnZ2VkIG1lbW9yeSBzeXN0ZW0sIHRoaXMgaXMgZ29pbmcgdG8geWllbGQgYSB0b3RhbGx5IGluY29ycmVjdCBzdGFydGluZyBub2RlLiBUaGF0IGRpdmlzaW9uIGlzIGdvaW5nIHRvIGJlIGNvbXBsZXRlbHkgb2ZmLgoKQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gV2h5IGRpZCB0aGF0IHJlY2VudCBwYXRjaCBtZXNzIHdpdGggYHZmcmVlKGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLSZndDthZGRyKSlgIGluIGBrZXJuZWwvZm9yay5jYD8gVGhhdCYjMzk7cyB3aGF0JiMzOTtzIGdvdCBtZSB0aGlua2luZy4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mICp3aHkqIHRoaXMgY2hhbmdlIGhhcHBlbmVkLgoKUmlnaHQhIExldCYjMzk7cyBnZXQgaW50byBga2VybmVsL2ZvcmsuY2AgYW5kIGRpZyBkZWVwZXIuCgpIYW5nIG9uLi4uIEkmIzM5O20gbm90aWNpbmcgc29tZXRoaW5nIGluIGB0aHJlYWRfc3RhY2tfZnJlZV9yY3VgLi4uCgpBaCEgQW5kIHdoYXQgd2FzIGB2bV9hcmVhLSZndDthZGRyYCBhY3R1YWxseSByZWZlcnJpbmcgdG8/IENvbnRleHQsIGNvbnRleHQsIGNvbnRleHQuCgpXaGVuICppcyogYHZtX2FyZWEtJmd0O2FkZHJgIHRhZ2dlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBsaWZlY3ljbGUuIFdoYXQgYXJlIHdlIGRlYWxpbmcgd2l0aD8KCk9rYXksIHRpbWUgdG8gcHVsbCB1cCB0aGUgc291cmNlIGFuZCBzZWFyY2ggYGtlcm5lbC9mb3JrLmNgIGZvciBpbnN0YW5jZXMgb2YgYHZtX2FyZWEtJmd0O2FkZHJgLiBHb3R0YSB0cmFjZSB0aGlzIGZyb20gdGhlIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1fYXJlYS1cdTAwM2VhZGRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2ZvcmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jPTI3NT1zdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaClcbi0tXG5rZXJuZWwvZm9yay5jLTI4Mi1cbmtlcm5lbC9mb3JrLmM6MjgzOlx0dmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpO1xua2VybmVsL2ZvcmsuYy0yODQtfVxuLS1cbmtlcm5lbC9mb3JrLmM9Mjk0PXN0YXRpYyBpbnQgZnJlZV92bV9zdGFja19jYWNoZSh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbmtlcm5lbC9mb3JrLmMtMzA0LVxua2VybmVsL2ZvcmsuYzozMDU6XHRcdHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcik7XG5rZXJuZWwvZm9yay5jLTMwNi1cdFx0Y2FjaGVkX3ZtX3N0YWNrX2FyZWFzW2ldID0gTlVMTDtcbi0tXG5rZXJuZWwvZm9yay5jPTMzMz1zdGF0aWMgaW50IGFsbG9jX3RocmVhZF9zdGFja19ub2RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgbm9kZSlcbi0tXG5rZXJuZWwvZm9yay5jLTM0MC1cdFx0aWYgKG1lbWNnX2NoYXJnZV9rZXJuZWxfc3RhY2sodm1fYXJlYSkpIHtcbmtlcm5lbC9mb3JrLmM6MzQxOlx0XHRcdHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcik7XG5rZXJuZWwvZm9yay5jLTM0Mi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5rZXJuZWwvZm9yay5jLTM0Ni1cdFx0aWYgKCFrYXNhbl9od190YWdzX2VuYWJsZWQoKSlcbmtlcm5lbC9mb3JrLmM6MzQ3Olx0XHRcdGthc2FuX3VucG9pc29uX3JhbmdlKHZtX2FyZWEtXHUwMDNlYWRkciwgVEhSRUFEX1NJWkUpO1xua2VybmVsL2ZvcmsuYy0zNDgtXG5rZXJuZWwvZm9yay5jOjM0OTpcdFx0c3RhY2sgPSBrYXNhbl9yZXNldF90YWcodm1fYXJlYS1cdTAwM2VhZGRyKTtcbmtlcm5lbC9mb3JrLmMtMzUwLVxua2VybmVsL2ZvcmsuYy0zNTEtXHRcdC8qIENsZWFyIHN0YWxlIHBvaW50ZXJzIGZyb20gcmV1c2VkIHN0YWNrLiAqL1xua2VybmVsL2ZvcmsuYzozNTI6XHRcdGNsZWFyX3BhZ2VzKHZtX2FyZWEtXHUwMDNlYWRkciwgdm1fYXJlYS1cdTAwM2Vucl9wYWdlcyk7XG5rZXJuZWwvZm9yay5jLTM1My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4NTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRocmVhZCBTdGFjayBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyB0aHJlYWQgc3RhY2tzIGFyZSBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgdGhlIEtBU0FOIGFzcGVjdHMuIEZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgYGFsbG9jX3RocmVhZF9zdGFja19ub2RlYC4gSSBzZWUgdGhlIHN0YWNrIG1ldGFkYXRhIHJlc2V0OiBpZiBLQVNBTiBoYXJkd2FyZSB0YWdzIGFyZW4mIzM5O3QgZW5hYmxlZCwgaXQgdW5wb2lzb25zIHRoZSByYW5nZS4gVGhlbiBpdCAqcmVzZXRzKiB0aGUgdGFnIHZpYSBga2FzYW5fcmVzZXRfdGFnYCBhbmQgY2xlYXJzIHRoZSBwYWdlcy4gQ3J1Y2lhbGx5LCB0aGUgY29kZSBzdG9yZXMgYSBgdm1fYXJlYWAgcG9pbnRlciAoYHRzay0mZ3Q7c3RhY2tfdm1fYXJlYWApICphbmQqIHRoZSB0YWdnZWQgc3RhY2sgYWRkcmVzcyAoYHRzay0mZ3Q7c3RhY2tgKS4gIFRoZXJlJiMzOTtzIGEgc2ltaWxhciBwcm9jZXNzIHVzaW5nIHRoZSBzYW1lIHZhcmlhYmxlcy4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgZGV0YWlscyBpbiBtaW5kLgoKTm93LCBJJiMzOTttIHNoaWZ0aW5nIHRvIGB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlYC4gSXQgdGFrZXMgdGhlIGB0YXNrX3N0cnVjdGAsIGdyYWJzIHRoZSBgdm1fc3RhY2tgLCBhbmQgc3RvcmVzIGEgYHN0YWNrX3ZtX2FyZWFgLiBJdCB0aGVuIHVzZXMgYGNhbGxfcmN1YCB0byBkZWZlciB0aGUgZnJlZSB1c2luZyBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YC4KCkluIGB0aHJlYWRfc3RhY2tfZnJlZV9yY3VgLCBpdCBnZXRzIHRoZSBgdm1fc3RhY2tgIGFuZCBpdHMgYXNzb2NpYXRlZCBgdm1fYXJlYWAuICBJdCB0cmllcyB0byByZWxlYXNlIHRoZSBzdGFjayB0byB0aGUgY2FjaGUuIEFuZCBpZiB0aGF0IGZhaWxzLCBpdCBjYWxscyBgdmZyZWVgIG9uIHRoZSAqKnJlc2V0KiogdGFnZ2VkIGFkZHJlc3MgKGB2bV9hcmVhLSZndDthZGRyYCkuIE9rYXksIHRoYXQmIzM5O3MgdGhlIGtpY2tlciEKCk5vdywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIHdoZXJlICpleGFjdGx5KiBpcyBgdm1fYXJlYS0mZ3Q7YWRkcmAgYmVpbmcgdGFnZ2VkPyBUaGUgY29kZSBJIGxvb2tlZCBhdCBpcyBub3Qgd2hlcmUgaXQgYXBwZWFycyB0byBoYXBwZW4uIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIFRoZSBjYWxsIHRvIGBrYXNhbl9yZXNldF90YWdgIGhpbnRzIHRoYXQgdGFnZ2luZyAqaGFwcGVucyogYnV0IGl0JiMzOTtzIG5vdCBwcmVzZW50IGhlcmUuCgpUaW1lIHRvIHNlYXJjaCB3aGVyZSB0aGlzIGB2bV9hcmVhLSZndDthZGRyYCBpcyBzZXQuIEkgbmVlZCB0byBncmVwIHRoZSBjb2RlYmFzZSBmb3IgYHZtLSZndDthZGRyID0gYCBvciBgYXJlYS0mZ3Q7YWRkciA9IGAgdG8gc2VlIGhvdyB0aGlzIHZhbHVlIGdldHMgaW5pdGlhbGl6ZWQuICBUaGF0IHNob3VsZCByZXZlYWwgdGhlIHBvaW50IHdoZXJlIEtBU0FOJiMzOTtzIHRhZ2dpbmcgbWFnaWMgaXMgYWN0dWFsbHkgYXBwbGllZCB0byB0aGUgbWVtb3J5IHJlZ2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7LVx1MDAzZWFkZHIgPSAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTIwMzQ9c3RhdGljIGlubGluZSB2b2lkIHNldHVwX3ZtYWxsb2Nfdm0oc3RydWN0IHZtX3N0cnVjdCAqdm0sXG4tLVxubW0vdm1hbGxvYy5jLTIwMzctXHR2bS1cdTAwM2VmbGFncyA9IGZsYWdzO1xubW0vdm1hbGxvYy5jOjIwMzg6XHR2bS1cdTAwM2VhZGRyID0gKHZvaWQgKil2YS1cdTAwM2V2YV9zdGFydDtcbm1tL3ZtYWxsb2MuYy0yMDM5LVx0dm0tXHUwMDNlc2l6ZSA9IHZtLVx1MDAzZXJlcXVlc3RlZF9zaXplID0gdmFfc2l6ZSh2YSk7XG4tLVxubW0vdm1hbGxvYy5jPTIwNDg9c3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKmFsbG9jX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxubW0vdm1hbGxvYy5jLTIxMzItXHRpZiAodm0pIHtcbm1tL3ZtYWxsb2MuYzoyMTMzOlx0XHR2bS1cdTAwM2VhZGRyID0gKHZvaWQgKil2YS1cdTAwM2V2YV9zdGFydDtcbm1tL3ZtYWxsb2MuYy0yMTM0LVx0XHR2bS1cdTAwM2VzaXplID0gdmFfc2l6ZSh2YSk7XG4tLVxubW0vdm1hbGxvYy5jPTMxOTY9dm9pZCBfX2luaXQgdm1fYXJlYV9yZWdpc3Rlcl9lYXJseShzdHJ1Y3Qgdm1fc3RydWN0ICp2bSwgc2l6ZV90IGFsaWduKVxuLS1cbm1tL3ZtYWxsb2MuYy0zMjA5LVx0QlVHX09OKGFkZHIgXHUwMDNlIFZNQUxMT0NfRU5EIC0gdm0tXHUwMDNlc2l6ZSk7XG5tbS92bWFsbG9jLmM6MzIxMDpcdHZtLVx1MDAzZWFkZHIgPSAodm9pZCAqKWFkZHI7XG5tbS92bWFsbG9jLmMtMzIxMS1cdHZtLVx1MDAzZW5leHQgPSAqcDtcbi0tXG5tbS92bWFsbG9jLmM9MzIyNz1zdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbm1tL3ZtYWxsb2MuYy0zMjcwLVx0aWYgKCEoZmxhZ3MgXHUwMDI2IFZNX0FMTE9DKSlcbm1tL3ZtYWxsb2MuYzozMjcxOlx0XHRhcmVhLVx1MDAzZWFkZHIgPSBrYXNhbl91bnBvaXNvbl92bWFsbG9jKGFyZWEtXHUwMDNlYWRkciwgcmVxdWVzdGVkX3NpemUsXG5tbS92bWFsbG9jLmMtMzI3Mi1cdFx0XHRcdFx0XHQgICAgS0FTQU5fVk1BTExPQ19QUk9UX05PUk1BTCk7XG4tLVxubW0vdm1hbGxvYy5jPTQwMzM9dm9pZCAqX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcbi0tXG5tbS92bWFsbG9jLmMtNDEyOS1cdGlmICghc2tpcF92bWFsbG9jX2thc2FuKVxubW0vdm1hbGxvYy5jOjQxMzA6XHRcdGFyZWEtXHUwMDNlYWRkciA9IGthc2FuX3VucG9pc29uX3ZtYWxsb2MoYXJlYS1cdTAwM2VhZGRyLCBzaXplLCBrYXNhbl9mbGFncyk7XG5tbS92bWFsbG9jLmMtNDEzMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgzNTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IFNhbml0aXphdGlvbiBpbiB2bWFsbG9jKioKCk9rYXksIGhlcmUgd2UgYXJlLCBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgYWdhaW4uIExpbmUgNDEzMC4uLiB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdGhhdCBgYXJlYS0mZ3Q7YWRkciA9IGthc2FuX3VucG9pc29uX3ZtYWxsb2MoYXJlYS0mZ3Q7YWRkciwgc2l6ZSwga2FzYW5fZmxhZ3MpO2AgY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgYGthc2FuX3VucG9pc29uX3ZtYWxsb2NgIHJldHVybmluZz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdG8gdGhhdCBgYXJlYS0mZ3Q7YWRkcmAgcG9pbnRlci4gSXMgaXQgYmVpbmcgbW9kaWZpZWQgZGlyZWN0bHk/IElzIHRoZXJlIGEgbmV3IGFkZHJlc3MgYmVpbmcgYXNzaWduZWQ/IElzIHRoZXJlIGEgc3RhdHVzIGluZGljYXRvcj8gTGV0JiMzOTtzIHRyYWNlIGludG8gdGhhdCBga2FzYW5fdW5wb2lzb25fdm1hbGxvY2AgZnVuY3Rpb24gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCB0aGF0IGxldmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgY29tcGxldGVseSB0byBhc3Nlc3MgaXRzIGltcGFjdCBvbiB0aGUgbGFyZ2VyIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRleHQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbnVhbmNlIG9mIHRoZSBLQVNBTiBpbXBsZW1lbnRhdGlvbiBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrYXNhbl91bnBvaXNvbl92bWFsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2FzYW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2FzYW4vY29tbW9uLmM9NTgxPXZvaWQgX19rYXNhbl91bnBvaXNvbl92bWFwX2FyZWFzKHN0cnVjdCB2bV9zdHJ1Y3QgKip2bXMsIGludCBucl92bXMsXG4tLVxubW0va2FzYW4vY29tbW9uLmMtNTk4LVx0YWRkciA9IHZtc1swXS1cdTAwM2VhZGRyO1xubW0va2FzYW4vY29tbW9uLmM6NTk5Olx0dm1zWzBdLVx1MDAzZWFkZHIgPSBfX2thc2FuX3VucG9pc29uX3ZtYWxsb2MoYWRkciwgc2l6ZSwgZmxhZ3MpO1xubW0va2FzYW4vY29tbW9uLmMtNjAwLVx0dGFnID0gZ2V0X3RhZyh2bXNbMF0tXHUwMDNlYWRkcik7XG4tLVxubW0va2FzYW4vY29tbW9uLmMtNjA1LVx0XHR2bXNbYXJlYV0tXHUwMDNlYWRkciA9XG5tbS9rYXNhbi9jb21tb24uYzo2MDY6XHRcdFx0X19rYXNhbl91bnBvaXNvbl92bWFsbG9jKGFkZHIsIHNpemUsIGZsYWdzIHwgS0FTQU5fVk1BTExPQ19LRUVQX1RBRyk7XG5tbS9rYXNhbi9jb21tb24uYy02MDctXHR9XG4tLVxubW0va2FzYW4vY29tbW9uLmM9NjEwPXZvaWQgX19rYXNhbl92cmVhbGxvYyhjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG9sZF9zaXplLFxuLS1cbm1tL2thc2FuL2NvbW1vbi5jLTYyMi1cdFx0b2xkX3NpemUgPSByb3VuZF9kb3duKG9sZF9zaXplLCBLQVNBTl9HUkFOVUxFX1NJWkUpO1xubW0va2FzYW4vY29tbW9uLmM6NjIzOlx0XHRfX2thc2FuX3VucG9pc29uX3ZtYWxsb2MoYWRkciAmIzQzOyBvbGRfc2l6ZSxcbm1tL2thc2FuL2NvbW1vbi5jLTYyNC1cdFx0XHRcdFx0bmV3X3NpemUgLSBvbGRfc2l6ZSxcbi0tXG5tbS9rYXNhbi9od190YWdzLmM9Mjg3PXN0YXRpYyB2b2lkIHVucG9pc29uX3ZtYWxsb2NfcGFnZXMoY29uc3Qgdm9pZCAqYWRkciwgdTggdGFnKVxuLS1cbm1tL2thc2FuL2h3X3RhZ3MuYy0yOTMtXHQgKiBBcyBoYXJkd2FyZSB0YWctYmFzZWQgS0FTQU4gb25seSB0YWdzIFZNX0FMTE9DIHZtYWxsb2MgYWxsb2NhdGlvbnNcbm1tL2thc2FuL2h3X3RhZ3MuYzoyOTQ6XHQgKiAoc2VlIHRoZSBjb21tZW50IGluIF9fa2FzYW5fdW5wb2lzb25fdm1hbGxvYyksIGFsbCBvZiB0aGUgcGFnZXNcbm1tL2thc2FuL2h3X3RhZ3MuYy0yOTUtXHQgKiBzaG91bGQgYmVsb25nIHRvIGEgc2luZ2xlIGFyZWEuXG4tLVxubW0va2FzYW4vaHdfdGFncy5jPTMwOD1zdGF0aWMgdm9pZCBpbml0X3ZtYWxsb2NfcGFnZXMoY29uc3Qgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5tbS9rYXNhbi9od190YWdzLmMtMzE4LVxubW0va2FzYW4vaHdfdGFncy5jOjMxOTp2b2lkICpfX2thc2FuX3VucG9pc29uX3ZtYWxsb2MoY29uc3Qgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbm1tL2thc2FuL2h3X3RhZ3MuYy0zMjAtXHRcdFx0XHRrYXNhbl92bWFsbG9jX2ZsYWdzX3QgZmxhZ3MpXG4tLVxubW0va2FzYW4vc2hhZG93LmM9NTY2PXZvaWQgX19rYXNhbl9yZWxlYXNlX3ZtYWxsb2ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0va2FzYW4vc2hhZG93LmMtNjEyLVxubW0va2FzYW4vc2hhZG93LmM6NjEzOnZvaWQgKl9fa2FzYW5fdW5wb2lzb25fdm1hbGxvYyhjb25zdCB2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxubW0va2FzYW4vc2hhZG93LmMtNjE0LVx0XHRcdCAgICAgICBrYXNhbl92bWFsbG9jX2ZsYWdzX3QgZmxhZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MzYzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktBU0FOIHZtYWxsb2MgVGFnZ2luZyAtIEEgRGl2ZSBpbnRvIHRoZSBBcmNoaXRlY3R1cmUtU3BlY2lmaWMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IEtBU0FOIGhhbmRsZXMgYHZtYWxsb2NgIGFyZWFzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgdGFnZ2luZyBtZWNoYW5pc20uIE15IGZpcnN0IHBvaW50IG9mIHJlZmVyZW5jZSBpcyBgbW0va2FzYW4vaHdfdGFncy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX19rYXNhbl91bnBvaXNvbl92bWFsbG9jYCBmdW5jdGlvbi4gSSBzZWUgaXQgYXNzaWducyBhIHJhbmRvbSB0YWcsIHJldHVybmluZyBhICYjMzQ7dGFnZ2VkIHBvaW50ZXIsJiMzNDsgYW5kIGNydWNpYWxseSwgaXQgdXBkYXRlcyBgYXJlYS0mZ3Q7YWRkcmAgd2l0aCB0aGlzIHRhZ2dlZCBwb2ludGVyLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZzogdGhpcyB0YWdnZWQgcG9pbnRlciBsb2dpYyBhcHBlYXJzICpvbmx5KiBpbiB0aGUgSFdfVEFHUyBhbmQgU1dfVEFHUyBicmFuY2hlcy4gVGhpcyBtZWFucyB0aGlzIHRhZ2dlZCBwb2ludGVyIGFuZCBhcmVhIHVwZGF0ZSBhcmUgKnNvbGVseSogZm9yIGFybTY0IQoKQnV0IHdoYXQgYWJvdXQgb3RoZXIgYXJjaGl0ZWN0dXJlcywgbGlrZSBhbWQ2ND8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBga2FzYW5fdW5wb2lzb25fdm1hbGxvY2AgKmRvZXMqIG9uIGFtZDY0LiBTbyBJJiMzOTttIG5vdyBzd2l0Y2hpbmcgZ2VhcnMgdG8gYG1tL2thc2FuL3NoYWRvdy5jYC4gTXkgbmV4dCBmb2N1cyBpcyBsaW5lcyA2MTItNjMwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgS0FTQU4gaGFuZGxlcyB0aGUgcG9pbnRlciByZXR1cm4gaW4gdGhpcyBjb250ZXh0OyBzcGVjaWZpY2FsbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBvaW50ZXIgaXMgbm90IHRhZ2dlZCBhbmQgdGhhdCBpdCBpcyB1bnBvaXNvbmVkIGluIHRoZSBzaGFkb3cgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2thc2FuL3NoYWRvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTI6XHRcbiA2MTM6XHR2b2lkICpfX2thc2FuX3VucG9pc29uX3ZtYWxsb2MoY29uc3Qgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiA2MTQ6XHRcdFx0XHQgICAgICAga2FzYW5fdm1hbGxvY19mbGFnc190IGZsYWdzKVxuIDYxNTpcdHtcbiA2MTY6XHRcdC8qXG4gNjE3Olx0XHQgKiBTb2Z0d2FyZSBLQVNBTiBtb2RlcyB1bnBvaXNvbiBib3RoIFZNX0FMTE9DIGFuZCBub24tVk1fQUxMT0NcbiA2MTg6XHRcdCAqIG1hcHBpbmdzLCBzbyB0aGUgS0FTQU5fVk1BTExPQ19WTV9BTExPQyBmbGFnIGlzIGlnbm9yZWQuXG4gNjE5Olx0XHQgKiBTb2Z0d2FyZSBLQVNBTiBtb2RlcyBjYW4mIzM5O3Qgb3B0aW1pemUgemVyb2luZyBtZW1vcnkgYnkgY29tYmluaW5nIGl0XG4gNjIwOlx0XHQgKiB3aXRoIHNldHRpbmcgbWVtb3J5IHRhZ3MsIHNvIHRoZSBLQVNBTl9WTUFMTE9DX0lOSVQgZmxhZyBpcyBpZ25vcmVkLlxuIDYyMTpcdFx0ICovXG4gNjIyOlx0XG4gNjIzOlx0XHRpZiAoIWlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoc3RhcnQpKVxuIDYyNDpcdFx0XHRyZXR1cm4gKHZvaWQgKilzdGFydDtcbiA2MjU6XHRcbiA2MjY6XHRcdC8qXG4gNjI3Olx0XHQgKiBEb24mIzM5O3QgdGFnIGV4ZWN1dGFibGUgbWVtb3J5IHdpdGggdGhlIHRhZy1iYXNlZCBtb2RlLlxuIDYyODpcdFx0ICogVGhlIGtlcm5lbCBkb2VzbiYjMzk7dCB0b2xlcmF0ZSBoYXZpbmcgdGhlIFBDIHJlZ2lzdGVyIHRhZ2dlZC5cbiA2Mjk6XHRcdCAqL1xuIDYzMDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tBU0FOX1NXX1RBR1MpIFx1MDAyNlx1MDAyNlxuIDYzMTpcdFx0ICAgICEoZmxhZ3MgXHUwMDI2IEtBU0FOX1ZNQUxMT0NfUFJPVF9OT1JNQUwpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBfX2thc2FuX3VucG9pc29uX3ZtYWxsb2NgIGluIGBtbS9rYXNhbi9zaGFkb3cuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzIEtBU0FOIHVucG9pc29uaW5nIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYF9fa2FzYW5fdW5wb2lzb25fdm1hbGxvY2Agd29ya3MuIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBpbiB0aGlzIGFyZWEsIHNvIGxldCYjMzk7cyBzZWUgaG93IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIEtBU0FOIHNjaGVtZSBmb3IgdmlydHVhbCBhbGxvY2F0aW9ucy4gSSB3YW50IHRvIHBheSBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hhZG93IG1lbW9yeS4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSB1bnBvaXNvbmluZyBsb2dpYyBpdHNlbGYg4oCTIHdoYXQgcmFuZ2Ugb2YgbWVtb3J5IGRvZXMgaXQgYWZmZWN0LCB3aGF0JiMzOTtzIHRoZSBncmFudWxhciBwcmVjaXNpb24sIGFuZCB3aGF0JiMzOTtzIHRoZSBzdHJhdGVneT8gSSBrbm93IGhvdyBLQVNBTiB3b3JrcyBpbiBwcmluY2lwbGUsIGJ1dCBJIG5lZWQgdG8gc2VlIGhvdyBpdOKAmXMgYXBwbGllZCBzcGVjaWZpY2FsbHkgdG8gYHZtYWxsb2NgLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2FzYW4vc2hhZG93LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYzMDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tBU0FOX1NXX1RBR1MpIFx1MDAyNlx1MDAyNlxuIDYzMTpcdFx0ICAgICEoZmxhZ3MgXHUwMDI2IEtBU0FOX1ZNQUxMT0NfUFJPVF9OT1JNQUwpKVxuIDYzMjpcdFx0XHRyZXR1cm4gKHZvaWQgKilzdGFydDtcbiA2MzM6XHRcbiA2MzQ6XHRcdGlmICh1bmxpa2VseSghKGZsYWdzIFx1MDAyNiBLQVNBTl9WTUFMTE9DX0tFRVBfVEFHKSkpXG4gNjM1Olx0XHRcdHN0YXJ0ID0gc2V0X3RhZyhzdGFydCwga2FzYW5fcmFuZG9tX3RhZygpKTtcbiA2MzY6XHRcbiA2Mzc6XHRcdGthc2FuX3VucG9pc29uKHN0YXJ0LCBzaXplLCBmYWxzZSk7XG4gNjM4Olx0XHRyZXR1cm4gKHZvaWQgKilzdGFydDtcbiA2Mzk6XHR9XG4gNjQwOlx0XG4gNjQxOlx0LypcbiA2NDI6XHQgKiBQb2lzb24gdGhlIHNoYWRvdyBmb3IgYSB2bWFsbG9jIHJlZ2lvbi4gQ2FsbGVkIGFzIHBhcnQgb2YgdGhlXG4gNjQzOlx0ICogZnJlZWluZyBwcm9jZXNzIGF0IHRoZSB0aW1lIHRoZSByZWdpb24gaXMgZnJlZWQuXG4gNjQ0Olx0ICovXG4gNjQ1Olx0dm9pZCBfX2thc2FuX3BvaXNvbl92bWFsbG9jKGNvbnN0IHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4gNjQ2Olx0e1xuIDY0NzpcdFx0aWYgKCFpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKHN0YXJ0KSlcbiA2NDg6XHRcdFx0cmV0dXJuO1xuIDY0OTpcdFxuIDY1MDpcdFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIEtBU0FOX0dSQU5VTEVfU0laRSk7XG4gNjUxOlx0XHRrYXNhbl9wb2lzb24oc3RhcnQsIHNpemUsIEtBU0FOX1ZNQUxMT0NfSU5WQUxJRCwgZmFsc2UpO1xuIDY1MjpcdH1cbiA2NTM6XHRcbiA2NTQ6XHQjZWxzZSAvKiBDT05GSUdfS0FTQU5fVk1BTExPQyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDgzMgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktBU0FOIFRhZ2dpbmcgQ29udW5kcnVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgS0FTQU4gc3R1ZmYsIHNwZWNpZmljYWxseSB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbi4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyBob3cgYENPTkZJR19LQVNBTl9HRU5FUklDYCBhY3R1YWxseSBoYW5kbGVzIHRhZ2dpbmcuIERvZXMgZW5hYmxpbmcgdGhpcyB0aGluZyBzZXQgbWVtb3J5IHRhZ3M/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuCgpPa2F5LCBJIHNlZSBhIGZ1bmN0aW9uIGNhbGw6IGBzZXRfdGFnKHN0YXJ0LCBrYXNhbl9yYW5kb21fdGFnKCkpYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IuIE5vdywgSSBuZWVkIHRvIGtub3cgd2hhdCBgc2V0X3RhZ2AgKmlzKiB3aXRoaW4gdGhpcyBgQ09ORklHX0tBU0FOX0dFTkVSSUNgIGNvbnRleHQuIEkgbmVlZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0LCBzbyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCB0aHJvdWdoIHRoZSBjb2RlIHRvIGZpbmQgd2hlcmUgdGhhdCBgc2V0X3RhZ2AgZnVuY3Rpb24gaXMgZGVmaW5lZCwgb3Igd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCBhcyBhIGZ1bmN0aW9uIGNhbGwuIExldCYjMzk7cyBmaW5kIHRoaXMgZGVmaW5pdGlvbi4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBub3QgYnVyaWVkIHRvbyBkZWVwLiBJIGp1c3QgbmVlZCB0byBkZXRlcm1pbmUgaXRzIGJlaGF2aW9yLCBhbmQgdGhlbiBJIHNob3VsZCBoYXZlIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSB0YWdnaW5nIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgc2V0X3RhZ3xzdGF0aWMgaW5saW5lLipzZXRfdGFnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYXJjaC9hcm02NC9tZW1vcnktdGFnZ2luZy1leHRlbnNpb24ucnN0PTI1MD1FeGFtcGxlIG9mIGNvcnJlY3QgdXNhZ2Vcbi0tXG5Eb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvbWVtb3J5LXRhZ2dpbmctZXh0ZW5zaW9uLnJzdC0zMDQtICAgICAqL1xuRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L21lbW9yeS10YWdnaW5nLWV4dGVuc2lvbi5yc3Q6MzA1OiAgICAjZGVmaW5lIHNldF90YWcodGFnZ2VkX2FkZHIpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG5Eb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvbWVtb3J5LXRhZ2dpbmctZXh0ZW5zaW9uLnJzdC0zMDYtICAgICAgICAgICAgYXNtIHZvbGF0aWxlKFwmIzM0O3N0ZyAlMCwgWyUwXVwmIzM0OyA6IDogXCYjMzQ7clwmIzM0OyAodGFnZ2VkX2FkZHIpIDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTsgXFxcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1X3V0aWxzLmg9NTQ9c3RhdGljIGlubGluZSB2b2lkIHNldF9ldmVudF9tYXNrKHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oLTY1LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oOjY2OnN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGFnX21hc2sodm9pZClcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVfdXRpbHMuaC02Ny17XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oPTk3PXN0YXRpYyBpbmxpbmUgdm9pZCBlbnF1ZXVlX3B1dGxsYyhhZGRyNjQgbHNjc2FfZWEpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oLTExNy1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVfdXRpbHMuaDoxMTg6c3RhdGljIGlubGluZSB2b2lkIHNldF90YWdfdXBkYXRlKHZvaWQpXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1X3V0aWxzLmgtMTE5LXtcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuaD0zMDE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2hjaTEzOTRfaXRfZGF0YV9nZXRfdGFnKGNvbnN0IF9fbGUzMiAqZGF0YSlcbi0tXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuaC0zMDUtXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuaDozMDY6c3RhdGljIGlubGluZSB2b2lkIG9oY2kxMzk0X2l0X2RhdGFfc2V0X3RhZyhfX2xlMzIgKmRhdGEsIHVuc2lnbmVkIGludCB0YWcpXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuaC0zMDcte1xuLS1cbmRyaXZlcnMvZmlyZXdpcmUvcGFja2V0LWhlYWRlci1kZWZpbml0aW9ucy5oPTIwNj1zdGF0aWMgaW5saW5lIHZvaWQgaXNvY19oZWFkZXJfc2V0X2RhdGFfbGVuZ3RoKHUzMiAqaGVhZGVyLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW5ndGgpXG4tLVxuZHJpdmVycy9maXJld2lyZS9wYWNrZXQtaGVhZGVyLWRlZmluaXRpb25zLmgtMjExLVxuZHJpdmVycy9maXJld2lyZS9wYWNrZXQtaGVhZGVyLWRlZmluaXRpb25zLmg6MjEyOnN0YXRpYyBpbmxpbmUgdm9pZCBpc29jX2hlYWRlcl9zZXRfdGFnKHUzMiAqaGVhZGVyLCB1bnNpZ25lZCBpbnQgdGFnKVxuZHJpdmVycy9maXJld2lyZS9wYWNrZXQtaGVhZGVyLWRlZmluaXRpb25zLmgtMjEzLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2RtYS90aS1jcHBpNS5oPTI3Nj1zdGF0aWMgaW5saW5lIHZvaWQgY3BwaTVfZGVzY19nZXRfdGFnc19pZHMoc3RydWN0IGNwcGk1X2Rlc2NfaGRyX3QgKmRlc2NfaGRyLFxuLS1cbmluY2x1ZGUvbGludXgvZG1hL3RpLWNwcGk1LmgtMjk1LSAqL1xuaW5jbHVkZS9saW51eC9kbWEvdGktY3BwaTUuaDoyOTY6c3RhdGljIGlubGluZSB2b2lkIGNwcGk1X2Rlc2Nfc2V0X3RhZ3NfaWRzKHN0cnVjdCBjcHBpNV9kZXNjX2hkcl90ICpkZXNjX2hkcixcbmluY2x1ZGUvbGludXgvZG1hL3RpLWNwcGk1LmgtMjk3LVx0XHRcdFx0XHQgICB1MzIgc3JjX3RhZ19pZCwgdTMyIGRzdF90YWdfaWQpXG4tLVxuaW5jbHVkZS9saW51eC9kc2Evb2NlbG90Lmg9MjQ3PXN0YXRpYyBpbmxpbmUgdm9pZCBvY2Vsb3RfaWZoX3NldF9zcmModm9pZCAqaW5qZWN0aW9uLCB1NjQgc3JjKVxuLS1cbmluY2x1ZGUvbGludXgvZHNhL29jZWxvdC5oLTI1MS1cbmluY2x1ZGUvbGludXgvZHNhL29jZWxvdC5oOjI1MjpzdGF0aWMgaW5saW5lIHZvaWQgb2NlbG90X2lmaF9zZXRfdGFnX3R5cGUodm9pZCAqaW5qZWN0aW9uLCB1NjQgdGFnX3R5cGUpXG5pbmNsdWRlL2xpbnV4L2RzYS9vY2Vsb3QuaC0yNTMte1xuLS1cbmluY2x1ZGUvbGludXgvaW50ZXJjb25uZWN0Lmg9MTAyPXN0YXRpYyBpbmxpbmUgaW50IGljY19zZXRfYncoc3RydWN0IGljY19wYXRoICpwYXRoLCB1MzIgYXZnX2J3LCB1MzIgcGVha19idylcbi0tXG5pbmNsdWRlL2xpbnV4L2ludGVyY29ubmVjdC5oLTEwNi1cbmluY2x1ZGUvbGludXgvaW50ZXJjb25uZWN0Lmg6MTA3OnN0YXRpYyBpbmxpbmUgdm9pZCBpY2Nfc2V0X3RhZyhzdHJ1Y3QgaWNjX3BhdGggKnBhdGgsIHUzMiB0YWcpXG5pbmNsdWRlL2xpbnV4L2ludGVyY29ubmVjdC5oLTEwOC17XG4tLVxuaW5jbHVkZS9saW51eC9rYXNhbi5oPTUxND1zdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcmVjb3JkX2F1eF9zdGFjayh2b2lkICpwdHIpIHt9XG4tLVxuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUxOS1cbmluY2x1ZGUvbGludXgva2FzYW4uaDo1MjA6c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcbmluY2x1ZGUvbGludXgva2FzYW4uaC01MjEte1xuLS1cbmluY2x1ZGUvbGludXgva2FzYW4uaD01MzI9Ym9vbCBrYXNhbl9yZXBvcnQoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsXG4tLVxuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUzNi1cbmluY2x1ZGUvbGludXgva2FzYW4uaDo1Mzc6c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcbmluY2x1ZGUvbGludXgva2FzYW4uaC01Mzgte1xuLS1cbm1tL2thc2FuL2thc2FuLmg9NDExPXN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9xdWFyYW50aW5lX3JlbW92ZV9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpIHsgfVxuLS1cbm1tL2thc2FuL2thc2FuLmgtNDE0LSNpZm5kZWYgYXJjaF9rYXNhbl9zZXRfdGFnXG5tbS9rYXNhbi9rYXNhbi5oOjQxNTpzdGF0aWMgaW5saW5lIGNvbnN0IHZvaWQgKmFyY2hfa2FzYW5fc2V0X3RhZyhjb25zdCB2b2lkICphZGRyLCB1OCB0YWcpXG5tbS9rYXNhbi9rYXNhbi5oLTQxNi17XG4tLVxubW0va2FzYW4va2FzYW4uaC00MjMtXG5tbS9rYXNhbi9rYXNhbi5oOjQyNDojZGVmaW5lIHNldF90YWcoYWRkciwgdGFnKVx0KCh2b2lkICopYXJjaF9rYXNhbl9zZXRfdGFnKChhZGRyKSwgKHRhZykpKVxubW0va2FzYW4va2FzYW4uaC00MjUtI2RlZmluZSBnZXRfdGFnKGFkZHIpXHRcdGFyY2hfa2FzYW5fZ2V0X3RhZyhhZGRyKVxuLS1cbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaD0yNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICp2aXJ0X3RvX3BhZ2Uodm9pZCAqdmlydClcbi0tXG50b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmgtMzMtXG50b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmg6MzQ6c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaC0zNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjg3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIFNhbml0aXplciYjMzk7cyBDb3JlKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBUaGUgcHJvYmxlbSYjMzk7cyBiZWVuIHBvaW50ZWQgdG93YXJkcyBtZW1vcnkgZXJyb3JzLCBzbyBJJiMzOTttIHRoaW5raW5nIGEgZGVlcCBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgc2FmZXR5IG1lY2hhbmlzbXMgaXMgaW4gb3JkZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyBzdHJhaWdodCBmb3IgYG1tL2thc2FuL2thc2FuLmhgLiBMaW5lIDQxNCDigJMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgY3JpdGljYWwgZGVmaW5pdGlvbnMgb3IgY29uZmlndXJhdGlvbnMgcmVzaWRlLCBvciBwb3RlbnRpYWxseSB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBvbmUgb2YgdGhlIEtBU0FOJiMzOTtzIGNvcmUgbWVtb3J5IGVycm9yIGhhbmRsaW5nIHJvdXRpbmVzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEga2V5IG1hY3JvLCBzdHJ1Y3R1cmUsIG9yIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHRoZXJlIHRoYXQmIzM5O3MgY2VudHJhbCB0byBLQVNBTiYjMzk7cyBvcGVyYXRpb24uIFRoaXMgbGluZSBjb3VsZCBleHBvc2UgdGhlIHRyaWdnZXIgdGhhdCBjYXVzZXMgS0FTQU4gdG8gc3RlcCBpbiBvciBhbiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHJlbGV2YW50IHN0YXRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9rYXNhbi9rYXNhbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTA6XHRzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcXVhcmFudGluZV9yZWR1Y2Uodm9pZCkgeyB9XG4gNDExOlx0c3RhdGljIGlubGluZSB2b2lkIGthc2FuX3F1YXJhbnRpbmVfcmVtb3ZlX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSkgeyB9XG4gNDEyOlx0I2VuZGlmXG4gNDEzOlx0XG4gNDE0Olx0I2lmbmRlZiBhcmNoX2thc2FuX3NldF90YWdcbiA0MTU6XHRzdGF0aWMgaW5saW5lIGNvbnN0IHZvaWQgKmFyY2hfa2FzYW5fc2V0X3RhZyhjb25zdCB2b2lkICphZGRyLCB1OCB0YWcpXG4gNDE2Olx0e1xuIDQxNzpcdFx0cmV0dXJuIGFkZHI7XG4gNDE4Olx0fVxuIDQxOTpcdCNlbmRpZlxuIDQyMDpcdCNpZm5kZWYgYXJjaF9rYXNhbl9nZXRfdGFnXG4gNDIxOlx0I2RlZmluZSBhcmNoX2thc2FuX2dldF90YWcoYWRkcilcdDBcbiA0MjI6XHQjZW5kaWZcbiA0MjM6XHRcbiA0MjQ6XHQjZGVmaW5lIHNldF90YWcoYWRkciwgdGFnKVx0KCh2b2lkICopYXJjaF9rYXNhbl9zZXRfdGFnKChhZGRyKSwgKHRhZykpKVxuIDQyNTpcdCNkZWZpbmUgZ2V0X3RhZyhhZGRyKVx0XHRhcmNoX2thc2FuX2dldF90YWcoYWRkcilcbiA0MjY6XHRcbiA0Mjc6XHQjaWZkZWYgQ09ORklHX0tBU0FOX0hXX1RBR1NcbiA0Mjg6XHRcbiA0Mjk6XHQjZGVmaW5lIGh3X2VuYWJsZV90YWdfY2hlY2tzX3N5bmMoKVx0XHRhcmNoX2VuYWJsZV90YWdfY2hlY2tzX3N5bmMoKVxuIDQzMDpcdCNkZWZpbmUgaHdfZW5hYmxlX3RhZ19jaGVja3NfYXN5bmMoKVx0XHRhcmNoX2VuYWJsZV90YWdfY2hlY2tzX2FzeW5jKClcbiA0MzE6XHQjZGVmaW5lIGh3X2VuYWJsZV90YWdfY2hlY2tzX2FzeW1tKClcdFx0YXJjaF9lbmFibGVfdGFnX2NoZWNrc19hc3ltbSgpXG4gNDMyOlx0I2RlZmluZSBod19zdXBwcmVzc190YWdfY2hlY2tzX3N0YXJ0KClcdFx0YXJjaF9zdXBwcmVzc190YWdfY2hlY2tzX3N0YXJ0KClcbiA0MzM6XHQjZGVmaW5lIGh3X3N1cHByZXNzX3RhZ19jaGVja3Nfc3RvcCgpXHRcdGFyY2hfc3VwcHJlc3NfdGFnX2NoZWNrc19zdG9wKClcbiA0MzQ6XHQjZGVmaW5lIGh3X2ZvcmNlX2FzeW5jX3RhZ19mYXVsdCgpXHRcdGFyY2hfZm9yY2VfYXN5bmNfdGFnX2ZhdWx0KClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0MzMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLQVNBTiBUYWdnaW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGhlcmUgd2UgZ28uIEludGVyZXN0aW5nISBJJiMzOTttIG5vdGljaW5nIHNvbWV0aGluZyBhYm91dCBob3cgYGFyY2hfa2FzYW5fc2V0X3RhZ2AgYmVoYXZlcy4gSXQgc2VlbXMgdGhhdCwgdW5sZXNzIHdlJiMzOTtyZSBvbiBhcm02NCwgdGhhdCBmdW5jdGlvbiBzaW1wbHkgcmV0dXJucyB0aGUgaW5wdXQgYGFkZHJgLiBUaGF0JiMzOTtzIG5vdCB0aGUgdXN1YWwgaW1wbGVtZW50YXRpb24gSSYjMzk7bSBhY2N1c3RvbWVkIHRvIHNlZWluZy4gTm93LCB3aGVyZSBpcyBgYXJjaF9rYXNhbl9yZXNldF90YWdgIGRlZmluZWQ/IEFoLCBJIHNlZSBpdCYjMzk7cyBvbmx5IGluIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2thc2FuLmhgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnkgKm90aGVyKiBhcmNoaXRlY3R1cmUgZGVmaW5lcyAqZWl0aGVyKiBgYXJjaF9rYXNhbl9yZXNldF90YWdgIG9yIGBhcmNoX2thc2FuX3NldF90YWdgLCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgZXh0ZW50IG9mIHRoaXMgYXJtNjQgc3BlY2lmaWMgY29kZS4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYGFyY2hfa2FzYW5fcmVzZXRfdGFnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJjaF9rYXNhbl9yZXNldF90YWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rYXNhbi5oLTEyLSNkZWZpbmUgYXJjaF9rYXNhbl9zZXRfdGFnKGFkZHIsIHRhZylcdF9fdGFnX3NldChhZGRyLCB0YWcpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2thc2FuLmg6MTM6I2RlZmluZSBhcmNoX2thc2FuX3Jlc2V0X3RhZyhhZGRyKVx0X190YWdfcmVzZXQoYWRkcilcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va2FzYW4uaC0xNC0jZGVmaW5lIGFyY2hfa2FzYW5fZ2V0X3RhZyhhZGRyKVx0X190YWdfZ2V0KGFkZHIpXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0zNjk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX3R0YnIxX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMzcxLVx0LyogVFRCUjEgYWRkcmVzc2VzIG1heSBoYXZlIGEgdGFnIGlmIEtBU0FOX1NXX1RBR1MgaXMgaW4gdXNlICovXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjM3MjpcdHJldHVybiBhcmNoX2thc2FuX3Jlc2V0X3RhZyhhZGRyKSBcdTAwM2U9IFBBR0VfT0ZGU0VUO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0zNzMtfVxuLS1cbmluY2x1ZGUvbGludXgva2FzYW4uaD01MjA9c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcbmluY2x1ZGUvbGludXgva2FzYW4uaC01MjEte1xuaW5jbHVkZS9saW51eC9rYXNhbi5oOjUyMjpcdHJldHVybiAodm9pZCAqKWFyY2hfa2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUyMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTIxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTI2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IFdvcnRoRnV6emluZz1mYWxzZSBEZWNpc2lvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlZCBhbnkgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgY2hhbmdlcyBmb3IgZnV6emluZy4gIEkgc2VlIHRoYXQgYGFyY2hfa2FzYW5fcmVzZXRfdGFnYCBpcyBkZWZpbmVkIHdpdGhpbiBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rYXNhbi5oYC4gIFRoaXMgaXMgYSByZWQgZmxhZywgcG9pbnRpbmcgdG93YXJkcyBhbiBBUk02NC1zcGVjaWZpYyBmZWF0dXJlLiAgVGhlIGBrYXNhbl9yZXNldF90YWdgIGZ1bmN0aW9uLCB3aGljaCBjYWxscyBgYXJjaF9rYXNhbl9yZXNldF90YWdgLCBpcyBkZWZpbmVkIHdpdGhpbiBgaW5jbHVkZS9saW51eC9rYXNhbi5oYCBhbmQgY29uZGl0aW9uYWxseSBjYWxscyBgYXJjaF9rYXNhbl9yZXNldF90YWdgIG9ubHkgd2hlbiBLQVNBTiYjMzk7cyB0YWdnaW5nIGZlYXR1cmVzIGFyZSBlbmFibGVkLiAgVGhlc2UgZmVhdHVyZXMgKGBDT05GSUdfS0FTQU5fU1dfVEFHU2AgYW5kIGBDT05GSUdfS0FTQU5fSFdfVEFHU2ApIGRlcGVuZCBvbiBgSEFWRV9BUkNIX0tBU0FOX1NXX1RBR1NgIGFuZCBgSEFWRV9BUkNIX0tBU0FOX0hXX1RBR1NgLCB3aGljaCBhcmUgc2VsZWN0ZWQgZXhjbHVzaXZlbHkgd2l0aGluIGBhcmNoL2FybTY0L0tjb25maWdgLgoKTm93LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGtlcm5lbC9mb3JrLmNgLCByZXBsYWNpbmcgYHZmcmVlKHZtX2FyZWEtJmd0O2FkZHIpYCB3aXRoIGB2ZnJlZShrYXNhbl9yZXNldF90YWcodm1fYXJlYS0mZ3Q7YWRkcikpYC4gIEkgaW1tZWRpYXRlbHkgdGhvdWdodCB0byBjaGVjayB0aGUgaW1wYWN0IG9uIGFtZDY0ICh4ODZfNjQpLCBvdXIgdGFyZ2V0LiAgT24gYW1kNjQsIGBrYXNhbl9yZXNldF90YWcodm1fYXJlYS0mZ3Q7YWRkcilgIHNpbXBseSBleHBhbmRzIHRvIGAodm9pZCAqKSh2bV9hcmVhLSZndDthZGRyKWAuICBUaGVyZWZvcmUsIG9uIGFtZDY0LCB0aGUgY29tcGlsZWQgYmluYXJ5IGNvZGUgYmVmb3JlIGFuZCBhZnRlciB0aGlzIHBhdGNoIGlzIGlkZW50aWNhbCEgVGhpcyBpcyBiZWNhdXNlIG1lbW9yeSB0YWdnaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gQU1ENjQuCgpDcnVjaWFsbHksIHRoZSBwcm9tcHQmIzM5O3MgY3JpdGVyaWEgZm9yIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJlY29tZXMgcmVsZXZhbnQuIFRoZSBsYXN0IGJ1bGxldCBwb2ludCBvZiBuZWdhdGl2ZSBjcml0ZXJpYSBjbGVhcmx5IHN0YXRlcyAmIzM0O0NvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSYjMzQ7LiAgVGhpcyBwYXRjaCwgaW4gZWZmZWN0LCBpbnRyb2R1Y2VzIG5vIGNoYW5nZSBvbiBhbWQ2NC4gIEV2ZW4gdGhlIHNlY29uZC10by1sYXN0IGJ1bGxldCBwb2ludCBhcHBsaWVzOiAmIzM0O0J1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4mIzM0OyAtIHRoaXMgaXMgcHJlY2lzZWx5IHRoZSBjYXNlIGhlcmUsIGFzIGBrYXNhbl9yZXNldF90YWdgIGlzIGEgbm8tb3AgbWFjcm8gdGhhdCBkb2VzIG5vdCBhbHRlciBjb21waWxlZCBsb2dpYyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KClRoZXJlZm9yZSwgc2luY2UgS0FTQU4mIzM5O3MgdGFnLWJhc2VkIGZlYXR1cmVzIGFyZSBleGNsdXNpdmVseSBBUk02NC1zcGVjaWZpYywgYW5kIHRoZSBjaGFuZ2UgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggaXMgYSBuby1vcCBvbiBhbWQ2NCwgSSBjb25jbHVkZSB0aGF0IHRoaXMgcGF0Y2ggc2hvdWxkIGJlIG1hcmtlZCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQgaXMgc3RyaWN0bHkgYSBidWcgZml4IGZvciBhbiBBUk02NCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBiZWhhdmlvciBjaGFuZ2VzIG9uIGFtZDY0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2thc2FuX3Jlc2V0X3RhZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5OTAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHg4NiBMQU0gYW5kIEtBU0FOIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHNvbWV0aGluZyBhbmQgbXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXJlJiMzOTtzIG5vdGhpbmcgaW1tZWRpYXRlbHkgcmVsZXZhbnQgaW4gdGhlIGBhcmNoL3g4NmAgZGlyZWN0b3J5LiBNYWtlcyBzZW5zZSwgSSYjMzk7dmUgZ290IGEgZGVjZW50IHVuZGVyc3RhbmRpbmcgb2YgaG93IHg4NiBpcyBzdHJ1Y3R1cmVkLCBhbmQgSSBkb24mIzM5O3QgcmVjYWxsIGFueXRoaW5nIHNwZWNpZmljIGp1bXBpbmcgb3V0IGF0IG1lLiBOb3csIGxldCYjMzk7cyBwaXZvdCB0byBMaW5lYXIgQWRkcmVzcyBNYXNraW5nLCBvciBMQU0uIFRoZSBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIGlzIHdoZXRoZXIgdGhlIHg4NiBpbXBsZW1lbnRhdGlvbiBvZiBMQU0gaW50ZXJhY3RzIHdpdGggS0FTQU4gdGFnZ2luZyBvciBga2FzYW5fcmVzZXRfdGFnYCBpbiBhbnkgd2F5LiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBhbmQgaG93IHRoZXkgbWlnaHQgcmVsYXRlIHRvIHRoaXMgcGFydGljdWxhciB4ODYgZmVhdHVyZS4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIEkgbmVlZCB0byBkbyBhIHF1aWNrIGJ1dCB0aG9yb3VnaCBzZWFyY2guIEkmIzM5O2xsIGZpcmUgb2ZmIGEgZ3JlcCBjb21tYW5kIHRvIGZpbmQgYWxsIGluc3RhbmNlcyB3aGVyZSBgTEFNYCBhbmQgYGthc2FuYCBhcmUgbWVudGlvbmVkIHRvZ2V0aGVyIGluIHRoZSBjb2RlYmFzZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIGludGVyYWN0aW9ucywgaWYgYW55LiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSByZXN1bHRzIGFuZCBwaW5wb2ludCB0aGUgZGV0YWlscyBJJiMzOTttIHNlZWtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19BRERSRVNTX01BU0tJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni9jcHVpbmZvLnJzdD0xNzY9Rm9yIGV4YW1wbGUsIGlmIExpbmVhciBBZGRyZXNzIE1hc2tpbmcgKExBTSkgaXMgbm90IGVuYWJsZWQgd2hlbiBidWlsZGluZyAoaS5lLixcbkRvY3VtZW50YXRpb24vYXJjaC94ODYvY3B1aW5mby5yc3Q6MTc3OkNPTkZJR19BRERSRVNTX01BU0tJTkcgaXMgbm90IHNlbGVjdGVkKSB0aGUgZmxhZyBcJiMzNDtsYW1cJiMzNDsgd2lsbCBub3Qgc2hvdyB1cC5cbkRvY3VtZW50YXRpb24vYXJjaC94ODYvY3B1aW5mby5yc3QtMTc4LUV2ZW4gdGhvdWdoIHRoZSBmZWF0dXJlIHdpbGwgc3RpbGwgYmUgZGV0ZWN0ZWQgdmlhIENQVUlELCB0aGUga2VybmVsIGRpc2FibGVzXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11Lmg9MjU9dHlwZWRlZiBzdHJ1Y3Qge1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL21tdS5oLTUwLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11Lmg6NTE6I2lmZGVmIENPTkZJR19BRERSRVNTX01BU0tJTkdcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21tdS5oLTUyLVx0LyogQWN0aXZlIExBTSBtb2RlOiAgWDg2X0NSM19MQU1fVTQ4IG9yIFg4Nl9DUjNfTEFNX1U1NyBvciAwIChkaXNhYmxlZCkgKi9cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oPTgyPXN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbGR0KHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaC04Ny1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0Lmg6ODg6I2lmZGVmIENPTkZJR19BRERSRVNTX01BU0tJTkdcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgtODktc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1tX2xhbV9jcjNfbWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oPTc0PXN0cnVjdCB0bGJfc3RhdGUge1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtMTA5LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaDoxMTA6I2lmZGVmIENPTkZJR19BRERSRVNTX01BU0tJTkdcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtMTExLVx0Lypcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oPTQ2OD1zdGF0aWMgaW5saW5lIGJvb2wgaHVnZV9wbWRfbmVlZHNfZmx1c2gocG1kX3Qgb2xkcG1kLCBwbWRfdCBuZXdwbWQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaC00ODYtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oOjQ4NzojaWZkZWYgQ09ORklHX0FERFJFU1NfTUFTS0lOR1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaC00ODgtc3RhdGljIGlubGluZSAgdTY0IHRsYnN0YXRlX2xhbV9jcjNfbWFzayh2b2lkKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaD0yMT1leHRlcm4gdW5zaWduZWQgbG9uZyBVU0VSX1BUUl9NQVg7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgtMjItXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0Lmg6MjM6I2lmZGVmIENPTkZJR19BRERSRVNTX01BU0tJTkdcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaC0yNC0vKlxuLS1cbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmM9Nzg2PXN0YXRpYyBsb25nIHByY3RsX21hcF92ZHNvKGNvbnN0IHN0cnVjdCB2ZHNvX2ltYWdlICppbWFnZSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMtNzk3LVxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYzo3OTg6I2lmZGVmIENPTkZJR19BRERSRVNTX01BU0tJTkdcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMtNzk5LVxuLS1cbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmM9ODY2PWxvbmcgZG9fYXJjaF9wcmN0bF82NChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBvcHRpb24sIHVuc2lnbmVkIGxvbmcgYXJnMilcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jLTk1Mi0jZW5kaWZcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmM6OTUzOiNpZmRlZiBDT05GSUdfQUREUkVTU19NQVNLSU5HXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jLTk1NC1cdGNhc2UgQVJDSF9HRVRfVU5UQUdfTUFTSzpcbi0tXG5hcmNoL3g4Ni9tbS9pbml0LmM9MTAxMz1fX3Zpc2libGUgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdGxiX3N0YXRlLCBjcHVfdGxic3RhdGUpID0ge1xuLS1cbmFyY2gveDg2L21tL2luaXQuYy0xMDE4LVxuYXJjaC94ODYvbW0vaW5pdC5jOjEwMTk6I2lmZGVmIENPTkZJR19BRERSRVNTX01BU0tJTkdcbmFyY2gveDg2L21tL2luaXQuYy0xMDIwLURFRklORV9QRVJfQ1BVKHU2NCwgdGxic3RhdGVfdW50YWdfbWFzayk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L2xhbS5jPTEyNz1zdGF0aWMgaW5saW5lIGludCBsYW1faXNfYXZhaWxhYmxlKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L2xhbS5jLTE0MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYW0uYzoxNDE6XHQvKiBSZXR1cm4gMCBpZiBDT05GSUdfQUREUkVTU19NQVNLSU5HIGlzIG5vdCBzZXQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYW0uYy0xNDItXHRyZXQgPSBzeXNjYWxsKFNZU19hcmNoX3ByY3RsLCBBUkNIX0dFVF9NQVhfVEFHX0JJVFMsIFx1MDAyNmJpdHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU1MgoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiAxMDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBQYXRjaDogV29ydGhGdXp6aW5nIEV2YWx1YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY2hhbmdlIG1vZGlmaWVzIHRoZSBgdmZyZWVgIGNhbGwgdG8gaW5jbHVkZSBga2FzYW5fcmVzZXRfdGFnYCBpbiBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCB3aXRoaW4gYGtlcm5lbC9mb3JrLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBLQVNBTi1yZWxhdGVkIGNoYW5nZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJlaGF2aW9yLgoKVGhlIGNyaXRpY2FsIGluc2lnaHQgaGVyZSBpcyB0aGF0IGBrYXNhbl9yZXNldF90YWdgIGlzIG9ubHkgcmVsZXZhbnQgZm9yIGFyY2hpdGVjdHVyZXMgd2l0aCB0YWctYmFzZWQgS0FTQU4sIHNwZWNpZmljYWxseSB0aG9zZSB0aGF0IHN1cHBvcnQgYENPTkZJR19LQVNBTl9TV19UQUdTYCBvciBgQ09ORklHX0tBU0FOX0hXX1RBR1NgLiBSaWdodCBub3csIHRoYXQgc2VlbXMgdG8gYmUgZXhjbHVzaXZlIHRvIGBhcm02NGAsIGxldmVyYWdpbmcgZmVhdHVyZXMgbGlrZSBBUk0mIzM5O3MgVG9wIEJ5dGUgSWdub3JlIG9yIE1lbW9yeSBUYWdnaW5nIEV4dGVuc2lvbi4gIE9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBhbWQ2NCwgYGthc2FuX3Jlc2V0X3RhZ2AgaXMgZXNzZW50aWFsbHkgYSBuby1vcCwgZGVmaW5lZCBhcyBhbiBpbmxpbmUgZnVuY3Rpb24gdGhhdCBqdXN0IGNhc3RzIGFuZCByZXR1cm5zIHRoZSBzYW1lIHBvaW50ZXI6IGByZXR1cm4gKHZvaWQgKilhZGRyO2AuCgpUaGVyZWZvcmUsIG9uIGFtZDY0LCB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSBhbmQgYmluYXJ5LWlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwgY29kZS4gSXTigJlzIGEgcHVyZSBjb3NtZXRpYyBvciBjb25kaXRpb25hbCBjaGFuZ2UgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2Ygd2hhdCBnZXRzIGV4ZWN1dGVkIG9uIGFtZDY0LiAgVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoaXMgY2hhbmdlIGlzICpub3QqIHdvcnRoIGZ1enppbmcgb24gYW1kNjQuIEl0IG5lYXRseSBmYWxscyBpbnRvIHRoZSAmIzM0O0NvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSYjMzQ7IG5lZ2F0aXZlIGNyaXRlcmlhIG91dGxpbmVkIGluIFNlY3Rpb24gMi4KClRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIHJldmlldyBTZWN0aW9uIDIgYWdhaW4uIEl0IGNvbmZpcm1zIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiBpcyAqb25seSogcmVsZXZhbnQgdG8gb3RoZXIgYXJjaGl0ZWN0dXJlcy4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBgV29ydGhGdXp6aW5nPWZhbHNlYCBjb25kaXRpb24sIGFuZCBtb3JlIHBhcnRpY3VsYXJseSwgd2hhdCBoYXBwZW5zIHdpdGggYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCB3aGVuIHdlIGdldCB0aGVyZS4gSXQmIzM5O3MgdXN1YWxseSBlbXB0eSwgb3IgYXQgbGVhc3QgYSBudWxsIG9yIGVtcHR5IGxpc3QgaXMgZXhwZWN0ZWQuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgKmFueSogY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIGZ1enppbmcgb24gYW1kNjQsIGJ1dCBpZiB3ZSYjMzk7cmUgbm90IGZ1enppbmcsIHRoZW4gdGhlcmUgc2hvdWxkbiYjMzk7dCBiZS4KCkJhc2VkIG9uIHRoZSBldmlkZW5jZSwgdGhlIGNvcnJlY3QgY2FsbCB0byBgc2V0LXJlc3VsdHNgIHNob3VsZCBiZToKCiogICBgV29ydGhGdXp6aW5nYDogZmFsc2UKKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgY29kZSByZWxhdGVkIHRvIEtBU0FOIHRhZyByZXNldHRpbmcuIFRoZSBga2FzYW5fcmVzZXRfdGFnYCBmdW5jdGlvbiBpcyBvbmx5IGFjdGl2ZSB3aGVuIGBDT05GSUdfS0FTQU5fU1dfVEFHU2Agb3IgYENPTkZJR19LQVNBTl9IV19UQUdTYCBpcyBlbmFibGVkLCB3aGljaCBpcyBjdXJyZW50bHkgbGltaXRlZCB0byBgYXJtNjRgLiBPbiBhbWQ2NCwgYGthc2FuX3Jlc2V0X3RhZ2AgaXMgZGVmaW5lZCBhcyBhIG5vLW9wLCByZXN1bHRpbmcgaW4gbm8gZnVuY3Rpb25hbCBvciBiaW5hcnkgY2hhbmdlLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBmYWxscyB1bmRlciAmIzM0O2NvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSYjMzQ7IGFuZCBpcyBub3Qgd29ydGggZnV6emluZyBvbiBhbWQ2NC4KKiAgIGBGb2N1c1N5bWJvbHNgOiBbXQoqICAgYEVuYWJsZUNvbmZpZ3NgOiBbXQoKVGhhdCBzZWVtcyBzb2xpZCBhbmQgbG9naWNhbGx5IGNvbnNpc3RlbnQuIExldCYjMzk7cyBjYWxsIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGtlcm5lbC9mb3JrLmMgdG8gd3JhcCB2bV9hcmVhLVx1MDAzZWFkZHIgaW4ga2FzYW5fcmVzZXRfdGFnKCkgcHJpb3IgdG8gY2FsbGluZyB2ZnJlZSgpLiBUaGUga2FzYW5fcmVzZXRfdGFnKCkgaGVscGVyIGlzIG9ubHkgYWN0aXZlIHdoZW4gQ09ORklHX0tBU0FOX1NXX1RBR1Mgb3IgQ09ORklHX0tBU0FOX0hXX1RBR1MgaXMgZW5hYmxlZCwgYm90aCBvZiB3aGljaCBhcmUgZXhjbHVzaXZlIHRvIGFybTY0LiBPbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCBrYXNhbl9yZXNldF90YWcoKSBpcyBhbiBpZGVudGl0eSBmdW5jdGlvbiByZXR1cm5pbmcgKHZvaWQgKilhZGRyIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBDb25zZXF1ZW50bHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwgb3IgYmluYXJ5IGNoYW5nZXMgdG8gY29tcGlsZWQgY29kZSBvbiBhbWQ2NCwgZmFsbGluZyB1bmRlciBjaGFuZ2VzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBrZXJuZWwvZm9yay5jIHRvIHdyYXAgdm1fYXJlYS1cdTAwM2VhZGRyIGluIGthc2FuX3Jlc2V0X3RhZygpIHByaW9yIHRvIGNhbGxpbmcgdmZyZWUoKS4gVGhlIGthc2FuX3Jlc2V0X3RhZygpIGhlbHBlciBpcyBvbmx5IGFjdGl2ZSB3aGVuIENPTkZJR19LQVNBTl9TV19UQUdTIG9yIENPTkZJR19LQVNBTl9IV19UQUdTIGlzIGVuYWJsZWQsIGJvdGggb2Ygd2hpY2ggYXJlIGV4Y2x1c2l2ZSB0byBhcm02NC4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwga2FzYW5fcmVzZXRfdGFnKCkgaXMgYW4gaWRlbnRpdHkgZnVuY3Rpb24gcmV0dXJuaW5nICh2b2lkICopYWRkciB3aXRob3V0IG1vZGlmaWNhdGlvbi4gQ29uc2VxdWVudGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIG9yIGJpbmFyeSBjaGFuZ2VzIHRvIGNvbXBpbGVkIGNvZGUgb24gYW1kNjQsIGZhbGxpbmcgdW5kZXIgY2hhbmdlcyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjM5OjUyLjY3NjEwOTUzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDQzOTY4NzExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGtlcm5lbC9mb3JrLmMgdG8gd3JhcCB2bV9hcmVhLVxcdTAwM2VhZGRyIGluIGthc2FuX3Jlc2V0X3RhZygpIHByaW9yIHRvIGNhbGxpbmcgdmZyZWUoKS4gVGhlIGthc2FuX3Jlc2V0X3RhZygpIGhlbHBlciBpcyBvbmx5IGFjdGl2ZSB3aGVuIENPTkZJR19LQVNBTl9TV19UQUdTIG9yIENPTkZJR19LQVNBTl9IV19UQUdTIGlzIGVuYWJsZWQsIGJvdGggb2Ygd2hpY2ggYXJlIGV4Y2x1c2l2ZSB0byBhcm02NC4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwga2FzYW5fcmVzZXRfdGFnKCkgaXMgYW4gaWRlbnRpdHkgZnVuY3Rpb24gcmV0dXJuaW5nICh2b2lkICopYWRkciB3aXRob3V0IG1vZGlmaWNhdGlvbi4gQ29uc2VxdWVudGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIG9yIGJpbmFyeSBjaGFuZ2VzIHRvIGNvbXBpbGVkIGNvZGUgb24gYW1kNjQsIGZhbGxpbmcgdW5kZXIgY2hhbmdlcyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mzk6NTIuNjc2MTEzODMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTEyNjY3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYzI4YmM3MzczYmZjYjY4ZGY5NDJkZDRmMGJkZDBlOGVhN2NkODk5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDE0IDEwOjM5OjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXFxuaW5kZXggNDE2NzU4YzhhM2Q0My4uNmVhZDg3N2Y4N2E4YyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZm9yay5jXFxuKysrIGIva2VybmVsL2ZvcmsuY1xcbkBAIC0yODAsNyArMjgwLDcgQEAgc3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmgpXFxuIFxcdGlmICh0cnlfcmVsZWFzZV90aHJlYWRfc3RhY2tfdG9fY2FjaGUodm1fc3RhY2stXFx1MDAzZXN0YWNrX3ZtX2FyZWEpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHR2ZnJlZSh2bV9hcmVhLVxcdTAwM2VhZGRyKTtcXG4rXFx0dmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXFx1MDAzZWFkZHIpKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX2RlbGF5ZWRfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mzk6NTMuMTY3OTY2OTg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNTk5NDc4MTAxMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGtlcm5lbC9mb3JrLmMgdG8gd3JhcCB2bV9hcmVhLVxcdTAwM2VhZGRyIGluIGthc2FuX3Jlc2V0X3RhZygpIHByaW9yIHRvIGNhbGxpbmcgdmZyZWUoKS4gVGhlIGthc2FuX3Jlc2V0X3RhZygpIGhlbHBlciBpcyBvbmx5IGFjdGl2ZSB3aGVuIENPTkZJR19LQVNBTl9TV19UQUdTIG9yIENPTkZJR19LQVNBTl9IV19UQUdTIGlzIGVuYWJsZWQsIGJvdGggb2Ygd2hpY2ggYXJlIGV4Y2x1c2l2ZSB0byBhcm02NC4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwga2FzYW5fcmVzZXRfdGFnKCkgaXMgYW4gaWRlbnRpdHkgZnVuY3Rpb24gcmV0dXJuaW5nICh2b2lkICopYWRkciB3aXRob3V0IG1vZGlmaWNhdGlvbi4gQ29uc2VxdWVudGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIG9yIGJpbmFyeSBjaGFuZ2VzIHRvIGNvbXBpbGVkIGNvZGUgb24gYW1kNjQsIGZhbGxpbmcgdW5kZXIgY2hhbmdlcyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYzI4YmM3MzczYmZjYjY4ZGY5NDJkZDRmMGJkZDBlOGVhN2NkODk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTA6Mzk6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuY1xuaW5kZXggNDE2NzU4YzhhM2Q0My4uNmVhZDg3N2Y4N2E4YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mb3JrLmNcbisrKyBiL2tlcm5lbC9mb3JrLmNcbkBAIC0yODAsNyArMjgwLDcgQEAgc3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmgpXG4gXHRpZiAodHJ5X3JlbGVhc2VfdGhyZWFkX3N0YWNrX3RvX2NhY2hlKHZtX3N0YWNrLVx1MDAzZXN0YWNrX3ZtX2FyZWEpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR2ZnJlZSh2bV9hcmVhLVx1MDAzZWFkZHIpO1xuK1x0dmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6Mzk6NTMuMTY3OTY4ODQ1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjI5NzI2MjM5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgRm9yayBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGRpZmYuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBiZWluZyBtb2RpZmllZCBpbiBga2VybmVsL2ZvcmsuY2AuIExvb2tzIGxpa2UgaXQncyBhIGNoYW5nZSByZWxhdGVkIHRvIHRocmVhZCBzdGFjayBkZWFsbG9jYXRpb24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgYHZmcmVlKClgIGNhbGwsIHdoaWNoIHJlbGVhc2VzIG1lbW9yeSwgaXMgYmVpbmcgdXBkYXRlZC4gSW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIGB2ZnJlZSgpYCBvbiBgdm1fYXJlYS1cdTAwM2VhZGRyYCwgaXQncyBub3cgY2FsbGluZyBga2FzYW5fcmVzZXRfdGFnKClgIG9uIGB2bV9hcmVhLVx1MDAzZWFkZHJgIGJlZm9yZSBwYXNzaW5nIGl0IHRvIGB2ZnJlZSgpYC4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIEtlcm5lbCBBZGRyZXNzIFNhbml0aXplciAoS0FTQU4pLiBUaGUgZmFjdCB0aGF0IGBrYXNhbl9yZXNldF90YWdgIGlzIGludm9sdmVkIGlzIGEgbWFqb3IgY2x1ZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUsIEknbSBnb2luZyB0byBwdWxsIHVwIGBrZXJuZWwvZm9yay5jYCBhbmQgZm9jdXMgb24gdGhlIGNvZGUgYXJvdW5kIGxpbmUgMjgwLiBJIG5lZWQgdG8gc2VlIHdoYXQgYHRocmVhZF9zdGFja19mcmVlX3JjdWAgYW5kIGB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlYCBhcmUgZG9pbmcsIGFuZCBob3cgdGhlIGB2bV9hcmVhYCBpcyBiZWluZyB1c2VkLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIHB1cnBvc2Ugb2YgdGhpcyBjaGFuZ2UgYW5kIHdoZXRoZXIgaXQncyByZWxhdGVkIHRvIG1lbW9yeSBzYWZldHksIHJhY2UgY29uZGl0aW9ucywgb3Igb3B0aW1pemF0aW9uLiBXaGF0J3MgdGhlIHRocmVhZCBzdGFjayBjYWNoZSB0cnlpbmcgdG8gZG8/IElzIHRoaXMgYWJvdXQgY2xlYXJpbmcgbWVtb3J5IHRhZ3MgYmVmb3JlIHJlbGVhc2luZyB0aGUgc3RhY2s/IEkgbmVlZCBtb3JlIGRhdGEgYmVmb3JlIEkgY2FuIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MDo1Ni4xNDA1OTQ3NDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2ZvcmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0fVxcbiAyNDE6XFx0XFxuIDI0MjpcXHRzdGF0aWMgYm9vbCB0cnlfcmVsZWFzZV90aHJlYWRfc3RhY2tfdG9fY2FjaGUoc3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYSlcXG4gMjQzOlxcdHtcXG4gMjQ0OlxcdFxcdHVuc2lnbmVkIGludCBpO1xcbiAyNDU6XFx0XFx0aW50IG5pZDtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0XFx0LypcXG4gMjQ4OlxcdFxcdCAqIERvbid0IGNhY2hlIHN0YWNrcyBpZiBhbnkgb2YgdGhlIHBhZ2VzIGRvbid0IG1hdGNoIHRoZSBsb2NhbCBkb21haW4sIHVubGVzc1xcbiAyNDk6XFx0XFx0ICogdGhlcmUgaXMgbm8gbG9jYWwgbWVtb3J5IHRvIGJlZ2luIHdpdGguXFxuIDI1MDpcXHRcXHQgKlxcbiAyNTE6XFx0XFx0ICogTm90ZSB0aGF0IGxhY2sgb2YgbG9jYWwgbWVtb3J5IGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgbWVhbiBpdCBtYWtlcyBubyBkaWZmZXJlbmNlXFxuIDI1MjpcXHRcXHQgKiBwZXJmb3JtYW5jZS13aXNlIHdoaWNoIG90aGVyIGRvbWFpbiBiYWNrcyB0aGUgc3RhY2suIEluIHRoaXMgY2FzZSB3ZSBhcmUgbWVyZWx5XFxuIDI1MzpcXHRcXHQgKiB0cnlpbmcgdG8gYXZvaWQgY29uc3RhbnRseSBnb2luZyB0byB2bWFsbG9jLlxcbiAyNTQ6XFx0XFx0ICovXFxuIDI1NTpcXHRcXHRzY29wZWRfZ3VhcmQocHJlZW1wdCkge1xcbiAyNTY6XFx0XFx0XFx0bmlkID0gbnVtYV9ub2RlX2lkKCk7XFxuIDI1NzpcXHRcXHRcXHRpZiAobm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSkge1xcbiAyNTg6XFx0XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHZtX2FyZWEtXFx1MDAzZW5yX3BhZ2VzOyBpKyspIHtcXG4gMjU5OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gdm1fYXJlYS1cXHUwMDNlcGFnZXNbaV07XFxuIDI2MDpcXHRcXHRcXHRcXHRcXHRpZiAocGFnZV90b19uaWQocGFnZSkgIT0gbmlkKVxcbiAyNjE6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNjI6XFx0XFx0XFx0XFx0fVxcbiAyNjM6XFx0XFx0XFx0fVxcbiAyNjQ6XFx0XFxuIDI2NTpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfQ0FDSEVEX1NUQUNLUzsgaSsrKSB7XFxuIDI2NjpcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp0bXAgPSBOVUxMO1xcbiAyNjc6XFx0XFxuIDI2ODpcXHRcXHRcXHRcXHRpZiAodGhpc19jcHVfdHJ5X2NtcHhjaGcoY2FjaGVkX3N0YWNrc1tpXSwgXFx1MDAyNnRtcCwgdm1fYXJlYSkpXFxuIDI2OTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjcwOlxcdFxcdFxcdH1cXG4gMjcxOlxcdFxcdH1cXG4gMjcyOlxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjczOlxcdH1cXG4gMjc0OlxcdFxcbiAyNzU6XFx0c3RhdGljIHZvaWQgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmgpXFxuIDI3NjpcXHR7XFxuIDI3NzpcXHRcXHRzdHJ1Y3Qgdm1fc3RhY2sgKnZtX3N0YWNrID0gY29udGFpbmVyX29mKHJoLCBzdHJ1Y3Qgdm1fc3RhY2ssIHJjdSk7XFxuIDI3ODpcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhID0gdm1fc3RhY2stXFx1MDAzZXN0YWNrX3ZtX2FyZWE7XFxuIDI3OTpcXHRcXG4gMjgwOlxcdFxcdGlmICh0cnlfcmVsZWFzZV90aHJlYWRfc3RhY2tfdG9fY2FjaGUodm1fc3RhY2stXFx1MDAzZXN0YWNrX3ZtX2FyZWEpKVxcbiAyODE6XFx0XFx0XFx0cmV0dXJuO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHR2ZnJlZShrYXNhbl9yZXNldF90YWcodm1fYXJlYS1cXHUwMDNlYWRkcikpO1xcbiAyODQ6XFx0fVxcbiAyODU6XFx0XFxuIDI4NjpcXHRzdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbiAyODc6XFx0e1xcbiAyODg6XFx0XFx0c3RydWN0IHZtX3N0YWNrICp2bV9zdGFjayA9IHRzay1cXHUwMDNlc3RhY2s7XFxuIDI4OTpcXHRcXG4gMjkwOlxcdFxcdHZtX3N0YWNrLVxcdTAwM2VzdGFja192bV9hcmVhID0gdHNrLVxcdTAwM2VzdGFja192bV9hcmVhO1xcbiAyOTE6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnZtX3N0YWNrLVxcdTAwM2VyY3UsIHRocmVhZF9zdGFja19mcmVlX3JjdSk7XFxuIDI5MjpcXHR9XFxuIDI5MzpcXHRcXG4gMjk0OlxcdHN0YXRpYyBpbnQgZnJlZV92bV9zdGFja19jYWNoZSh1bnNpZ25lZCBpbnQgY3B1KVxcbiAyOTU6XFx0e1xcbiAyOTY6XFx0XFx0c3RydWN0IHZtX3N0cnVjdCAqKmNhY2hlZF92bV9zdGFja19hcmVhcyA9IHBlcl9jcHVfcHRyKGNhY2hlZF9zdGFja3MsIGNwdSk7XFxuIDI5NzpcXHRcXHRpbnQgaTtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0NBQ0hFRF9TVEFDS1M7IGkrKykge1xcbiAzMDA6XFx0XFx0XFx0c3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYSA9IGNhY2hlZF92bV9zdGFja19hcmVhc1tpXTtcXG4gMzAxOlxcdFxcbiAzMDI6XFx0XFx0XFx0aWYgKCF2bV9hcmVhKVxcbiAzMDM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMwNDpcXHRcXG4gMzA1OlxcdFxcdFxcdHZmcmVlKHZtX2FyZWEtXFx1MDAzZWFkZHIpO1xcbiAzMDY6XFx0XFx0XFx0Y2FjaGVkX3ZtX3N0YWNrX2FyZWFzW2ldID0gTlVMTDtcXG4gMzA3OlxcdFxcdH1cXG4gMzA4OlxcdFxcbiAzMDk6XFx0XFx0cmV0dXJuIDA7XFxuIDMxMDpcXHR9XFxuIDMxMTpcXHRcXG4gMzEyOlxcdHN0YXRpYyBpbnQgbWVtY2dfY2hhcmdlX2tlcm5lbF9zdGFjayhzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhKVxcbiAzMTM6XFx0e1xcbiAzMTQ6XFx0XFx0aW50IGk7XFxuIDMxNTpcXHRcXHRpbnQgcmV0O1xcbiAzMTY6XFx0XFx0aW50IG5yX2NoYXJnZWQgPSAwO1xcbiAzMTc6XFx0XFxuIDMxODpcXHRcXHRCVUdfT04odm1fYXJlYS1cXHUwMDNlbnJfcGFnZXMgIT0gVEhSRUFEX1NJWkUgLyBQQUdFX1NJWkUpO1xcbiAzMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQwOjU2LjE0MDczNTczM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5ODE3OTg2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIEZvcmsgQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZm9jdXNpbmcgb24gYGtlcm5lbC9mb3JrLmNgIG5vdy4gRmlyc3QgdGhpbmdzIGZpcnN0OiBpcyB0aGlzIHBhcnQgb2YgdGhlIGBDT05GSUdfVk1BUF9TVEFDS2AgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgZGlnIGRlZXBlci4gTXkgbWFpbiBpbnRlcmVzdCBsaWVzIHdpdGhpbiBsaW5lcyAxNTAgdG8gMjUwIG9mIHRoaXMgZmlsZS4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS4gSSdsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHNwZWNpZmljIGxvZ2ljIHdpdGhpbiB0aGF0IHNlY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgZm9yayBwcm9jZXNzIHdpdGhpbiB0aGlzIGNvbnRleHQuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQwOjU4LjEyMjUzNzAxNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvZm9yay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHR2b2lkIF9fd2VhayBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuIDE4MTpcXHR7XFxuIDE4MjpcXHR9XFxuIDE4MzpcXHRcXG4gMTg0OlxcdHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza19zdHJ1Y3RfY2FjaGVwO1xcbiAxODU6XFx0XFxuIDE4NjpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqYWxsb2NfdGFza19zdHJ1Y3Rfbm9kZShpbnQgbm9kZSlcXG4gMTg3OlxcdHtcXG4gMTg4OlxcdFxcdHJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUodGFza19zdHJ1Y3RfY2FjaGVwLCBHRlBfS0VSTkVMLCBub2RlKTtcXG4gMTg5OlxcdH1cXG4gMTkwOlxcdFxcbiAxOTE6XFx0c3RhdGljIGlubGluZSB2b2lkIGZyZWVfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuIDE5MjpcXHR7XFxuIDE5MzpcXHRcXHRrbWVtX2NhY2hlX2ZyZWUodGFza19zdHJ1Y3RfY2FjaGVwLCB0c2spO1xcbiAxOTQ6XFx0fVxcbiAxOTU6XFx0XFxuIDE5NjpcXHQjaWZkZWYgQ09ORklHX1ZNQVBfU1RBQ0tcXG4gMTk3OlxcdC8qXFxuIDE5ODpcXHQgKiB2bWFsbG9jKCkgaXMgYSBiaXQgc2xvdywgYW5kIGNhbGxpbmcgdmZyZWUoKSBlbm91Z2ggdGltZXMgd2lsbCBmb3JjZSBhIFRMQlxcbiAxOTk6XFx0ICogZmx1c2guICBUcnkgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBjYWxscyBieSBjYWNoaW5nIHN0YWNrcy5cXG4gMjAwOlxcdCAqL1xcbiAyMDE6XFx0I2RlZmluZSBOUl9DQUNIRURfU1RBQ0tTIDJcXG4gMjAyOlxcdHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgdm1fc3RydWN0ICosIGNhY2hlZF9zdGFja3NbTlJfQ0FDSEVEX1NUQUNLU10pO1xcbiAyMDM6XFx0LypcXG4gMjA0OlxcdCAqIEFsbG9jYXRlZCBzdGFja3MgYXJlIGNhY2hlZCBhbmQgbGF0ZXIgcmV1c2VkIGJ5IG5ldyB0aHJlYWRzLCBzbyBtZW1jZ1xcbiAyMDU6XFx0ICogYWNjb3VudGluZyBpcyBwZXJmb3JtZWQgYnkgdGhlIGNvZGUgYXNzaWduaW5nL3JlbGVhc2luZyBzdGFja3MgdG8gdGFza3MuXFxuIDIwNjpcXHQgKiBXZSBuZWVkIGEgemVyb2VkIG1lbW9yeSB3aXRob3V0IF9fR0ZQX0FDQ09VTlQuXFxuIDIwNzpcXHQgKi9cXG4gMjA4OlxcdCNkZWZpbmUgR0ZQX1ZNQVBfU1RBQ0sgKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfU0tJUF9LQVNBTilcXG4gMjA5OlxcdFxcbiAyMTA6XFx0c3RydWN0IHZtX3N0YWNrIHtcXG4gMjExOlxcdFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuIDIxMjpcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICpzdGFja192bV9hcmVhO1xcbiAyMTM6XFx0fTtcXG4gMjE0OlxcdFxcbiAyMTU6XFx0c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKmFsbG9jX3RocmVhZF9zdGFja19ub2RlX2Zyb21fY2FjaGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBub2RlKVxcbiAyMTY6XFx0e1xcbiAyMTc6XFx0XFx0c3RydWN0IHZtX3N0cnVjdCAqdm1fYXJlYTtcXG4gMjE4OlxcdFxcdHVuc2lnbmVkIGludCBpO1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHQvKlxcbiAyMjE6XFx0XFx0ICogSWYgdGhlIG5vZGUgaGFzIG1lbW9yeSwgd2UgYXJlIGd1YXJhbnRlZWQgdGhlIHN0YWNrcyBhcmUgYmFja2VkIGJ5IGxvY2FsIHBhZ2VzLlxcbiAyMjI6XFx0XFx0ICogT3RoZXJ3aXNlIHRoZSBwYWdlcyBhcmUgYXJiaXRyYXJ5LlxcbiAyMjM6XFx0XFx0ICpcXG4gMjI0OlxcdFxcdCAqIE5vdGUgdGhhdCBkZXBlbmRpbmcgb24gY3B1c2V0IGl0IGlzIHBvc3NpYmxlIHdlIHdpbGwgZ2V0IG1pZ3JhdGVkIHRvIGEgZGlmZmVyZW50XFxuIDIyNTpcXHRcXHQgKiBub2RlIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpbmcgaGVyZSwgc28gdGhpcyBkb2VzICpub3QqIGd1YXJhbnRlZSBsb2NhbGl0eSBmb3JcXG4gMjI2OlxcdFxcdCAqIGFyYml0cmFyeSBjYWxsZXJzLlxcbiAyMjc6XFx0XFx0ICovXFxuIDIyODpcXHRcXHRzY29wZWRfZ3VhcmQocHJlZW1wdCkge1xcbiAyMjk6XFx0XFx0XFx0aWYgKG5vZGUgIT0gTlVNQV9OT19OT0RFIFxcdTAwMjZcXHUwMDI2IG51bWFfbm9kZV9pZCgpICE9IG5vZGUpXFxuIDIzMDpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjMxOlxcdFxcbiAyMzI6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0NBQ0hFRF9TVEFDS1M7IGkrKykge1xcbiAyMzM6XFx0XFx0XFx0XFx0dm1fYXJlYSA9IHRoaXNfY3B1X3hjaGcoY2FjaGVkX3N0YWNrc1tpXSwgTlVMTCk7XFxuIDIzNDpcXHRcXHRcXHRcXHRpZiAodm1fYXJlYSlcXG4gMjM1OlxcdFxcdFxcdFxcdFxcdHJldHVybiB2bV9hcmVhO1xcbiAyMzY6XFx0XFx0XFx0fVxcbiAyMzc6XFx0XFx0fVxcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDA6NTguMTIyNjc2NDM0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTg1NTgzMzIwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgU3VzcGVjdCBNZW1vcnkgUmVsZWFzZSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgdGhpcyBgdmZyZWVgIGNhbGwgcmVsYXRlZCB0byBhIGB2bV9hcmVhLVx1MDAzZWFkZHJgIGFuZCBzb21ldGhpbmcncyBidWdnaW5nIG1lLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBga2FzYW5fcmVzZXRfdGFnYCBjYWxsIHdhc24ndCBhcHBsaWVkIG9yIHdoYXQncyBnb2luZyBvbiBoZXJlLiBUaGUgY29kZSBsb29rcyBsaWtlIGl0J3MgdHJ5aW5nIHRvIHJlbGVhc2Ugc29tZSBtZW1vcnkgaW4gdGhlIGBmcmVlX3ZtX3N0YWNrX2NhY2hlYCBmdW5jdGlvbi4gQnV0IHRoZXJlJ3Mgc29tZXRoaW5nIG9mZi4gSSAqdGhvdWdodCogSSBzYXcgYSBga2FzYW5fcmVzZXRfdGFnYCBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWxsIGVhcmxpZXIsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UgaGlzdG9yeS4gU2luY2UgSSBkb24ndCBoYXZlIGdpdCBsb2cgdG8gaGFuZCwgSSBzaG91bGQgc2VhcmNoIGZvciBga2FzYW5fcmVzZXRfdGFnYCwgYHZmcmVlYCB0byBnZXQgdGhlIGNoYW5nZXMgcXVpY2tseS4gTGluZSAzMDUgbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgYnV0IG1heWJlIHRoZSBjaGFuZ2UgSSB3YXMgbG9va2luZyBmb3Igd2Fzbid0IHRoZXJlIGF0IGFsbCwgb3IgcGVyaGFwcyBpdCB3YXMgcmVtb3ZlZCBpbiBhIHN1YnNlcXVlbnQgY29tbWl0PyBOb3cgSSB0aGluaywgaW5zdGVhZCBvZiBmb2N1c2luZyBvbiBga2FzYW5fcmVzZXRfdGFnYCwgdGhhdCB0aGUgaXNzdWUgbWlnaHQgYmUgd2l0aCBvdGhlciBgdmZyZWVgIGNhbGxzIHdpdGhpbiBmb3JrLmMuIEknbGwgc2VhcmNoIGZvciB0aG9zZSBpbnN0ZWFkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjgzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6MDMuOTc4NTEzOTQ2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjU0OTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZm9yay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mb3JrLmM9MTkxPXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0xOTctLypcXG5rZXJuZWwvZm9yay5jOjE5ODogKiB2bWFsbG9jKCkgaXMgYSBiaXQgc2xvdywgYW5kIGNhbGxpbmcgdmZyZWUoKSBlbm91Z2ggdGltZXMgd2lsbCBmb3JjZSBhIFRMQlxcbmtlcm5lbC9mb3JrLmMtMTk5LSAqIGZsdXNoLiAgVHJ5IHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgY2FsbHMgYnkgY2FjaGluZyBzdGFja3MuXFxuLS1cXG5rZXJuZWwvZm9yay5jPTI3NT1zdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaClcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjgyLVxcbmtlcm5lbC9mb3JrLmM6MjgzOlxcdHZmcmVlKGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVxcdTAwM2VhZGRyKSk7XFxua2VybmVsL2ZvcmsuYy0yODQtfVxcbi0tXFxua2VybmVsL2ZvcmsuYz0yOTQ9c3RhdGljIGludCBmcmVlX3ZtX3N0YWNrX2NhY2hlKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTMwNC1cXG5rZXJuZWwvZm9yay5jOjMwNTpcXHRcXHR2ZnJlZSh2bV9hcmVhLVxcdTAwM2VhZGRyKTtcXG5rZXJuZWwvZm9yay5jLTMwNi1cXHRcXHRjYWNoZWRfdm1fc3RhY2tfYXJlYXNbaV0gPSBOVUxMO1xcbi0tXFxua2VybmVsL2ZvcmsuYz0zMzM9c3RhdGljIGludCBhbGxvY190aHJlYWRfc3RhY2tfbm9kZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IG5vZGUpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTM0MC1cXHRcXHRpZiAobWVtY2dfY2hhcmdlX2tlcm5lbF9zdGFjayh2bV9hcmVhKSkge1xcbmtlcm5lbC9mb3JrLmM6MzQxOlxcdFxcdFxcdHZmcmVlKHZtX2FyZWEtXFx1MDAzZWFkZHIpO1xcbmtlcm5lbC9mb3JrLmMtMzQyLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxua2VybmVsL2ZvcmsuYy0zNjYtXFx0aWYgKG1lbWNnX2NoYXJnZV9rZXJuZWxfc3RhY2sodm1fYXJlYSkpIHtcXG5rZXJuZWwvZm9yay5jOjM2NzpcXHRcXHR2ZnJlZShzdGFjayk7XFxua2VybmVsL2ZvcmsuYy0zNjgtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQxOjA0LjA5MTA2OTQyNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MjczNzE2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBLZXJuZWwgTWVtb3J5IFRhZ2dpbmcgd2l0aCBLQVNBTiBhbmQgdmZyZWUqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHZpcnR1YWwgbWVtb3J5IGFyZWEsIHNwZWNpZmljYWxseSBob3cgYHZtX2FyZWEtXHUwMDNlYWRkcmAgaXMgbWFuYWdlZCBhbmQgdGFnZ2VkLiBJIG5lZWQgdG8ga25vdyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSwgYW55IHBvdGVudGlhbCB0YWdnaW5nIG1lY2hhbmlzbXMgdXNlZCwgYW5kIGhvdyB0aGVzZSBpbnRlcmFjdCB3aXRoIHRoZSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBmZWF0dXJlcy4gSSBzdXNwZWN0IGEgS0FTQU4gaW50ZXJhY3Rpb24gYW5kLCBnaXZlbiB0aGUgY29udGV4dCwgSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBga2FzYW5fcmVzZXRfdGFnYCBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHZmcmVlYC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgZ3JlcC4gSSdsbCBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgY29kZSBmb3IgaW5zdGFuY2VzIHdoZXJlIGB2ZnJlZWAgYW5kIGBrYXNhbmAgYXJlIHVzZWQgdG9nZXRoZXIsIG9yIHdoZXJlIGBrYXNhbl9yZXNldF90YWdgIGlzIGNhbGxlZCBiZWZvcmUgb3IgYWZ0ZXIgYSBgdmZyZWVgIGNhbGwuIFNlZWluZyB0aG9zZSByZWxhdGlvbnNoaXBzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgbWVtb3J5IHNhZmV0eSBpbXBsaWNhdGlvbnMgYW5kLCBwb3RlbnRpYWxseSwgaWYgdGhpcyByZWxhdGVzIHRvIHNvbWUgdnVsbmVyYWJpbGl0eS4gSSdsbCBiZSBzZWFyY2hpbmcgZm9yIHBhdHRlcm5zIGxpa2UgXCJ2ZnJlZS4qa2FzYW5cIiBvciBcImthc2FuX3Jlc2V0X3RhZy4qdmZyZWVcIiB0byByZXZlYWwgdGhvc2UgcG90ZW50aWFsIGludGVyYWN0aW9ucy4gVGhpcyBzZWFyY2ggc2hvdWxkIHByb3ZpZGUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBLQVNBTiBpcyB1c2VkIHRvIGNoZWNrIG1lbW9yeSBmcmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU5NSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQxOjA2LjcxODQ0MzU5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwOTE3OTQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrYXNhbl9yZXNldF90YWdcXFxcKC4qYWRkclxcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20va2FzYW4uaC0xMi0jZGVmaW5lIGFyY2hfa2FzYW5fc2V0X3RhZyhhZGRyLCB0YWcpXFx0X190YWdfc2V0KGFkZHIsIHRhZylcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2thc2FuLmg6MTM6I2RlZmluZSBhcmNoX2thc2FuX3Jlc2V0X3RhZyhhZGRyKVxcdF9fdGFnX3Jlc2V0KGFkZHIpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rYXNhbi5oLTE0LSNkZWZpbmUgYXJjaF9rYXNhbl9nZXRfdGFnKGFkZHIpXFx0X190YWdfZ2V0KGFkZHIpXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTM2OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfdHRicjFfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTM3MS1cXHQvKiBUVEJSMSBhZGRyZXNzZXMgbWF5IGhhdmUgYSB0YWcgaWYgS0FTQU5fU1dfVEFHUyBpcyBpbiB1c2UgKi9cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjM3MjpcXHRyZXR1cm4gYXJjaF9rYXNhbl9yZXNldF90YWcoYWRkcikgXFx1MDAzZT0gUEFHRV9PRkZTRVQ7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0zNzMtfVxcbi0tXFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jPTE1MD1zdGF0aWMgaW50IGNoYW5nZV9tZW1vcnlfY29tbW9uKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jLTE4MC1cXHQgICAgKCh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWVuZCkgXFx1MDAzZVxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYzoxODE6XFx0ICAgICAodW5zaWduZWQgbG9uZylrYXNhbl9yZXNldF90YWcoYXJlYS1cXHUwMDNlYWRkcikgKyBhcmVhLVxcdTAwM2VzaXplKSB8fFxcbmFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYy0xODItXFx0ICAgICgoYXJlYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoVk1fQUxMT0MgfCBWTV9BTExPV19IVUdFX1ZNQVApKSAhPSBWTV9BTExPQykpXFxuLS1cXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMtMTk0LVxcdFxcdHVuc2lnbmVkIGxvbmcgaWR4ID0gKCh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKXN0YXJ0KSAtXFxuYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jOjE5NTpcXHRcXHRcXHRcXHQgICAgICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZyhhcmVhLVxcdTAwM2VhZGRyKSlcXG5hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMtMTk2LVxcdFxcdFxcdFxcdCAgICBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi0tXFxuaW5jbHVkZS9saW51eC9oaWdobWVtLmg9MzQwPXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9oaWdocGFnZV9rYXNhbl90YWdnZWQoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaC0zNDMtXFxuaW5jbHVkZS9saW51eC9oaWdobWVtLmg6MzQ0OlxcdGNsZWFyX3BhZ2Uoa2FzYW5fcmVzZXRfdGFnKGthZGRyKSk7XFxuaW5jbHVkZS9saW51eC9oaWdobWVtLmgtMzQ1LVxcdGt1bm1hcF9sb2NhbChrYWRkcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2thc2FuLmg9NTE0PXN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9yZWNvcmRfYXV4X3N0YWNrKHZvaWQgKnB0cikge31cXG4tLVxcbmluY2x1ZGUvbGludXgva2FzYW4uaC01MTktXFxuaW5jbHVkZS9saW51eC9rYXNhbi5oOjUyMDpzdGF0aWMgaW5saW5lIHZvaWQgKmthc2FuX3Jlc2V0X3RhZyhjb25zdCB2b2lkICphZGRyKVxcbmluY2x1ZGUvbGludXgva2FzYW4uaC01MjEte1xcbmluY2x1ZGUvbGludXgva2FzYW4uaDo1MjI6XFx0cmV0dXJuICh2b2lkICopYXJjaF9rYXNhbl9yZXNldF90YWcoYWRkcik7XFxuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUyMy19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2thc2FuLmg9NTMyPWJvb2wga2FzYW5fcmVwb3J0KGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLFxcbi0tXFxuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUzNi1cXG5pbmNsdWRlL2xpbnV4L2thc2FuLmg6NTM3OnN0YXRpYyBpbmxpbmUgdm9pZCAqa2FzYW5fcmVzZXRfdGFnKGNvbnN0IHZvaWQgKmFkZHIpXFxuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUzOC17XFxuLS1cXG5rZXJuZWwvZm9yay5jPTI3NT1zdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyaClcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjgyLVxcbmtlcm5lbC9mb3JrLmM6MjgzOlxcdHZmcmVlKGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVxcdTAwM2VhZGRyKSk7XFxua2VybmVsL2ZvcmsuYy0yODQtfVxcbi0tXFxua2VybmVsL2ZvcmsuYz0zMzM9c3RhdGljIGludCBhbGxvY190aHJlYWRfc3RhY2tfbm9kZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IG5vZGUpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTM0OC1cXG5rZXJuZWwvZm9yay5jOjM0OTpcXHRcXHRzdGFjayA9IGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVxcdTAwM2VhZGRyKTtcXG5rZXJuZWwvZm9yay5jLTM1MC1cXG4tLVxcbm1tL2thc2FuL2thc2FuLmg9MzMxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBhZGRyX2hhc19tZXRhZGF0YShjb25zdCB2b2lkICphZGRyKVxcbm1tL2thc2FuL2thc2FuLmgtMzMyLXtcXG5tbS9rYXNhbi9rYXNhbi5oOjMzMzpcXHRyZXR1cm4gKGthc2FuX3Jlc2V0X3RhZyhhZGRyKSBcXHUwMDNlPVxcbm1tL2thc2FuL2thc2FuLmgtMzM0LVxcdFxcdGthc2FuX3NoYWRvd190b19tZW0oKHZvaWQgKilLQVNBTl9TSEFET1dfU1RBUlQpKTtcXG4tLVxcbm1tL2thc2FuL2thc2FuLmg9NDc5PXN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9wb2lzb24oY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIHU4IHZhbHVlLCBib29sIGluaXQpXFxuLS1cXG5tbS9rYXNhbi9rYXNhbi5oLTQ4NS1cXG5tbS9rYXNhbi9rYXNhbi5oOjQ4NjpcXHRod19zZXRfbWVtX3RhZ19yYW5nZShrYXNhbl9yZXNldF90YWcoYWRkciksIHNpemUsIHZhbHVlLCBpbml0KTtcXG5tbS9rYXNhbi9rYXNhbi5oLTQ4Ny19XFxuLS1cXG5tbS9rYXNhbi9rYXNhbi5oPTQ4OT1zdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fdW5wb2lzb24oY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGJvb2wgaW5pdClcXG4tLVxcbm1tL2thc2FuL2thc2FuLmgtNDk2LVxcbm1tL2thc2FuL2thc2FuLmg6NDk3OlxcdGh3X3NldF9tZW1fdGFnX3JhbmdlKGthc2FuX3Jlc2V0X3RhZyhhZGRyKSwgc2l6ZSwgdGFnLCBpbml0KTtcXG5tbS9rYXNhbi9rYXNhbi5oLTQ5OC19XFxuLS1cXG5tbS9rYXNhbi9yZXBvcnQuYz00NzE9c3RhdGljIHZvaWQgcHJpbnRfcmVwb3J0KHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbylcXG5tbS9rYXNhbi9yZXBvcnQuYy00NzIte1xcbm1tL2thc2FuL3JlcG9ydC5jOjQ3MzpcXHR2b2lkICphZGRyID0ga2FzYW5fcmVzZXRfdGFnKCh2b2lkICopaW5mby1cXHUwMDNlYWNjZXNzX2FkZHIpO1xcbm1tL2thc2FuL3JlcG9ydC5jLTQ3NC1cXHR1OCB0YWcgPSBnZXRfdGFnKCh2b2lkICopaW5mby1cXHUwMDNlYWNjZXNzX2FkZHIpO1xcbi0tXFxubW0va2FzYW4vcmVwb3J0LmM9NDg5PXN0YXRpYyB2b2lkIGNvbXBsZXRlX3JlcG9ydF9pbmZvKHN0cnVjdCBrYXNhbl9yZXBvcnRfaW5mbyAqaW5mbylcXG5tbS9rYXNhbi9yZXBvcnQuYy00OTAte1xcbm1tL2thc2FuL3JlcG9ydC5jOjQ5MTpcXHR2b2lkICphZGRyID0ga2FzYW5fcmVzZXRfdGFnKCh2b2lkICopaW5mby1cXHUwMDNlYWNjZXNzX2FkZHIpO1xcbm1tL2thc2FuL3JlcG9ydC5jLTQ5Mi1cXHRzdHJ1Y3Qgc2xhYiAqc2xhYjtcXG4tLVxcbm1tL2thc2FuL3JlcG9ydF9od190YWdzLmM9MTg9Y29uc3Qgdm9pZCAqa2FzYW5fZmluZF9maXJzdF9iYWRfYWRkcihjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm1tL2thc2FuL3JlcG9ydF9od190YWdzLmMtMjYtXFx0ICovXFxubW0va2FzYW4vcmVwb3J0X2h3X3RhZ3MuYzoyNzpcXHRyZXR1cm4ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xcbm1tL2thc2FuL3JlcG9ydF9od190YWdzLmMtMjgtfVxcbi0tXFxubW0va2FzYW4vcmVwb3J0X3N3X3RhZ3MuYz0zMz1jb25zdCB2b2lkICprYXNhbl9maW5kX2ZpcnN0X2JhZF9hZGRyKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKVxcbi0tXFxubW0va2FzYW4vcmVwb3J0X3N3X3RhZ3MuYy0zNS1cXHR1OCB0YWcgPSBnZXRfdGFnKGFkZHIpO1xcbm1tL2thc2FuL3JlcG9ydF9zd190YWdzLmM6MzY6XFx0dm9pZCAqcCA9IGthc2FuX3Jlc2V0X3RhZyhhZGRyKTtcXG5tbS9rYXNhbi9yZXBvcnRfc3dfdGFncy5jLTM3LVxcdHZvaWQgKmVuZCA9IHAgKyBzaXplO1xcbi0tXFxubW0va2FzYW4vc2hhZG93LmM9MTI0PXZvaWQga2FzYW5fcG9pc29uKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCB1OCB2YWx1ZSwgYm9vbCBpbml0KVxcbi0tXFxubW0va2FzYW4vc2hhZG93LmMtMTM1LVxcdCAqL1xcbm1tL2thc2FuL3NoYWRvdy5jOjEzNjpcXHRhZGRyID0ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xcbm1tL2thc2FuL3NoYWRvdy5jLTEzNy1cXG4tLVxcbm1tL2thc2FuL3NoYWRvdy5jPTE2Mz12b2lkIGthc2FuX3VucG9pc29uKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBib29sIGluaXQpXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy0xNzEtXFx0ICovXFxubW0va2FzYW4vc2hhZG93LmM6MTcyOlxcdGFkZHIgPSBrYXNhbl9yZXNldF90YWcoYWRkcik7XFxubW0va2FzYW4vc2hhZG93LmMtMTczLVxcbi0tXFxubW0va2FzYW4vc3dfdGFncy5jPTc1PWJvb2wga2FzYW5fY2hlY2tfcmFuZ2UoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGJvb2wgd3JpdGUsXFxuLS1cXG5tbS9rYXNhbi9zd190YWdzLmMtMTA5LVxcbm1tL2thc2FuL3N3X3RhZ3MuYzoxMTA6XFx0dW50YWdnZWRfYWRkciA9IGthc2FuX3Jlc2V0X3RhZygoY29uc3Qgdm9pZCAqKWFkZHIpO1xcbm1tL2thc2FuL3N3X3RhZ3MuYy0xMTEtXFx0aWYgKHVubGlrZWx5KCFhZGRyX2hhc19tZXRhZGF0YSh1bnRhZ2dlZF9hZGRyKSkpXFxuLS1cXG5tbS9rYXNhbi9zd190YWdzLmM9MTI0PWJvb2wga2FzYW5fYnl0ZV9hY2Nlc3NpYmxlKGNvbnN0IHZvaWQgKmFkZHIpXFxuLS1cXG5tbS9rYXNhbi9zd190YWdzLmMtMTI2LVxcdHU4IHRhZyA9IGdldF90YWcoYWRkcik7XFxubW0va2FzYW4vc3dfdGFncy5jOjEyNzpcXHR2b2lkICp1bnRhZ2dlZF9hZGRyID0ga2FzYW5fcmVzZXRfdGFnKGFkZHIpO1xcbm1tL2thc2FuL3N3X3RhZ3MuYy0xMjgtXFx0dTggc2hhZG93X2J5dGU7XFxuLS1cXG5tbS9tZW1ibG9jay5jPTg5Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZyZWVfcmVzZXJ2ZWRfYXJlYShwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kLFxcbi0tXFxubW0vbWVtYmxvY2suYy05MjEtXFx0XFx0ICovXFxubW0vbWVtYmxvY2suYzo5MjI6XFx0XFx0ZGlyZWN0X21hcF9hZGRyID0ga2FzYW5fcmVzZXRfdGFnKGRpcmVjdF9tYXBfYWRkcik7XFxubW0vbWVtYmxvY2suYy05MjMtXFx0XFx0aWYgKCh1bnNpZ25lZCBpbnQpcG9pc29uIFxcdTAwM2M9IDB4RkYpXFxuLS1cXG5tbS9wYWdlX3BvaXNvbi5jPTIyPXN0YXRpYyB2b2lkIHBvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vcGFnZV9wb2lzb24uYy0yNy1cXHRrYXNhbl9kaXNhYmxlX2N1cnJlbnQoKTtcXG5tbS9wYWdlX3BvaXNvbi5jOjI4OlxcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkciksIFBBR0VfUE9JU09OLCBQQUdFX1NJWkUpO1xcbm1tL3BhZ2VfcG9pc29uLmMtMjktXFx0a2FzYW5fZW5hYmxlX2N1cnJlbnQoKTtcXG4tLVxcbm1tL3BhZ2VfcG9pc29uLmM9NzY9c3RhdGljIHZvaWQgdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL3BhZ2VfcG9pc29uLmMtODYtXFx0ICovXFxubW0vcGFnZV9wb2lzb24uYzo4NzpcXHRjaGVja19wb2lzb25fbWVtKHBhZ2UsIGthc2FuX3Jlc2V0X3RhZyhhZGRyKSwgUEFHRV9TSVpFKTtcXG5tbS9wYWdlX3BvaXNvbi5jLTg4LVxcdGthc2FuX2VuYWJsZV9jdXJyZW50KCk7XFxuLS1cXG5tbS9zbHViLmM9NTY4PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnJlZXBvaW50ZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgdm9pZCAqZnApXFxuLS1cXG5tbS9zbHViLmMtNTc1LVxcbm1tL3NsdWIuYzo1NzY6XFx0ZnJlZXB0cl9hZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKCh2b2lkICopZnJlZXB0cl9hZGRyKTtcXG5tbS9zbHViLmMtNTc3LVxcdCooZnJlZXB0cl90ICopZnJlZXB0cl9hZGRyID0gZnJlZWxpc3RfcHRyX2VuY29kZShzLCBmcCwgZnJlZXB0cl9hZGRyKTtcXG4tLVxcbm1tL3NsdWIuYz0xMDQ4PXN0YXRpYyB2b2lkIHByaW50X3NlY3Rpb24oY2hhciAqbGV2ZWwsIGNoYXIgKnRleHQsIHU4ICphZGRyLFxcbi0tXFxubW0vc2x1Yi5jLTEwNTItXFx0cHJpbnRfaGV4X2R1bXAobGV2ZWwsIHRleHQsIERVTVBfUFJFRklYX0FERFJFU1MsXFxubW0vc2x1Yi5jOjEwNTM6XFx0XFx0XFx0MTYsIDEsIGthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWFkZHIpLCBsZW5ndGgsIDEpO1xcbm1tL3NsdWIuYy0xMDU0LVxcdG1ldGFkYXRhX2FjY2Vzc19kaXNhYmxlKCk7XFxuLS1cXG5tbS9zbHViLmM9MTczNj12b2lkIHNldHVwX3NsYWJfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICphZGRyKVxcbi0tXFxubW0vc2x1Yi5jLTE3NDEtXFx0bWV0YWRhdGFfYWNjZXNzX2VuYWJsZSgpO1xcbm1tL3NsdWIuYzoxNzQyOlxcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkciksIFBPSVNPTl9JTlVTRSwgc2xhYl9zaXplKHNsYWIpKTtcXG5tbS9zbHViLmMtMTc0My1cXHRtZXRhZGF0YV9hY2Nlc3NfZGlzYWJsZSgpO1xcbi0tXFxubW0vc2x1Yi5jPTIyODU9c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtMjI5NC1cXHRcXHRhZGRyID0gc2xhYl9hZGRyZXNzKHNsYWIpICsgb2JqX2V4dHNfb2Zmc2V0X2luX3NsYWIocywgc2xhYik7XFxubW0vc2x1Yi5jOjIyOTU6XFx0XFx0YWRkciA9IGthc2FuX3Jlc2V0X3RhZyhhZGRyKTtcXG5tbS9zbHViLmMtMjI5Ni1cXHRcXHRvYmpfZXh0cyA9ICh1bnNpZ25lZCBsb25nKWFkZHI7XFxuLS1cXG5tbS9zbHViLmMtMjMxNC1cXHRcXHRmb3JfZWFjaF9vYmplY3QoYWRkciwgcywgc2xhYl9hZGRyZXNzKHNsYWIpLCBzbGFiLVxcdTAwM2VvYmplY3RzKVxcbm1tL3NsdWIuYzoyMzE1OlxcdFxcdFxcdG1lbXNldChrYXNhbl9yZXNldF90YWcoYWRkcikgKyBvZmZzZXQsIDAsIHNsYWJfb2JqX2V4dF9zaXplKHNsYWIpKTtcXG5tbS9zbHViLmMtMjMxNi1cXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxuLS1cXG5tbS92bWFsbG9jLmM9MTA5OT1zdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqX19maW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCByYl9yb290ICpyb290KVxcbi0tXFxubW0vdm1hbGxvYy5jLTExMDItXFxubW0vdm1hbGxvYy5jOjExMDM6XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWFkZHIpO1xcbm1tL3ZtYWxsb2MuYy0xMTA0LVxcbi0tXFxubW0vdm1hbGxvYy5jPTExMjI9X19maW5kX3ZtYXBfYXJlYV9leGNlZWRfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCByYl9yb290ICpyb290KVxcbi0tXFxubW0vdm1hbGxvYy5jLTExMjYtXFxubW0vdm1hbGxvYy5jOjExMjc6XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWFkZHIpO1xcbm1tL3ZtYWxsb2MuYy0xMTI4LVxcbi0tXFxubW0vdm1hbGxvYy5jPTQ2OTU9bG9uZyB2cmVhZF9pdGVyKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgY29uc3QgY2hhciAqYWRkciwgc2l6ZV90IGNvdW50KVxcbi0tXFxubW0vdm1hbGxvYy5jLTQ3MDMtXFxubW0vdm1hbGxvYy5jOjQ3MDQ6XFx0YWRkciA9IGthc2FuX3Jlc2V0X3RhZyhhZGRyKTtcXG5tbS92bWFsbG9jLmMtNDcwNS1cXG4tLVxcbnNjcmlwdHMvZ2RiL2xpbnV4L21tLnB5PTM0PWNsYXNzIHg4Nl9wYWdlX29wcygpOlxcbi0tXFxuc2NyaXB0cy9nZGIvbGludXgvbW0ucHktOTMtXFxuc2NyaXB0cy9nZGIvbGludXgvbW0ucHk6OTQ6ICAgIGRlZiBrYXNhbl9yZXNldF90YWcoc2VsZiwgYWRkcik6XFxuc2NyaXB0cy9nZGIvbGludXgvbW0ucHktOTUtICAgICAgICByZXR1cm4gYWRkclxcbi0tXFxuc2NyaXB0cy9nZGIvbGludXgvbW0ucHk9MjAzPWNsYXNzIGFhcmNoNjRfcGFnZV9vcHMoKTpcXG4tLVxcbnNjcmlwdHMvZ2RiL2xpbnV4L21tLnB5LTM1OC1cXG5zY3JpcHRzL2dkYi9saW51eC9tbS5weTozNTk6ICAgIGRlZiBrYXNhbl9yZXNldF90YWcoc2VsZiwgYWRkcik6XFxuc2NyaXB0cy9nZGIvbGludXgvbW0ucHktMzYwLSAgICAgICAgaWYgY29uc3RhbnRzLkxYX0NPTkZJR19LQVNBTl9TV19UQUdTIG9yIGNvbnN0YW50cy5MWF9DT05GSUdfS0FTQU5fSFdfVEFHUzpcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaD0yNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICp2aXJ0X3RvX3BhZ2Uodm9pZCAqdmlydClcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaC0zMy1cXG50b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmg6MzQ6c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcXG50b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmgtMzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MTowOC42Mjc2Mjk2NzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjk0NTMwMDc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLQVNBTiBSZXNldCBUYWcgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBLQVNBTiBhZ2Fpbiwgc3BlY2lmaWNhbGx5IHRoZSB0YWcgcmVzZXQgZnVuY3Rpb25hbGl0eS4gSSdtIHN0YXJ0aW5nIGJ5IGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBuYW1lbHkgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va2FzYW4uaGAgYW5kIGBpbmNsdWRlL2xpbnV4L2thc2FuLmhgLiBUaGUgY29yZSBxdWVzdGlvbiBvbiBteSBtaW5kIGlzLCB3aGF0IGV4YWN0bHkgZG9lcyBga2FzYW5fcmVzZXRfdGFnYCAqZG8qPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgS0FTQU4gZnJhbWV3b3JrLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBpbmNsdWRlL2xpbnV4L2thc2FuLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDUxNS01NDUsIGFzIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgYXJlYSB3aGVyZSB0aGUgZGVmaW5pdGlvbiBhbmQgcmVsZXZhbnQgdXNhZ2UgYXJlIGRlc2NyaWJlZC4gRnJvbSBoZXJlIEkgaG9wZSB0byB1bmRlcnN0YW5kIHRoZSBwcmFjdGljYWwgYXNwZWN0cyBvZiBob3cgdGhlIHRhZyBpcyByZXNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MToxMS41NzI5MzMxNDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgva2FzYW4uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTU6XFx0XFxuIDUxNjpcXHQjZW5kaWYgLyogQ09ORklHX0tBU0FOX0dFTkVSSUMgKi9cXG4gNTE3OlxcdFxcbiA1MTg6XFx0I2lmIGRlZmluZWQoQ09ORklHX0tBU0FOX1NXX1RBR1MpIHx8IGRlZmluZWQoQ09ORklHX0tBU0FOX0hXX1RBR1MpXFxuIDUxOTpcXHRcXG4gNTIwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCAqa2FzYW5fcmVzZXRfdGFnKGNvbnN0IHZvaWQgKmFkZHIpXFxuIDUyMTpcXHR7XFxuIDUyMjpcXHRcXHRyZXR1cm4gKHZvaWQgKilhcmNoX2thc2FuX3Jlc2V0X3RhZyhhZGRyKTtcXG4gNTIzOlxcdH1cXG4gNTI0OlxcdFxcbiA1MjU6XFx0LyoqXFxuIDUyNjpcXHQgKiBrYXNhbl9yZXBvcnQgLSBwcmludCBhIHJlcG9ydCBhYm91dCBhIGJhZCBtZW1vcnkgYWNjZXNzIGRldGVjdGVkIGJ5IEtBU0FOXFxuIDUyNzpcXHQgKiBAYWRkcjogYWRkcmVzcyBvZiB0aGUgYmFkIGFjY2Vzc1xcbiA1Mjg6XFx0ICogQHNpemU6IHNpemUgb2YgdGhlIGJhZCBhY2Nlc3NcXG4gNTI5OlxcdCAqIEBpc193cml0ZTogd2hldGhlciB0aGUgYmFkIGFjY2VzcyBpcyBhIHdyaXRlIG9yIGEgcmVhZFxcbiA1MzA6XFx0ICogQGlwOiBpbnN0cnVjdGlvbiBwb2ludGVyIGZvciB0aGUgYWNjZXNzaWJpbGl0eSBjaGVjayBvciB0aGUgYmFkIGFjY2VzcyBpdHNlbGZcXG4gNTMxOlxcdCAqL1xcbiA1MzI6XFx0Ym9vbCBrYXNhbl9yZXBvcnQoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsXFxuIDUzMzpcXHRcXHRcXHRib29sIGlzX3dyaXRlLCB1bnNpZ25lZCBsb25nIGlwKTtcXG4gNTM0OlxcdFxcbiA1MzU6XFx0I2Vsc2UgLyogQ09ORklHX0tBU0FOX1NXX1RBR1MgfHwgQ09ORklHX0tBU0FOX0hXX1RBR1MgKi9cXG4gNTM2OlxcdFxcbiA1Mzc6XFx0c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcXG4gNTM4OlxcdHtcXG4gNTM5OlxcdFxcdHJldHVybiAodm9pZCAqKWFkZHI7XFxuIDU0MDpcXHR9XFxuIDU0MTpcXHRcXG4gNTQyOlxcdCNlbmRpZiAvKiBDT05GSUdfS0FTQU5fU1dfVEFHUyB8fCBDT05GSUdfS0FTQU5fSFdfVEFHUyovXFxuIDU0MzpcXHRcXG4gNTQ0OlxcdCNpZmRlZiBDT05GSUdfS0FTQU5fSFdfVEFHU1xcbiA1NDU6XFx0XFxuIDU0NjpcXHR2b2lkIGthc2FuX3JlcG9ydF9hc3luYyh2b2lkKTtcXG4gNTQ3OlxcdFxcbiA1NDg6XFx0I2VuZGlmIC8qIENPTkZJR19LQVNBTl9IV19UQUdTICovXFxuIDU0OTpcXHRcXG4gNTUwOlxcdCNpZmRlZiBDT05GSUdfS0FTQU5fR0VORVJJQ1xcbiA1NTE6XFx0dm9pZCBfX2luaXQga2FzYW5faW5pdF9nZW5lcmljKHZvaWQpO1xcbiA1NTI6XFx0I2Vsc2VcXG4gNTUzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9pbml0X2dlbmVyaWModm9pZCkgeyB9XFxuIDU1NDpcXHQjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6MTEuNTczMDQ3MzkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQzMDEzMzI2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLQVNBTiBSZXNldCBUYWcgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBga2FzYW5fcmVzZXRfdGFnKGFkZHIpYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJZiBlaXRoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUgS0FTQU4gdGFncyBhcmUgZW5hYmxlZCwgaXQncyBnb2luZyB0byBjYWxsIGBhcmNoX2thc2FuX3Jlc2V0X3RhZyhhZGRyKWAuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoaXMgaXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYXJ0LCBzbyB0aGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgaXMgbGlrZWx5IGdvaW5nIHRvIHJlc2lkZS4gQnV0IGlmIHRob3NlIEtBU0FOIG9wdGlvbnMgKmFyZW4ndCogZW5hYmxlZCwgdGhlbiB3ZSBqdXN0IGhhdmUgYSBzaW1wbGUgaW5saW5lIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgb3JpZ2luYWwgYWRkcmVzcywgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBuby1vcCwgcGFzc2luZyB0aGUgYWRkcmVzcyB0aHJvdWdoLiBNYWtlcyBzZW5zZSBmb3Igd2hlbiBLQVNBTiBpc24ndCBpbiB1c2UuXG5cbkJ1dC4uLiBoYW5nIG9uLiBXZSBuZWVkIHRvIGNvbnNpZGVyIG91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBkb24ndCB3ZT8gSXQgbG9va3MgbGlrZSB3ZSdyZSBvbiBhbWQ2NC4gVGhhdCdzIGEgY3J1Y2lhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gQ2FuIGFtZDY0IGV2ZW4gc3VwcG9ydCBlaXRoZXIgYENPTkZJR19LQVNBTl9TV19UQUdTYCBvciBgQ09ORklHX0tBU0FOX0hXX1RBR1NgPyBJIGNhbid0IGp1c3QgYXNzdW1lIGFueXRoaW5nIGhlcmUuIFRoZSBLY29uZmlnIGZpbGVzIHdpbGwgaGF2ZSB0aGUgYW5zd2VycyBmb3Igd2hhdCBpcyBwb3NzaWJsZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgYWxsb3dlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MDcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MToxNS44NzQzODM0NDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODcxNzA4OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtBU0FOX1NXX1RBR1NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcua2FzYW49ODk9Y29uZmlnIEtBU0FOX0dFTkVSSUNcXG4tLVxcbmxpYi9LY29uZmlnLmthc2FuLTEwMy1cXG5saWIvS2NvbmZpZy5rYXNhbjoxMDQ6Y29uZmlnIEtBU0FOX1NXX1RBR1NcXG5saWIvS2NvbmZpZy5rYXNhbi0xMDUtXFx0Ym9vbCBcXFwiU29mdHdhcmUgVGFnLUJhc2VkIEtBU0FOXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MToxNy41NjE1NjAzMDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMwODE4NjEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLY29uZmlnLmthc2FuIEZpbGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHNwZWNpZmljIGFib3V0IHRoZSBLQVNBTiBjb25maWd1cmF0aW9uLCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgbGliL0tjb25maWcua2FzYW5gLiBJIGZpZ3VyZSB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgc2hvdWxkIGJlIHNvbWV3aGVyZSBhcm91bmQgbGluZSAxMDAgdG8gMTMwLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHN0YXJ0cyB0byBhcHBlYXIgaW4gdGhlc2UgZmlsZXMuIEhvcGVmdWxseSwgdGhpcyBzZWN0aW9uIGhvbGRzIHRoZSBrZXkgdG8gdGhlIHNwZWNpZmljIGRldGFpbHMgSSdtIGFmdGVyLCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgYW5kIGFueSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoYXQgcmFuZ2UuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTQyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6MTkuODY5NzQ4NDc5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmthc2FuXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHQgIENvbnN1bWVzIGFib3V0IDEvOHRoIG9mIGF2YWlsYWJsZSBtZW1vcnkgYXQga2VybmVsIHN0YXJ0IGFuZCBhZGRzIGFuXFxuIDEwMTpcXHRcXHQgIG92ZXJoZWFkIG9mIH41MCUgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbnMuXFxuIDEwMjpcXHRcXHQgIFRoZSBwZXJmb3JtYW5jZSBzbG93ZG93biBpcyB+eDMuXFxuIDEwMzpcXHRcXG4gMTA0OlxcdGNvbmZpZyBLQVNBTl9TV19UQUdTXFxuIDEwNTpcXHRcXHRib29sIFxcXCJTb2Z0d2FyZSBUYWctQmFzZWQgS0FTQU5cXFwiXFxuIDEwNjpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9LQVNBTl9TV19UQUdTIFxcdTAwMjZcXHUwMDI2IENDX0hBU19LQVNBTl9TV19UQUdTXFxuIDEwNzpcXHRcXHRkZXBlbmRzIG9uIENDX0hBU19XT1JLSU5HX05PU0FOSVRJWkVfQUREUkVTU1xcbiAxMDg6XFx0XFx0c2VsZWN0IFNMVUJfREVCVUdcXG4gMTA5OlxcdFxcdHNlbGVjdCBDT05TVFJVQ1RPUlNcXG4gMTEwOlxcdFxcdGhlbHBcXG4gMTExOlxcdFxcdCAgRW5hYmxlcyBTb2Z0d2FyZSBUYWctQmFzZWQgS0FTQU4uXFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdCAgUmVxdWlyZXMgR0NDIDExKyBvciBDbGFuZy5cXG4gMTE0OlxcdFxcbiAxMTU6XFx0XFx0ICBTdXBwb3J0ZWQgb25seSBvbiBhcm02NCBDUFVzIGFuZCByZWxpZXMgb24gVG9wIEJ5dGUgSWdub3JlLlxcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHQgIENvbnN1bWVzIGFib3V0IDEvMTZ0aCBvZiBhdmFpbGFibGUgbWVtb3J5IGF0IGtlcm5lbCBzdGFydCBhbmRcXG4gMTE4OlxcdFxcdCAgYWRkIGFuIG92ZXJoZWFkIG9mIH4yMCUgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbnMuXFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdCAgTWF5IHBvdGVudGlhbGx5IGludHJvZHVjZSBwcm9ibGVtcyByZWxhdGVkIHRvIHBvaW50ZXIgY2FzdGluZyBhbmRcXG4gMTIxOlxcdFxcdCAgY29tcGFyaXNvbiwgYXMgaXQgZW1iZWRzIGEgdGFnIGludG8gdGhlIHRvcCBieXRlIG9mIGVhY2ggcG9pbnRlci5cXG4gMTIyOlxcdFxcbiAxMjM6XFx0Y29uZmlnIEtBU0FOX0hXX1RBR1NcXG4gMTI0OlxcdFxcdGJvb2wgXFxcIkhhcmR3YXJlIFRhZy1CYXNlZCBLQVNBTlxcXCJcXG4gMTI1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX0tBU0FOX0hXX1RBR1NcXG4gMTI2OlxcdFxcdGhlbHBcXG4gMTI3OlxcdFxcdCAgRW5hYmxlcyBIYXJkd2FyZSBUYWctQmFzZWQgS0FTQU4uXFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdCAgUmVxdWlyZXMgR0NDIDEwKyBvciBDbGFuZyAxMisuXFxuIDEzMDpcXHRcXG4gMTMxOlxcdFxcdCAgU3VwcG9ydGVkIG9ubHkgb24gYXJtNjQgQ1BVcyBzdGFydGluZyBmcm9tIEFSTXY4LjUgYW5kIHJlbGllcyBvblxcbiAxMzI6XFx0XFx0ICBNZW1vcnkgVGFnZ2luZyBFeHRlbnNpb24gYW5kIFRvcCBCeXRlIElnbm9yZS5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0ICBDb25zdW1lcyBhYm91dCAxLzMybmQgb2YgYXZhaWxhYmxlIG1lbW9yeS5cXG4gMTM1OlxcdFxcbiAxMzY6XFx0XFx0ICBNYXkgcG90ZW50aWFsbHkgaW50cm9kdWNlIHByb2JsZW1zIHJlbGF0ZWQgdG8gcG9pbnRlciBjYXN0aW5nIGFuZFxcbiAxMzc6XFx0XFx0ICBjb21wYXJpc29uLCBhcyBpdCBlbWJlZHMgYSB0YWcgaW50byB0aGUgdG9wIGJ5dGUgb2YgZWFjaCBwb2ludGVyLlxcbiAxMzg6XFx0XFxuIDEzOTpcXHRlbmRjaG9pY2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6MTkuODY5ODE4MjE5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxOTYyNTc2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIEFkZHJlc3NTYW5pdGl6ZXIgKEtBU0FOKSBUYWdnaW5nIEZlYXR1cmUgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIG1lbW9yeSBzYWZldHkgd29yaywgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBsYXkgb2YgdGhlIGxhbmQgcmVnYXJkaW5nIEtBU0FOIHRhZ2dpbmcgc3VwcG9ydCBvbiB0aGlzIGFyY2hpdGVjdHVyZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGFyZSB3ZSBkZWFsaW5nIHdpdGggYSBzb2Z0d2FyZS1iYXNlZCBvciBoYXJkd2FyZS1iYXNlZCB0YWdnaW5nIGltcGxlbWVudGF0aW9uPyBUaGUgZmlyc3QgdGhpbmcgdG8gY29uZmlybSBpcyB3aGV0aGVyIHRoZSBhcmNoaXRlY3R1cmUgZXZlbiAqZGVmaW5lcyogYEhBVkVfQVJDSF9LQVNBTl9TV19UQUdTYCBhbmQgYEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTYC4gVW5kZXJzdGFuZGluZyB3aGljaCB0YWdnaW5nIG1vZGUgaXMgYXZhaWxhYmxlIGlzIGFic29sdXRlbHkgY3JpdGljYWwuIEl0IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgcGVyZm9ybWFuY2UgcHJvZmlsZSBhbmQsIGZyYW5rbHksIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBhcHByb2FjaC4gU29mdHdhcmUtYmFzZWQgdGFnZ2luZyBpcyBvYnZpb3VzbHkgbGVzcyBwZXJmb3JtYW50IGJ1dCBtYXkgYmUgdGhlIG9ubHkgb3B0aW9uIGluIHNvbWUgY2FzZXMuIEhhcmR3YXJlLWJhc2VkLCBvbiB0aGUgb3RoZXIgaGFuZCwgKmNvdWxkKiBicmluZyBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgYnkgb2ZmbG9hZGluZyB0aGUgdGFnZ2luZyB3b3JrIHRvIHNwZWNpYWxpemVkIGhhcmR3YXJlLCBpZiBzdXBwb3J0ZWQsIG9mIGNvdXJzZS4gU28sIGxldOKAmXMgc2VlIHdoYXQgd2UncmUgYWN0dWFsbHkgd29ya2luZyB3aXRoIGZpcnN0LiBEZXRlcm1pbmluZyB0aGUgcHJlc2VuY2UgYW5kIG1lYW5pbmcgb2YgdGhvc2UgdHdvIEtjb25maWcgc3ltYm9scyBpcyB0aGUga2V5IGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTc5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MToyMy4wNjYwNzc4MjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDM5MDM5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFWRV9BUkNIX0tBU0FOLipUQUdTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE2MC1cXHRzZWxlY3QgSEFWRV9BUkNIX0tBU0FOX1ZNQUxMT0NcXG5hcmNoL2FybTY0L0tjb25maWc6MTYxOlxcdHNlbGVjdCBIQVZFX0FSQ0hfS0FTQU5fU1dfVEFHU1xcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNjI6XFx0c2VsZWN0IEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTIGlmIEFSTTY0X01URVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjMtXFx0IyBTb21lIGluc3RydW1lbnRhdGlvbiBtYXkgYmUgdW5zb3VuZCwgaGVuY2UgRVhQRVJUXFxuLS1cXG5saWIvS2NvbmZpZy5rYXNhbj00PWNvbmZpZyBIQVZFX0FSQ0hfS0FTQU5cXG4tLVxcbmxpYi9LY29uZmlnLmthc2FuLTYtXFxubGliL0tjb25maWcua2FzYW46Nzpjb25maWcgSEFWRV9BUkNIX0tBU0FOX1NXX1RBR1NcXG5saWIvS2NvbmZpZy5rYXNhbi04LVxcdGJvb2xcXG5saWIvS2NvbmZpZy5rYXNhbi05LVxcbmxpYi9LY29uZmlnLmthc2FuOjEwOmNvbmZpZyBIQVZFX0FSQ0hfS0FTQU5fSFdfVEFHU1xcbmxpYi9LY29uZmlnLmthc2FuLTExLVxcdGJvb2xcXG4tLVxcbmxpYi9LY29uZmlnLmthc2FuPTQ2PW1lbnVjb25maWcgS0FTQU5cXG4tLVxcbmxpYi9LY29uZmlnLmthc2FuLTQ4LVxcdGRlcGVuZHMgb24gKCgoSEFWRV9BUkNIX0tBU0FOIFxcdTAwMjZcXHUwMDI2IENDX0hBU19LQVNBTl9HRU5FUklDKSB8fCBcXFxcXFxubGliL0tjb25maWcua2FzYW46NDk6XFx0XFx0ICAgICAoSEFWRV9BUkNIX0tBU0FOX1NXX1RBR1MgXFx1MDAyNlxcdTAwMjYgQ0NfSEFTX0tBU0FOX1NXX1RBR1MpKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubGliL0tjb25maWcua2FzYW4tNTAtXFx0XFx0ICAgIENDX0hBU19XT1JLSU5HX05PU0FOSVRJWkVfQUREUkVTUykgfHwgXFxcXFxcbmxpYi9LY29uZmlnLmthc2FuOjUxOlxcdFxcdCAgIEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTXFxubGliL0tjb25maWcua2FzYW4tNTItXFx0ZGVwZW5kcyBvbiBTWVNGUyBcXHUwMDI2XFx1MDAyNiAhU0xVQl9USU5ZXFxuLS1cXG5saWIvS2NvbmZpZy5rYXNhbj0xMDQ9Y29uZmlnIEtBU0FOX1NXX1RBR1NcXG5saWIvS2NvbmZpZy5rYXNhbi0xMDUtXFx0Ym9vbCBcXFwiU29mdHdhcmUgVGFnLUJhc2VkIEtBU0FOXFxcIlxcbmxpYi9LY29uZmlnLmthc2FuOjEwNjpcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9LQVNBTl9TV19UQUdTIFxcdTAwMjZcXHUwMDI2IENDX0hBU19LQVNBTl9TV19UQUdTXFxubGliL0tjb25maWcua2FzYW4tMTA3LVxcdGRlcGVuZHMgb24gQ0NfSEFTX1dPUktJTkdfTk9TQU5JVElaRV9BRERSRVNTXFxuLS1cXG5saWIvS2NvbmZpZy5rYXNhbj0xMjM9Y29uZmlnIEtBU0FOX0hXX1RBR1NcXG5saWIvS2NvbmZpZy5rYXNhbi0xMjQtXFx0Ym9vbCBcXFwiSGFyZHdhcmUgVGFnLUJhc2VkIEtBU0FOXFxcIlxcbmxpYi9LY29uZmlnLmthc2FuOjEyNTpcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTXFxubGliL0tjb25maWcua2FzYW4tMTI2LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6MjQuODY5OTg5MjY0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MTU0MzYwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgS0FTQU4gVGFnIFNlbGVjdGlvbiBvbiB4ODYvYW1kNjQqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlc2UgS0FTQU4gb3B0aW9uczogYEhBVkVfQVJDSF9LQVNBTl9TV19UQUdTYCBhbmQgYEhBVkVfQVJDSF9LQVNBTl9IV19UQUdTYC4gVGhlIHRleHQgKnNheXMqIHRoZXkncmUgT05MWSBmb3IgQVJNNjQsIHdoaWNoIHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhpcywgYmVjYXVzZSB0aGlzIGNvdWxkIGFmZmVjdCB0aGluZ3MgaW4gbXkgeDg2L2FtZDY0IHdvcmsuIE15IHVuZGVyc3RhbmRpbmcgaXMgc29saWQsIHNvIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdC4gSeKAmWxsIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHN0YXJ0IGJ5IHZlcmlmeWluZyB3aGV0aGVyIHg4NiBzZWxlY3RzIGVpdGhlciBvZiB0aG9zZSBLQVNBTiBvcHRpb25zLiBJIG5lZWQgdG8gc2VlIGlmIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGV4cGxpY2l0bHkgaW5jbHVkZXMgb3IgZXhjbHVkZXMgdGhlc2UgZmVhdHVyZXMuIEFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlIGFuZCBzZWUgd2hhdCBpdCBoYXMgdG8gc2F5LiBObyBhc3N1bXB0aW9ucywganVzdCBjb25jcmV0ZSBldmlkZW5jZSwgdGhhdCdzIHRoZSBvbmx5IHdheSB0byBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MToyNy40ODU0Mjc5MjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTU1MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhBVkVfQVJDSF9LQVNBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTk4LVxcdHNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTF9SRUxBVElWRVxcbmFyY2gveDg2L0tjb25maWc6MTk5OlxcdHNlbGVjdCBIQVZFX0FSQ0hfS0FTQU5cXHRcXHRcXHRpZiBYODZfNjRcXG5hcmNoL3g4Ni9LY29uZmlnOjIwMDpcXHRzZWxlY3QgSEFWRV9BUkNIX0tBU0FOX1ZNQUxMT0NcXHRcXHRpZiBYODZfNjRcXG5hcmNoL3g4Ni9LY29uZmlnLTIwMS1cXHRzZWxlY3QgSEFWRV9BUkNIX0tGRU5DRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MToyNy41NDg1ODg4OTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ5MzkzNDU3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLQVNBTiBJbXBhY3Qgb24gYHRocmVhZF9zdGFja19mcmVlX3JjdWAgb24geDg2XzY0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZSBhbmQgdHJ5aW5nIHRvIGFzc2VzcyBpdHMgaW1wYWN0LCBzcGVjaWZpY2FsbHkgb24geDg2XzY0IChhbWQ2NCkuIEl0IGFwcGVhcnMgdGhlIGNoYW5nZSBpbnZvbHZlcyB3cmFwcGluZyBgdm1fYXJlYS1cdTAwM2VhZGRyYCB3aXRoIGBrYXNhbl9yZXNldF90YWdgIGJlZm9yZSBwYXNzaW5nIGl0IHRvIGB2ZnJlZWAuIFRoZSBpbml0aWFsIGFzc3VtcHRpb24sIGJhc2VkIG9uIHRoZSBgeDg2XzY0YCBjb25maWd1cmF0aW9uIG9ubHkgZW5hYmxpbmcgYEhBVkVfQVJDSF9LQVNBTmAgYW5kIGBIQVZFX0FSQ0hfS0FTQU5fVk1BTExPQ2AsIGlzIHRoYXQgbmVpdGhlciBgQ09ORklHX0tBU0FOX1NXX1RBR1NgIG5vciBgQ09ORklHX0tBU0FOX0hXX1RBR1NgIGFyZSBlbmFibGVkLiBUaGlzIG1lYW5zIG9uIGFtZDY0LCB0aGUgYGthc2FuX3Jlc2V0X3RhZ2AgZnVuY3Rpb24gZWZmZWN0aXZlbHkgYmVjb21lcyBhIG5vLW9wOiBga2FzYW5fcmVzZXRfdGFnKHgpYCBzaW1wbHkgZXZhbHVhdGVzIHRvIGAodm9pZCAqKXhgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHRob3VnaC5cblxuQ2hlY2tpbmcgYGluY2x1ZGUvbGludXgva2FzYW4uaGAgY29uZmlybXMgdGhhdCBpZiBuZWl0aGVyIGBDT05GSUdfS0FTQU5fU1dfVEFHU2Agbm9yIGBDT05GSUdfS0FTQU5fSFdfVEFHU2AgYXJlIGRlZmluZWQsIHRoZW4gYGthc2FuX3Jlc2V0X3RhZ2AgaXMgZGVmaW5lZCBhcyBhIGNhc3QuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBgYXJjaF9rYXNhbl9yZXNldF90YWdgIGlzbid0IHVzZWQuIE9uIHg4NiwgdGhlcmUgaXMgbm8gYGFyY2hfa2FzYW5fcmVzZXRfdGFnYCwgc2luY2UgdGFnLWJhc2VkIEtBU0FOIGlzIGFuIEFSTTY0LXNwZWNpZmljIGZlYXR1cmUgKE1URS9UQkkpLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBkb2VzIHRoaXMgY2hhbmdlIHdhcnJhbnQgYSBmdXp6aW5nIHBhc3M/IFRoZSBydWxlcyBzdGF0ZSBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXNcIi4gT25lIHBvdGVudGlhbCBjYXRlZ29yeSBpcyBcIkNvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZVwiLiBJcyB0aGlzIHJlbGV2YW50P1xuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGUgYWZmZWN0ZWQgY29kZSBwYXRoLCBzcGVjaWZpY2FsbHkgYHRocmVhZF9zdGFja19mcmVlX3JjdWAgd2l0aGluIGBrZXJuZWwvZm9yay5jYCwgaXMgY29tcGlsZWQgb24gYW1kNjQuIEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBpdCBpcy4gVGhlbiB0aGUgY2hhbmdlICptdXN0KiBhbHRlciBsb2dpYyBmb3IgYW1kNjQuXG5cbk9rYXksIGxldCdzIHRyYWNlIHRoZSBmbG93LiBCZWZvcmUsIHRoZSBjb2RlIHdhcyBgdmZyZWUodm1fYXJlYS1cdTAwM2VhZGRyKTtgIEFmdGVyIHRoZSBwYXRjaCwgaXQgYmVjb21lcyBgdmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpO2AuIEJlY2F1c2Ugb24gYW1kNjQsIGBrYXNhbl9yZXNldF90YWcoeClgIGV2YWx1YXRlcyB0byBgKHZvaWQgKil4YCwgdGhlIG5ldCBlZmZlY3Qgb24gYW1kNjQgYXBwZWFycyB0byBiZSBubyBjaGFuZ2U6IGB2ZnJlZShrYXNhbl9yZXNldF90YWcodm1fYXJlYS1cdTAwM2VhZGRyKSlgIGJlY29tZXMgYHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcilgLlxuXG5MZXQgbWUgYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUgdHlwZSBvZiBgdm1fYXJlYWAgaXMgYHN0cnVjdCB2bV9zdHJ1Y3QgKmAgYW5kIHRoZSB0eXBlIG9mIGB2bV9hcmVhLVx1MDAzZWFkZHJgIGlzIGB2b2lkICpgLiBTbywgYGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVx1MDAzZWFkZHIpYCByZXR1cm5zIGAodm9pZCAqKSh2bV9hcmVhLVx1MDAzZWFkZHIpYC4gVGhlcmVmb3JlLCBgdmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpYCBpcywgYW5kIEkgcmVwZWF0LCBpcyBsaXRlcmFsbHkgYHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcilgLlxuXG5JIHNob3VsZCBhbHNvIGV4YW1pbmUgd2hhdCBoYXBwZW5lZCBpbiBhcm02NCB2ZXJzdXMgYW1kNjQsIGFuZCB3aGF0IHRoZSBvcmlnaW5hbCBidWcgdGhhdCBwcm9tcHRlZCB0aGUgY2hhbmdlIHdhcy4gSSBuZWVkIHRvIGJlIHN1cmUuIEhvd2V2ZXIsIHRoZSBsb2dpYyBjbGVhcmx5IGRvZXMgbm90IGNoYW5nZSBjb21waWxlZCBvdXRwdXQgZm9yIGFtZDY0LiBMb29raW5nIGF0IGxpbmUgMzQ5IG9mIGBrZXJuZWwvZm9yay5jYCwgSSBzZWUgYSB1c2Ugb2YgYGthc2FuX3Jlc2V0X3RhZ2AgdGhhdCdzIGxpa2VseSB0aGUgZm9jdXMgb2YgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQxOjQyLjQ4NzkzNzk5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2ZvcmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzA6XFx0XFx0cmV0dXJuIHJldDtcXG4gMzMxOlxcdH1cXG4gMzMyOlxcdFxcbiAzMzM6XFx0c3RhdGljIGludCBhbGxvY190aHJlYWRfc3RhY2tfbm9kZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IG5vZGUpXFxuIDMzNDpcXHR7XFxuIDMzNTpcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhO1xcbiAzMzY6XFx0XFx0dm9pZCAqc3RhY2s7XFxuIDMzNzpcXHRcXG4gMzM4OlxcdFxcdHZtX2FyZWEgPSBhbGxvY190aHJlYWRfc3RhY2tfbm9kZV9mcm9tX2NhY2hlKHRzaywgbm9kZSk7XFxuIDMzOTpcXHRcXHRpZiAodm1fYXJlYSkge1xcbiAzNDA6XFx0XFx0XFx0aWYgKG1lbWNnX2NoYXJnZV9rZXJuZWxfc3RhY2sodm1fYXJlYSkpIHtcXG4gMzQxOlxcdFxcdFxcdFxcdHZmcmVlKHZtX2FyZWEtXFx1MDAzZWFkZHIpO1xcbiAzNDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM0MzpcXHRcXHRcXHR9XFxuIDM0NDpcXHRcXG4gMzQ1OlxcdFxcdFxcdC8qIFJlc2V0IHN0YWNrIG1ldGFkYXRhLiAqL1xcbiAzNDY6XFx0XFx0XFx0aWYgKCFrYXNhbl9od190YWdzX2VuYWJsZWQoKSlcXG4gMzQ3OlxcdFxcdFxcdFxcdGthc2FuX3VucG9pc29uX3JhbmdlKHZtX2FyZWEtXFx1MDAzZWFkZHIsIFRIUkVBRF9TSVpFKTtcXG4gMzQ4OlxcdFxcbiAzNDk6XFx0XFx0XFx0c3RhY2sgPSBrYXNhbl9yZXNldF90YWcodm1fYXJlYS1cXHUwMDNlYWRkcik7XFxuIDM1MDpcXHRcXG4gMzUxOlxcdFxcdFxcdC8qIENsZWFyIHN0YWxlIHBvaW50ZXJzIGZyb20gcmV1c2VkIHN0YWNrLiAqL1xcbiAzNTI6XFx0XFx0XFx0Y2xlYXJfcGFnZXModm1fYXJlYS1cXHUwMDNlYWRkciwgdm1fYXJlYS1cXHUwMDNlbnJfcGFnZXMpO1xcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRcXHR0c2stXFx1MDAzZXN0YWNrX3ZtX2FyZWEgPSB2bV9hcmVhO1xcbiAzNTU6XFx0XFx0XFx0dHNrLVxcdTAwM2VzdGFjayA9IHN0YWNrO1xcbiAzNTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDM1NzpcXHRcXHR9XFxuIDM1ODpcXHRcXG4gMzU5OlxcdFxcdHN0YWNrID0gX192bWFsbG9jX25vZGUoVEhSRUFEX1NJWkUsIFRIUkVBRF9BTElHTixcXG4gMzYwOlxcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX1ZNQVBfU1RBQ0ssXFxuIDM2MTpcXHRcXHRcXHRcXHRcXHQgICAgIG5vZGUsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuIDM2MjpcXHRcXHRpZiAoIXN0YWNrKVxcbiAzNjM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM2NDpcXHRcXG4gMzY1OlxcdFxcdHZtX2FyZWEgPSBmaW5kX3ZtX2FyZWEoc3RhY2spO1xcbiAzNjY6XFx0XFx0aWYgKG1lbWNnX2NoYXJnZV9rZXJuZWxfc3RhY2sodm1fYXJlYSkpIHtcXG4gMzY3OlxcdFxcdFxcdHZmcmVlKHN0YWNrKTtcXG4gMzY4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzNjk6XFx0XFx0fVxcbiAzNzA6XFx0XFx0LypcXG4gMzcxOlxcdFxcdCAqIFdlIGNhbid0IGNhbGwgZmluZF92bV9hcmVhKCkgaW4gaW50ZXJydXB0IGNvbnRleHQsIGFuZFxcbiAzNzI6XFx0XFx0ICogZnJlZV90aHJlYWRfc3RhY2soKSBjYW4gYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LFxcbiAzNzM6XFx0XFx0ICogc28gY2FjaGUgdGhlIHZtX3N0cnVjdC5cXG4gMzc0OlxcdFxcdCAqL1xcbiAzNzU6XFx0XFx0dHNrLVxcdTAwM2VzdGFja192bV9hcmVhID0gdm1fYXJlYTtcXG4gMzc2OlxcdFxcdHN0YWNrID0ga2FzYW5fcmVzZXRfdGFnKHN0YWNrKTtcXG4gMzc3OlxcdFxcdHRzay1cXHUwMDNlc3RhY2sgPSBzdGFjaztcXG4gMzc4OlxcdFxcdHJldHVybiAwO1xcbiAzNzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MTo0Mi40ODgxODY4OTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDM5MzU5NjM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgTXlzdGVyeSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIExpbmUgMjEwIG9mIGBrZXJuZWwvZm9yay5jYOKApiBsZXQncyBzZWUsIHRoZXJlJ3MgdGhpcyBgc3RydWN0IHZtX3N0YWNrYCBkZWZpbmVkLiBJdCdzIGdvdCBhbiBgcmN1X2hlYWRgIGFuZCBhIGB2bV9zdHJ1Y3RgIHBvaW50ZXIuIEludGVyZXN0aW5nLiBOb3csIGxvb2tpbmcgZnVydGhlciBkb3duLCBhdCBgZnJlZV92bV9zdGFja19jYWNoZWAgKGxpbmUgMjk0KSBhbmQgYHRocmVhZF9zdGFja19mcmVlX3JjdWAsIHNvbWV0aGluZydzIG5vdCBxdWl0ZSBjbGlja2luZy4gV2h5IGlzIHRoZXJlIGEgYHZmcmVlKHZtX2FyZWEtXHUwMDNlYWRkcik7YCBjYWxsIGluIGBmcmVlX3ZtX3N0YWNrX2NhY2hlYD8gVGhhdCdzIHRoZSBrZXkuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoaXN0b3J5IG9mIHRoaXMuIFdhcyB0aGlzIGludHJvZHVjZWQgaW4gYSBzcGVjaWZpYyBjb21taXQgb3IgaXMgdGhlcmUgYSBwYXRjaCByZWxhdGVkIHRvIHRoaXM/IEkgd2lzaCBJIGhhZCBgZ2l0IGxvZ2AgdG8gY2hlY2sgdGhhdCBkaXJlY3RseS4gTm8gd29ycmllcy4gSSBjYW4gc2VhcmNoIHRoZSBrZXJuZWwgY29kZSBmb3IgdGhlIHBhdGNoIHRpdGxlIG9yIHJlbGF0ZWQgY29tbWl0cywgaWYgSSBjYW4gZmluZCB0aGVtLlxuXG5BbHJpZ2h0LCBsZXQncyByZWZvY3VzLiBMZXQncyBzZWFyY2ggYWdhaW4gZm9yIGB2bV9zdGFja2AgaW4gYGtlcm5lbC9mb3JrLmNgIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBpcyBoYW5kbGVkLiBMZXQncyBsb29rIGF0IGBmcmVlX3ZtX3N0YWNrX2NhY2hlYCAobGluZXMgMjk0LTMxMCkuIE9rYXksIGhlcmUgaXQgaXM6IFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCBhIHBlci1DUFUgY2FjaGUgb2YgYHZtX3N0cnVjdGAgcG9pbnRlcnMgYW5kIGNhbGxzIGB2ZnJlZWAgb24gdGhlIGFzc29jaWF0ZWQgYWRkcmVzcyBpZiB0aGUgYHZtX2FyZWFgIGlzIG5vdCBudWxsLCBhbmQgdGhlbiBzZXRzIHRoZSBwb2ludGVyIHRvIG51bGwuXG5cbk5vdywgbGV0J3MgbW92ZSBvbiB0byBgZnJlZV90aHJlYWRfc3RhY2tgLCBsaW5lcyA0MzAtNDkwLi4uTGV0J3MgcmVhZCB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA4NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQxOjQ2Ljg4MTc4NTk3NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2ZvcmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MzA6XFx0c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp0aHJlYWRfc3RhY2tfY2FjaGU7XFxuIDQzMTpcXHRcXG4gNDMyOlxcdHN0YXRpYyB2b2lkIHRocmVhZF9zdGFja19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJoKVxcbiA0MzM6XFx0e1xcbiA0MzQ6XFx0XFx0a21lbV9jYWNoZV9mcmVlKHRocmVhZF9zdGFja19jYWNoZSwgcmgpO1xcbiA0MzU6XFx0fVxcbiA0MzY6XFx0XFxuIDQzNzpcXHRzdGF0aWMgdm9pZCB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbiA0Mzg6XFx0e1xcbiA0Mzk6XFx0XFx0c3RydWN0IHJjdV9oZWFkICpyaCA9IHRzay1cXHUwMDNlc3RhY2s7XFxuIDQ0MDpcXHRcXG4gNDQxOlxcdFxcdGNhbGxfcmN1KHJoLCB0aHJlYWRfc3RhY2tfZnJlZV9yY3UpO1xcbiA0NDI6XFx0fVxcbiA0NDM6XFx0XFxuIDQ0NDpcXHRzdGF0aWMgaW50IGFsbG9jX3RocmVhZF9zdGFja19ub2RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgbm9kZSlcXG4gNDQ1OlxcdHtcXG4gNDQ2OlxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YWNrO1xcbiA0NDc6XFx0XFx0c3RhY2sgPSBrbWVtX2NhY2hlX2FsbG9jX25vZGUodGhyZWFkX3N0YWNrX2NhY2hlLCBUSFJFQURJTkZPX0dGUCwgbm9kZSk7XFxuIDQ0ODpcXHRcXHRzdGFjayA9IGthc2FuX3Jlc2V0X3RhZyhzdGFjayk7XFxuIDQ0OTpcXHRcXHR0c2stXFx1MDAzZXN0YWNrID0gc3RhY2s7XFxuIDQ1MDpcXHRcXHRyZXR1cm4gc3RhY2sgPyAwIDogLUVOT01FTTtcXG4gNDUxOlxcdH1cXG4gNDUyOlxcdFxcbiA0NTM6XFx0c3RhdGljIHZvaWQgZnJlZV90aHJlYWRfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuIDQ1NDpcXHR7XFxuIDQ1NTpcXHRcXHR0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlKHRzayk7XFxuIDQ1NjpcXHRcXHR0c2stXFx1MDAzZXN0YWNrID0gTlVMTDtcXG4gNDU3OlxcdH1cXG4gNDU4OlxcdFxcbiA0NTk6XFx0dm9pZCB0aHJlYWRfc3RhY2tfY2FjaGVfaW5pdCh2b2lkKVxcbiA0NjA6XFx0e1xcbiA0NjE6XFx0XFx0dGhyZWFkX3N0YWNrX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGVfdXNlcmNvcHkoXFxcInRocmVhZF9zdGFja1xcXCIsXFxuIDQ2MjpcXHRcXHRcXHRcXHRcXHRcXHRUSFJFQURfU0laRSwgVEhSRUFEX1NJWkUsIDAsIDAsXFxuIDQ2MzpcXHRcXHRcXHRcXHRcXHRcXHRUSFJFQURfU0laRSwgTlVMTCk7XFxuIDQ2NDpcXHRcXHRCVUdfT04odGhyZWFkX3N0YWNrX2NhY2hlID09IE5VTEwpO1xcbiA0NjU6XFx0fVxcbiA0NjY6XFx0XFxuIDQ2NzpcXHQjZW5kaWYgLyogVEhSRUFEX1NJWkUgXFx1MDAzZT0gUEFHRV9TSVpFICovXFxuIDQ2ODpcXHQjZW5kaWYgLyogQ09ORklHX1ZNQVBfU1RBQ0sgKi9cXG4gNDY5OlxcdFxcbiA0NzA6XFx0LyogU0xBQiBjYWNoZSBmb3Igc2lnbmFsX3N0cnVjdCBzdHJ1Y3R1cmVzICh0c2stXFx1MDAzZXNpZ25hbCkgKi9cXG4gNDcxOlxcdHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqc2lnbmFsX2NhY2hlcDtcXG4gNDcyOlxcdFxcbiA0NzM6XFx0LyogU0xBQiBjYWNoZSBmb3Igc2lnaGFuZF9zdHJ1Y3Qgc3RydWN0dXJlcyAodHNrLVxcdTAwM2VzaWdoYW5kKSAqL1xcbiA0NzQ6XFx0c3RydWN0IGttZW1fY2FjaGUgKnNpZ2hhbmRfY2FjaGVwO1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHQvKiBTTEFCIGNhY2hlIGZvciBmaWxlc19zdHJ1Y3Qgc3RydWN0dXJlcyAodHNrLVxcdTAwM2VmaWxlcykgKi9cXG4gNDc3OlxcdHN0cnVjdCBrbWVtX2NhY2hlICpmaWxlc19jYWNoZXA7XFxuIDQ3ODpcXHRcXG4gNDc5OlxcdC8qIFNMQUIgY2FjaGUgZm9yIGZzX3N0cnVjdCBzdHJ1Y3R1cmVzICh0c2stXFx1MDAzZWZzKSAqL1xcbiA0ODA6XFx0c3RydWN0IGttZW1fY2FjaGUgKmZzX2NhY2hlcDtcXG4gNDgxOlxcdFxcbiA0ODI6XFx0LyogU0xBQiBjYWNoZSBmb3IgbW1fc3RydWN0IHN0cnVjdHVyZXMgKHRzay1cXHUwMDNlbW0pICovXFxuIDQ4MzpcXHRzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1tX2NhY2hlcDtcXG4gNDg0OlxcdFxcbiA0ODU6XFx0c3RhdGljIHZvaWQgYWNjb3VudF9rZXJuZWxfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBhY2NvdW50KVxcbiA0ODY6XFx0e1xcbiA0ODc6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1ZNQVBfU1RBQ0spKSB7XFxuIDQ4ODpcXHRcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bV9hcmVhID0gdGFza19zdGFja192bV9hcmVhKHRzayk7XFxuIDQ4OTpcXHRcXHRcXHRpbnQgaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6NDYuODgxOTQyOTc1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUzMTUwNjA0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGlzc2VjdGluZyBUaHJlYWQgU3RhY2sgQWxsb2NhdGlvbiBhbmQgRnJlZWluZyB3aXRoIEtBU0FOKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCBhbmQgaW1tZWRpYXRlbHkgaGF2ZSBhIHF1ZXN0aW9uLiBXaGF0J3MgZ29pbmcgb24gd2l0aCBgdGhyZWFkX3N0YWNrX2RlbGF5ZWRfZnJlZWA/IExldCdzIHRha2UgYSBxdWljayBsb29rIGF0IGxpbmVzIDI3MC0zMDAgaW4gYGtlcm5lbC9mb3JrLmNgLiBBaCwgZ290IGl0LlxuXG5Ob3csIGZvY3VzaW5nIG9uIGB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlYCwgYHRzay1cdTAwM2VzdGFja2AgaXMgYXNzaWduZWQgdG8gYSBgdm1fc3RhY2tgIHN0cnVjdC4gSW50ZXJlc3RpbmcuIFRoZW4gSSBnbyBiYWNrIHRvIHNlZSBgYWxsb2NfdGhyZWFkX3N0YWNrX25vZGVgIGFuZCBub3RlIHRoYXQgYHRzay1cdTAwM2VzdGFja2AgaXMgdGhlbiBhc3NpZ25lZCB0aGUgdmFsdWUgb2YgYHN0YWNrYC4gQmFjayBpbiBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCwgYHZtX3N0YWNrLVx1MDAzZXN0YWNrX3ZtX2FyZWFgIGVxdWFscyBgdHNrLVx1MDAzZXN0YWNrX3ZtX2FyZWFgLiBPa2F5LCBhbGwgb2YgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuXG5cbkJ1dCB3aHkgdGhlIGNoYW5nZSBpbiBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCBmcm9tIGB2ZnJlZSh2bV9hcmVhLVx1MDAzZWFkZHIpYCB0byBgdmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXHUwMDNlYWRkcikpYD8gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uLiBXaGVyZSBkb2VzIGB2bV9hcmVhLVx1MDAzZWFkZHJgIGNvbWUgZnJvbT8gSSBuZWVkIHRvIHRyYWNlIGl0IGJhY2suXG5cbkkgc2VlIHRoYXQgYHZtX2FyZWEtXHUwMDNlYWRkcmAgaXMgYXNzaWduZWQgdGhlIGFkZHJlc3MgcmV0dXJuZWQgYnkgYF9fdm1hbGxvY19ub2RlYCB3aXRoaW4gYF9fdm1hbGxvY19ub2RlYCBpdHNlbGYuIE5vdywgY29uc2lkZXJpbmcgS0FTQU4gd2l0aCB0YWdzIChsaWtlIEtBU0FOX1NXX1RBR1Mgb3IgSFcgdGFncyBvbiBBUk02NCksIGRvZXMgYHZtX2FyZWEtXHUwMDNlYWRkcmAgaGF2ZSBhIHRhZyBvciBub3Q/IFRoYXQncyB0aGUgY3J1eCBvZiBpdC5cblxuQmFjayBpbiBgYWxsb2NfdGhyZWFkX3N0YWNrX25vZGVgLCBJIHNlZSBgc3RhY2sgPSBfX3ZtYWxsb2Nfbm9kZSguLi4pYCBhbmQgdGhlIHVzZSBvZiBgR0ZQX1ZNQVBfU1RBQ0tgIHdpdGggYF9fR0ZQX1NLSVBfS0FTQU5gLiBPa2F5LCBzbyBpdCBzZWVtcyBsaWtlIHRoZSBpbml0aWFsIGFsbG9jYXRpb24gKm1pZ2h0KiBza2lwIEtBU0FOLiBCdXQgdGhlbiB0aGVyZSdzIGEgc3Vic2VxdWVudCBgc3RhY2sgPSBrYXNhbl9yZXNldF90YWcodm1fYXJlYS1cdTAwM2VhZGRyKTtgIGFuZCB0aGVuIGBzdGFjayA9IGthc2FuX3Jlc2V0X3RhZyhzdGFjayk7YC4gSXMgYHZtX2FyZWEtXHUwMDNlYWRkcmAgYWN0dWFsbHkgdGFnZ2VkIGF0IHRoaXMgcG9pbnQ/IElmIGl0IGlzLCB3aHkgd291bGQgd2UgbmVlZCB0byByZXNldCB0aGUgdGFnIGJlZm9yZSBmcmVlaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLlxuXG5UaGlzIHJhaXNlcyBhbm90aGVyIHBvaW50OiB3aGF0IGRvZXMgYHZmcmVlKClgICpkbyogd2l0aCB0YWdnZWQgYWRkcmVzc2VzPyBUaGlzIGlzIG15IG5leHQgYXZlbnVlLiBMZXQncyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZmcmVlKClgIGluIGBtbS92bWFsbG9jLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgS0FTQU4gaW50ZXJhY3RzIHdpdGggdGhpcyBkZWFsbG9jYXRpb24gcHJvY2VzcyB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZSBga2FzYW5fcmVzZXRfdGFnYCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc5MSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQxOjUyLjE5NzAwNjEyNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyOTcyMjUzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHZmcmVlXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC91bS9pbmNsdWRlL3NoYXJlZC91bV9tYWxsb2MuaD0xND1leHRlcm4gdm9pZCAqdm1hbGxvY19ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplKTtcXG5hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3VtX21hbGxvYy5oLTE1LSNkZWZpbmUgdm1hbGxvYyguLi4pXFx0XFx0dm1hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pXFxuYXJjaC91bS9pbmNsdWRlL3NoYXJlZC91bV9tYWxsb2MuaDoxNjpleHRlcm4gdm9pZCB2ZnJlZShjb25zdCB2b2lkICpwdHIpO1xcbmFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvdW1fbWFsbG9jLmgtMTctXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0yMDQ9dm9pZCAqX19tdXN0X2NoZWNrIHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLFxcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMjEzLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjIxNDpleHRlcm4gdm9pZCB2ZnJlZShjb25zdCB2b2lkICphZGRyKTtcXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0yMTUtZXh0ZXJuIHZvaWQgdmZyZWVfYXRvbWljKGNvbnN0IHZvaWQgKmFkZHIpO1xcbi0tXFxubW0vbm9tbXUuYz02NT11bnNpZ25lZCBpbnQga29ianNpemUoY29uc3Qgdm9pZCAqb2JqcClcXG4tLVxcbm1tL25vbW11LmMtMTA1LVxcbm1tL25vbW11LmM6MTA2OnZvaWQgdmZyZWUoY29uc3Qgdm9pZCAqYWRkcilcXG5tbS9ub21tdS5jLTEwNy17XFxuLS1cXG5tbS92bWFsbG9jLmM9MzQ2MD1zdGF0aWMgdm9pZCB2bV9hcmVhX2ZyZWVfcGFnZXMoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfaWR4LFxcbi0tXFxubW0vdm1hbGxvYy5jLTM0OTEtICovXFxubW0vdm1hbGxvYy5jOjM0OTI6dm9pZCB2ZnJlZShjb25zdCB2b2lkICphZGRyKVxcbm1tL3ZtYWxsb2MuYy0zNDkzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6NTQuMDI2NzM2OTY4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5OTA5ODc3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgdGhlIGF1ZGllbmNlIGlzIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byBgdmZyZWVgKipcblxuQWxyaWdodCwgbGV0J3MgY3JhY2sgb3BlbiBgbW0vdm1hbGxvYy5jYCBhbmQgemVybyBpbiBvbiB0aGUgYHZmcmVlYCBmdW5jdGlvbi4gSSdtIGtlZW4gdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB2aXJ0dWFsIG1lbW9yeSBpcyBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCBjb21lcyB0byBkZWFsbG9jYXRpbmcgbWVtb3J5IGFsbG9jYXRlZCB3aXRoIGB2bWFsbG9jYC4gSSBrbm93IHRoZSBjb3JlIHByaW5jaXBsZXMsIG9mIGNvdXJzZTogaXQncyBhYm91dCBmcmVlaW5nIHVwIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgYW5kIHBvdGVudGlhbGx5IHJlbGVhc2luZyBwaHlzaWNhbCBwYWdlcyBiYWNrIHRvIHRoZSBzeXN0ZW0sIGJ1dCBJIHdhbnQgdG8gZ2V0IGEgYml0IG1vcmUgZ3JhbnVsYXIgaGVyZS5cblxuSSdtIHRoaW5raW5nLCBJJ2xsIHBheSBhdHRlbnRpb24gdG8gdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHBhZ2UgdGFibGVzLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gaW4gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gSSdtIGludGVyZXN0ZWQgaW4gaG93IGl0IGRlYWxzIHdpdGggdGhlIGB2bV9zdHJ1Y3RgIGFuZCBgdm1fYXJlYV9zdHJ1Y3RgLCBhbmQgZXNwZWNpYWxseSB0aGUgY2FzZXMgd2hlcmUgdGhlIGFsbG9jYXRlZCB2aXJ0dWFsIG1lbW9yeSBpcyBtYXBwZWQgdG8gY29udGlndW91cyBwaHlzaWNhbCBwYWdlcyBhcyB0aGV5IGFyZSBpbiB2bWFsbG9jLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGdyYWNlZnVsbHkgaGFuZGxlcyBlZGdlIGNhc2VzIGxpa2UgZnJlZWluZyBhIHBhcnRpYWwgYWxsb2NhdGlvbiBvciBhIGNvbXBsZXRlbHkgbWlzYWxpZ25lZCByZWdpb24g4oCTIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgcGFnZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBtZWNoYW5pc21zLiBBbHNvLCBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IGludGVyZXN0aW5nIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdGhhdCBhcmUgdXNlZCB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgdmlydHVhbCBtZW1vcnkgbWFwIGR1cmluZyBkZWFsbG9jYXRpb24uIEknbSBhbHNvIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3B0aW1pemF0aW9ucyB0aGF0IGFyZSBkb25lIGR1cmluZyBkZWFsbG9jYXRpb24uIEknbSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcnBsYXkgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCwgb2YgY291cnNlLCBidXQgSSdtIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBkZXRhaWxzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc2VlIGhvdyB3ZWxsIG15IGFzc3VtcHRpb25zIGFsaWduIHdpdGggdGhlIGFjdHVhbCBjb2RlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDUyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQxOjU5LjAxNzcyNjgzNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0OTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM0OTA6XFx0ICogY29udmVudGlvbnMgZm9yIHZmcmVlKCkgYXJjaC1kZXBlbmRlbnQgd291bGQgYmUgYSByZWFsbHkgYmFkIGlkZWEpLlxcbjM0OTE6XFx0ICovXFxuMzQ5MjpcXHR2b2lkIHZmcmVlKGNvbnN0IHZvaWQgKmFkZHIpXFxuMzQ5MzpcXHR7XFxuMzQ5NDpcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcXG4zNDk1OlxcdFxcbjM0OTY6XFx0XFx0aWYgKHVubGlrZWx5KGluX2ludGVycnVwdCgpKSkge1xcbjM0OTc6XFx0XFx0XFx0dmZyZWVfYXRvbWljKGFkZHIpO1xcbjM0OTg6XFx0XFx0XFx0cmV0dXJuO1xcbjM0OTk6XFx0XFx0fVxcbjM1MDA6XFx0XFxuMzUwMTpcXHRcXHRCVUdfT04oaW5fbm1pKCkpO1xcbjM1MDI6XFx0XFx0a21lbWxlYWtfZnJlZShhZGRyKTtcXG4zNTAzOlxcdFxcdG1pZ2h0X3NsZWVwKCk7XFxuMzUwNDpcXHRcXG4zNTA1OlxcdFxcdGlmICghYWRkcilcXG4zNTA2OlxcdFxcdFxcdHJldHVybjtcXG4zNTA3OlxcdFxcbjM1MDg6XFx0XFx0dm0gPSByZW1vdmVfdm1fYXJlYShhZGRyKTtcXG4zNTA5OlxcdFxcdGlmICh1bmxpa2VseSghdm0pKSB7XFxuMzUxMDpcXHRcXHRcXHRXQVJOKDEsIEtFUk5fRVJSIFxcXCJUcnlpbmcgdG8gdmZyZWUoKSBub25leGlzdGVudCB2bSBhcmVhICglcClcXFxcblxcXCIsXFxuMzUxMTpcXHRcXHRcXHRcXHRcXHRhZGRyKTtcXG4zNTEyOlxcdFxcdFxcdHJldHVybjtcXG4zNTEzOlxcdFxcdH1cXG4zNTE0OlxcdFxcbjM1MTU6XFx0XFx0aWYgKHVubGlrZWx5KHZtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZNX0ZMVVNIX1JFU0VUX1BFUk1TKSlcXG4zNTE2OlxcdFxcdFxcdHZtX3Jlc2V0X3Blcm1zKHZtKTtcXG4zNTE3OlxcdFxcbjM1MTg6XFx0XFx0dm1fYXJlYV9mcmVlX3BhZ2VzKHZtLCAwLCB2bS1cXHUwMDNlbnJfcGFnZXMpO1xcbjM1MTk6XFx0XFx0a3ZmcmVlKHZtLVxcdTAwM2VwYWdlcyk7XFxuMzUyMDpcXHRcXHRrZnJlZSh2bSk7XFxuMzUyMTpcXHR9XFxuMzUyMjpcXHRFWFBPUlRfU1lNQk9MKHZmcmVlKTtcXG4zNTIzOlxcdFxcbjM1MjQ6XFx0LyoqXFxuMzUyNTpcXHQgKiB2dW5tYXAgLSByZWxlYXNlIHZpcnR1YWwgbWFwcGluZyBvYnRhaW5lZCBieSB2bWFwKClcXG4zNTI2OlxcdCAqIEBhZGRyOiAgIG1lbW9yeSBiYXNlIGFkZHJlc3NcXG4zNTI3OlxcdCAqXFxuMzUyODpcXHQgKiBGcmVlIHRoZSB2aXJ0dWFsbHkgY29udGlndW91cyBtZW1vcnkgYXJlYSBzdGFydGluZyBhdCBAYWRkcixcXG4zNTI5OlxcdCAqIHdoaWNoIHdhcyBjcmVhdGVkIGZyb20gdGhlIHBhZ2UgYXJyYXkgcGFzc2VkIHRvIHZtYXAoKS5cXG4zNTMwOlxcdCAqXFxuMzUzMTpcXHQgKiBNdXN0IG5vdCBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuXFxuMzUzMjpcXHQgKi9cXG4zNTMzOlxcdHZvaWQgdnVubWFwKGNvbnN0IHZvaWQgKmFkZHIpXFxuMzUzNDpcXHR7XFxuMzUzNTpcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcXG4zNTM2OlxcdFxcbjM1Mzc6XFx0XFx0QlVHX09OKGluX2ludGVycnVwdCgpKTtcXG4zNTM4OlxcdFxcdG1pZ2h0X3NsZWVwKCk7XFxuMzUzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDE6NTkuMDE3OTIxNjA0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NTE3NDQ0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgYHJlbW92ZV92bV9hcmVhKGFkZHIpYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGByZW1vdmVfdm1fYXJlYShhZGRyKWAuIFJpZ2h0LCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYG1tL3ZtYWxsb2MuY2AsIGFuZCBnZXQgYSBnb29kIGxvb2sgYXQgdGhlIGByZW1vdmVfdm1fYXJlYWAgZnVuY3Rpb24uIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRoaXMgdGhpbmcuIE5vIHBvaW50IGluIGp1c3QgZ3Vlc3NpbmcsIGxldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTQ2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MjowMC44Njk2NjgzNzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMTUxMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB2bV9zdHJ1Y3QgXFxcXCpyZW1vdmVfdm1fYXJlYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTMzMjI9c3RydWN0IHZtX3N0cnVjdCAqZmluZF92bV9hcmVhKGNvbnN0IHZvaWQgKmFkZHIpXFxuLS1cXG5tbS92bWFsbG9jLmMtMzM0Mi0gKi9cXG5tbS92bWFsbG9jLmM6MzM0MzpzdHJ1Y3Qgdm1fc3RydWN0ICpyZW1vdmVfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKVxcbm1tL3ZtYWxsb2MuYy0zMzQ0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDI6MDAuOTQxODI1NDY1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMyNDEyOTY4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSByZWFkaW5nIGByZW1vdmVfdm1fYXJlYWAgaW4gYG1tL3ZtYWxsb2MuY2A6XG5cbioqRGlzc2VjdGluZyBgcmVtb3ZlX3ZtX2FyZWFgIGluIGBtbS92bWFsbG9jLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBmb2N1c2luZyBvbiBgcmVtb3ZlX3ZtX2FyZWFgIG5vdywgc3BlY2lmaWNhbGx5IGluIGBtbS92bWFsbG9jLmNgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSBrbm93IHRoZSB2bWFsbG9jIGFyZWEgaXMgY3J1Y2lhbCBmb3IgYWxsb2NhdGluZyB2aXJ0dWFsIG1lbW9yeSBmb3IgdGhpbmdzIGxpa2Uga2VybmVsIG1vZHVsZXMsIGFuZCBkcml2ZXJzIHRoYXQgcmVxdWlyZSBjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeSwgYnV0IGNhbid0IGJlIG1hcHBlZCBhdCBhIGZpeGVkIGFkZHJlc3MuIFNvLCByZW1vdmluZyBhbiBhcmVhIGlzIGEgc2lnbmlmaWNhbnQgb3BlcmF0aW9uOyBpdCBtZWFucyBmcmVlaW5nIHVwIHByZXZpb3VzbHkgYWxsb2NhdGVkIHZpcnR1YWwgbWVtb3J5LlxuXG5JJ20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBsaWtlbHkgdXNlIG9mIHRoZSByZWQtYmxhY2sgdHJlZSAob3Igc2ltaWxhciBkYXRhIHN0cnVjdHVyZSkgdG8gdHJhY2sgdGhlIHZtYWxsb2MgYXJlYSwgYW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIHRoYXQgY291bGQgYXJpc2UgZnJvbSBmcmVlaW5nIGEgcmVnaW9uLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byBga2ZyZWVgIGFuZCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBwcmltaXRpdmVzIHRvIGFjdHVhbGx5IHJlbGVhc2UgdGhlIHBhZ2VzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkgaGFuZGxlIGFueSBzeW5jaHJvbml6YXRpb24gdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBoYXBwZW4gd2hlbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBhbHNvIHJlZmVyZW5jaW5nIG9yIHVzaW5nIHRoaXMgdm1hbGxvYyBhcmVhLiBJJ20gcHJvYmFibHkgZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZXMgYXMgd2VsbCwgdG8gbWFrZSBzdXJlIHRoZSB2aXJ0dWFsLXRvLXBoeXNpY2FsIG1hcHBpbmcgaXMgcHJvcGVybHkgcmVtb3ZlZC4gQW5kLCBvZiBjb3Vyc2UsIEknbSBhbnRpY2lwYXRpbmcgdGhhdCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBlcnJvciBjb25kaXRpb25zIGFuZCBjb3JuZXIgY2FzZXMgY29ycmVjdGx5LCBwZXJoYXBzIGJ5IGNoZWNraW5nIHRoZSByZXR1cm4gdmFsdWVzIGZyb20gdGhlIHVuZGVybHlpbmcgY2FsbHMgYW5kIHRoZSBoYW5kbGluZyBvZiB0aGUgcmJ0cmVlIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MjowNC4xODMxMjQzMjdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzQwOlxcdCAqXFxuMzM0MTpcXHQgKiBSZXR1cm46IHRoZSBhcmVhIGRlc2NyaXB0b3Igb24gc3VjY2VzcyBvciAlTlVMTCBvbiBmYWlsdXJlLlxcbjMzNDI6XFx0ICovXFxuMzM0MzpcXHRzdHJ1Y3Qgdm1fc3RydWN0ICpyZW1vdmVfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKVxcbjMzNDQ6XFx0e1xcbjMzNDU6XFx0XFx0c3RydWN0IHZtYXBfYXJlYSAqdmE7XFxuMzM0NjpcXHRcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcXG4zMzQ3OlxcdFxcbjMzNDg6XFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4zMzQ5OlxcdFxcbjMzNTA6XFx0XFx0aWYgKFdBUk4oIVBBR0VfQUxJR05FRChhZGRyKSwgXFxcIlRyeWluZyB0byB2ZnJlZSgpIGJhZCBhZGRyZXNzICglcClcXFxcblxcXCIsXFxuMzM1MTpcXHRcXHRcXHRcXHRhZGRyKSlcXG4zMzUyOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjMzNTM6XFx0XFxuMzM1NDpcXHRcXHR2YSA9IGZpbmRfdW5saW5rX3ZtYXBfYXJlYSgodW5zaWduZWQgbG9uZylhZGRyKTtcXG4zMzU1OlxcdFxcdGlmICghdmEgfHwgIXZhLVxcdTAwM2V2bSlcXG4zMzU2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjMzNTc6XFx0XFx0dm0gPSB2YS1cXHUwMDNldm07XFxuMzM1ODpcXHRcXG4zMzU5OlxcdFxcdGRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKHZtLVxcdTAwM2VhZGRyLCBnZXRfdm1fYXJlYV9zaXplKHZtKSk7XFxuMzM2MDpcXHRcXHRkZWJ1Z19jaGVja19ub19vYmpfZnJlZWQodm0tXFx1MDAzZWFkZHIsIGdldF92bV9hcmVhX3NpemUodm0pKTtcXG4zMzYxOlxcdFxcdGthc2FuX2ZyZWVfbW9kdWxlX3NoYWRvdyh2bSk7XFxuMzM2MjpcXHRcXHRrYXNhbl9wb2lzb25fdm1hbGxvYyh2bS1cXHUwMDNlYWRkciwgZ2V0X3ZtX2FyZWFfc2l6ZSh2bSkpO1xcbjMzNjM6XFx0XFxuMzM2NDpcXHRcXHRmcmVlX3VubWFwX3ZtYXBfYXJlYSh2YSk7XFxuMzM2NTpcXHRcXHRyZXR1cm4gdm07XFxuMzM2NjpcXHR9XFxuMzM2NzpcXHRcXG4zMzY4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXJlYV9kaXJlY3RfbWFwKGNvbnN0IHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsXFxuMzM2OTpcXHRcXHRcXHRcXHRcXHQgICAgICAgaW50ICgqc2V0X2RpcmVjdF9tYXApKHN0cnVjdCBwYWdlICpwYWdlKSlcXG4zMzcwOlxcdHtcXG4zMzcxOlxcdFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4zMzcyOlxcdFxcbjMzNzM6XFx0XFx0LyogSFVHRV9WTUFMTE9DIHBhc3NlcyBzbWFsbCBwYWdlcyB0byBzZXRfZGlyZWN0X21hcCAqL1xcbjMzNzQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFyZWEtXFx1MDAzZW5yX3BhZ2VzOyBpKyspXFxuMzM3NTpcXHRcXHRcXHRpZiAocGFnZV9hZGRyZXNzKGFyZWEtXFx1MDAzZXBhZ2VzW2ldKSlcXG4zMzc2OlxcdFxcdFxcdFxcdHNldF9kaXJlY3RfbWFwKGFyZWEtXFx1MDAzZXBhZ2VzW2ldKTtcXG4zMzc3OlxcdH1cXG4zMzc4OlxcdFxcbjMzNzk6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDI6MDQuMTgzNDI0MTE2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQwMjI2NTY1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBLQVNBTiBJc3N1ZXMgaW4gYHZmcmVlKClgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBMaW5lIDMzNTAtMzM1NCBvZiB0aGUgY29kZSBjYXRjaGVzIG15IGF0dGVudGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBgdmZyZWUoKWAgZnVuY3Rpb24uIEkgc2VlIHRoZSBgV0FSTmAgbWFjcm8gaW1tZWRpYXRlbHksIHdoaWNoIGlzIGEgcmVkIGZsYWcuIEl0J3MgY2hlY2tpbmcgaWYgdGhlIGFkZHJlc3MgYGFkZHJgIGJlaW5nIHBhc3NlZCBpcyBwYWdlLWFsaWduZWQsIGJ1dCB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIHdpdGggS0FTQU4/IEkga25vdyBvbiBhcm02NCwgZXNwZWNpYWxseSB3aXRoIEtBU0FOIEhXX1RBR1Mgb3IgU1dfVEFHUyBlbmFibGVkLCB0aGUgdG9wIGJ5dGUgb2YgYW4gYWRkcmVzcyBjYW4gY29udGFpbiBhIHRhZy4gVGhpcyBpcyBjcnVjaWFsLlxuXG5UaGUgY29kZSBjaGVja3MgcGFnZSBhbGlnbm1lbnQsIHByZXN1bWFibHkgYnkgaW5zcGVjdGluZyB0aGUgbG93ZXIgYml0cy4gQnV0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFkZHJlc3MgaXMgKnVzZWQqIGluIHN1YnNlcXVlbnQgY2FsbHMuIGBmaW5kX3VubGlua192bWFwX2FyZWFgIGlzIHRoZSBuZXh0IGZ1bmN0aW9uIGNhbGwgdGhhdCBzZWVtcyB0byB1c2UgdGhpcyBhZGRyZXNzLCBzbyBJIG11c3QgZGlnIGRlZXBlci5cblxuTGV0J3MgbG9vayBhdCBgZmluZF91bmxpbmtfdm1hcF9hcmVhYC4gQWgsIGl0IGNhbGxzIGBfX2ZpbmRfdm1hcF9hcmVhYC4gQW5kIGJpbmdvISBgX19maW5kX3ZtYXBfYXJlYWAgZXhwbGljaXRseSBjYWxscyBga2FzYW5fcmVzZXRfdGFnYCBvbiB0aGUgYWRkcmVzcy4gVGhpcyBzZWVtcyB0byBtZWFuIHRoYXQgdGhlIGZ1bmN0aW9uICpyZW1vdmVzKiB0aGUgdGFnLiBCdXQgaXMgYGZpbmRfdW5saW5rX3ZtYXBfYXJlYWAgZ2V0dGluZyBhIHRhZyBhcyBpbnB1dCwgb3Igbm90PyBJIG11c3QgdmVyaWZ5LiBJcyB0aGlzIGFuIGlzc3VlPyBQcm9iYWJseSBub3QsIHNpbmNlIHRoZSB0YWcgZ2V0cyByZW1vdmVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg2OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQyOjA4LjIwNjA4MzAzNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzOTMwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmluZF91bmxpbmtfdm1hcF9hcmVhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9MjUxND1zdHJ1Y3Qgdm1hcF9hcmVhICpmaW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS92bWFsbG9jLmMtMjU1MC1cXG5tbS92bWFsbG9jLmM6MjU1MTpzdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqZmluZF91bmxpbmtfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkcilcXG5tbS92bWFsbG9jLmMtMjU1Mi17XFxuLS1cXG5tbS92bWFsbG9jLmM9MzA0OT12b2lkIHZtX3VubWFwX3JhbShjb25zdCB2b2lkICptZW0sIHVuc2lnbmVkIGludCBjb3VudClcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zMDY4LVxcbm1tL3ZtYWxsb2MuYzozMDY5OlxcdHZhID0gZmluZF91bmxpbmtfdm1hcF9hcmVhKGFkZHIpO1xcbm1tL3ZtYWxsb2MuYy0zMDcwLVxcdGlmIChXQVJOX09OX09OQ0UoIXZhKSlcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zMzQzPXN0cnVjdCB2bV9zdHJ1Y3QgKnJlbW92ZV92bV9hcmVhKGNvbnN0IHZvaWQgKmFkZHIpXFxuLS1cXG5tbS92bWFsbG9jLmMtMzM1My1cXG5tbS92bWFsbG9jLmM6MzM1NDpcXHR2YSA9IGZpbmRfdW5saW5rX3ZtYXBfYXJlYSgodW5zaWduZWQgbG9uZylhZGRyKTtcXG5tbS92bWFsbG9jLmMtMzM1NS1cXHRpZiAoIXZhIHx8ICF2YS1cXHUwMDNldm0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQyOjA4LjI1MTQ4MzgzNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NjQ0NDI3MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgZmluZF91bmxpbmtfdm1hcF9hcmVhYCBpbiBgbW0vdm1hbGxvYy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBmaW5kX3VubGlua192bWFwX2FyZWFgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsOyBpdCdzIHRoZSBjb3JlIG9mIGhvdyB2bWFsbG9jIGFyZWFzIGFyZSBtYW5hZ2VkIGFuZCB1bmxpbmtlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljIGZsb3cgKnByZWNpc2VseSosIGVzcGVjaWFsbHkgaG93IGl0IGhhbmRsZXMgdGhlIHVubWFwcGluZyBwcm9jZXNzLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIHBhcnRpY3VsYXJseSB0aGUgdm1hcCBhcmVhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5J3JlIHRyYXZlcnNlZC4gV2hhdCBhcmUgdGhlIGtleSBhc3N1bXB0aW9ucyBpdCBtYWtlcyBhYm91dCB0aGUgdm1hbGxvYyByZWdpb24gbGF5b3V0PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yLCBlc3BlY2lhbGx5IGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQ/IEkgYWxzbyBuZWVkIHRvIGFzY2VydGFpbiBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBsb2dpYyDigJMgYXJlIHRoZXJlIGFueSB1bnVzdWFsIGludGVyYWN0aW9ucyB3aXRoIGhhcmR3YXJlPyBTcGVjaWZpY2FsbHksIHdoZXJlIGFuZCBob3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZSB3aXRoIHRoZSBwYWdlIHRhYmxlIHN0cnVjdHVyZXMgdG8gaW52YWxpZGF0ZSBtYXBwaW5ncz8gVW5kZXJzdGFuZGluZyB0aGUgbnVhbmNlcyBvZiBtZW1vcnkgYmFycmllcnMgaGVyZSBpcyBwYXJhbW91bnQuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGEgbHluY2hwaW4gaW4gcHJldmVudGluZyBtZW1vcnkgbGVha3MgYW5kIGVuc3VyaW5nIHRoZSB2bWFsbG9jIHN1YnN5c3RlbSBvcGVyYXRlcyBjb3JyZWN0bHksIHNvIEkgbXVzdCBkaXNzZWN0IGV2ZXJ5IGxpbmUgd2l0aCBhIGZpbmUtdG9vdGggY29tYi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4NjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MjoxMy44OTU5MTMxMTFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTUwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTUwOlxcdFxcbjI1NTE6XFx0c3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKmZpbmRfdW5saW5rX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpXFxuMjU1MjpcXHR7XFxuMjU1MzpcXHRcXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcXG4yNTU0OlxcdFxcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xcbjI1NTU6XFx0XFx0aW50IGksIGo7XFxuMjU1NjpcXHRcXG4yNTU3OlxcdFxcdC8qXFxuMjU1ODpcXHRcXHQgKiBDaGVjayB0aGUgY29tbWVudCBpbiB0aGUgZmluZF92bWFwX2FyZWEoKSBhYm91dCB0aGUgbG9vcC5cXG4yNTU5OlxcdFxcdCAqL1xcbjI1NjA6XFx0XFx0aSA9IGogPSBhZGRyX3RvX25vZGVfaWQoYWRkcik7XFxuMjU2MTpcXHRcXHRkbyB7XFxuMjU2MjpcXHRcXHRcXHR2biA9IFxcdTAwMjZ2bWFwX25vZGVzW2ldO1xcbjI1NjM6XFx0XFxuMjU2NDpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnZuLVxcdTAwM2VidXN5LmxvY2spO1xcbjI1NjU6XFx0XFx0XFx0dmEgPSBfX2ZpbmRfdm1hcF9hcmVhKGFkZHIsIFxcdTAwMjZ2bi1cXHUwMDNlYnVzeS5yb290KTtcXG4yNTY2OlxcdFxcdFxcdGlmICh2YSlcXG4yNTY3OlxcdFxcdFxcdFxcdHVubGlua192YSh2YSwgXFx1MDAyNnZuLVxcdTAwM2VidXN5LnJvb3QpO1xcbjI1Njg6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZuLVxcdTAwM2VidXN5LmxvY2spO1xcbjI1Njk6XFx0XFxuMjU3MDpcXHRcXHRcXHRpZiAodmEpXFxuMjU3MTpcXHRcXHRcXHRcXHRyZXR1cm4gdmE7XFxuMjU3MjpcXHRcXHR9IHdoaWxlICgoaSA9IChpICsgbnJfdm1hcF9ub2RlcyAtIDEpICUgbnJfdm1hcF9ub2RlcykgIT0gaik7XFxuMjU3MzpcXHRcXG4yNTc0OlxcdFxcdHJldHVybiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MjoxMy44OTYxMDY5OTFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMwNDM2ODA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBMaW5lIDI1NjAgLSBQb3RlbnRpYWwgQm90dGxlbmVjaz8qKlxuXG5BbHJpZ2h0LCBsZXQncyB6b29tIGluIG9uIGxpbmUgMjU2MCBvZiB0aGlzIGNvZGUuIFRoYXQncyB3aGVyZSB3ZSBoYXZlIGBpID0gaiA9IGFkZHJfdG9fbm9kZV9pZChhZGRyKTtgLiBJbW1lZGlhdGVseSwgdGhlIGBhZGRyX3RvX25vZGVfaWQoYWRkcilgIGZ1bmN0aW9uIGNhdGNoZXMgbXkgZXllLiBJdCdzIG9idmlvdXNseSBjcml0aWNhbCwgdHJhbnNsYXRpbmcgYW4gYWRkcmVzcyAoYGFkZHJgKSBpbnRvIGEgbm9kZSBJRC4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGFyZWEgZm9yIHBlcmZvcm1hbmNlLCBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLiBUaGUgZG91YmxlIGFzc2lnbm1lbnQgc3VnZ2VzdHMgYGlgIGFuZCBgamAgYXJlIGRlcGVuZGVudCBhbmQgdGhlIG9wZXJhdGlvbiB3aWxsIGJlIGRvbmUgZm9yIGJvdGghIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZyB1bmRlciB0aGUgaG9vZCwgZmFzdCwgYW5kIHdoYXQgdGhlIHRpbWUgY29tcGxleGl0eSBtaWdodCBiZS4gVGhpcyBjb3VsZCBiZSBhIGJvdHRsZW5lY2sgaW4gdGhlIG92ZXJhbGwgYWxnb3JpdGhtIGlmIHRoaXMgZnVuY3Rpb24gaXMgaW5lZmZpY2llbnQsIHBhcnRpY3VsYXJseSBpZiBpdCdzIGNhbGxlZCBmcmVxdWVudGx5IG9yIHdpdGhpbiBhIHRpZ2h0IGxvb3AuIExldCdzIGRlbHZlIGRlZXBlciBhbmQgaW5zcGVjdCB0aGUgYWN0dWFsIGBhZGRyX3RvX25vZGVfaWRgIGltcGxlbWVudGF0aW9uIHRvIGdldCBhIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQyOjE3LjIwMDQ3NzA3MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1NjkyMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRkcl90b19ub2RlX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9OTkyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XFxubW0vdm1hbGxvYy5jOjk5MzphZGRyX3RvX25vZGVfaWQodW5zaWduZWQgbG9uZyBhZGRyKVxcbm1tL3ZtYWxsb2MuYy05OTQte1xcbi0tXFxubW0vdm1hbGxvYy5jPTk5OT1hZGRyX3RvX25vZGUodW5zaWduZWQgbG9uZyBhZGRyKVxcbm1tL3ZtYWxsb2MuYy0xMDAwLXtcXG5tbS92bWFsbG9jLmM6MTAwMTpcXHRyZXR1cm4gXFx1MDAyNnZtYXBfbm9kZXNbYWRkcl90b19ub2RlX2lkKGFkZHIpXTtcXG5tbS92bWFsbG9jLmMtMTAwMi19XFxuLS1cXG5tbS92bWFsbG9jLmM9MjUxND1zdHJ1Y3Qgdm1hcF9hcmVhICpmaW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS92bWFsbG9jLmMtMjUyMy1cXHQvKlxcbm1tL3ZtYWxsb2MuYzoyNTI0OlxcdCAqIEFuIGFkZHJfdG9fbm9kZV9pZChhZGRyKSBjb252ZXJ0cyBhbiBhZGRyZXNzIHRvIGEgbm9kZSBpbmRleFxcbm1tL3ZtYWxsb2MuYy0yNTI1LVxcdCAqIHdoZXJlIGEgVkEgaXMgbG9jYXRlZC4gSWYgVkEgc3BhbnMgc2V2ZXJhbCB6b25lcyBhbmQgcGFzc2VkXFxuLS1cXG5tbS92bWFsbG9jLmMtMjUzNS1cXHQgKi9cXG5tbS92bWFsbG9jLmM6MjUzNjpcXHRpID0gaiA9IGFkZHJfdG9fbm9kZV9pZChhZGRyKTtcXG5tbS92bWFsbG9jLmMtMjUzNy1cXHRkbyB7XFxuLS1cXG5tbS92bWFsbG9jLmM9MjU1MT1zdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqZmluZF91bmxpbmtfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yNTU5LVxcdCAqL1xcbm1tL3ZtYWxsb2MuYzoyNTYwOlxcdGkgPSBqID0gYWRkcl90b19ub2RlX2lkKGFkZHIpO1xcbm1tL3ZtYWxsb2MuYy0yNTYxLVxcdGRvIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDI6MTcuMjQ4MDUxNzcxWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY0NTY0Mzc5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBtbS92bWFsbG9jLmNgJ3MgQWxsb2NhdGlvbiBTdHJhdGVneSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiBgdm1hbGxvYy5jYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDk5MC0xMDEwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgdm1hbGxvY2AgaGFuZGxlcyBsYXJnZSBhbGxvY2F0aW9ucyBhbmQgdGhlIG1lY2hhbmljcyBiZWhpbmQgaXQuIEknbSBmb2N1c2luZyBvbiB0aGF0IHNlY3Rpb24gb2YgY29kZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG51YW5jZXMgb2YgdGhpcyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlci4gVGhpcyByYW5nZSB0eXBpY2FsbHkgZGVhbHMgd2l0aCB0aGUgY3JpdGljYWwgbG9naWMgLSBwZXJoYXBzIHRoZSBhbGxvY2F0aW9uIGxvb3AsIHRoZSBhZGRyZXNzIHNwYWNlIGxvb2t1cHMsIGFuZCBhbnkgbmVjZXNzYXJ5IHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgYXJlIGxpa2VseSBzb21lIGNoZWNrcyBmb3IgYXZhaWxhYmxlIGNvbnRpZ3VvdXMgdmlydHVhbCBhZGRyZXNzIHNwYWNlLCB0aGUgc2VsZWN0aW9uIG9mIHRoZSByaWdodCBWTSBhcmVhIGZsYWdzLCBvciBtYXliZSBldmVuIHN1YnRsZSBjb25zaWRlcmF0aW9ucyBhcm91bmQgbWVtb3J5IGZyYWdtZW50YXRpb24uIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHJlc2VydmF0aW9uIHByb2Nlc3MuIElzIGl0IHVzaW5nIGEgc2ltcGxlIGxpbmVhciBzY2FuLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyBXaGF0IGFib3V0IGxvY2tpbmc/IElzIHRoZXJlIGNvbnRlbnRpb24gaW4gdGhpcyByZWdpb24/IEknbSBleHBlY3Rpbmcgc29tZSBwcmV0dHkgY29tcGxleCBwb2ludGVyIGFyaXRobWV0aWMsIGdpdmVuIHRoZSBuYXR1cmUgb2YgYHZtYWxsb2NgLiBJIGFsc28gd2FudCB0byBvYnNlcnZlIGlmIHRoZXNlIGxpbmVzIGltcGxlbWVudCBhbiBleHBsaWNpdCBtZWNoYW5pc20gdG8gaGFuZGxlIHBvdGVudGlhbCBmYWlsdXJlcywgd2hpY2ggd291bGQgYmUgZXh0cmVtZWx5IGltcG9ydGFudCBmb3IgYW55IHJvYnVzdCBtZW1vcnkgYWxsb2NhdG9yLiBVbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBhbGxvY2F0aW9uIHJvdXRpbmUsIGJ1dCBJJ20gbG9va2luZyBmb3IgdGhlIHN1YnRsZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIGFueSBwb3RlbnRpYWwgd2Vha25lc3NlcyB0aGF0IGNhbiBjYXVzZSBwcm9ibGVtcyBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyNTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MjoyMy43MDQ0OTE2MTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5OTA6XFx0XFx0XFx0KHZuKSBcXHUwMDNjIFxcdTAwMjZ2bWFwX25vZGVzW25yX3ZtYXBfbm9kZXNdOyAodm4pKyspXFxuIDk5MTpcXHRcXG4gOTkyOlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XFxuIDk5MzpcXHRhZGRyX3RvX25vZGVfaWQodW5zaWduZWQgbG9uZyBhZGRyKVxcbiA5OTQ6XFx0e1xcbiA5OTU6XFx0XFx0cmV0dXJuIChhZGRyIC8gdm1hcF96b25lX3NpemUpICUgbnJfdm1hcF9ub2RlcztcXG4gOTk2OlxcdH1cXG4gOTk3OlxcdFxcbiA5OTg6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1hcF9ub2RlICpcXG4gOTk5OlxcdGFkZHJfdG9fbm9kZSh1bnNpZ25lZCBsb25nIGFkZHIpXFxuMTAwMDpcXHR7XFxuMTAwMTpcXHRcXHRyZXR1cm4gXFx1MDAyNnZtYXBfbm9kZXNbYWRkcl90b19ub2RlX2lkKGFkZHIpXTtcXG4xMDAyOlxcdH1cXG4xMDAzOlxcdFxcbjEwMDQ6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1hcF9ub2RlICpcXG4xMDA1OlxcdGlkX3RvX25vZGUodW5zaWduZWQgaW50IGlkKVxcbjEwMDY6XFx0e1xcbjEwMDc6XFx0XFx0cmV0dXJuIFxcdTAwMjZ2bWFwX25vZGVzW2lkICUgbnJfdm1hcF9ub2Rlc107XFxuMTAwODpcXHR9XFxuMTAwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDI6MjMuNzA0Njc3Njg1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5MDA5Nzc2ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEltbWVkaWF0ZSBDb25jZXJucyBSZWdhcmRpbmcgQWRkcmVzcyBUYWdnaW5nIGFuZCBgYWRkcl90b19ub2RlX2lkYCoqXG5cbk9rYXksIGhlcmUncyB3aGF0J3MgaGl0dGluZyBtZSByaWdodCBub3cuIFRoaXMgYGFkZHJfdG9fbm9kZV9pZChhZGRyKWAgZnVuY3Rpb24gaXMgdXNpbmcgYW4gdW50YWdnZWQgYWRkcmVzcyBmb3IgaXRzIGNhbGN1bGF0aW9uIOKAkyBzcGVjaWZpY2FsbHksIGAoYWRkciAvIHZtYXBfem9uZV9zaXplKSAlIG5yX3ZtYXBfbm9kZXNgLiBJZiBgYWRkcmAgKmlzKiB0YWdnZWQgaW4gdGhhdCB0b3AgYnl0ZSwgd2hpY2ggaXMgYWJzb2x1dGVseSBwb3NzaWJsZSBpbiBhIHRhZ2dlZCBtZW1vcnkgc3lzdGVtLCB0aGlzIGlzIGdvaW5nIHRvIHlpZWxkIGEgdG90YWxseSBpbmNvcnJlY3Qgc3RhcnRpbmcgbm9kZS4gVGhhdCBkaXZpc2lvbiBpcyBnb2luZyB0byBiZSBjb21wbGV0ZWx5IG9mZi5cblxuQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gV2h5IGRpZCB0aGF0IHJlY2VudCBwYXRjaCBtZXNzIHdpdGggYHZmcmVlKGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVx1MDAzZWFkZHIpKWAgaW4gYGtlcm5lbC9mb3JrLmNgPyBUaGF0J3Mgd2hhdCdzIGdvdCBtZSB0aGlua2luZy4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mICp3aHkqIHRoaXMgY2hhbmdlIGhhcHBlbmVkLlxuXG5SaWdodCEgTGV0J3MgZ2V0IGludG8gYGtlcm5lbC9mb3JrLmNgIGFuZCBkaWcgZGVlcGVyLlxuXG5IYW5nIG9uLi4uIEknbSBub3RpY2luZyBzb21ldGhpbmcgaW4gYHRocmVhZF9zdGFja19mcmVlX3JjdWAuLi5cblxuQWghIEFuZCB3aGF0IHdhcyBgdm1fYXJlYS1cdTAwM2VhZGRyYCBhY3R1YWxseSByZWZlcnJpbmcgdG8/IENvbnRleHQsIGNvbnRleHQsIGNvbnRleHQuXG5cbldoZW4gKmlzKiBgdm1fYXJlYS1cdTAwM2VhZGRyYCB0YWdnZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgbGlmZWN5Y2xlLiBXaGF0IGFyZSB3ZSBkZWFsaW5nIHdpdGg/XG5cbk9rYXksIHRpbWUgdG8gcHVsbCB1cCB0aGUgc291cmNlIGFuZCBzZWFyY2ggYGtlcm5lbC9mb3JrLmNgIGZvciBpbnN0YW5jZXMgb2YgYHZtX2FyZWEtXHUwMDNlYWRkcmAuIEdvdHRhIHRyYWNlIHRoaXMgZnJvbSB0aGUgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg4NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQyOjQyLjcxNDQ1NzI4MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MjM5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1fYXJlYS1cXHUwMDNlYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZm9yay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mb3JrLmM9Mjc1PXN0YXRpYyB2b2lkIHRocmVhZF9zdGFja19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJoKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0yODItXFxua2VybmVsL2ZvcmsuYzoyODM6XFx0dmZyZWUoa2FzYW5fcmVzZXRfdGFnKHZtX2FyZWEtXFx1MDAzZWFkZHIpKTtcXG5rZXJuZWwvZm9yay5jLTI4NC19XFxuLS1cXG5rZXJuZWwvZm9yay5jPTI5ND1zdGF0aWMgaW50IGZyZWVfdm1fc3RhY2tfY2FjaGUodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMzA0LVxcbmtlcm5lbC9mb3JrLmM6MzA1OlxcdFxcdHZmcmVlKHZtX2FyZWEtXFx1MDAzZWFkZHIpO1xcbmtlcm5lbC9mb3JrLmMtMzA2LVxcdFxcdGNhY2hlZF92bV9zdGFja19hcmVhc1tpXSA9IE5VTEw7XFxuLS1cXG5rZXJuZWwvZm9yay5jPTMzMz1zdGF0aWMgaW50IGFsbG9jX3RocmVhZF9zdGFja19ub2RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgbm9kZSlcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMzQwLVxcdFxcdGlmIChtZW1jZ19jaGFyZ2Vfa2VybmVsX3N0YWNrKHZtX2FyZWEpKSB7XFxua2VybmVsL2ZvcmsuYzozNDE6XFx0XFx0XFx0dmZyZWUodm1fYXJlYS1cXHUwMDNlYWRkcik7XFxua2VybmVsL2ZvcmsuYy0zNDItXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5rZXJuZWwvZm9yay5jLTM0Ni1cXHRcXHRpZiAoIWthc2FuX2h3X3RhZ3NfZW5hYmxlZCgpKVxcbmtlcm5lbC9mb3JrLmM6MzQ3OlxcdFxcdFxcdGthc2FuX3VucG9pc29uX3JhbmdlKHZtX2FyZWEtXFx1MDAzZWFkZHIsIFRIUkVBRF9TSVpFKTtcXG5rZXJuZWwvZm9yay5jLTM0OC1cXG5rZXJuZWwvZm9yay5jOjM0OTpcXHRcXHRzdGFjayA9IGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVxcdTAwM2VhZGRyKTtcXG5rZXJuZWwvZm9yay5jLTM1MC1cXG5rZXJuZWwvZm9yay5jLTM1MS1cXHRcXHQvKiBDbGVhciBzdGFsZSBwb2ludGVycyBmcm9tIHJldXNlZCBzdGFjay4gKi9cXG5rZXJuZWwvZm9yay5jOjM1MjpcXHRcXHRjbGVhcl9wYWdlcyh2bV9hcmVhLVxcdTAwM2VhZGRyLCB2bV9hcmVhLVxcdTAwM2Vucl9wYWdlcyk7XFxua2VybmVsL2ZvcmsuYy0zNTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQyOjQyLjc1OTg4NDMzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NzI5ODc1OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaHJlYWQgU3RhY2sgQWxsb2NhdGlvbiBhbmQgRGVhbGxvY2F0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBmb2N1c2luZyBvbiBob3cgdGhyZWFkIHN0YWNrcyBhcmUgbWFuYWdlZCwgcGFydGljdWxhcmx5IHRoZSBLQVNBTiBhc3BlY3RzLiBGaXJzdCwgSSdtIGxvb2tpbmcgYXQgYGFsbG9jX3RocmVhZF9zdGFja19ub2RlYC4gSSBzZWUgdGhlIHN0YWNrIG1ldGFkYXRhIHJlc2V0OiBpZiBLQVNBTiBoYXJkd2FyZSB0YWdzIGFyZW4ndCBlbmFibGVkLCBpdCB1bnBvaXNvbnMgdGhlIHJhbmdlLiBUaGVuIGl0ICpyZXNldHMqIHRoZSB0YWcgdmlhIGBrYXNhbl9yZXNldF90YWdgIGFuZCBjbGVhcnMgdGhlIHBhZ2VzLiBDcnVjaWFsbHksIHRoZSBjb2RlIHN0b3JlcyBhIGB2bV9hcmVhYCBwb2ludGVyIChgdHNrLVx1MDAzZXN0YWNrX3ZtX2FyZWFgKSAqYW5kKiB0aGUgdGFnZ2VkIHN0YWNrIGFkZHJlc3MgKGB0c2stXHUwMDNlc3RhY2tgKS4gIFRoZXJlJ3MgYSBzaW1pbGFyIHByb2Nlc3MgdXNpbmcgdGhlIHNhbWUgdmFyaWFibGVzLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBkZXRhaWxzIGluIG1pbmQuXG5cbk5vdywgSSdtIHNoaWZ0aW5nIHRvIGB0aHJlYWRfc3RhY2tfZGVsYXllZF9mcmVlYC4gSXQgdGFrZXMgdGhlIGB0YXNrX3N0cnVjdGAsIGdyYWJzIHRoZSBgdm1fc3RhY2tgLCBhbmQgc3RvcmVzIGEgYHN0YWNrX3ZtX2FyZWFgLiBJdCB0aGVuIHVzZXMgYGNhbGxfcmN1YCB0byBkZWZlciB0aGUgZnJlZSB1c2luZyBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YC5cblxuSW4gYHRocmVhZF9zdGFja19mcmVlX3JjdWAsIGl0IGdldHMgdGhlIGB2bV9zdGFja2AgYW5kIGl0cyBhc3NvY2lhdGVkIGB2bV9hcmVhYC4gIEl0IHRyaWVzIHRvIHJlbGVhc2UgdGhlIHN0YWNrIHRvIHRoZSBjYWNoZS4gQW5kIGlmIHRoYXQgZmFpbHMsIGl0IGNhbGxzIGB2ZnJlZWAgb24gdGhlICoqcmVzZXQqKiB0YWdnZWQgYWRkcmVzcyAoYHZtX2FyZWEtXHUwMDNlYWRkcmApLiBPa2F5LCB0aGF0J3MgdGhlIGtpY2tlciFcblxuTm93LCB0aGUgcXVlc3Rpb24gYmVjb21lcywgd2hlcmUgKmV4YWN0bHkqIGlzIGB2bV9hcmVhLVx1MDAzZWFkZHJgIGJlaW5nIHRhZ2dlZD8gVGhlIGNvZGUgSSBsb29rZWQgYXQgaXMgbm90IHdoZXJlIGl0IGFwcGVhcnMgdG8gaGFwcGVuLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBUaGUgY2FsbCB0byBga2FzYW5fcmVzZXRfdGFnYCBoaW50cyB0aGF0IHRhZ2dpbmcgKmhhcHBlbnMqIGJ1dCBpdCdzIG5vdCBwcmVzZW50IGhlcmUuXG5cblRpbWUgdG8gc2VhcmNoIHdoZXJlIHRoaXMgYHZtX2FyZWEtXHUwMDNlYWRkcmAgaXMgc2V0LiBJIG5lZWQgdG8gZ3JlcCB0aGUgY29kZWJhc2UgZm9yIGB2bS1cdTAwM2VhZGRyID0gYCBvciBgYXJlYS1cdTAwM2VhZGRyID0gYCB0byBzZWUgaG93IHRoaXMgdmFsdWUgZ2V0cyBpbml0aWFsaXplZC4gIFRoYXQgc2hvdWxkIHJldmVhbCB0aGUgcG9pbnQgd2hlcmUgS0FTQU4ncyB0YWdnaW5nIG1hZ2ljIGlzIGFjdHVhbGx5IGFwcGxpZWQgdG8gdGhlIG1lbW9yeSByZWdpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODU2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQyOjU3LjQ4OTc2MzRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzA1OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNlYWRkciA9IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTIwMzQ9c3RhdGljIGlubGluZSB2b2lkIHNldHVwX3ZtYWxsb2Nfdm0oc3RydWN0IHZtX3N0cnVjdCAqdm0sXFxuLS1cXG5tbS92bWFsbG9jLmMtMjAzNy1cXHR2bS1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG5tbS92bWFsbG9jLmM6MjAzODpcXHR2bS1cXHUwMDNlYWRkciA9ICh2b2lkICopdmEtXFx1MDAzZXZhX3N0YXJ0O1xcbm1tL3ZtYWxsb2MuYy0yMDM5LVxcdHZtLVxcdTAwM2VzaXplID0gdm0tXFx1MDAzZXJlcXVlc3RlZF9zaXplID0gdmFfc2l6ZSh2YSk7XFxuLS1cXG5tbS92bWFsbG9jLmM9MjA0OD1zdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqYWxsb2Nfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yMTMyLVxcdGlmICh2bSkge1xcbm1tL3ZtYWxsb2MuYzoyMTMzOlxcdFxcdHZtLVxcdTAwM2VhZGRyID0gKHZvaWQgKil2YS1cXHUwMDNldmFfc3RhcnQ7XFxubW0vdm1hbGxvYy5jLTIxMzQtXFx0XFx0dm0tXFx1MDAzZXNpemUgPSB2YV9zaXplKHZhKTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zMTk2PXZvaWQgX19pbml0IHZtX2FyZWFfcmVnaXN0ZXJfZWFybHkoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHNpemVfdCBhbGlnbilcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zMjA5LVxcdEJVR19PTihhZGRyIFxcdTAwM2UgVk1BTExPQ19FTkQgLSB2bS1cXHUwMDNlc2l6ZSk7XFxubW0vdm1hbGxvYy5jOjMyMTA6XFx0dm0tXFx1MDAzZWFkZHIgPSAodm9pZCAqKWFkZHI7XFxubW0vdm1hbGxvYy5jLTMyMTEtXFx0dm0tXFx1MDAzZW5leHQgPSAqcDtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zMjI3PXN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsXFxuLS1cXG5tbS92bWFsbG9jLmMtMzI3MC1cXHRpZiAoIShmbGFncyBcXHUwMDI2IFZNX0FMTE9DKSlcXG5tbS92bWFsbG9jLmM6MzI3MTpcXHRcXHRhcmVhLVxcdTAwM2VhZGRyID0ga2FzYW5fdW5wb2lzb25fdm1hbGxvYyhhcmVhLVxcdTAwM2VhZGRyLCByZXF1ZXN0ZWRfc2l6ZSxcXG5tbS92bWFsbG9jLmMtMzI3Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgS0FTQU5fVk1BTExPQ19QUk9UX05PUk1BTCk7XFxuLS1cXG5tbS92bWFsbG9jLmM9NDAzMz12b2lkICpfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxcbi0tXFxubW0vdm1hbGxvYy5jLTQxMjktXFx0aWYgKCFza2lwX3ZtYWxsb2Nfa2FzYW4pXFxubW0vdm1hbGxvYy5jOjQxMzA6XFx0XFx0YXJlYS1cXHUwMDNlYWRkciA9IGthc2FuX3VucG9pc29uX3ZtYWxsb2MoYXJlYS1cXHUwMDNlYWRkciwgc2l6ZSwga2FzYW5fZmxhZ3MpO1xcbm1tL3ZtYWxsb2MuYy00MTMxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0Mjo1Ny41MzUwNzU4MTlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQ0ODkyOTQ4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IFNhbml0aXphdGlvbiBpbiB2bWFsbG9jKipcblxuT2theSwgaGVyZSB3ZSBhcmUsIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhZ2Fpbi4gTGluZSA0MTMwLi4uIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIGl0J3MgdGhhdCBgYXJlYS1cdTAwM2VhZGRyID0ga2FzYW5fdW5wb2lzb25fdm1hbGxvYyhhcmVhLVx1MDAzZWFkZHIsIHNpemUsIGthc2FuX2ZsYWdzKTtgIGNhbGwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgYGthc2FuX3VucG9pc29uX3ZtYWxsb2NgIHJldHVybmluZz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB0byB0aGF0IGBhcmVhLVx1MDAzZWFkZHJgIHBvaW50ZXIuIElzIGl0IGJlaW5nIG1vZGlmaWVkIGRpcmVjdGx5PyBJcyB0aGVyZSBhIG5ldyBhZGRyZXNzIGJlaW5nIGFzc2lnbmVkPyBJcyB0aGVyZSBhIHN0YXR1cyBpbmRpY2F0b3I/IExldCdzIHRyYWNlIGludG8gdGhhdCBga2FzYW5fdW5wb2lzb25fdm1hbGxvY2AgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIGF0IHRoYXQgbGV2ZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBjb21wbGV0ZWx5IHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9uIHRoZSBsYXJnZXIgbWVtb3J5IGFsbG9jYXRpb24gY29udGV4dC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBudWFuY2Ugb2YgdGhlIEtBU0FOIGltcGxlbWVudGF0aW9uIGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzUzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDM6MDMuOTg0MDA3OTAzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc1NTg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrYXNhbl91bnBvaXNvbl92bWFsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2thc2FuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2thc2FuL2NvbW1vbi5jPTU4MT12b2lkIF9fa2FzYW5fdW5wb2lzb25fdm1hcF9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zLFxcbi0tXFxubW0va2FzYW4vY29tbW9uLmMtNTk4LVxcdGFkZHIgPSB2bXNbMF0tXFx1MDAzZWFkZHI7XFxubW0va2FzYW4vY29tbW9uLmM6NTk5OlxcdHZtc1swXS1cXHUwMDNlYWRkciA9IF9fa2FzYW5fdW5wb2lzb25fdm1hbGxvYyhhZGRyLCBzaXplLCBmbGFncyk7XFxubW0va2FzYW4vY29tbW9uLmMtNjAwLVxcdHRhZyA9IGdldF90YWcodm1zWzBdLVxcdTAwM2VhZGRyKTtcXG4tLVxcbm1tL2thc2FuL2NvbW1vbi5jLTYwNS1cXHRcXHR2bXNbYXJlYV0tXFx1MDAzZWFkZHIgPVxcbm1tL2thc2FuL2NvbW1vbi5jOjYwNjpcXHRcXHRcXHRfX2thc2FuX3VucG9pc29uX3ZtYWxsb2MoYWRkciwgc2l6ZSwgZmxhZ3MgfCBLQVNBTl9WTUFMTE9DX0tFRVBfVEFHKTtcXG5tbS9rYXNhbi9jb21tb24uYy02MDctXFx0fVxcbi0tXFxubW0va2FzYW4vY29tbW9uLmM9NjEwPXZvaWQgX19rYXNhbl92cmVhbGxvYyhjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG9sZF9zaXplLFxcbi0tXFxubW0va2FzYW4vY29tbW9uLmMtNjIyLVxcdFxcdG9sZF9zaXplID0gcm91bmRfZG93bihvbGRfc2l6ZSwgS0FTQU5fR1JBTlVMRV9TSVpFKTtcXG5tbS9rYXNhbi9jb21tb24uYzo2MjM6XFx0XFx0X19rYXNhbl91bnBvaXNvbl92bWFsbG9jKGFkZHIgKyBvbGRfc2l6ZSxcXG5tbS9rYXNhbi9jb21tb24uYy02MjQtXFx0XFx0XFx0XFx0XFx0bmV3X3NpemUgLSBvbGRfc2l6ZSxcXG4tLVxcbm1tL2thc2FuL2h3X3RhZ3MuYz0yODc9c3RhdGljIHZvaWQgdW5wb2lzb25fdm1hbGxvY19wYWdlcyhjb25zdCB2b2lkICphZGRyLCB1OCB0YWcpXFxuLS1cXG5tbS9rYXNhbi9od190YWdzLmMtMjkzLVxcdCAqIEFzIGhhcmR3YXJlIHRhZy1iYXNlZCBLQVNBTiBvbmx5IHRhZ3MgVk1fQUxMT0Mgdm1hbGxvYyBhbGxvY2F0aW9uc1xcbm1tL2thc2FuL2h3X3RhZ3MuYzoyOTQ6XFx0ICogKHNlZSB0aGUgY29tbWVudCBpbiBfX2thc2FuX3VucG9pc29uX3ZtYWxsb2MpLCBhbGwgb2YgdGhlIHBhZ2VzXFxubW0va2FzYW4vaHdfdGFncy5jLTI5NS1cXHQgKiBzaG91bGQgYmVsb25nIHRvIGEgc2luZ2xlIGFyZWEuXFxuLS1cXG5tbS9rYXNhbi9od190YWdzLmM9MzA4PXN0YXRpYyB2b2lkIGluaXRfdm1hbGxvY19wYWdlcyhjb25zdCB2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxubW0va2FzYW4vaHdfdGFncy5jLTMxOC1cXG5tbS9rYXNhbi9od190YWdzLmM6MzE5OnZvaWQgKl9fa2FzYW5fdW5wb2lzb25fdm1hbGxvYyhjb25zdCB2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbm1tL2thc2FuL2h3X3RhZ3MuYy0zMjAtXFx0XFx0XFx0XFx0a2FzYW5fdm1hbGxvY19mbGFnc190IGZsYWdzKVxcbi0tXFxubW0va2FzYW4vc2hhZG93LmM9NTY2PXZvaWQgX19rYXNhbl9yZWxlYXNlX3ZtYWxsb2ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9rYXNhbi9zaGFkb3cuYy02MTItXFxubW0va2FzYW4vc2hhZG93LmM6NjEzOnZvaWQgKl9fa2FzYW5fdW5wb2lzb25fdm1hbGxvYyhjb25zdCB2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbm1tL2thc2FuL3NoYWRvdy5jLTYxNC1cXHRcXHRcXHQgICAgICAga2FzYW5fdm1hbGxvY19mbGFnc190IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MzowNC4wMjg3NzE1NTNaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY3NTQzOTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLQVNBTiB2bWFsbG9jIFRhZ2dpbmcgLSBBIERpdmUgaW50byB0aGUgQXJjaGl0ZWN0dXJlLVNwZWNpZmljIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgS0FTQU4gaGFuZGxlcyBgdm1hbGxvY2AgYXJlYXMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSB0YWdnaW5nIG1lY2hhbmlzbS4gTXkgZmlyc3QgcG9pbnQgb2YgcmVmZXJlbmNlIGlzIGBtbS9rYXNhbi9od190YWdzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2thc2FuX3VucG9pc29uX3ZtYWxsb2NgIGZ1bmN0aW9uLiBJIHNlZSBpdCBhc3NpZ25zIGEgcmFuZG9tIHRhZywgcmV0dXJuaW5nIGEgXCJ0YWdnZWQgcG9pbnRlcixcIiBhbmQgY3J1Y2lhbGx5LCBpdCB1cGRhdGVzIGBhcmVhLVx1MDAzZWFkZHJgIHdpdGggdGhpcyB0YWdnZWQgcG9pbnRlci4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBzb21ldGhpbmc6IHRoaXMgdGFnZ2VkIHBvaW50ZXIgbG9naWMgYXBwZWFycyAqb25seSogaW4gdGhlIEhXX1RBR1MgYW5kIFNXX1RBR1MgYnJhbmNoZXMuIFRoaXMgbWVhbnMgdGhpcyB0YWdnZWQgcG9pbnRlciBhbmQgYXJlYSB1cGRhdGUgYXJlICpzb2xlbHkqIGZvciBhcm02NCFcblxuQnV0IHdoYXQgYWJvdXQgb3RoZXIgYXJjaGl0ZWN0dXJlcywgbGlrZSBhbWQ2ND8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBga2FzYW5fdW5wb2lzb25fdm1hbGxvY2AgKmRvZXMqIG9uIGFtZDY0LiBTbyBJJ20gbm93IHN3aXRjaGluZyBnZWFycyB0byBgbW0va2FzYW4vc2hhZG93LmNgLiBNeSBuZXh0IGZvY3VzIGlzIGxpbmVzIDYxMi02MzAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBLQVNBTiBoYW5kbGVzIHRoZSBwb2ludGVyIHJldHVybiBpbiB0aGlzIGNvbnRleHQ7IHNwZWNpZmljYWxseSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcG9pbnRlciBpcyBub3QgdGFnZ2VkIGFuZCB0aGF0IGl0IGlzIHVucG9pc29uZWQgaW4gdGhlIHNoYWRvdyBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQzOjA2LjcwNDIxMjU4MloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9rYXNhbi9zaGFkb3cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTI6XFx0XFxuIDYxMzpcXHR2b2lkICpfX2thc2FuX3VucG9pc29uX3ZtYWxsb2MoY29uc3Qgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4gNjE0OlxcdFxcdFxcdFxcdCAgICAgICBrYXNhbl92bWFsbG9jX2ZsYWdzX3QgZmxhZ3MpXFxuIDYxNTpcXHR7XFxuIDYxNjpcXHRcXHQvKlxcbiA2MTc6XFx0XFx0ICogU29mdHdhcmUgS0FTQU4gbW9kZXMgdW5wb2lzb24gYm90aCBWTV9BTExPQyBhbmQgbm9uLVZNX0FMTE9DXFxuIDYxODpcXHRcXHQgKiBtYXBwaW5ncywgc28gdGhlIEtBU0FOX1ZNQUxMT0NfVk1fQUxMT0MgZmxhZyBpcyBpZ25vcmVkLlxcbiA2MTk6XFx0XFx0ICogU29mdHdhcmUgS0FTQU4gbW9kZXMgY2FuJ3Qgb3B0aW1pemUgemVyb2luZyBtZW1vcnkgYnkgY29tYmluaW5nIGl0XFxuIDYyMDpcXHRcXHQgKiB3aXRoIHNldHRpbmcgbWVtb3J5IHRhZ3MsIHNvIHRoZSBLQVNBTl9WTUFMTE9DX0lOSVQgZmxhZyBpcyBpZ25vcmVkLlxcbiA2MjE6XFx0XFx0ICovXFxuIDYyMjpcXHRcXG4gNjIzOlxcdFxcdGlmICghaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcihzdGFydCkpXFxuIDYyNDpcXHRcXHRcXHRyZXR1cm4gKHZvaWQgKilzdGFydDtcXG4gNjI1OlxcdFxcbiA2MjY6XFx0XFx0LypcXG4gNjI3OlxcdFxcdCAqIERvbid0IHRhZyBleGVjdXRhYmxlIG1lbW9yeSB3aXRoIHRoZSB0YWctYmFzZWQgbW9kZS5cXG4gNjI4OlxcdFxcdCAqIFRoZSBrZXJuZWwgZG9lc24ndCB0b2xlcmF0ZSBoYXZpbmcgdGhlIFBDIHJlZ2lzdGVyIHRhZ2dlZC5cXG4gNjI5OlxcdFxcdCAqL1xcbiA2MzA6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tBU0FOX1NXX1RBR1MpIFxcdTAwMjZcXHUwMDI2XFxuIDYzMTpcXHRcXHQgICAgIShmbGFncyBcXHUwMDI2IEtBU0FOX1ZNQUxMT0NfUFJPVF9OT1JNQUwpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MzowNi43MDQyOTE0NTNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI3ODkxOTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYF9fa2FzYW5fdW5wb2lzb25fdm1hbGxvY2AgaW4gYG1tL2thc2FuL3NoYWRvdy5jYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzIEtBU0FOIHVucG9pc29uaW5nIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYF9fa2FzYW5fdW5wb2lzb25fdm1hbGxvY2Agd29ya3MuIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoaXMgYXJlYSwgc28gbGV0J3Mgc2VlIGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBLQVNBTiBzY2hlbWUgZm9yIHZpcnR1YWwgYWxsb2NhdGlvbnMuIEkgd2FudCB0byBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHNoYWRvdyBtZW1vcnkuIEknbSBpbnRlcmVzdGVkIGluIHRoZSB1bnBvaXNvbmluZyBsb2dpYyBpdHNlbGYg4oCTIHdoYXQgcmFuZ2Ugb2YgbWVtb3J5IGRvZXMgaXQgYWZmZWN0LCB3aGF0J3MgdGhlIGdyYW51bGFyIHByZWNpc2lvbiwgYW5kIHdoYXQncyB0aGUgc3RyYXRlZ3k/IEkga25vdyBob3cgS0FTQU4gd29ya3MgaW4gcHJpbmNpcGxlLCBidXQgSSBuZWVkIHRvIHNlZSBob3cgaXTigJlzIGFwcGxpZWQgc3BlY2lmaWNhbGx5IHRvIGB2bWFsbG9jYC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTcyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MzowOC45ODMyMTI4ODhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2FzYW4vc2hhZG93LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjMwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjMwOlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LQVNBTl9TV19UQUdTKSBcXHUwMDI2XFx1MDAyNlxcbiA2MzE6XFx0XFx0ICAgICEoZmxhZ3MgXFx1MDAyNiBLQVNBTl9WTUFMTE9DX1BST1RfTk9STUFMKSlcXG4gNjMyOlxcdFxcdFxcdHJldHVybiAodm9pZCAqKXN0YXJ0O1xcbiA2MzM6XFx0XFxuIDYzNDpcXHRcXHRpZiAodW5saWtlbHkoIShmbGFncyBcXHUwMDI2IEtBU0FOX1ZNQUxMT0NfS0VFUF9UQUcpKSlcXG4gNjM1OlxcdFxcdFxcdHN0YXJ0ID0gc2V0X3RhZyhzdGFydCwga2FzYW5fcmFuZG9tX3RhZygpKTtcXG4gNjM2OlxcdFxcbiA2Mzc6XFx0XFx0a2FzYW5fdW5wb2lzb24oc3RhcnQsIHNpemUsIGZhbHNlKTtcXG4gNjM4OlxcdFxcdHJldHVybiAodm9pZCAqKXN0YXJ0O1xcbiA2Mzk6XFx0fVxcbiA2NDA6XFx0XFxuIDY0MTpcXHQvKlxcbiA2NDI6XFx0ICogUG9pc29uIHRoZSBzaGFkb3cgZm9yIGEgdm1hbGxvYyByZWdpb24uIENhbGxlZCBhcyBwYXJ0IG9mIHRoZVxcbiA2NDM6XFx0ICogZnJlZWluZyBwcm9jZXNzIGF0IHRoZSB0aW1lIHRoZSByZWdpb24gaXMgZnJlZWQuXFxuIDY0NDpcXHQgKi9cXG4gNjQ1OlxcdHZvaWQgX19rYXNhbl9wb2lzb25fdm1hbGxvYyhjb25zdCB2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbiA2NDY6XFx0e1xcbiA2NDc6XFx0XFx0aWYgKCFpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKHN0YXJ0KSlcXG4gNjQ4OlxcdFxcdFxcdHJldHVybjtcXG4gNjQ5OlxcdFxcbiA2NTA6XFx0XFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIEtBU0FOX0dSQU5VTEVfU0laRSk7XFxuIDY1MTpcXHRcXHRrYXNhbl9wb2lzb24oc3RhcnQsIHNpemUsIEtBU0FOX1ZNQUxMT0NfSU5WQUxJRCwgZmFsc2UpO1xcbiA2NTI6XFx0fVxcbiA2NTM6XFx0XFxuIDY1NDpcXHQjZWxzZSAvKiBDT05GSUdfS0FTQU5fVk1BTExPQyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MzowOC45ODMzMDg1ODhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDg2NzA5OTUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLQVNBTiBUYWdnaW5nIENvbnVuZHJ1bSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIEtBU0FOIHN0dWZmLCBzcGVjaWZpY2FsbHkgdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24uIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgaXMgaG93IGBDT05GSUdfS0FTQU5fR0VORVJJQ2AgYWN0dWFsbHkgaGFuZGxlcyB0YWdnaW5nLiBEb2VzIGVuYWJsaW5nIHRoaXMgdGhpbmcgc2V0IG1lbW9yeSB0YWdzPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LlxuXG5Pa2F5LCBJIHNlZSBhIGZ1bmN0aW9uIGNhbGw6IGBzZXRfdGFnKHN0YXJ0LCBrYXNhbl9yYW5kb21fdGFnKCkpYC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvci4gTm93LCBJIG5lZWQgdG8ga25vdyB3aGF0IGBzZXRfdGFnYCAqaXMqIHdpdGhpbiB0aGlzIGBDT05GSUdfS0FTQU5fR0VORVJJQ2AgY29udGV4dC4gSSBuZWVkIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQsIHNvIEknbSBnb2luZyB0byBxdWlja2x5IGdyZXAgdGhyb3VnaCB0aGUgY29kZSB0byBmaW5kIHdoZXJlIHRoYXQgYHNldF90YWdgIGZ1bmN0aW9uIGlzIGRlZmluZWQsIG9yIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBhcyBhIGZ1bmN0aW9uIGNhbGwuIExldCdzIGZpbmQgdGhpcyBkZWZpbml0aW9uLiBIb3BlZnVsbHksIGl0J3Mgbm90IGJ1cmllZCB0b28gZGVlcC4gSSBqdXN0IG5lZWQgdG8gZGV0ZXJtaW5lIGl0cyBiZWhhdmlvciwgYW5kIHRoZW4gSSBzaG91bGQgaGF2ZSBhIGdvb2QgcGljdHVyZSBvZiB0aGUgdGFnZ2luZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDgzMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDM6MTMuODUwNDExNDg2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc1NTg3Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgc2V0X3RhZ3xzdGF0aWMgaW5saW5lLipzZXRfdGFnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYXJjaC9hcm02NC9tZW1vcnktdGFnZ2luZy1leHRlbnNpb24ucnN0PTI1MD1FeGFtcGxlIG9mIGNvcnJlY3QgdXNhZ2VcXG4tLVxcbkRvY3VtZW50YXRpb24vYXJjaC9hcm02NC9tZW1vcnktdGFnZ2luZy1leHRlbnNpb24ucnN0LTMwNC0gICAgICovXFxuRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L21lbW9yeS10YWdnaW5nLWV4dGVuc2lvbi5yc3Q6MzA1OiAgICAjZGVmaW5lIHNldF90YWcodGFnZ2VkX2FkZHIpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG5Eb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvbWVtb3J5LXRhZ2dpbmctZXh0ZW5zaW9uLnJzdC0zMDYtICAgICAgICAgICAgYXNtIHZvbGF0aWxlKFxcXCJzdGcgJTAsIFslMF1cXFwiIDogOiBcXFwiclxcXCIgKHRhZ2dlZF9hZGRyKSA6IFxcXCJtZW1vcnlcXFwiKTsgXFxcXFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oPTU0PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZXZlbnRfbWFzayh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oLTY1LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVfdXRpbHMuaDo2NjpzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3RhZ19tYXNrKHZvaWQpXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oLTY3LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVfdXRpbHMuaD05Nz1zdGF0aWMgaW5saW5lIHZvaWQgZW5xdWV1ZV9wdXRsbGMoYWRkcjY0IGxzY3NhX2VhKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV91dGlscy5oLTExNy1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1X3V0aWxzLmg6MTE4OnN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGFnX3VwZGF0ZSh2b2lkKVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVfdXRpbHMuaC0xMTkte1xcbi0tXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmg9MzAxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9oY2kxMzk0X2l0X2RhdGFfZ2V0X3RhZyhjb25zdCBfX2xlMzIgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL29oY2kuaC0zMDUtXFxuZHJpdmVycy9maXJld2lyZS9vaGNpLmg6MzA2OnN0YXRpYyBpbmxpbmUgdm9pZCBvaGNpMTM5NF9pdF9kYXRhX3NldF90YWcoX19sZTMyICpkYXRhLCB1bnNpZ25lZCBpbnQgdGFnKVxcbmRyaXZlcnMvZmlyZXdpcmUvb2hjaS5oLTMwNy17XFxuLS1cXG5kcml2ZXJzL2ZpcmV3aXJlL3BhY2tldC1oZWFkZXItZGVmaW5pdGlvbnMuaD0yMDY9c3RhdGljIGlubGluZSB2b2lkIGlzb2NfaGVhZGVyX3NldF9kYXRhX2xlbmd0aCh1MzIgKmhlYWRlciwgdW5zaWduZWQgaW50IGRhdGFfbGVuZ3RoKVxcbi0tXFxuZHJpdmVycy9maXJld2lyZS9wYWNrZXQtaGVhZGVyLWRlZmluaXRpb25zLmgtMjExLVxcbmRyaXZlcnMvZmlyZXdpcmUvcGFja2V0LWhlYWRlci1kZWZpbml0aW9ucy5oOjIxMjpzdGF0aWMgaW5saW5lIHZvaWQgaXNvY19oZWFkZXJfc2V0X3RhZyh1MzIgKmhlYWRlciwgdW5zaWduZWQgaW50IHRhZylcXG5kcml2ZXJzL2ZpcmV3aXJlL3BhY2tldC1oZWFkZXItZGVmaW5pdGlvbnMuaC0yMTMte1xcbi0tXFxuaW5jbHVkZS9saW51eC9kbWEvdGktY3BwaTUuaD0yNzY9c3RhdGljIGlubGluZSB2b2lkIGNwcGk1X2Rlc2NfZ2V0X3RhZ3NfaWRzKHN0cnVjdCBjcHBpNV9kZXNjX2hkcl90ICpkZXNjX2hkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvZG1hL3RpLWNwcGk1LmgtMjk1LSAqL1xcbmluY2x1ZGUvbGludXgvZG1hL3RpLWNwcGk1Lmg6Mjk2OnN0YXRpYyBpbmxpbmUgdm9pZCBjcHBpNV9kZXNjX3NldF90YWdzX2lkcyhzdHJ1Y3QgY3BwaTVfZGVzY19oZHJfdCAqZGVzY19oZHIsXFxuaW5jbHVkZS9saW51eC9kbWEvdGktY3BwaTUuaC0yOTctXFx0XFx0XFx0XFx0XFx0ICAgdTMyIHNyY190YWdfaWQsIHUzMiBkc3RfdGFnX2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9kc2Evb2NlbG90Lmg9MjQ3PXN0YXRpYyBpbmxpbmUgdm9pZCBvY2Vsb3RfaWZoX3NldF9zcmModm9pZCAqaW5qZWN0aW9uLCB1NjQgc3JjKVxcbi0tXFxuaW5jbHVkZS9saW51eC9kc2Evb2NlbG90LmgtMjUxLVxcbmluY2x1ZGUvbGludXgvZHNhL29jZWxvdC5oOjI1MjpzdGF0aWMgaW5saW5lIHZvaWQgb2NlbG90X2lmaF9zZXRfdGFnX3R5cGUodm9pZCAqaW5qZWN0aW9uLCB1NjQgdGFnX3R5cGUpXFxuaW5jbHVkZS9saW51eC9kc2Evb2NlbG90LmgtMjUzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvaW50ZXJjb25uZWN0Lmg9MTAyPXN0YXRpYyBpbmxpbmUgaW50IGljY19zZXRfYncoc3RydWN0IGljY19wYXRoICpwYXRoLCB1MzIgYXZnX2J3LCB1MzIgcGVha19idylcXG4tLVxcbmluY2x1ZGUvbGludXgvaW50ZXJjb25uZWN0LmgtMTA2LVxcbmluY2x1ZGUvbGludXgvaW50ZXJjb25uZWN0Lmg6MTA3OnN0YXRpYyBpbmxpbmUgdm9pZCBpY2Nfc2V0X3RhZyhzdHJ1Y3QgaWNjX3BhdGggKnBhdGgsIHUzMiB0YWcpXFxuaW5jbHVkZS9saW51eC9pbnRlcmNvbm5lY3QuaC0xMDgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9rYXNhbi5oPTUxND1zdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcmVjb3JkX2F1eF9zdGFjayh2b2lkICpwdHIpIHt9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTE5LVxcbmluY2x1ZGUvbGludXgva2FzYW4uaDo1MjA6c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcXG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTIxLXtcXG4tLVxcbmluY2x1ZGUvbGludXgva2FzYW4uaD01MzI9Ym9vbCBrYXNhbl9yZXBvcnQoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTM2LVxcbmluY2x1ZGUvbGludXgva2FzYW4uaDo1Mzc6c3RhdGljIGlubGluZSB2b2lkICprYXNhbl9yZXNldF90YWcoY29uc3Qgdm9pZCAqYWRkcilcXG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTM4LXtcXG4tLVxcbm1tL2thc2FuL2thc2FuLmg9NDExPXN0YXRpYyBpbmxpbmUgdm9pZCBrYXNhbl9xdWFyYW50aW5lX3JlbW92ZV9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpIHsgfVxcbi0tXFxubW0va2FzYW4va2FzYW4uaC00MTQtI2lmbmRlZiBhcmNoX2thc2FuX3NldF90YWdcXG5tbS9rYXNhbi9rYXNhbi5oOjQxNTpzdGF0aWMgaW5saW5lIGNvbnN0IHZvaWQgKmFyY2hfa2FzYW5fc2V0X3RhZyhjb25zdCB2b2lkICphZGRyLCB1OCB0YWcpXFxubW0va2FzYW4va2FzYW4uaC00MTYte1xcbi0tXFxubW0va2FzYW4va2FzYW4uaC00MjMtXFxubW0va2FzYW4va2FzYW4uaDo0MjQ6I2RlZmluZSBzZXRfdGFnKGFkZHIsIHRhZylcXHQoKHZvaWQgKilhcmNoX2thc2FuX3NldF90YWcoKGFkZHIpLCAodGFnKSkpXFxubW0va2FzYW4va2FzYW4uaC00MjUtI2RlZmluZSBnZXRfdGFnKGFkZHIpXFx0XFx0YXJjaF9rYXNhbl9nZXRfdGFnKGFkZHIpXFxuLS1cXG50b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmg9MjU9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqdmlydF90b19wYWdlKHZvaWQgKnZpcnQpXFxuLS1cXG50b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmgtMzMtXFxudG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oOjM0OnN0YXRpYyBpbmxpbmUgdm9pZCAqa2FzYW5fcmVzZXRfdGFnKGNvbnN0IHZvaWQgKmFkZHIpXFxudG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oLTM1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDM6MTYuMTI2MDA0NjAyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNDQ4OTM1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBTYW5pdGl6ZXIncyBDb3JlKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIFRoZSBwcm9ibGVtJ3MgYmVlbiBwb2ludGVkIHRvd2FyZHMgbWVtb3J5IGVycm9ycywgc28gSSdtIHRoaW5raW5nIGEgZGVlcCBkaXZlIGludG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBzYWZldHkgbWVjaGFuaXNtcyBpcyBpbiBvcmRlci4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgc3RyYWlnaHQgZm9yIGBtbS9rYXNhbi9rYXNhbi5oYC4gTGluZSA0MTQg4oCTIHRoYXQncyBvZnRlbiB3aGVyZSB0aGUgY3JpdGljYWwgZGVmaW5pdGlvbnMgb3IgY29uZmlndXJhdGlvbnMgcmVzaWRlLCBvciBwb3RlbnRpYWxseSB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBvbmUgb2YgdGhlIEtBU0FOJ3MgY29yZSBtZW1vcnkgZXJyb3IgaGFuZGxpbmcgcm91dGluZXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIGtleSBtYWNybywgc3RydWN0dXJlLCBvciBmdW5jdGlvbiBkZWNsYXJhdGlvbiB0aGVyZSB0aGF0J3MgY2VudHJhbCB0byBLQVNBTidzIG9wZXJhdGlvbi4gVGhpcyBsaW5lIGNvdWxkIGV4cG9zZSB0aGUgdHJpZ2dlciB0aGF0IGNhdXNlcyBLQVNBTiB0byBzdGVwIGluIG9yIGFuIGludGVybmFsIGRhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgcmVsZXZhbnQgc3RhdGUuIExldCdzIHNlZSB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI2ODcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MzoxOC4zNzA5MDEwMDhaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2FzYW4va2FzYW4uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MTA6XFx0c3RhdGljIGlubGluZSB2b2lkIGthc2FuX3F1YXJhbnRpbmVfcmVkdWNlKHZvaWQpIHsgfVxcbiA0MTE6XFx0c3RhdGljIGlubGluZSB2b2lkIGthc2FuX3F1YXJhbnRpbmVfcmVtb3ZlX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSkgeyB9XFxuIDQxMjpcXHQjZW5kaWZcXG4gNDEzOlxcdFxcbiA0MTQ6XFx0I2lmbmRlZiBhcmNoX2thc2FuX3NldF90YWdcXG4gNDE1OlxcdHN0YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqYXJjaF9rYXNhbl9zZXRfdGFnKGNvbnN0IHZvaWQgKmFkZHIsIHU4IHRhZylcXG4gNDE2OlxcdHtcXG4gNDE3OlxcdFxcdHJldHVybiBhZGRyO1xcbiA0MTg6XFx0fVxcbiA0MTk6XFx0I2VuZGlmXFxuIDQyMDpcXHQjaWZuZGVmIGFyY2hfa2FzYW5fZ2V0X3RhZ1xcbiA0MjE6XFx0I2RlZmluZSBhcmNoX2thc2FuX2dldF90YWcoYWRkcilcXHQwXFxuIDQyMjpcXHQjZW5kaWZcXG4gNDIzOlxcdFxcbiA0MjQ6XFx0I2RlZmluZSBzZXRfdGFnKGFkZHIsIHRhZylcXHQoKHZvaWQgKilhcmNoX2thc2FuX3NldF90YWcoKGFkZHIpLCAodGFnKSkpXFxuIDQyNTpcXHQjZGVmaW5lIGdldF90YWcoYWRkcilcXHRcXHRhcmNoX2thc2FuX2dldF90YWcoYWRkcilcXG4gNDI2OlxcdFxcbiA0Mjc6XFx0I2lmZGVmIENPTkZJR19LQVNBTl9IV19UQUdTXFxuIDQyODpcXHRcXG4gNDI5OlxcdCNkZWZpbmUgaHdfZW5hYmxlX3RhZ19jaGVja3Nfc3luYygpXFx0XFx0YXJjaF9lbmFibGVfdGFnX2NoZWNrc19zeW5jKClcXG4gNDMwOlxcdCNkZWZpbmUgaHdfZW5hYmxlX3RhZ19jaGVja3NfYXN5bmMoKVxcdFxcdGFyY2hfZW5hYmxlX3RhZ19jaGVja3NfYXN5bmMoKVxcbiA0MzE6XFx0I2RlZmluZSBod19lbmFibGVfdGFnX2NoZWNrc19hc3ltbSgpXFx0XFx0YXJjaF9lbmFibGVfdGFnX2NoZWNrc19hc3ltbSgpXFxuIDQzMjpcXHQjZGVmaW5lIGh3X3N1cHByZXNzX3RhZ19jaGVja3Nfc3RhcnQoKVxcdFxcdGFyY2hfc3VwcHJlc3NfdGFnX2NoZWNrc19zdGFydCgpXFxuIDQzMzpcXHQjZGVmaW5lIGh3X3N1cHByZXNzX3RhZ19jaGVja3Nfc3RvcCgpXFx0XFx0YXJjaF9zdXBwcmVzc190YWdfY2hlY2tzX3N0b3AoKVxcbiA0MzQ6XFx0I2RlZmluZSBod19mb3JjZV9hc3luY190YWdfZmF1bHQoKVxcdFxcdGFyY2hfZm9yY2VfYXN5bmNfdGFnX2ZhdWx0KClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDM6MTguMzcwOTg0OTI4WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2NzY2NjQ5NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgS0FTQU4gVGFnZ2luZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGhlcmUgd2UgZ28uIEludGVyZXN0aW5nISBJJ20gbm90aWNpbmcgc29tZXRoaW5nIGFib3V0IGhvdyBgYXJjaF9rYXNhbl9zZXRfdGFnYCBiZWhhdmVzLiBJdCBzZWVtcyB0aGF0LCB1bmxlc3Mgd2UncmUgb24gYXJtNjQsIHRoYXQgZnVuY3Rpb24gc2ltcGx5IHJldHVybnMgdGhlIGlucHV0IGBhZGRyYC4gVGhhdCdzIG5vdCB0aGUgdXN1YWwgaW1wbGVtZW50YXRpb24gSSdtIGFjY3VzdG9tZWQgdG8gc2VlaW5nLiBOb3csIHdoZXJlIGlzIGBhcmNoX2thc2FuX3Jlc2V0X3RhZ2AgZGVmaW5lZD8gQWgsIEkgc2VlIGl0J3Mgb25seSBpbiBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rYXNhbi5oYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYW55ICpvdGhlciogYXJjaGl0ZWN0dXJlIGRlZmluZXMgKmVpdGhlciogYGFyY2hfa2FzYW5fcmVzZXRfdGFnYCBvciBgYXJjaF9rYXNhbl9zZXRfdGFnYCwgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGV4dGVudCBvZiB0aGlzIGFybTY0IHNwZWNpZmljIGNvZGUuIExldCdzIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYGFyY2hfa2FzYW5fcmVzZXRfdGFnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0MzMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0MzozNS4xMzc2Mzc1NDhaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjA5NDE1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJjaF9rYXNhbl9yZXNldF90YWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rYXNhbi5oLTEyLSNkZWZpbmUgYXJjaF9rYXNhbl9zZXRfdGFnKGFkZHIsIHRhZylcXHRfX3RhZ19zZXQoYWRkciwgdGFnKVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va2FzYW4uaDoxMzojZGVmaW5lIGFyY2hfa2FzYW5fcmVzZXRfdGFnKGFkZHIpXFx0X190YWdfcmVzZXQoYWRkcilcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2thc2FuLmgtMTQtI2RlZmluZSBhcmNoX2thc2FuX2dldF90YWcoYWRkcilcXHRfX3RhZ19nZXQoYWRkcilcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9MzY5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc190dGJyMV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMzcxLVxcdC8qIFRUQlIxIGFkZHJlc3NlcyBtYXkgaGF2ZSBhIHRhZyBpZiBLQVNBTl9TV19UQUdTIGlzIGluIHVzZSAqL1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MzcyOlxcdHJldHVybiBhcmNoX2thc2FuX3Jlc2V0X3RhZyhhZGRyKSBcXHUwMDNlPSBQQUdFX09GRlNFVDtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTM3My19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2thc2FuLmg9NTIwPXN0YXRpYyBpbmxpbmUgdm9pZCAqa2FzYW5fcmVzZXRfdGFnKGNvbnN0IHZvaWQgKmFkZHIpXFxuaW5jbHVkZS9saW51eC9rYXNhbi5oLTUyMS17XFxuaW5jbHVkZS9saW51eC9rYXNhbi5oOjUyMjpcXHRyZXR1cm4gKHZvaWQgKilhcmNoX2thc2FuX3Jlc2V0X3RhZyhhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2thc2FuLmgtNTIzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDM6MzYuNjU4NTg2MDU1WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExMzE0OTg0NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQYXRjaDogV29ydGhGdXp6aW5nPWZhbHNlIERlY2lzaW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlZCBhbnkgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgY2hhbmdlcyBmb3IgZnV6emluZy4gIEkgc2VlIHRoYXQgYGFyY2hfa2FzYW5fcmVzZXRfdGFnYCBpcyBkZWZpbmVkIHdpdGhpbiBgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rYXNhbi5oYC4gIFRoaXMgaXMgYSByZWQgZmxhZywgcG9pbnRpbmcgdG93YXJkcyBhbiBBUk02NC1zcGVjaWZpYyBmZWF0dXJlLiAgVGhlIGBrYXNhbl9yZXNldF90YWdgIGZ1bmN0aW9uLCB3aGljaCBjYWxscyBgYXJjaF9rYXNhbl9yZXNldF90YWdgLCBpcyBkZWZpbmVkIHdpdGhpbiBgaW5jbHVkZS9saW51eC9rYXNhbi5oYCBhbmQgY29uZGl0aW9uYWxseSBjYWxscyBgYXJjaF9rYXNhbl9yZXNldF90YWdgIG9ubHkgd2hlbiBLQVNBTidzIHRhZ2dpbmcgZmVhdHVyZXMgYXJlIGVuYWJsZWQuICBUaGVzZSBmZWF0dXJlcyAoYENPTkZJR19LQVNBTl9TV19UQUdTYCBhbmQgYENPTkZJR19LQVNBTl9IV19UQUdTYCkgZGVwZW5kIG9uIGBIQVZFX0FSQ0hfS0FTQU5fU1dfVEFHU2AgYW5kIGBIQVZFX0FSQ0hfS0FTQU5fSFdfVEFHU2AsIHdoaWNoIGFyZSBzZWxlY3RlZCBleGNsdXNpdmVseSB3aXRoaW4gYGFyY2gvYXJtNjQvS2NvbmZpZ2AuXG5cbk5vdywgdGhlIHBhdGNoIG1vZGlmaWVzIGBrZXJuZWwvZm9yay5jYCwgcmVwbGFjaW5nIGB2ZnJlZSh2bV9hcmVhLVx1MDAzZWFkZHIpYCB3aXRoIGB2ZnJlZShrYXNhbl9yZXNldF90YWcodm1fYXJlYS1cdTAwM2VhZGRyKSlgLiAgSSBpbW1lZGlhdGVseSB0aG91Z2h0IHRvIGNoZWNrIHRoZSBpbXBhY3Qgb24gYW1kNjQgKHg4Nl82NCksIG91ciB0YXJnZXQuICBPbiBhbWQ2NCwgYGthc2FuX3Jlc2V0X3RhZyh2bV9hcmVhLVx1MDAzZWFkZHIpYCBzaW1wbHkgZXhwYW5kcyB0byBgKHZvaWQgKikodm1fYXJlYS1cdTAwM2VhZGRyKWAuICBUaGVyZWZvcmUsIG9uIGFtZDY0LCB0aGUgY29tcGlsZWQgYmluYXJ5IGNvZGUgYmVmb3JlIGFuZCBhZnRlciB0aGlzIHBhdGNoIGlzIGlkZW50aWNhbCEgVGhpcyBpcyBiZWNhdXNlIG1lbW9yeSB0YWdnaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gQU1ENjQuXG5cbkNydWNpYWxseSwgdGhlIHByb21wdCdzIGNyaXRlcmlhIGZvciBgV29ydGhGdXp6aW5nPWZhbHNlYCBiZWNvbWVzIHJlbGV2YW50LiBUaGUgbGFzdCBidWxsZXQgcG9pbnQgb2YgbmVnYXRpdmUgY3JpdGVyaWEgY2xlYXJseSBzdGF0ZXMgXCJDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmVcIi4gIFRoaXMgcGF0Y2gsIGluIGVmZmVjdCwgaW50cm9kdWNlcyBubyBjaGFuZ2Ugb24gYW1kNjQuICBFdmVuIHRoZSBzZWNvbmQtdG8tbGFzdCBidWxsZXQgcG9pbnQgYXBwbGllczogXCJCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXCIgLSB0aGlzIGlzIHByZWNpc2VseSB0aGUgY2FzZSBoZXJlLCBhcyBga2FzYW5fcmVzZXRfdGFnYCBpcyBhIG5vLW9wIG1hY3JvIHRoYXQgZG9lcyBub3QgYWx0ZXIgY29tcGlsZWQgbG9naWMgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cblRoZXJlZm9yZSwgc2luY2UgS0FTQU4ncyB0YWctYmFzZWQgZmVhdHVyZXMgYXJlIGV4Y2x1c2l2ZWx5IEFSTTY0LXNwZWNpZmljLCBhbmQgdGhlIGNoYW5nZSBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBpcyBhIG5vLW9wIG9uIGFtZDY0LCBJIGNvbmNsdWRlIHRoYXQgdGhpcyBwYXRjaCBzaG91bGQgYmUgbWFya2VkIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJdCBpcyBzdHJpY3RseSBhIGJ1ZyBmaXggZm9yIGFuIEFSTTY0IG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGJlaGF2aW9yIGNoYW5nZXMgb24gYW1kNjQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MTIxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0Mzo0Ny45NzM1NzMxMDJaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNDE0Mjg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrYXNhbl9yZXNldF90YWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQzOjQ4LjAzNjk5NTk2MloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjMzNTU2MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgeDg2IExBTSBhbmQgS0FTQU4gSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHNvbWV0aGluZyBhbmQgbXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXJlJ3Mgbm90aGluZyBpbW1lZGlhdGVseSByZWxldmFudCBpbiB0aGUgYGFyY2gveDg2YCBkaXJlY3RvcnkuIE1ha2VzIHNlbnNlLCBJJ3ZlIGdvdCBhIGRlY2VudCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB4ODYgaXMgc3RydWN0dXJlZCwgYW5kIEkgZG9uJ3QgcmVjYWxsIGFueXRoaW5nIHNwZWNpZmljIGp1bXBpbmcgb3V0IGF0IG1lLiBOb3csIGxldCdzIHBpdm90IHRvIExpbmVhciBBZGRyZXNzIE1hc2tpbmcsIG9yIExBTS4gVGhlIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgaXMgd2hldGhlciB0aGUgeDg2IGltcGxlbWVudGF0aW9uIG9mIExBTSBpbnRlcmFjdHMgd2l0aCBLQVNBTiB0YWdnaW5nIG9yIGBrYXNhbl9yZXNldF90YWdgIGluIGFueSB3YXkuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGFuZCBob3cgdGhleSBtaWdodCByZWxhdGUgdG8gdGhpcyBwYXJ0aWN1bGFyIHg4NiBmZWF0dXJlLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhpcywgSSBuZWVkIHRvIGRvIGEgcXVpY2sgYnV0IHRob3JvdWdoIHNlYXJjaC4gSSdsbCBmaXJlIG9mZiBhIGdyZXAgY29tbWFuZCB0byBmaW5kIGFsbCBpbnN0YW5jZXMgd2hlcmUgYExBTWAgYW5kIGBrYXNhbmAgYXJlIG1lbnRpb25lZCB0b2dldGhlciBpbiB0aGUgY29kZWJhc2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFuZCBpbnRlcmFjdGlvbnMsIGlmIGFueS4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgcmVzdWx0cyBhbmQgcGlucG9pbnQgdGhlIGRldGFpbHMgSSdtIHNlZWtpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTkwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6NDM6NTAuMjcwNTU0NjQ4WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcxODk4MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19BRERSRVNTX01BU0tJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni9jcHVpbmZvLnJzdD0xNzY9Rm9yIGV4YW1wbGUsIGlmIExpbmVhciBBZGRyZXNzIE1hc2tpbmcgKExBTSkgaXMgbm90IGVuYWJsZWQgd2hlbiBidWlsZGluZyAoaS5lLixcXG5Eb2N1bWVudGF0aW9uL2FyY2gveDg2L2NwdWluZm8ucnN0OjE3NzpDT05GSUdfQUREUkVTU19NQVNLSU5HIGlzIG5vdCBzZWxlY3RlZCkgdGhlIGZsYWcgXFxcImxhbVxcXCIgd2lsbCBub3Qgc2hvdyB1cC5cXG5Eb2N1bWVudGF0aW9uL2FyY2gveDg2L2NwdWluZm8ucnN0LTE3OC1FdmVuIHRob3VnaCB0aGUgZmVhdHVyZSB3aWxsIHN0aWxsIGJlIGRldGVjdGVkIHZpYSBDUFVJRCwgdGhlIGtlcm5lbCBkaXNhYmxlc1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11Lmg9MjU9dHlwZWRlZiBzdHJ1Y3Qge1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11LmgtNTAtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11Lmg6NTE6I2lmZGVmIENPTkZJR19BRERSRVNTX01BU0tJTkdcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXUuaC01Mi1cXHQvKiBBY3RpdmUgTEFNIG1vZGU6ICBYODZfQ1IzX0xBTV9VNDggb3IgWDg2X0NSM19MQU1fVTU3IG9yIDAgKGRpc2FibGVkKSAqL1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaD04Mj1zdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX2xkdChzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0KVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaC04Ny1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oOjg4OiNpZmRlZiBDT05GSUdfQUREUkVTU19NQVNLSU5HXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaC04OS1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fbGFtX2NyM19tYXNrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaD03ND1zdHJ1Y3QgdGxiX3N0YXRlIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtMTA5LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmg6MTEwOiNpZmRlZiBDT05GSUdfQUREUkVTU19NQVNLSU5HXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaC0xMTEtXFx0LypcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmg9NDY4PXN0YXRpYyBpbmxpbmUgYm9vbCBodWdlX3BtZF9uZWVkc19mbHVzaChwbWRfdCBvbGRwbWQsIHBtZF90IG5ld3BtZClcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtNDg2LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmg6NDg3OiNpZmRlZiBDT05GSUdfQUREUkVTU19NQVNLSU5HXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaC00ODgtc3RhdGljIGlubGluZSAgdTY0IHRsYnN0YXRlX2xhbV9jcjNfbWFzayh2b2lkKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oPTIxPWV4dGVybiB1bnNpZ25lZCBsb25nIFVTRVJfUFRSX01BWDtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgtMjItXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oOjIzOiNpZmRlZiBDT05GSUdfQUREUkVTU19NQVNLSU5HXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oLTI0LS8qXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jPTc4Nj1zdGF0aWMgbG9uZyBwcmN0bF9tYXBfdmRzbyhjb25zdCBzdHJ1Y3QgdmRzb19pbWFnZSAqaW1hZ2UsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMtNzk3LVxcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmM6Nzk4OiNpZmRlZiBDT05GSUdfQUREUkVTU19NQVNLSU5HXFxuYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYy03OTktXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jPTg2Nj1sb25nIGRvX2FyY2hfcHJjdGxfNjQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgb3B0aW9uLCB1bnNpZ25lZCBsb25nIGFyZzIpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jLTk1Mi0jZW5kaWZcXG5hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jOjk1MzojaWZkZWYgQ09ORklHX0FERFJFU1NfTUFTS0lOR1xcbmFyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMtOTU0LVxcdGNhc2UgQVJDSF9HRVRfVU5UQUdfTUFTSzpcXG4tLVxcbmFyY2gveDg2L21tL2luaXQuYz0xMDEzPV9fdmlzaWJsZSBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB0bGJfc3RhdGUsIGNwdV90bGJzdGF0ZSkgPSB7XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0LmMtMTAxOC1cXG5hcmNoL3g4Ni9tbS9pbml0LmM6MTAxOTojaWZkZWYgQ09ORklHX0FERFJFU1NfTUFTS0lOR1xcbmFyY2gveDg2L21tL2luaXQuYy0xMDIwLURFRklORV9QRVJfQ1BVKHU2NCwgdGxic3RhdGVfdW50YWdfbWFzayk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvbGFtLmM9MTI3PXN0YXRpYyBpbmxpbmUgaW50IGxhbV9pc19hdmFpbGFibGUodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3g4Ni9sYW0uYy0xNDAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMveDg2L2xhbS5jOjE0MTpcXHQvKiBSZXR1cm4gMCBpZiBDT05GSUdfQUREUkVTU19NQVNLSU5HIGlzIG5vdCBzZXQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy94ODYvbGFtLmMtMTQyLVxcdHJldCA9IHN5c2NhbGwoU1lTX2FyY2hfcHJjdGwsIEFSQ0hfR0VUX01BWF9UQUdfQklUUywgXFx1MDAyNmJpdHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0Mzo1MS44NDI0NjE4MTZaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjEyNzMyODIxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIFBhdGNoOiBXb3J0aEZ1enppbmcgRXZhbHVhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY2hhbmdlIG1vZGlmaWVzIHRoZSBgdmZyZWVgIGNhbGwgdG8gaW5jbHVkZSBga2FzYW5fcmVzZXRfdGFnYCBpbiBgdGhyZWFkX3N0YWNrX2ZyZWVfcmN1YCB3aXRoaW4gYGtlcm5lbC9mb3JrLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBLQVNBTi1yZWxhdGVkIGNoYW5nZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJlaGF2aW9yLlxuXG5UaGUgY3JpdGljYWwgaW5zaWdodCBoZXJlIGlzIHRoYXQgYGthc2FuX3Jlc2V0X3RhZ2AgaXMgb25seSByZWxldmFudCBmb3IgYXJjaGl0ZWN0dXJlcyB3aXRoIHRhZy1iYXNlZCBLQVNBTiwgc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQgc3VwcG9ydCBgQ09ORklHX0tBU0FOX1NXX1RBR1NgIG9yIGBDT05GSUdfS0FTQU5fSFdfVEFHU2AuIFJpZ2h0IG5vdywgdGhhdCBzZWVtcyB0byBiZSBleGNsdXNpdmUgdG8gYGFybTY0YCwgbGV2ZXJhZ2luZyBmZWF0dXJlcyBsaWtlIEFSTSdzIFRvcCBCeXRlIElnbm9yZSBvciBNZW1vcnkgVGFnZ2luZyBFeHRlbnNpb24uICBPbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYW1kNjQsIGBrYXNhbl9yZXNldF90YWdgIGlzIGVzc2VudGlhbGx5IGEgbm8tb3AsIGRlZmluZWQgYXMgYW4gaW5saW5lIGZ1bmN0aW9uIHRoYXQganVzdCBjYXN0cyBhbmQgcmV0dXJucyB0aGUgc2FtZSBwb2ludGVyOiBgcmV0dXJuICh2b2lkICopYWRkcjtgLlxuXG5UaGVyZWZvcmUsIG9uIGFtZDY0LCB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSBhbmQgYmluYXJ5LWlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwgY29kZS4gSXTigJlzIGEgcHVyZSBjb3NtZXRpYyBvciBjb25kaXRpb25hbCBjaGFuZ2UgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2Ygd2hhdCBnZXRzIGV4ZWN1dGVkIG9uIGFtZDY0LiAgVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoaXMgY2hhbmdlIGlzICpub3QqIHdvcnRoIGZ1enppbmcgb24gYW1kNjQuIEl0IG5lYXRseSBmYWxscyBpbnRvIHRoZSBcIkNvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZVwiIG5lZ2F0aXZlIGNyaXRlcmlhIG91dGxpbmVkIGluIFNlY3Rpb24gMi5cblxuVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyByZXZpZXcgU2VjdGlvbiAyIGFnYWluLiBJdCBjb25maXJtcyB0aGF0IHRoZSBtb2RpZmljYXRpb24gaXMgKm9ubHkqIHJlbGV2YW50IHRvIG90aGVyIGFyY2hpdGVjdHVyZXMuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgdGhlIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGNvbmRpdGlvbiwgYW5kIG1vcmUgcGFydGljdWxhcmx5LCB3aGF0IGhhcHBlbnMgd2l0aCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHdoZW4gd2UgZ2V0IHRoZXJlLiBJdCdzIHVzdWFsbHkgZW1wdHksIG9yIGF0IGxlYXN0IGEgbnVsbCBvciBlbXB0eSBsaXN0IGlzIGV4cGVjdGVkLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgKmFueSogY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIGZ1enppbmcgb24gYW1kNjQsIGJ1dCBpZiB3ZSdyZSBub3QgZnV6emluZywgdGhlbiB0aGVyZSBzaG91bGRuJ3QgYmUuXG5cbkJhc2VkIG9uIHRoZSBldmlkZW5jZSwgdGhlIGNvcnJlY3QgY2FsbCB0byBgc2V0LXJlc3VsdHNgIHNob3VsZCBiZTpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBmYWxzZVxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgY29kZSByZWxhdGVkIHRvIEtBU0FOIHRhZyByZXNldHRpbmcuIFRoZSBga2FzYW5fcmVzZXRfdGFnYCBmdW5jdGlvbiBpcyBvbmx5IGFjdGl2ZSB3aGVuIGBDT05GSUdfS0FTQU5fU1dfVEFHU2Agb3IgYENPTkZJR19LQVNBTl9IV19UQUdTYCBpcyBlbmFibGVkLCB3aGljaCBpcyBjdXJyZW50bHkgbGltaXRlZCB0byBgYXJtNjRgLiBPbiBhbWQ2NCwgYGthc2FuX3Jlc2V0X3RhZ2AgaXMgZGVmaW5lZCBhcyBhIG5vLW9wLCByZXN1bHRpbmcgaW4gbm8gZnVuY3Rpb25hbCBvciBiaW5hcnkgY2hhbmdlLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCBmYWxscyB1bmRlciBcImNvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZVwiIGFuZCBpcyBub3Qgd29ydGggZnV6emluZyBvbiBhbWQ2NC5cbiogICBgRm9jdXNTeW1ib2xzYDogW11cbiogICBgRW5hYmxlQ29uZmlnc2A6IFtdXG5cblRoYXQgc2VlbXMgc29saWQgYW5kIGxvZ2ljYWxseSBjb25zaXN0ZW50LiBMZXQncyBjYWxsIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjozNzU1MiwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjQ0OjEzLjExNTc0NjM1OFoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGtlcm5lbC9mb3JrLmMgdG8gd3JhcCB2bV9hcmVhLVxcdTAwM2VhZGRyIGluIGthc2FuX3Jlc2V0X3RhZygpIHByaW9yIHRvIGNhbGxpbmcgdmZyZWUoKS4gVGhlIGthc2FuX3Jlc2V0X3RhZygpIGhlbHBlciBpcyBvbmx5IGFjdGl2ZSB3aGVuIENPTkZJR19LQVNBTl9TV19UQUdTIG9yIENPTkZJR19LQVNBTl9IV19UQUdTIGlzIGVuYWJsZWQsIGJvdGggb2Ygd2hpY2ggYXJlIGV4Y2x1c2l2ZSB0byBhcm02NC4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwga2FzYW5fcmVzZXRfdGFnKCkgaXMgYW4gaWRlbnRpdHkgZnVuY3Rpb24gcmV0dXJuaW5nICh2b2lkICopYWRkciB3aXRob3V0IG1vZGlmaWNhdGlvbi4gQ29uc2VxdWVudGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBubyBmdW5jdGlvbmFsIG9yIGJpbmFyeSBjaGFuZ2VzIHRvIGNvbXBpbGVkIGNvZGUgb24gYW1kNjQsIGZhbGxpbmcgdW5kZXIgY2hhbmdlcyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMga2VybmVsL2ZvcmsuYyB0byB3cmFwIHZtX2FyZWEtXFx1MDAzZWFkZHIgaW4ga2FzYW5fcmVzZXRfdGFnKCkgcHJpb3IgdG8gY2FsbGluZyB2ZnJlZSgpLiBUaGUga2FzYW5fcmVzZXRfdGFnKCkgaGVscGVyIGlzIG9ubHkgYWN0aXZlIHdoZW4gQ09ORklHX0tBU0FOX1NXX1RBR1Mgb3IgQ09ORklHX0tBU0FOX0hXX1RBR1MgaXMgZW5hYmxlZCwgYm90aCBvZiB3aGljaCBhcmUgZXhjbHVzaXZlIHRvIGFybTY0LiBPbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCBrYXNhbl9yZXNldF90YWcoKSBpcyBhbiBpZGVudGl0eSBmdW5jdGlvbiByZXR1cm5pbmcgKHZvaWQgKilhZGRyIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBDb25zZXF1ZW50bHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIGZ1bmN0aW9uYWwgb3IgYmluYXJ5IGNoYW5nZXMgdG8gY29tcGlsZWQgY29kZSBvbiBhbWQ2NCwgZmFsbGluZyB1bmRlciBjaGFuZ2VzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDo0NDoxMy4xMTU3ODI5MzhaIiwiU2VxIjo2MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd8kg9[1] Phase: Running StartedAt: 2026-09-14 10:44:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8kg9[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-14 10:44:23 +0000 UTC FinishedAt: 2026-09-14 10:44:28 +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,}