Name: series-workflowl8gdr Phase: Failed StartedAt: 2026-07-25 22:40:25 +0000 UTC FinishedAt: 2026-07-25 22:54:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8gdr[0] Phase: Succeeded StartedAt: 2026-07-25 22:40:25 +0000 UTC FinishedAt: 2026-07-25 22:54:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8gdr[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 22:40:25 +0000 UTC FinishedAt: 2026-07-25 22:54:35 +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+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIG9mIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMgKGVuaGFuY2luZyBlcnJvciBtZXNzYWdlcyB3aXRoIHN0cmluZyByZXByZXNlbnRhdGlvbnMgYW5kIGFkZGl0aW9uYWwgZGV0YWlscyksIHJlbW92YWwgb2YgcmVkdW5kYW50IGNvZGUgKGEgZHVwbGljYXRlIE1MWDVfU0VUIGFuZCBhIGR1cGxpY2F0ZSBtbHg1X2NtZF9leGVjIHRoYXQgaWdub3JlZCBpdHMgb3V0cHV0KSwgYW5kIGEgdGhlb3JldGljYWwgZXJyb3IgcGF0aCBmaXggaW4gaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0IHRoYXQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IGJlY2F1c2UgdGhlIGNvbnRleHQgaXMgZnJlZWQgaW1tZWRpYXRlbHkgb24gZmFpbHVyZS4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgTWVsbGFub3ggbWx4NSBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzNlMzA4M2M0OTQ3MDQ4ZjdiMTdhODVjN2VkZTE5ZDJhNmQwYjI1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDIyOjUxOjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jXG5pbmRleCBlNjI0ZjVkYTk2YzgxYi4uYWZlNTgxODI5NGQ5NTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jXG5AQCAtMzk4LDcgJiM0MzszOTgsNiBAQCBpbnQgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdXBkYXRlX21ldGhvZCwgcnRjX2F0dHItXHUwMDNlZndfZ2VuX3dxZSk7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9pbmRleF9tb2RlLCBydGNfYXR0ci1cdTAwM2V1cGRhdGVfaW5kZXhfbW9kZSk7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIGFjY2Vzc19pbmRleF9tb2RlLCBydGNfYXR0ci1cdTAwM2VhY2Nlc3NfaW5kZXhfbW9kZSk7XG4tXHRNTFg1X1NFVChydGMsIGF0dHIsIG51bV9oYXNoX2RlZmluZXIsIHJ0Y19hdHRyLVx1MDAzZW51bV9oYXNoX2RlZmluZXIpO1xuIFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfZGVwdGgsIHJ0Y19hdHRyLVx1MDAzZWxvZ19kZXB0aCk7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIGxvZ19oYXNoX3NpemUsIHJ0Y19hdHRyLVx1MDAzZWxvZ19zaXplKTtcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdGFibGVfdHlwZSwgcnRjX2F0dHItXHUwMDNldGFibGVfdHlwZSk7XG5AQCAtNjExLDkgJiM0Mzs2MTAsMTEgQEAgaW50IG1seDVod3NfY21kX3N0Y19tb2RpZnkoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gXG4gXHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIHNpemVvZihvdXQpKTtcbiBcdGlmIChyZXQpXG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7RmFpbGVkIHRvIG1vZGlmeSBTVEMgRlcgYWN0aW9uX3R5cGUgJWRcXG5cJiMzNDssXG4tXHRcdFx0ICAgICAgc3RjX2F0dHItXHUwMDNlYWN0aW9uX3R5cGUpO1xuLVxuJiM0MztcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuJiM0MztcdFx0XHQgICAgICBcJiMzNDtGYWlsZWQgdG8gbW9kaWZ5IFNUQyBhY3Rpb25fdHlwZSAlZCwgZXJyICVkLCBzeW5kcm9tZSAweCV4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICBzdGNfYXR0ci1cdTAwM2VhY3Rpb25fdHlwZSwgcmV0LFxuJiM0MztcdFx0XHQgICAgICBNTFg1X0dFVChnZW5lcmFsX29ial9vdXRfY21kX2hkcixcbiYjNDM7XHRcdFx0XHQgICAgICAgb3V0LCBzeW5kcm9tZSkpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTE4MSwxMiAmIzQzOzExODIsNiBAQCBpbnQgbWx4NWh3c19jbWRfcXVlcnlfY2FwcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiBcdFx0XHRcdFx0XHRjYXBhYmlsaXR5LmVzd19jYXAubWVyZ2VkX2Vzd2l0Y2gpO1xuIFx0fVxuIFxuLVx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7RmFpbGVkIHRvIHF1ZXJ5IGRldmljZSBhdHRyaWJ1dGVzXFxuXCYjMzQ7KTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4gXHRzbnByaW50ZihjYXBzLVx1MDAzZWZ3X3Zlciwgc2l6ZW9mKGNhcHMtXHUwMDNlZndfdmVyKSwgXCYjMzQ7JWQuJWQuJWRcJiMzNDssXG4gXHRcdCBmd19yZXZfbWFqKG1kZXYpLCBmd19yZXZfbWluKG1kZXYpLCBmd19yZXZfc3ViKG1kZXYpKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXG5pbmRleCBhZWQwMDlhZWM0ZmU4Ny4uZjBjM2EyYmRhMGM3MzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNcbkBAIC0zNDQsNiAmIzQzOzM0NCwzNiBAQCBod3Nfc2VuZF9lbmdpbmVfdXBkYXRlX3J1bGVfcmVzaXplKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICpod3NfcnVsZV9zdGF0dXNfdG9fc3RyaW5nKGVudW0gbWx4NWh3c19ydWxlX3N0YXR1cyBzdGF0dXMpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHN0YXR1cykge1xuJiM0MztcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19DUkVBVElORzogcmV0dXJuIFwmIzM0O0NSRUFUSU5HXCYjMzQ7O1xuJiM0MztcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19VUERBVElORzogcmV0dXJuIFwmIzM0O1VQREFUSU5HXCYjMzQ7O1xuJiM0MztcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19ERUxFVElORzogcmV0dXJuIFwmIzM0O0RFTEVUSU5HXCYjMzQ7O1xuJiM0MztcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19GQUlMSU5HOiByZXR1cm4gXCYjMzQ7RkFJTElOR1wmIzM0OztcbiYjNDM7XHRkZWZhdWx0OiByZXR1cm4gXCYjMzQ7TkFcJiMzNDs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZyh1OCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoc3RhdGUpIHtcbiYjNDM7XHRjYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfSURMRTogcmV0dXJuIFwmIzM0O0lETEVcJiMzNDs7XG4mIzQzO1x0Y2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX1dSSVRJTkc6IHJldHVybiBcJiMzNDtXUklUSU5HXCYjMzQ7O1xuJiM0MztcdGNhc2UgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9ERUxFVElORzogcmV0dXJuIFwmIzM0O0RFTEVUSU5HXCYjMzQ7O1xuJiM0MztcdGRlZmF1bHQ6IHJldHVybiBcJiMzNDtVTktOT1dOXCYjMzQ7O1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nKHU4IHN5bmRyb21lKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChzeW5kcm9tZSkge1xuJiM0MztcdGNhc2UgMTogcmV0dXJuIFwmIzM0O1NFVF9GTE9XX0ZBSUxcJiMzNDs7XG4mIzQzO1x0Y2FzZSAyOiByZXR1cm4gXCYjMzQ7RElTQUJMRV9GTE9XX0ZBSUxcJiMzNDs7XG4mIzQzO1x0ZGVmYXVsdDogcmV0dXJuIFwmIzM0O1VOS05PV05cJiMzNDs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBtbHg1aHdzX3NlbmRfcmluZ19wcml2ICpwcml2LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuQEAgLTM1Miw2ICYjNDM7MzgyLDcgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcbiBcdHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCA9IHByaXYtXHUwMDNlcnVsZS1cdTAwM2VtYXRjaGVyLVx1MDAzZXRibC1cdTAwM2VjdHg7XG4gXHR1MzIgb3Bjb2RlID0gY3FlID8gZ2V0X2NxZV9vcGNvZGUoY3FlKSA6IDA7XG4gXHRzdHJ1Y3QgbWx4NWh3c19ydWxlICpydWxlID0gcHJpdi1cdTAwM2VydWxlO1xuJiM0MztcdHU4IHN5bmRyb21lO1xuIFxuIFx0LyogSWYgc29tZXRoaW5nIGJhZCBoYXBwZW5zIGFuZCBsb3RzIG9mIHJ1bGVzIGFyZSBmYWlsaW5nLCB3ZSBkb24mIzM5O3RcbiBcdCAqIHdhbnQgdG8gcG9sbHV0ZSBkbWVzZy4gUHJpbnQgb25seSB0aGUgZmlyc3QgYmFkIGNxZSBwZXIgZW5naW5lLFxuQEAgLTM2NCwyNiAmIzQzOzM5NSwxNyBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFxuIFx0aWYgKG1seDVod3NfcnVsZV9tb3ZlX2luX3Byb2dyZXNzKHJ1bGUpKVxuIFx0XHRtbHg1aHdzX2VycihjdHgsXG4tXHRcdFx0ICAgIFwmIzM0Oy0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uIG1vdmluZyBydWxlOiBwaGFzZSAlcywgd3FlcyBsZWZ0ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7LS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gbW92aW5nIHJ1bGU6IHBoYXNlICVzICglZCksIHdxZXMgbGVmdCAlZFxcblwmIzM0OyxcbiBcdFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VyZXNpemVfaW5mby1cdTAwM2VzdGF0ZSA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX1dSSVRJTkcgPyBcJiMzNDtXUklUSU5HXCYjMzQ7IDpcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VyZXNpemVfaW5mby1cdTAwM2VzdGF0ZSA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HID8gXCYjMzQ7REVMRVRJTkdcJiMzNDsgOlxuLVx0XHRcdCAgICBcJiMzNDtVTktOT1dOXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZ1xuJiM0MztcdFx0XHRcdChydWxlLVx1MDAzZXJlc2l6ZV9pbmZvLVx1MDAzZXN0YXRlKSxcbiYjNDM7XHRcdFx0ICAgIHJ1bGUtXHUwMDNlcmVzaXplX2luZm8tXHUwMDNlc3RhdGUsXG4gXHRcdFx0ICAgIHJ1bGUtXHUwMDNlcGVuZGluZ193cWVzKTtcbiBcdGVsc2VcbiBcdFx0bWx4NWh3c19lcnIoY3R4LFxuIFx0XHRcdCAgICBcJiMzNDstLS0gcnVsZSAweCUwOGxseDogZXJyb3IgY29tcGxldGlvbiAlcyAoJWQpLCB3cWVzIGxlZnQgJWRcXG5cJiMzNDssXG4gXHRcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4tXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfQ1JFQVRJTkcgPyBcJiMzNDtDUkVBVElOR1wmIzM0OyA6XG4tXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfREVMRVRJTkcgPyBcJiMzNDtERUxFVElOR1wmIzM0OyA6XG4tXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfRkFJTElORyA/IFwmIzM0O0ZBSUxJTkdcJiMzNDsgOlxuLVx0XHRcdCAgICBydWxlLVx1MDAzZXN0YXR1cyA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfU1RBVFVTX1VQREFUSU5HID8gXCYjMzQ7VVBEQVRJTkdcJiMzNDsgOiBcJiMzNDtOQVwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGh3c19ydWxlX3N0YXR1c190b19zdHJpbmcocnVsZS1cdTAwM2VzdGF0dXMpLFxuIFx0XHRcdCAgICBydWxlLVx1MDAzZXN0YXR1cyxcbiBcdFx0XHQgICAgcnVsZS1cdTAwM2VwZW5kaW5nX3dxZXMpO1xuIFxuQEAgLTQyMyw2ICYjNDM7NDQ1LDE1IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXHRcdFx0ICAgIFwmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBzeW5kcm9tZSA9IDB4JXhcXG5cJiMzNDssXG4gXHRcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4gXHRcdFx0ICAgIGVycl9jcWUtXHUwMDNlc3luZHJvbWUpO1xuJiM0MztcdFx0bWx4NWh3c19lcnIoY3R4LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tIFFQTiA9IDB4JXhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuJiM0MztcdFx0XHQgICAgYmUzMl90b19jcHUoZXJyX2NxZS1cdTAwM2VzX3dxZV9vcGNvZGVfcXBuKSBcdTAwMjZcbiYjNDM7XHRcdFx0XHRcdDB4ZmZmZmZmKTtcbiYjNDM7XHRcdG1seDVod3NfZXJyKGN0eCxcbiYjNDM7XHRcdFx0ICAgIFwmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBXUUVfQ05UID0gMHglMDR4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbiYjNDM7XHRcdFx0ICAgICh1MzIpYmUxNl90b19jcHUoZXJyX2NxZS1cdTAwM2V3cWVfY291bnRlcikpO1xuIFx0fVxuIFxuIFx0bWx4NWh3c19lcnIoY3R4LFxuQEAgLTQzMywxMyAmIzQzOzQ2NCwxMiBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbiBcdFx0ICAgIChiZTMyX3RvX2NwdShjcWUtXHUwMDNlYnl0ZV9jbnQpIFx1MDAyNiAweDgwMDAwMDAwKSA/XG4gXHRcdCAgICBcJiMzNDtGQUlMVVJFXCYjMzQ7IDogXCYjMzQ7U1VDQ0VTU1wmIzM0Oyk7XG4mIzQzO1x0Lyogc3luZHJvbWUgaXMgaW4gdGhlIGxvd2VyIDIgYml0cyBvZiBieXRlX2NudCAqL1xuJiM0MztcdHN5bmRyb21lID0gYmUzMl90b19jcHUoY3FlLVx1MDAzZWJ5dGVfY250KSBcdTAwMjYgMztcbiBcdG1seDVod3NfZXJyKGN0eCxcbi1cdFx0ICAgIFwmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLS0tLS0gU1lORFJPTUUgPSAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgICBcJiMzNDsgICAgcnVsZSAweCUwOGxseDogIHwtLS0tLS0tIFNZTkRST01FID0gJXMgKCV1KVxcblwmIzM0OyxcbiBcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4tXHRcdCAgICAoKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VieXRlX2NudCkgXHUwMDI2IDB4MDAwMDAwMDMpID09IDEpID9cbi1cdFx0ICAgIFwmIzM0O1NFVF9GTE9XX0ZBSUxcJiMzNDsgOlxuLVx0XHQgICAgKChiZTMyX3RvX2NwdShjcWUtXHUwMDNlYnl0ZV9jbnQpIFx1MDAyNiAweDAwMDAwMDAzKSA9PSAyKSA/XG4tXHRcdCAgICBcJiMzNDtESVNBQkxFX0ZMT1dfRkFJTFwmIzM0OyA6IFwmIzM0O1VOS05PV05cJiMzNDspO1xuJiM0MztcdFx0ICAgIGh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nKHN5bmRyb21lKSwgc3luZHJvbWUpO1xuIFx0bWx4NWh3c19lcnIoY3R4LFxuIFx0XHQgICAgXCYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6IGNxZS1cdTAwM2Vzb3BfZHJvcF9xcG4gID0gMHglMDh4XFxuXCYjMzQ7LFxuIFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSwgYmUzMl90b19jcHUoY3FlLVx1MDAzZXNvcF9kcm9wX3FwbikpO1xuQEAgLTEwOTEsOCAmIzQzOzExMjEsNiBAQCBzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4gXHRpZiAoIW1seDVod3NfY29udGV4dF9id2Nfc3VwcG9ydGVkKGN0eCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0Y3R4LVx1MDAzZXF1ZXVlcyAmIzQzOz0gYndjX3F1ZXVlcztcbi1cbiBcdGN0eC1cdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2NrcyA9IGt6YWxsb2Nfb2JqcygqY3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzLFxuIFx0XHRcdFx0XHRcdCBid2NfcXVldWVzKTtcbiBcbkBAIC0xMTA0LDYgJiM0MzsxMTMyLDggQEAgc3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuIFx0aWYgKCFjdHgtXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cylcbiBcdFx0Z290byBlcnJfbG9ja19jbGFzc19rZXlzO1xuIFxuJiM0MztcdGN0eC1cdTAwM2VxdWV1ZXMgJiM0Mzs9IGJ3Y19xdWV1ZXM7XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYndjX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0bXV0ZXhfaW5pdChcdTAwMjZjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3NbaV0pO1xuIFx0XHRsb2NrZGVwX3JlZ2lzdGVyX2tleShjdHgtXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyAmIzQzOyBpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgb2YgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyAoZW5oYW5jaW5nIGVycm9yIG1lc3NhZ2VzIHdpdGggc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBhbmQgYWRkaXRpb25hbCBkZXRhaWxzKSwgcmVtb3ZhbCBvZiByZWR1bmRhbnQgY29kZSAoYSBkdXBsaWNhdGUgTUxYNV9TRVQgYW5kIGEgZHVwbGljYXRlIG1seDVfY21kX2V4ZWMgdGhhdCBpZ25vcmVkIGl0cyBvdXRwdXQpLCBhbmQgYSB0aGVvcmV0aWNhbCBlcnJvciBwYXRoIGZpeCBpbiBod3NfYndjX3NlbmRfcXVldWVzX2luaXQgdGhhdCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3QgYmVjYXVzZSB0aGUgY29udGV4dCBpcyBmcmVlZCBpbW1lZGlhdGVseSBvbiBmYWlsdXJlLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgYXJlIGluIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjM2UzMDgzYzQ5NDcwNDhmN2IxN2E4NWM3ZWRlMTlkMmE2ZDBiMjUwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMjI6NTE6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYwppbmRleCBlNjI0ZjVkYTk2YzgxYi4uYWZlNTgxODI5NGQ5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYwpAQCAtMzk4LDcgJiM0MzszOTgsNiBAQCBpbnQgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwKIAlNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9tZXRob2QsIHJ0Y19hdHRyLSZndDtmd19nZW5fd3FlKTsKIAlNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9pbmRleF9tb2RlLCBydGNfYXR0ci0mZ3Q7dXBkYXRlX2luZGV4X21vZGUpOwogCU1MWDVfU0VUKHJ0YywgYXR0ciwgYWNjZXNzX2luZGV4X21vZGUsIHJ0Y19hdHRyLSZndDthY2Nlc3NfaW5kZXhfbW9kZSk7Ci0JTUxYNV9TRVQocnRjLCBhdHRyLCBudW1faGFzaF9kZWZpbmVyLCBydGNfYXR0ci0mZ3Q7bnVtX2hhc2hfZGVmaW5lcik7CiAJTUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfZGVwdGgsIHJ0Y19hdHRyLSZndDtsb2dfZGVwdGgpOwogCU1MWDVfU0VUKHJ0YywgYXR0ciwgbG9nX2hhc2hfc2l6ZSwgcnRjX2F0dHItJmd0O2xvZ19zaXplKTsKIAlNTFg1X1NFVChydGMsIGF0dHIsIHRhYmxlX3R5cGUsIHJ0Y19hdHRyLSZndDt0YWJsZV90eXBlKTsKQEAgLTYxMSw5ICYjNDM7NjEwLDExIEBAIGludCBtbHg1aHdzX2NtZF9zdGNfbW9kaWZ5KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LAogCiAJcmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBzaXplb2Yob3V0KSk7CiAJaWYgKHJldCkKLQkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O0ZhaWxlZCB0byBtb2RpZnkgU1RDIEZXIGFjdGlvbl90eXBlICVkXG4mIzM0OywKLQkJCSAgICAgIHN0Y19hdHRyLSZndDthY3Rpb25fdHlwZSk7Ci0KJiM0MzsJCW1seDVfY29yZV9lcnIobWRldiwKJiM0MzsJCQkgICAgICAmIzM0O0ZhaWxlZCB0byBtb2RpZnkgU1RDIGFjdGlvbl90eXBlICVkLCBlcnIgJWQsIHN5bmRyb21lIDB4JXhcbiYjMzQ7LAomIzQzOwkJCSAgICAgIHN0Y19hdHRyLSZndDthY3Rpb25fdHlwZSwgcmV0LAomIzQzOwkJCSAgICAgIE1MWDVfR0VUKGdlbmVyYWxfb2JqX291dF9jbWRfaGRyLAomIzQzOwkJCQkgICAgICAgb3V0LCBzeW5kcm9tZSkpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTExODEsMTIgJiM0MzsxMTgyLDYgQEAgaW50IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsCiAJCQkJCQljYXBhYmlsaXR5LmVzd19jYXAubWVyZ2VkX2Vzd2l0Y2gpOwogCX0KIAotCXJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpOwotCWlmIChyZXQpIHsKLQkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O0ZhaWxlZCB0byBxdWVyeSBkZXZpY2UgYXR0cmlidXRlc1xuJiMzNDspOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlzbnByaW50ZihjYXBzLSZndDtmd192ZXIsIHNpemVvZihjYXBzLSZndDtmd192ZXIpLCAmIzM0OyVkLiVkLiVkJiMzNDssCiAJCSBmd19yZXZfbWFqKG1kZXYpLCBmd19yZXZfbWluKG1kZXYpLCBmd19yZXZfc3ViKG1kZXYpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYwppbmRleCBhZWQwMDlhZWM0ZmU4Ny4uZjBjM2EyYmRhMGM3MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jCkBAIC0zNDQsNiAmIzQzOzM0NCwzNiBAQCBod3Nfc2VuZF9lbmdpbmVfdXBkYXRlX3J1bGVfcmVzaXplKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSwKIAl9CiB9CiAKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaHdzX3J1bGVfc3RhdHVzX3RvX3N0cmluZyhlbnVtIG1seDVod3NfcnVsZV9zdGF0dXMgc3RhdHVzKQomIzQzO3sKJiM0MzsJc3dpdGNoIChzdGF0dXMpIHsKJiM0MzsJY2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0NSRUFUSU5HOiByZXR1cm4gJiMzNDtDUkVBVElORyYjMzQ7OwomIzQzOwljYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfVVBEQVRJTkc6IHJldHVybiAmIzM0O1VQREFUSU5HJiMzNDs7CiYjNDM7CWNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19ERUxFVElORzogcmV0dXJuICYjMzQ7REVMRVRJTkcmIzM0OzsKJiM0MzsJY2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0ZBSUxJTkc6IHJldHVybiAmIzM0O0ZBSUxJTkcmIzM0OzsKJiM0MzsJZGVmYXVsdDogcmV0dXJuICYjMzQ7TkEmIzM0OzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZyh1OCBzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoc3RhdGUpIHsKJiM0MzsJY2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0lETEU6IHJldHVybiAmIzM0O0lETEUmIzM0OzsKJiM0MzsJY2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX1dSSVRJTkc6IHJldHVybiAmIzM0O1dSSVRJTkcmIzM0OzsKJiM0MzsJY2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HOiByZXR1cm4gJiMzNDtERUxFVElORyYjMzQ7OwomIzQzOwlkZWZhdWx0OiByZXR1cm4gJiMzNDtVTktOT1dOJiMzNDs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nKHU4IHN5bmRyb21lKQomIzQzO3sKJiM0MzsJc3dpdGNoIChzeW5kcm9tZSkgewomIzQzOwljYXNlIDE6IHJldHVybiAmIzM0O1NFVF9GTE9XX0ZBSUwmIzM0OzsKJiM0MzsJY2FzZSAyOiByZXR1cm4gJiMzNDtESVNBQkxFX0ZMT1dfRkFJTCYjMzQ7OwomIzQzOwlkZWZhdWx0OiByZXR1cm4gJiMzNDtVTktOT1dOJiMzNDs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLAogCQkJCQkgICBzdHJ1Y3QgbWx4NWh3c19zZW5kX3JpbmdfcHJpdiAqcHJpdiwKIAkJCQkJICAgc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKQEAgLTM1Miw2ICYjNDM7MzgyLDcgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSwKIAlzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHggPSBwcml2LSZndDtydWxlLSZndDttYXRjaGVyLSZndDt0YmwtJmd0O2N0eDsKIAl1MzIgb3Bjb2RlID0gY3FlID8gZ2V0X2NxZV9vcGNvZGUoY3FlKSA6IDA7CiAJc3RydWN0IG1seDVod3NfcnVsZSAqcnVsZSA9IHByaXYtJmd0O3J1bGU7CiYjNDM7CXU4IHN5bmRyb21lOwogCiAJLyogSWYgc29tZXRoaW5nIGJhZCBoYXBwZW5zIGFuZCBsb3RzIG9mIHJ1bGVzIGFyZSBmYWlsaW5nLCB3ZSBkb24mIzM5O3QKIAkgKiB3YW50IHRvIHBvbGx1dGUgZG1lc2cuIFByaW50IG9ubHkgdGhlIGZpcnN0IGJhZCBjcWUgcGVyIGVuZ2luZSwKQEAgLTM2NCwyNiAmIzQzOzM5NSwxNyBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLAogCiAJaWYgKG1seDVod3NfcnVsZV9tb3ZlX2luX3Byb2dyZXNzKHJ1bGUpKQogCQltbHg1aHdzX2VycihjdHgsCi0JCQkgICAgJiMzNDstLS0gcnVsZSAweCUwOGxseDogZXJyb3IgY29tcGxldGlvbiBtb3ZpbmcgcnVsZTogcGhhc2UgJXMsIHdxZXMgbGVmdCAlZFxuJiMzNDssCiYjNDM7CQkJICAgICYjMzQ7LS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gbW92aW5nIHJ1bGU6IHBoYXNlICVzICglZCksIHdxZXMgbGVmdCAlZFxuJiMzNDssCiAJCQkgICAgSFdTX1BUUl9UT19JRChydWxlKSwKLQkJCSAgICBydWxlLSZndDtyZXNpemVfaW5mby0mZ3Q7c3RhdGUgPT0KLQkJCSAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX1dSSVRJTkcgPyAmIzM0O1dSSVRJTkcmIzM0OyA6Ci0JCQkgICAgcnVsZS0mZ3Q7cmVzaXplX2luZm8tJmd0O3N0YXRlID09Ci0JCQkgICAgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9ERUxFVElORyA/ICYjMzQ7REVMRVRJTkcmIzM0OyA6Ci0JCQkgICAgJiMzNDtVTktOT1dOJiMzNDssCiYjNDM7CQkJICAgIGh3c19ydWxlX3Jlc2l6ZV9zdGF0ZV90b19zdHJpbmcKJiM0MzsJCQkJKHJ1bGUtJmd0O3Jlc2l6ZV9pbmZvLSZndDtzdGF0ZSksCiYjNDM7CQkJICAgIHJ1bGUtJmd0O3Jlc2l6ZV9pbmZvLSZndDtzdGF0ZSwKIAkJCSAgICBydWxlLSZndDtwZW5kaW5nX3dxZXMpOwogCWVsc2UKIAkJbWx4NWh3c19lcnIoY3R4LAogCQkJICAgICYjMzQ7LS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gJXMgKCVkKSwgd3FlcyBsZWZ0ICVkXG4mIzM0OywKIAkJCSAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLAotCQkJICAgIHJ1bGUtJmd0O3N0YXR1cyA9PQotCQkJICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfQ1JFQVRJTkcgPyAmIzM0O0NSRUFUSU5HJiMzNDsgOgotCQkJICAgIHJ1bGUtJmd0O3N0YXR1cyA9PQotCQkJICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfREVMRVRJTkcgPyAmIzM0O0RFTEVUSU5HJiMzNDsgOgotCQkJICAgIHJ1bGUtJmd0O3N0YXR1cyA9PQotCQkJICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfRkFJTElORyA/ICYjMzQ7RkFJTElORyYjMzQ7IDoKLQkJCSAgICBydWxlLSZndDtzdGF0dXMgPT0KLQkJCSAgICBNTFg1SFdTX1JVTEVfU1RBVFVTX1VQREFUSU5HID8gJiMzNDtVUERBVElORyYjMzQ7IDogJiMzNDtOQSYjMzQ7LAomIzQzOwkJCSAgICBod3NfcnVsZV9zdGF0dXNfdG9fc3RyaW5nKHJ1bGUtJmd0O3N0YXR1cyksCiAJCQkgICAgcnVsZS0mZ3Q7c3RhdHVzLAogCQkJICAgIHJ1bGUtJmd0O3BlbmRpbmdfd3Flcyk7CiAKQEAgLTQyMyw2ICYjNDM7NDQ1LDE1IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsCiAJCQkgICAgJiMzNDsgICAgcnVsZSAweCUwOGxseDogIHwtLS0gc3luZHJvbWUgPSAweCV4XG4mIzM0OywKIAkJCSAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLAogCQkJICAgIGVycl9jcWUtJmd0O3N5bmRyb21lKTsKJiM0MzsJCW1seDVod3NfZXJyKGN0eCwKJiM0MzsJCQkgICAgJiMzNDsgICAgcnVsZSAweCUwOGxseDogIHwtLS0gUVBOID0gMHgleFxuJiMzNDssCiYjNDM7CQkJICAgIEhXU19QVFJfVE9fSUQocnVsZSksCiYjNDM7CQkJICAgIGJlMzJfdG9fY3B1KGVycl9jcWUtJmd0O3Nfd3FlX29wY29kZV9xcG4pICZhbXA7CiYjNDM7CQkJCQkweGZmZmZmZik7CiYjNDM7CQltbHg1aHdzX2VycihjdHgsCiYjNDM7CQkJICAgICYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tIFdRRV9DTlQgPSAweCUwNHhcbiYjMzQ7LAomIzQzOwkJCSAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLAomIzQzOwkJCSAgICAodTMyKWJlMTZfdG9fY3B1KGVycl9jcWUtJmd0O3dxZV9jb3VudGVyKSk7CiAJfQogCiAJbWx4NWh3c19lcnIoY3R4LApAQCAtNDMzLDEzICYjNDM7NDY0LDEyIEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsCiAJCSAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLAogCQkgICAgKGJlMzJfdG9fY3B1KGNxZS0mZ3Q7Ynl0ZV9jbnQpICZhbXA7IDB4ODAwMDAwMDApID8KIAkJICAgICYjMzQ7RkFJTFVSRSYjMzQ7IDogJiMzNDtTVUNDRVNTJiMzNDspOwomIzQzOwkvKiBzeW5kcm9tZSBpcyBpbiB0aGUgbG93ZXIgMiBiaXRzIG9mIGJ5dGVfY250ICovCiYjNDM7CXN5bmRyb21lID0gYmUzMl90b19jcHUoY3FlLSZndDtieXRlX2NudCkgJmFtcDsgMzsKIAltbHg1aHdzX2VycihjdHgsCi0JCSAgICAmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLS0tLS0gU1lORFJPTUUgPSAlc1xuJiMzNDssCiYjNDM7CQkgICAgJiMzNDsgICAgcnVsZSAweCUwOGxseDogIHwtLS0tLS0tIFNZTkRST01FID0gJXMgKCV1KVxuJiMzNDssCiAJCSAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLAotCQkgICAgKChiZTMyX3RvX2NwdShjcWUtJmd0O2J5dGVfY250KSAmYW1wOyAweDAwMDAwMDAzKSA9PSAxKSA/Ci0JCSAgICAmIzM0O1NFVF9GTE9XX0ZBSUwmIzM0OyA6Ci0JCSAgICAoKGJlMzJfdG9fY3B1KGNxZS0mZ3Q7Ynl0ZV9jbnQpICZhbXA7IDB4MDAwMDAwMDMpID09IDIpID8KLQkJICAgICYjMzQ7RElTQUJMRV9GTE9XX0ZBSUwmIzM0OyA6ICYjMzQ7VU5LTk9XTiYjMzQ7KTsKJiM0MzsJCSAgICBod3NfZ3RhX3N5bmRyb21lX3RvX3N0cmluZyhzeW5kcm9tZSksIHN5bmRyb21lKTsKIAltbHg1aHdzX2VycihjdHgsCiAJCSAgICAmIzM0OyAgICBydWxlIDB4JTA4bGx4OiBjcWUtJmd0O3NvcF9kcm9wX3FwbiAgPSAweCUwOHhcbiYjMzQ7LAogCQkgICAgSFdTX1BUUl9UT19JRChydWxlKSwgYmUzMl90b19jcHUoY3FlLSZndDtzb3BfZHJvcF9xcG4pKTsKQEAgLTEwOTEsOCAmIzQzOzExMjEsNiBAQCBzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpCiAJaWYgKCFtbHg1aHdzX2NvbnRleHRfYndjX3N1cHBvcnRlZChjdHgpKQogCQlyZXR1cm4gMDsKIAotCWN0eC0mZ3Q7cXVldWVzICYjNDM7PSBid2NfcXVldWVzOwotCiAJY3R4LSZndDtid2Nfc2VuZF9xdWV1ZV9sb2NrcyA9IGt6YWxsb2Nfb2JqcygqY3R4LSZndDtid2Nfc2VuZF9xdWV1ZV9sb2NrcywKIAkJCQkJCSBid2NfcXVldWVzKTsKIApAQCAtMTEwNCw2ICYjNDM7MTEzMiw4IEBAIHN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCkKIAlpZiAoIWN0eC0mZ3Q7YndjX2xvY2tfY2xhc3Nfa2V5cykKIAkJZ290byBlcnJfbG9ja19jbGFzc19rZXlzOwogCiYjNDM7CWN0eC0mZ3Q7cXVldWVzICYjNDM7PSBid2NfcXVldWVzOwomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBid2NfcXVldWVzOyBpJiM0MzsmIzQzOykgewogCQltdXRleF9pbml0KCZhbXA7Y3R4LSZndDtid2Nfc2VuZF9xdWV1ZV9sb2Nrc1tpXSk7CiAJCWxvY2tkZXBfcmVnaXN0ZXJfa2V5KGN0eC0mZ3Q7YndjX2xvY2tfY2xhc3Nfa2V5cyAmIzQzOyBpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2NQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDQ2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVsbGFub3ggSFdTIENvbW1hbmQgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNgIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNgLiBMZXQmIzM5O3MgZGl2ZSBpbi4KCkZpcnN0LCBgY21kLmNgOiBJIHNlZSBhIGNoYW5nZSBpbiBgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZWAsIHdoZXJlIHRoZXkmIzM5O3ZlIHJlbW92ZWQgYE1MWDVfU0VUKHJ0YywgYXR0ciwgbnVtX2hhc2hfZGVmaW5lciwgcnRjX2F0dHItJmd0O251bV9oYXNoX2RlZmluZXIpO2AuIEN1cmlvdXMsIG11c3QgYmUgYSBzaW1wbGlmaWNhdGlvbiBvciBhIGRpZmZlcmVudCB3YXkgb2YgaGFuZGxpbmcgaGFzaCBkZWZpbmVycyBub3cuIFRoZW4sIGluIGBtbHg1aHdzX2NtZF9zdGNfbW9kaWZ5YCwgdGhleSYjMzk7dmUgYWRkZWQgYSBzeW5kcm9tZSB0byB0aGUgZXJyb3IgbWVzc2FnZSwgdGhhdCYjMzk7cyBnb29kIGZvciBkZWJ1Z2dpbmcuIEJ1dCB0aGlzIGBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzYCBjaGFuZ2UgaXMgd2hhdCYjMzk7cyBncmFiYmVkIG15IGF0dGVudGlvbi4gVGhleSYjMzk7dmUgcmVtb3ZlZCBhIGNhbGwgdG8gYG1seDVfY21kX2V4ZWNgIGFuZCBpdHMgYXNzb2NpYXRlZCBlcnJvciBoYW5kbGluZy4gV2FpdCwgKnJlbW92ZWQqPyBJcyBgbWx4NV9jbWRfZXhlY2AgZ29uZSBlbnRpcmVseT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkaWZmIG1vcmUgY2xvc2VseS4KCmBgYGMKQEAgLTExODEsMTIgJiM0MzsxMTgyLDYgQEAgaW50IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsCiAJCQkJCQljYXBhYmlsaXR5LmVzd19jYXAubWVyZ2VkX2Vzd2l0Y2gpOwogCX0KIAotCXJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpOwotCWlmIChyZXQpIHsKLQkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O0ZhaWxlZCB0byBxdWVyeSBkZXZpY2UgYXR0cmlidXRlc1xuJiMzNDspOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlzbnByaW50ZihjYXBzLSZndDtmd192ZXIsIHNpemVvZihjYXBzLSZndDtmd192ZXIpLCAmIzM0OyVkLiVkLiVkJiMzNDssCiAJCSBmd19yZXZfbWFqKG1kZXYpLCBmd19yZXZfbWluKG1kZXYpLCBmd19yZXZfc3ViKG1kZXYpKTsKIGBgYAoKWWVwLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGdvbmUuIFNvIHRoZSBjb21tYW5kIGlzICpubyBsb25nZXIgZXhlY3V0ZWQqPyBPciwgd2FzIGl0IGEgcmVkdW5kYW50IGNhbGwgdGhhdCYjMzk7cyBiZWVuIGVsaW1pbmF0ZWQ/IFRoaXMgcmVxdWlyZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCBgbWx4NWh3c19jbWRfcXVlcnlfY2Fwc2AgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21seDVod3NfY21kX3F1ZXJ5X2NhcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmM9ODkzPWludCBtbHg1aHdzX2NtZF9nZW5lcmF0ZV93cWUoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYy05MzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jOjkzODppbnQgbWx4NWh3c19jbWRfcXVlcnlfY2FwcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmM6OTM5Olx0XHRcdCAgIHN0cnVjdCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzICpjYXBzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYy05NDAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNDEKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzYCoqCgpPa2F5LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgY29kZSBmb3IgYG1seDVod3NfY21kX3F1ZXJ5X2NhcHNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJiMzOTtzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIE1lbGxhbm94IGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBzcGVjaWZpYyBjYXBhYmlsaXRpZXMgaXMgdGhpcyByb3V0aW5lIHF1ZXJ5aW5nPyBBcmUgd2UgdGFsa2luZyBhYm91dCBiYXNpYyBkZXZpY2UgaW5mb3JtYXRpb24sIGZlYXR1cmUgc2V0cywgcGVyaGFwcyBzdXBwb3J0ZWQgb2ZmbG9hZHM/IFRoZSBmdW5jdGlvbiYjMzk7cyBuYW1lIHN1Z2dlc3RzIGl0JiMzOTtzIGNlbnRyYWwgdG8gZGlzY292ZXJpbmcgdGhlIGhhcmR3YXJlJiMzOTtzIGNhcGFiaWxpdGllcywgYnV0IEkgd2FudCB0byBzZWUgdGhlIGdyYW51bGFyaXR5LgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIE1MWDUgZGV2aWNlLCB0aGUgY29tbWFuZCBzdHJ1Y3R1cmVzIGl0IGNvbnN0cnVjdHMgYW5kIHNlbmRzLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaG93IGl0IGludGVycHJldHMgdGhlIHJlc3BvbnNlcy4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiBpdCBoYW5kbGVzIGRpZmZlcmVudCBmaXJtd2FyZSB2ZXJzaW9ucyBvciBoYXJkd2FyZSBnZW5lcmF0aW9ucyBncmFjZWZ1bGx5LiBFcnJvciBoYW5kbGluZyBpcyBhbm90aGVyIGtleSBhc3BlY3QuIEkgZXhwZWN0IHJvYnVzdCB2YWxpZGF0aW9uIGFuZCBpbmZvcm1hdGl2ZSBlcnJvciBjb2RlcywgZXNwZWNpYWxseSBzaW5jZSBjYXBhYmlsaXR5IHF1ZXJpZXMgYXJlIGZvdW5kYXRpb25hbCBmb3IgZHJpdmVyIG9wZXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgcmV0dXJuIHZhbHVlcyBhbmQgYW55IGFzc29jaWF0ZWQgc2lkZSBlZmZlY3RzIGFyZSBjcml0aWNhbC4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIHBhaW50cyBhIHBpY3R1cmUgb2YgdGhlIGF2YWlsYWJsZSBoYXJkd2FyZSByZXNvdXJjZXMgZm9yIHRoZSB1cHBlciBsYXllcnMgb2YgdGhlIGRyaXZlci4gTGV0JiMzOTtzIHNlZSBob3cgaXQgZ29lcyBhYm91dCBkb2luZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkzOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkzODpcdGludCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxuIDkzOTpcdFx0XHRcdCAgIHN0cnVjdCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzICpjYXBzKVxuIDk0MDpcdHtcbiA5NDE6XHRcdHUzMiBpbltNTFg1X1NUX1NaX0RXKHF1ZXJ5X2hjYV9jYXBfaW4pXSA9IHswfTtcbiA5NDI6XHRcdHUzMiBvdXRfc2l6ZTtcbiA5NDM6XHRcdHUzMiAqb3V0O1xuIDk0NDpcdFx0aW50IHJldDtcbiA5NDU6XHRcbiA5NDY6XHRcdG91dF9zaXplID0gTUxYNV9TVF9TWl9CWVRFUyhxdWVyeV9oY2FfY2FwX291dCk7XG4gOTQ3Olx0XHRvdXQgPSBremFsbG9jKG91dF9zaXplLCBHRlBfS0VSTkVMKTtcbiA5NDg6XHRcdGlmICghb3V0KVxuIDk0OTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5NTA6XHRcbiA5NTE6XHRcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcGNvZGUsIE1MWDVfQ01EX09QX1FVRVJZX0hDQV9DQVApO1xuIDk1MjpcdFx0TUxYNV9TRVQocXVlcnlfaGNhX2NhcF9pbiwgaW4sIG9wX21vZCxcbiA5NTM6XHRcdFx0IE1MWDVfU0VUX0hDQV9DQVBfT1BfTU9EX0dFTkVSQUxfREVWSUNFIHwgSENBX0NBUF9PUE1PRF9HRVRfQ1VSKTtcbiA5NTQ6XHRcbiA5NTU6XHRcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xuIDk1NjpcdFx0aWYgKHJldCkge1xuIDk1NzpcdFx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O0ZhaWxlZCB0byBxdWVyeSBkZXZpY2UgY2Fwc1xcblwmIzM0Oyk7XG4gOTU4Olx0XHRcdGdvdG8gb3V0O1xuIDk1OTpcdFx0fVxuIDk2MDpcdFxuIDk2MTpcdFx0Y2Fwcy1cdTAwM2V3cWVfYmFzZWRfdXBkYXRlID1cbiA5NjI6XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbiA5NjM6XHRcdFx0XHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC53cWVfYmFzZWRfZmxvd190YWJsZV91cGRhdGVfY2FwKTtcbiA5NjQ6XHRcbiA5NjU6XHRcdGNhcHMtXHUwMDNlZXN3aXRjaF9tYW5hZ2VyID0gTUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbiA5NjY6XHRcdFx0XHRcdFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXAuZXN3aXRjaF9tYW5hZ2VyKTtcbiA5Njc6XHRcbiA5Njg6XHRcdGNhcHMtXHUwMDNlZmxleF9wcm90b2NvbHMgPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuIDk2OTpcdFx0XHRcdFx0XHRjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLmZsZXhfcGFyc2VyX3Byb3RvY29scyk7XG4gOTcwOlx0XG4gOTcxOlx0XHRpZiAoY2Fwcy1cdTAwM2VmbGV4X3Byb3RvY29scyBcdTAwMjYgTUxYNV9GTEVYX1BBUlNFUl9HRU5FVkVfVExWX09QVElPTl8wX0VOQUJMRUQpXG4gOTcyOlx0XHRcdGNhcHMtXHUwMDNlZmxleF9wYXJzZXJfaWRfZ2VuZXZlX3Rsdl9vcHRpb25fMCA9XG4gOTczOlx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbiA5NzQ6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLmZsZXhfcGFyc2VyX2lkX2dlbmV2ZV90bHZfb3B0aW9uXzApO1xuIDk3NTpcdFxuIDk3NjpcdFx0aWYgKGNhcHMtXHUwMDNlZmxleF9wcm90b2NvbHMgXHUwMDI2IE1MWDVfRkxFWF9QQVJTRVJfTVBMU19PVkVSX0dSRV9FTkFCTEVEKVxuIDk3NzpcdFx0XHRjYXBzLVx1MDAzZWZsZXhfcGFyc2VyX2lkX21wbHNfb3Zlcl9ncmUgPVxuIDk3ODpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4gOTc5Olx0XHRcdFx0XHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5mbGV4X3BhcnNlcl9pZF9vdXRlcl9maXJzdF9tcGxzX292ZXJfZ3JlKTtcbiA5ODA6XHRcbiA5ODE6XHRcdGlmIChjYXBzLVx1MDAzZWZsZXhfcHJvdG9jb2xzIFx1MDAyNiBNTFg1X0ZMRVhfUEFSU0VSX01QTFNfT1ZFUl9VRFBfRU5BQkxFRClcbiA5ODI6XHRcdFx0Y2Fwcy1cdTAwM2VmbGV4X3BhcnNlcl9pZF9tcGxzX292ZXJfdWRwID1cbiA5ODM6XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuIDk4NDpcdFx0XHRcdFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXAuZmxleF9wYXJzZXJfaWRfb3V0ZXJfZmlyc3RfbXBsc19vdmVyX3VkcF9sYWJlbCk7XG4gOTg1Olx0XG4gOTg2Olx0XHRjYXBzLVx1MDAzZWxvZ19oZWFkZXJfbW9kaWZ5X2FyZ3VtZW50X2dyYW51bGFyaXR5ID1cbiA5ODc6XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbiA5ODg6XHRcdFx0XHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5sb2dfaGVhZGVyX21vZGlmeV9hcmd1bWVudF9ncmFudWxhcml0eSk7XG4gOTg5Olx0XG4gOTkwOlx0XHRjYXBzLVx1MDAzZWxvZ19oZWFkZXJfbW9kaWZ5X2FyZ3VtZW50X2dyYW51bGFyaXR5IC09XG4gOTkxOlx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4gOTkyOlx0XHRcdFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXAubG9nX2hlYWRlcl9tb2RpZnlfYXJndW1lbnRfZ3JhbnVsYXJpdHlfb2Zmc2V0KTtcbiA5OTM6XHRcbiA5OTQ6XHRcdGNhcHMtXHUwMDNlbG9nX2hlYWRlcl9tb2RpZnlfYXJndW1lbnRfbWF4X2FsbG9jID1cbiA5OTU6XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbiA5OTY6XHRcdFx0XHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5sb2dfaGVhZGVyX21vZGlmeV9hcmd1bWVudF9tYXhfYWxsb2MpO1xuIDk5NzpcdFxuIDk5ODpcdFx0Y2Fwcy1cdTAwM2VkZWZpbmVyX2Zvcm1hdF9zdXAgPVxuIDk5OTpcdFx0XHRNTFg1X0dFVDY0KHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMDAwOlx0XHRcdFx0ICAgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5tYXRjaF9kZWZpbmVyX2Zvcm1hdF9zdXBwb3J0ZWQpO1xuMTAwMTpcdFxuMTAwMjpcdFx0Y2Fwcy1cdTAwM2V2aGNhX2lkID0gTUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjEwMDM6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLnZoY2FfaWQpO1xuMTAwNDpcdFxuMTAwNTpcdFx0Y2Fwcy1cdTAwM2VzcV90c19mb3JtYXQgPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTAwNjpcdFx0XHRcdFx0ICAgICAgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5zcV90c19mb3JtYXQpO1xuMTAwNzpcdFxuMTAwODpcdFx0Y2Fwcy1cdTAwM2VpcHNlY19vZmZsb2FkID0gTUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjEwMDk6XHRcdFx0XHRcdCAgICAgICBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLmlwc2VjX29mZmxvYWQpO1xuMTAxMDpcdFxuMTAxMTpcdFx0TUxYNV9TRVQocXVlcnlfaGNhX2NhcF9pbiwgaW4sIG9wX21vZCxcbjEwMTI6XHRcdFx0IE1MWDVfR0VUX0hDQV9DQVBfT1BfTU9EX0dFTkVSQUxfREVWSUNFXzIgfCBIQ0FfQ0FQX09QTU9EX0dFVF9DVVIpO1xuMTAxMzpcdFxuMTAxNDpcdFx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XG4xMDE1Olx0XHRpZiAocmV0KSB7XG4xMDE2Olx0XHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7RmFpbGVkIHRvIHF1ZXJ5IGRldmljZSBjYXBzIDJcXG5cJiMzNDspO1xuMTAxNzpcdFx0XHRnb3RvIG91dDtcbjEwMTg6XHRcdH1cbjEwMTk6XHRcbjEwMjA6XHRcdGNhcHMtXHUwMDNlZnVsbF9kd19qdW1ib19zdXBwb3J0ID1cbjEwMjE6XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjEwMjI6XHRcdFx0XHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcF8yLmZvcm1hdF9zZWxlY3RfZHdfOF82X2V4dCk7XG4xMDIzOlx0XG4xMDI0Olx0XHRjYXBzLVx1MDAzZWZvcm1hdF9zZWxlY3RfZ3RwdV9kd18wID1cbjEwMjU6XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjEwMjY6XHRcdFx0XHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcF8yLmZvcm1hdF9zZWxlY3RfZHdfZ3RwdV9kd18wKTtcbjEwMjc6XHRcbjEwMjg6XHRcdGNhcHMtXHUwMDNlZm9ybWF0X3NlbGVjdF9ndHB1X2R3XzEgPVxuMTAyOTpcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTAzMDpcdFx0XHRcdCBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwXzIuZm9ybWF0X3NlbGVjdF9kd19ndHB1X2R3XzEpO1xuMTAzMTpcdFxuMTAzMjpcdFx0Y2Fwcy1cdTAwM2Vmb3JtYXRfc2VsZWN0X2d0cHVfZHdfMiA9XG4xMDMzOlx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMDM0Olx0XHRcdFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXBfMi5mb3JtYXRfc2VsZWN0X2R3X2d0cHVfZHdfMik7XG4xMDM1Olx0XG4xMDM2Olx0XHRjYXBzLVx1MDAzZWZvcm1hdF9zZWxlY3RfZ3RwdV9leHRfZHdfMCA9XG4xMDM3Olx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYxMQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydC4KCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiAtIE5leHQgU3RlcHMqKgoKQWxyaWdodCwgSSYjMzk7dmUgZ290IHRoZSBpbml0aWFsIHN0cnVjdHVyZSBvZiB0aGUgZnVuY3Rpb24gaW4gbXkgaGVhZC4gSSYjMzk7dmUgY29uc2lkZXJlZCBpdHMgYmFzaWMgaW5wdXRzIGFuZCBvdXRwdXRzLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgbG9naWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBmdW5jdGlvbiBwcm9jZXNzZXMgZGF0YS4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyB1bmZvbGRzLi4uIExldCYjMzk7cyByZWFkIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDM4Olx0XHRcdFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXBfMi5mb3JtYXRfc2VsZWN0X2R3X2d0cHVfZmlyc3RfZXh0X2R3XzApO1xuMTAzOTpcdFxuMTA0MDpcdFx0Y2Fwcy1cdTAwM2VzdXBwX3R5cGVfZ2VuX3dxZSA9XG4xMDQxOlx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMDQyOlx0XHRcdFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXBfMi5nZW5lcmF0ZV93cWVfdHlwZSk7XG4xMDQzOlx0XG4xMDQ0Olx0XHRjYXBzLVx1MDAzZWZsb3dfdGFibGVfaGFzaF90eXBlID1cbjEwNDU6XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjEwNDY6XHRcdFx0XHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcF8yLmZsb3dfdGFibGVfaGFzaF90eXBlKTtcbjEwNDc6XHRcbjEwNDg6XHRcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcF9tb2QsXG4xMDQ5Olx0XHRcdCBNTFg1X0dFVF9IQ0FfQ0FQX09QX01PRF9OSUNfRkxPV19UQUJMRSB8IEhDQV9DQVBfT1BNT0RfR0VUX0NVUik7XG4xMDUwOlx0XG4xMDUxOlx0XHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dF9zaXplKTtcbjEwNTI6XHRcdGlmIChyZXQpIHtcbjEwNTM6XHRcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtGYWlsZWQgdG8gcXVlcnkgZmxvdyB0YWJsZSBjYXBzXFxuXCYjMzQ7KTtcbjEwNTQ6XHRcdFx0Z290byBvdXQ7XG4xMDU1Olx0XHR9XG4xMDU2Olx0XG4xMDU3Olx0XHRjYXBzLVx1MDAzZW5pY19mdC5tYXhfbGV2ZWwgPVxuMTA1ODpcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTA1OTpcdFx0XHRcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUubWF4X2Z0X2xldmVsKTtcbjEwNjA6XHRcbjEwNjE6XHRcdGNhcHMtXHUwMDNlbmljX2Z0LnJlcGFyc2UgPVxuMTA2MjpcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTA2MzpcdFx0XHRcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUucmVwYXJzZSk7XG4xMDY0Olx0XG4xMDY1Olx0XHRjYXBzLVx1MDAzZW5pY19mdC5pZ25vcmVfZmxvd19sZXZlbF9ydGNfdmFsaWQgPVxuMTA2NjpcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTA2NzpcdFx0XHRcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUuaWdub3JlX2Zsb3dfbGV2ZWxfcnRjX3ZhbGlkKTtcbjEwNjg6XHRcbjEwNjk6XHRcdGNhcHMtXHUwMDNlZmxleF9wYXJzZXJfb2tfYml0c19zdXBwID1cbjEwNzA6XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjEwNzE6XHRcdFx0XHQgY2FwYWJpbGl0eS5mbG93X3RhYmxlX25pY19jYXAuZmxvd190YWJsZV9wcm9wZXJ0aWVzX25pY19yZWNlaXZlLmZ0X2ZpZWxkX3N1cHBvcnQuZ2VuZXZlX3Rsdl9vcHRpb25fMF9leGlzdCk7XG4xMDcyOlx0XG4xMDczOlx0XHRpZiAoY2Fwcy1cdTAwM2V3cWVfYmFzZWRfdXBkYXRlKSB7XG4xMDc0Olx0XHRcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcF9tb2QsXG4xMDc1Olx0XHRcdFx0IE1MWDVfR0VUX0hDQV9DQVBfT1BfTU9EX1dRRV9CQVNFRF9GTE9XX1RBQkxFIHwgSENBX0NBUF9PUE1PRF9HRVRfQ1VSKTtcbjEwNzY6XHRcbjEwNzc6XHRcdFx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XG4xMDc4Olx0XHRcdGlmIChyZXQpIHtcbjEwNzk6XHRcdFx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O0ZhaWxlZCB0byBxdWVyeSBXUUUgYmFzZWQgRlQgY2Fwc1xcblwmIzM0Oyk7XG4xMDgwOlx0XHRcdFx0Z290byBvdXQ7XG4xMDgxOlx0XHRcdH1cbjEwODI6XHRcbjEwODM6XHRcdFx0Y2Fwcy1cdTAwM2VydGNfcmVwYXJzZV9tb2RlID1cbjEwODQ6XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTA4NTpcdFx0XHRcdFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnJ0Y19yZXBhcnNlX21vZGUpO1xuMTA4NjpcdFxuMTA4NzpcdFx0XHRjYXBzLVx1MDAzZXN0ZV9mb3JtYXQgPVxuMTA4ODpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMDg5Olx0XHRcdFx0XHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAuc3RlX2Zvcm1hdCk7XG4xMDkwOlx0XG4xMDkxOlx0XHRcdGNhcHMtXHUwMDNlcnRjX2luZGV4X21vZGUgPVxuMTA5MjpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMDkzOlx0XHRcdFx0XHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAucnRjX2luZGV4X21vZGUpO1xuMTA5NDpcdFxuMTA5NTpcdFx0XHRjYXBzLVx1MDAzZXJ0Y19sb2dfZGVwdGhfbWF4ID1cbjEwOTY6XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTA5NzpcdFx0XHRcdFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnJ0Y19sb2dfZGVwdGhfbWF4KTtcbjEwOTg6XHRcbjEwOTk6XHRcdFx0Y2Fwcy1cdTAwM2VzdGVfYWxsb2NfbG9nX21heCA9XG4xMTAwOlx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExMDE6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC5zdGVfYWxsb2NfbG9nX21heCk7XG4xMTAyOlx0XG4xMTAzOlx0XHRcdGNhcHMtXHUwMDNlc3RlX2FsbG9jX2xvZ19ncmFuID1cbjExMDQ6XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTEwNTpcdFx0XHRcdFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnN0ZV9hbGxvY19sb2dfZ3JhbnVsYXJpdHkpO1xuMTEwNjpcdFxuMTEwNzpcdFx0XHRjYXBzLVx1MDAzZXRyaXZpYWxfbWF0Y2hfZGVmaW5lciA9XG4xMTA4Olx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExMDk6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC50cml2aWFsX21hdGNoX2RlZmluZXIpO1xuMTExMDpcdFxuMTExMTpcdFx0XHRjYXBzLVx1MDAzZXN0Y19hbGxvY19sb2dfbWF4ID1cbjExMTI6XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTExMzpcdFx0XHRcdFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnN0Y19hbGxvY19sb2dfbWF4KTtcbjExMTQ6XHRcbjExMTU6XHRcdFx0Y2Fwcy1cdTAwM2VzdGNfYWxsb2NfbG9nX2dyYW4gPVxuMTExNjpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMTE3Olx0XHRcdFx0XHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAuc3RjX2FsbG9jX2xvZ19ncmFudWxhcml0eSk7XG4xMTE4Olx0XG4xMTE5Olx0XHRcdGNhcHMtXHUwMDNlcnRjX2hhc2hfc3BsaXRfdGFibGUgPVxuMTEyMDpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMTIxOlx0XHRcdFx0XHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAucnRjX2hhc2hfc3BsaXRfdGFibGUpO1xuMTEyMjpcdFxuMTEyMzpcdFx0XHRjYXBzLVx1MDAzZXJ0Y19saW5lYXJfbG9va3VwX3RhYmxlID1cbjExMjQ6XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTEyNTpcdFx0XHRcdFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnJ0Y19saW5lYXJfbG9va3VwX3RhYmxlKTtcbjExMjY6XHRcbjExMjc6XHRcdFx0Y2Fwcy1cdTAwM2VhY2Nlc3NfaW5kZXhfbW9kZSA9XG4xMTI4Olx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExMjk6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC5hY2Nlc3NfaW5kZXhfbW9kZSk7XG4xMTMwOlx0XG4xMTMxOlx0XHRcdGNhcHMtXHUwMDNlbGluZWFyX21hdGNoX2RlZmluZXIgPVxuMTEzMjpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMTMzOlx0XHRcdFx0XHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAubGluZWFyX21hdGNoX2RlZmluZXJfcmVnX2MzKTtcbjExMzQ6XHRcbjExMzU6XHRcdFx0Y2Fwcy1cdTAwM2VydGNfbWF4X2hhc2hfZGVmX2dlbl93cWUgPVxuMTEzNjpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMTM3Olx0XHRcdFx0XHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAucnRjX21heF9udW1faGFzaF9kZWZpbmVyX2dlbl93cWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzU0CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24mIzM5O3MgQ29udGV4dCoqCgpSaWdodCwgc28gSSYjMzk7dmUganVzdCBiZWVuIHByb21wdGVkIHRvIGFzc2VzcyBzb21lIGNvZGUgb3IgYSBkZXNjcmlwdGlvbiBvZiBhIGZ1bmN0aW9uLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMsICpJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiouIEkmIzM5O20gbm90IGdvaW5nIHRvIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zIGJhc2VkIG9uIGp1c3QgYSBzbmlwcGV0LiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBpbm5lciB3b3JraW5ncyBpcyB0byBzZWUgdGhlIHdob2xlIHRoaW5nLCBvciBhdCBsZWFzdCBhIHNpZ25pZmljYW50IHBvcnRpb24gb2YgaXQuIEkgd2FudCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBlbnRyeSBwb2ludHMsIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzICYjMzQ7TGV0JiMzOTtzIHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uJiMzNDsgaXMgY3J1Y2lhbDsgSSB1bmRlcnN0YW5kIHRoZSBpbXBvcnRhbmNlIG9mIGNvbXBsZXRlIGNvbnRleHQgdG8gbWFrZSBhIHNvdW5kIGV2YWx1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMzg6XHRcbjExMzk6XHRcdFx0Y2Fwcy1cdTAwM2VzdXBwX3N0ZV9mb3JtYXRfZ2VuX3dxZSA9XG4xMTQwOlx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExNDE6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC5zdGVfZm9ybWF0X2dlbl93cWUpO1xuMTE0MjpcdFxuMTE0MzpcdFx0XHRjYXBzLVx1MDAzZWZkYl90aXJfc3RjID1cbjExNDQ6XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTE0NTpcdFx0XHRcdFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLmZkYl9qdW1wX3RvX3Rpcl9zdGMpO1xuMTE0NjpcdFx0fVxuMTE0NzpcdFxuMTE0ODpcdFx0aWYgKGNhcHMtXHUwMDNlZXN3aXRjaF9tYW5hZ2VyKSB7XG4xMTQ5Olx0XHRcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcF9tb2QsXG4xMTUwOlx0XHRcdFx0IE1MWDVfR0VUX0hDQV9DQVBfT1BfTU9EX0VTV19GTE9XX1RBQkxFIHwgSENBX0NBUF9PUE1PRF9HRVRfQ1VSKTtcbjExNTE6XHRcbjExNTI6XHRcdFx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XG4xMTUzOlx0XHRcdGlmIChyZXQpIHtcbjExNTQ6XHRcdFx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O0ZhaWxlZCB0byBxdWVyeSBmbG93IHRhYmxlIGVzdyBjYXBzXFxuXCYjMzQ7KTtcbjExNTU6XHRcdFx0XHRnb3RvIG91dDtcbjExNTY6XHRcdFx0fVxuMTE1NzpcdFxuMTE1ODpcdFx0XHRjYXBzLVx1MDAzZWZkYl9mdC5tYXhfbGV2ZWwgPVxuMTE1OTpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMTYwOlx0XHRcdFx0XHQgY2FwYWJpbGl0eS5mbG93X3RhYmxlX25pY19jYXAuZmxvd190YWJsZV9wcm9wZXJ0aWVzX25pY19yZWNlaXZlLm1heF9mdF9sZXZlbCk7XG4xMTYxOlx0XG4xMTYyOlx0XHRcdGNhcHMtXHUwMDNlZmRiX2Z0LnJlcGFyc2UgPVxuMTE2MzpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMTY0Olx0XHRcdFx0XHQgY2FwYWJpbGl0eS5mbG93X3RhYmxlX25pY19jYXAuZmxvd190YWJsZV9wcm9wZXJ0aWVzX25pY19yZWNlaXZlLnJlcGFyc2UpO1xuMTE2NTpcdFxuMTE2NjpcdFx0XHRNTFg1X1NFVChxdWVyeV9oY2FfY2FwX2luLCBpbiwgb3BfbW9kLFxuMTE2NzpcdFx0XHRcdCBNTFg1X1NFVF9IQ0FfQ0FQX09QX01PRF9FU1cgfCBIQ0FfQ0FQX09QTU9EX0dFVF9DVVIpO1xuMTE2ODpcdFxuMTE2OTpcdFx0XHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dF9zaXplKTtcbjExNzA6XHRcdFx0aWYgKHJldCkge1xuMTE3MTpcdFx0XHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7RmFpbGVkIHRvIHF1ZXJ5IGVzd2l0Y2ggY2FwYWJpbGl0aWVzXFxuXCYjMzQ7KTtcbjExNzI6XHRcdFx0XHRnb3RvIG91dDtcbjExNzM6XHRcdFx0fVxuMTE3NDpcdFxuMTE3NTpcdFx0XHRpZiAoTUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExNzY6XHRcdFx0XHQgICAgIGNhcGFiaWxpdHkuZXN3X2NhcC5lc3dfbWFuYWdlcl92cG9ydF9udW1iZXJfdmFsaWQpKVxuMTE3NzpcdFx0XHRcdGNhcHMtXHUwMDNlZXN3aXRjaF9tYW5hZ2VyX3Zwb3J0X251bWJlciA9XG4xMTc4Olx0XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTE3OTpcdFx0XHRcdFx0XHQgY2FwYWJpbGl0eS5lc3dfY2FwLmVzd19tYW5hZ2VyX3Zwb3J0X251bWJlcik7XG4xMTgwOlx0XG4xMTgxOlx0XHRcdGNhcHMtXHUwMDNlbWVyZ2VkX2Vzd2l0Y2ggPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTE4MjpcdFx0XHRcdFx0XHRcdGNhcGFiaWxpdHkuZXN3X2NhcC5tZXJnZWRfZXN3aXRjaCk7XG4xMTgzOlx0XHR9XG4xMTg0Olx0XG4xMTg1Olx0XHRzbnByaW50ZihjYXBzLVx1MDAzZWZ3X3Zlciwgc2l6ZW9mKGNhcHMtXHUwMDNlZndfdmVyKSwgXCYjMzQ7JWQuJWQuJWRcJiMzNDssXG4xMTg2Olx0XHRcdCBmd19yZXZfbWFqKG1kZXYpLCBmd19yZXZfbWluKG1kZXYpLCBmd19yZXZfc3ViKG1kZXYpKTtcbjExODc6XHRcbjExODg6XHRcdGNhcHMtXHUwMDNlaXNfZWNwZiA9IG1seDVfY29yZV9pc19lY3BmX2Vzd19tYW5hZ2VyKG1kZXYpO1xuMTE4OTpcdFxuMTE5MDpcdG91dDpcbjExOTE6XHRcdGtmcmVlKG91dCk7XG4xMTkyOlx0XHRyZXR1cm4gcmV0O1xuMTE5MzpcdH1cbjExOTQ6XHRcbjExOTU6XHRpbnQgbWx4NWh3c19jbWRfcXVlcnlfZ3ZtaShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgYm9vbCBvdGhlcl9mdW5jdGlvbixcbjExOTY6XHRcdFx0XHQgICB1MTYgdnBvcnRfbnVtYmVyLCB1MTYgKmd2bWkpXG4xMTk3Olx0e1xuMTE5ODpcdFx0aW50IGVycjtcbjExOTk6XHRcbjEyMDA6XHRcdGlmICghb3RoZXJfZnVuY3Rpb24pIHtcbjEyMDE6XHRcdFx0Lyogc2VsZiB2aGNhX2lkICovXG4xMjAyOlx0XHRcdCpndm1pID0gTUxYNV9DQVBfR0VOKG1kZXYsIHZoY2FfaWQpO1xuMTIwMzpcdFx0XHRyZXR1cm4gMDtcbjEyMDQ6XHRcdH1cbjEyMDU6XHRcbjEyMDY6XHRcdGVyciA9IG1seDVfdnBvcnRfZ2V0X3ZoY2FfaWQobWRldiwgdnBvcnRfbnVtYmVyLCBndm1pKTtcbjEyMDc6XHRcdGlmIChlcnIpIHtcbjEyMDg6XHRcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtGYWlsZWQgdG8gZ2V0IHZwb3J0IHZoY2EgaWQgZm9yIHZwb3J0ICVkXFxuXCYjMzQ7LFxuMTIwOTpcdFx0XHRcdCAgICAgIHZwb3J0X251bWJlcik7XG4xMjEwOlx0XHRcdHJldHVybiBlcnI7XG4xMjExOlx0XHR9XG4xMjEyOlx0XG4xMjEzOlx0XHRyZXR1cm4gMDtcbjEyMTQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzYyCgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogNzkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVjZW50IENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgb3ZlciB0aGlzIGRpZmYuIEZpcnN0LCB0aGUgcmVtb3ZhbCBvZiBgbWx4NV9jbWRfZXhlY2AgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCB3YXMgYSBkdXBsaWNhdGUgY2FsbCwgZXhlY3V0aW5nIHRoZSBzYW1lIGNvbW1hbmQgcmVkdW5kYW50bHksIGFzIEkgc3VzcGVjdGVkLiBJdCB3YXNuJiMzOTt0IHB1bGxpbmcgYW55IG91dHB1dCBmcm9tIHRoZSBjb21tYW5kLCBzbyBpdCB3YXMgY2xlYXJseSBhbiBvdmVyc2lnaHQuIFRoYXQmIzM5O3MgYSBjbGVhbi11cCwgbm90aGluZyBjb21wbGV4IHRoZXJlLgoKTm93LCB0aGUgY2hhbmdlcyBpbiBgc2VuZC5jYCBhcmUgbW9yZSBpbnRlcmVzdGluZy4gQWRkaW5nIHRoZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBlbnVtL3N0YXR1cyBjb252ZXJzaW9ucyBpcyBhIGdvb2QgbW92ZTogYGh3c19ydWxlX3N0YXR1c190b19zdHJpbmdgLCBgaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZ2AsIGFuZCBgaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmdgLiBUaGlzIHdpbGwgZGVmaW5pdGVseSBpbXByb3ZlIGRlYnVnZ2luZyBhbmQgbG9nZ2luZywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aG9zZSBlcnJvciBkdW1wcyBpbiBgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlYC4gR2V0dGluZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiAoc3luZHJvbWUsIFFQTiwgV1FFX0NOVCkgbWFrZXMgYSBiaWcgZGlmZmVyZW5jZSBpbiBwaW5wb2ludGluZyBpc3N1ZXMsIGFuZCB1c2luZyBzdHJpbmdzIGluc3RlYWQgb2YganVzdCBjcnlwdGljIGludGVnZXIgdmFsdWVzIG1ha2VzIHRoZSBvdXRwdXQgbXVjaCBtb3JlIHJlYWRhYmxlLiBHb29kIHN0dWZmLgoKVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIG9yZGVyIGNoYW5nZSBpbiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YC4gU3dhcHBpbmcgdGhlIGluY3JlbWVudCBvZiBgY3R4LSZndDtxdWV1ZXNgIHdpdGggdGhlIGFsbG9jYXRpb24gb2YgYGN0eC0mZ3Q7YndjX2xvY2tfY2xhc3Nfa2V5c2AgaW1tZWRpYXRlbHkgcmFpc2VkIGEgZmxhZyBmb3IgbWUuIEl0JiMzOTtzIGEgY2xhc3NpYyBlcnJvci1oYW5kbGluZyBpbXByb3ZlbWVudC4gSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBjbGVhbnVwIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gSW5jcmVtZW50aW5nIHRoZSBgY3R4LSZndDtxdWV1ZXNgIGJlZm9yZSBhbGxvY2F0aW9uIGNvdWxkIG1lYW4gYW4gZXJyb3IgbGVhdmVzIHRoZSBgY3R4LSZndDtxdWV1ZXNgIGluY3JlbWVudGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQgbWUgcmV2aWV3IHRoZSBjb2RlIGFuZCB0aGUgZXJyb3IgcGF0aHMgbW9yZSBjbG9zZWx5IHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uIEkmIzM5O20gZm9jdXNpbmcgb24gYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgYW5kIGl0cyBhc3NvY2lhdGVkIGVycm9yIGhhbmRsaW5nIGZvciBjbGVhbnVwLCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIG1lbW9yeSBsZWFrcyBvciBpbmNvcnJlY3QgY291bnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtod3NfYndjX3NlbmRfcXVldWVzX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYz0xMTA4PXZvaWQgbWx4NWh3c19zZW5kX3F1ZXVlc19jbG9zZShzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTExNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjExMTU6c3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTExNi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM9MTE1MD1pbnQgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTYwLVx0Lyogb3BlbiBhIHNlcGFyYXRlIHNldCBvZiBxdWV1ZXMgYW5kIGxvY2tzIGZvciBid2MgQVBJICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYzoxMTYxOlx0ZXJyID0gaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KGN0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTYyLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5OTIKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZSBpcyBkb2luZy4gSXQmIzM5O3Mgb2J2aW91c2x5IHNldHRpbmcgdXAgc2VuZCBxdWV1ZXMsIGJ1dCB0aGUgJiMzNDtid2MmIzM0OyBwYXJ0IG1ha2VzIG1lIHRoaW5rIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gYmFuZHdpZHRoIGNvbnRyb2wgb3Igc29tZSBraW5kIG9mIGZsb3cgbWFuYWdlbWVudC4gVGhhdCYjMzk7cyBteSBpbml0aWFsIGh1bmNoLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsIGFyZWFzIHRvIGxvb2sgZm9yOiBsb2NrIGNvbnRlbnRpb24sIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgZm9yIHRoZSBxdWV1ZXMgdGhlbXNlbHZlcywgYW5kIGhvdyB0aGlzIGluaXRpYWxpemF0aW9uIGludGVyYWN0cyB3aXRoIGludGVycnVwdCBoYW5kbGluZywgaWYgYXQgYWxsLiBJdCYjMzk7cyBhbHNvIGltcG9ydGFudCB0byBjb25zaWRlciB0aGUgY29udGV4dDsgd2hlcmUgaXMgdGhpcyBjb2RlIHNpdHVhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0/IElzIGl0IHBhcnQgb2YgdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyLCBhIHNwZWNpZmljIG5ldHdvcmsgc3RhY2ssIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgZG9jdW1lbnRhdGlvbiBzaG91bGQgaGVscCBtZSBhbnN3ZXIgdGhpcy4gSeKAmWxsIG1ha2Ugc3VyZSB0byBub3RlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCBoZXJlLiBPa2F5LCBsZXTigJlzIHJlYWQgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMTU6XHRzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4xMTE2Olx0e1xuMTExNzpcdFx0LyogTnVtYmVyIG9mIEJXQyBxdWV1ZXMgaXMgZXF1YWwgdG8gbnVtYmVyIG9mIHRoZSB1c3VhbCBIV1MgcXVldWVzICovXG4xMTE4Olx0XHRpbnQgYndjX3F1ZXVlcyA9IGN0eC1cdTAwM2VxdWV1ZXMgLSAxO1xuMTExOTpcdFx0aW50IGk7XG4xMTIwOlx0XG4xMTIxOlx0XHRpZiAoIW1seDVod3NfY29udGV4dF9id2Nfc3VwcG9ydGVkKGN0eCkpXG4xMTIyOlx0XHRcdHJldHVybiAwO1xuMTEyMzpcdFxuMTEyNDpcdFx0Y3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzID0ga3phbGxvY19vYmpzKCpjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MsXG4xMTI1Olx0XHRcdFx0XHRcdFx0IGJ3Y19xdWV1ZXMpO1xuMTEyNjpcdFxuMTEyNzpcdFx0aWYgKCFjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MpXG4xMTI4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTEyOTpcdFxuMTEzMDpcdFx0Y3R4LVx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMgPSBremFsbG9jX29ianMoKmN0eC1cdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzLFxuMTEzMTpcdFx0XHRcdFx0XHRcdGJ3Y19xdWV1ZXMpO1xuMTEzMjpcdFx0aWYgKCFjdHgtXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cylcbjExMzM6XHRcdFx0Z290byBlcnJfbG9ja19jbGFzc19rZXlzO1xuMTEzNDpcdFxuMTEzNTpcdFx0Y3R4LVx1MDAzZXF1ZXVlcyAmIzQzOz0gYndjX3F1ZXVlcztcbjExMzY6XHRcbjExMzc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJ3Y19xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4xMTM4Olx0XHRcdG11dGV4X2luaXQoXHUwMDI2Y3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzW2ldKTtcbjExMzk6XHRcdFx0bG9ja2RlcF9yZWdpc3Rlcl9rZXkoY3R4LVx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMgJiM0MzsgaSk7XG4xMTQwOlx0XHRcdGxvY2tkZXBfc2V0X2NsYXNzKGN0eC1cdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2NrcyAmIzQzOyBpLCBjdHgtXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyAmIzQzOyBpKTtcbjExNDE6XHRcdH1cbjExNDI6XHRcbjExNDM6XHRcdHJldHVybiAwO1xuMTE0NDpcdFxuMTE0NTpcdGVycl9sb2NrX2NsYXNzX2tleXM6XG4xMTQ2Olx0XHRrZnJlZShjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MpO1xuMTE0NzpcdFx0cmV0dXJuIC1FTk9NRU07XG4xMTQ4Olx0fVxuMTE0OTpcdFxuMTE1MDpcdGludCBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuMTE1MTpcdFx0XHRcdCAgICAgdTE2IHF1ZXVlcyxcbjExNTI6XHRcdFx0XHQgICAgIHUxNiBxdWV1ZV9zaXplKVxuMTE1MzpcdHtcbjExNTQ6XHRcdGludCBlcnIgPSAwO1xuMTE1NTpcdFx0aW50IGkgPSAwO1xuMTE1NjpcdFxuMTE1NzpcdFx0LyogT3BlbiBvbmUgZXh0cmEgcXVldWUgZm9yIGNvbnRyb2wgcGF0aCAqL1xuMTE1ODpcdFx0Y3R4LVx1MDAzZXF1ZXVlcyA9IHF1ZXVlcyAmIzQzOyAxO1xuMTE1OTpcdFxuMTE2MDpcdFx0Lyogb3BlbiBhIHNlcGFyYXRlIHNldCBvZiBxdWV1ZXMgYW5kIGxvY2tzIGZvciBid2MgQVBJICovXG4xMTYxOlx0XHRlcnIgPSBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoY3R4KTtcbjExNjI6XHRcdGlmIChlcnIpXG4xMTYzOlx0XHRcdHJldHVybiBlcnI7XG4xMTY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDQzCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFF1ZXVlIE1hbmFnZW1lbnQgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZyYjMzk7cyBpbW1lZGlhdGVseSBqdW1waW5nIG91dCBhdCBtZS4gSXQgc2VlbXMgbGlrZSBgY3R4LSZndDtxdWV1ZXNgIGdldHMgaW5jcmVtZW50ZWQgKmJlZm9yZSogdGhlIGNhbGxzIHRvIGBremFsbG9jX29ianNgLiBUaGUgcG90ZW50aWFsIHByb2JsZW0gaGVyZSBpcyB0aGlzOiBpZiB0aG9zZSBga3phbGxvY19vYmpzYCBjYWxscyBmYWlsLCBgY3R4LSZndDtxdWV1ZXNgIGlzIHN0aWxsIGluY3JlbWVudGVkLCB3aGljaCBmZWVscyBsaWtlIGl0IGNvdWxkIGxlYWQgdG8gdHJvdWJsZSBkb3duIHRoZSBsaW5lLCBwb3RlbnRpYWxseSB3aGVuIGBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlYCBpcyBjYWxsZWQsIG9yIG1heWJlIHNvbWV3aGVyZSBlbHNlIGluIHRoZSBjb2RlIGJhc2UuIEEgZGFuZ2xpbmcgcG9pbnRlciwgcGVyaGFwcz8gT3IgaW5jb3JyZWN0IHF1ZXVlIGFjY291bnRpbmc/CgpXYWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgbm93LCBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCByZXR1cm5zIGBlcnJgIGlmIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGZhaWxzLiBUaGF0JiMzOTtzIGEgZ29vZCBmYWlsLXNhZmUsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBpbXBsaWNhdGlvbnMgb2YgdGhhdCBlcnJvciBwYXRoLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBoYW5kbGVzIGVycm9ycyBpbiB0aGlzIGNvbnRleHQuIExldCYjMzk7cyBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCB3aGVuIHRoYXQgaGFwcGVucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1MDpcdGludCBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuMTE1MTpcdFx0XHRcdCAgICAgdTE2IHF1ZXVlcyxcbjExNTI6XHRcdFx0XHQgICAgIHUxNiBxdWV1ZV9zaXplKVxuMTE1MzpcdHtcbjExNTQ6XHRcdGludCBlcnIgPSAwO1xuMTE1NTpcdFx0aW50IGkgPSAwO1xuMTE1NjpcdFxuMTE1NzpcdFx0LyogT3BlbiBvbmUgZXh0cmEgcXVldWUgZm9yIGNvbnRyb2wgcGF0aCAqL1xuMTE1ODpcdFx0Y3R4LVx1MDAzZXF1ZXVlcyA9IHF1ZXVlcyAmIzQzOyAxO1xuMTE1OTpcdFxuMTE2MDpcdFx0Lyogb3BlbiBhIHNlcGFyYXRlIHNldCBvZiBxdWV1ZXMgYW5kIGxvY2tzIGZvciBid2MgQVBJICovXG4xMTYxOlx0XHRlcnIgPSBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoY3R4KTtcbjExNjI6XHRcdGlmIChlcnIpXG4xMTYzOlx0XHRcdHJldHVybiBlcnI7XG4xMTY0Olx0XG4xMTY1Olx0XHRjdHgtXHUwMDNlc2VuZF9xdWV1ZSA9IGt6YWxsb2Nfb2JqcygqY3R4LVx1MDAzZXNlbmRfcXVldWUsIGN0eC1cdTAwM2VxdWV1ZXMpO1xuMTE2NjpcdFx0aWYgKCFjdHgtXHUwMDNlc2VuZF9xdWV1ZSkge1xuMTE2NzpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMTE2ODpcdFx0XHRnb3RvIGZyZWVfYndjX2xvY2tzO1xuMTE2OTpcdFx0fVxuMTE3MDpcdFxuMTE3MTpcdFx0LyogSWYgbmF0aXZlIEFQSSBpc24mIzM5O3Qgc3VwcG9ydGVkLCBza2lwIHRoZSB1bnVzZWQgbmF0aXZlIHF1ZXVlczpcbjExNzI6XHRcdCAqIGluaXRpYWxpemUgQldDIHF1ZXVlcyBhbmQgY29udHJvbCBxdWV1ZSBvbmx5LlxuMTE3MzpcdFx0ICovXG4xMTc0Olx0XHRpZiAoIW1seDVod3NfY29udGV4dF9uYXRpdmVfc3VwcG9ydGVkKGN0eCkpXG4xMTc1Olx0XHRcdGkgPSBtbHg1aHdzX2J3Y19nZXRfcXVldWVfaWQoY3R4LCAwKTtcbjExNzY6XHRcbjExNzc6XHRcdGZvciAoOyBpIFx1MDAzYyBjdHgtXHUwMDNlcXVldWVzOyBpJiM0MzsmIzQzOykge1xuMTE3ODpcdFx0XHRlcnIgPSBtbHg1aHdzX3NlbmRfcXVldWVfb3BlbihjdHgsIFx1MDAyNmN0eC1cdTAwM2VzZW5kX3F1ZXVlW2ldLCBxdWV1ZV9zaXplKTtcbjExNzk6XHRcdFx0aWYgKGVycilcbjExODA6XHRcdFx0XHRnb3RvIGNsb3NlX3NlbmRfcXVldWVzO1xuMTE4MTpcdFx0fVxuMTE4MjpcdFxuMTE4MzpcdFx0cmV0dXJuIDA7XG4xMTg0Olx0XG4xMTg1Olx0Y2xvc2Vfc2VuZF9xdWV1ZXM6XG4xMTg2Olx0XHQgX19od3Nfc2VuZF9xdWV1ZXNfY2xvc2UoY3R4LCBpKTtcbjExODc6XHRcbjExODg6XHRcdGtmcmVlKGN0eC1cdTAwM2VzZW5kX3F1ZXVlKTtcbjExODk6XHRcbjExOTA6XHRmcmVlX2J3Y19sb2NrczpcbjExOTE6XHRcdGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveShjdHgpO1xuMTE5MjpcdFxuMTE5MzpcdFx0cmV0dXJuIGVycjtcbjExOTQ6XHR9XG4xMTk1Olx0XG4xMTk2Olx0aW50IG1seDVod3Nfc2VuZF9xdWV1ZV9hY3Rpb24oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuMTE5NzpcdFx0XHRcdCAgICAgIHUxNiBxdWV1ZV9pZCxcbjExOTg6XHRcdFx0XHQgICAgICB1MzIgYWN0aW9ucylcbjExOTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjA5CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgUmVzb3VyY2UgTGVha3MqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBhIHNwZWNpZmljIHNjZW5hcmlvIGNhdWdodCBteSBleWUuIElmIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGVycm9ycyBvdXQsIGl0IGp1c3QgcGFzc2VzIHRoYXQgYGVycmAgdmFsdWUgc3RyYWlnaHQgdXAgdG8gYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAsIGFuZCB0aGVuIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIHJldHVybnMuIEJ1dCBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCB3aGF0IGhhcHBlbnMgdG8gYGN0eC0mZ3Q7cXVldWVzYCBpbiB0aGUgbWVhbnRpbWUuIEl0IHNlZW1zIGxpa2UgYGN0eC0mZ3Q7cXVldWVzYCBtaWdodCBnZXQgbW9kaWZpZWQgKmJlZm9yZSogdGhlIGVycm9yLCBidXQgdGhlIGNsZWFudXAgbWlnaHQgYmUgaW5jb21wbGV0ZSBpZiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBmYWlscyByaWdodCBhZnRlci4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBjbGVhbnMgdXAgYGN0eGAgd2hlbiBpdCBlcnJvcnMgb3V0LCBiZWNhdXNlIGlmIGl0IGRvZXNuJiMzOTt0LCB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgb24gb3VyIGhhbmRzLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIG9mIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBldmVyeXdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcCwgSSBzdXBwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbHg1aHdzX3NlbmRfcXVldWVzX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYz0xMzQ9c3RhdGljIGludCBod3NfY29udGV4dF9pbml0X2h3cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMTU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM6MTU3Olx0cmV0ID0gbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuKGN0eCwgYXR0ci1cdTAwM2VxdWV1ZXMsIGF0dHItXHUwMDNlcXVldWVfc2l6ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0xNTgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jPTExMTU9c3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYzoxMTUwOmludCBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTE1MS1cdFx0XHQgICAgIHUxNiBxdWV1ZXMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmg9MTkzPXZvaWQgbWx4NWh3c19zZW5kX3F1ZXVlc19jbG9zZShzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmgtMTk0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmg6MTk1OmludCBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmgtMTk2LVx0XHRcdCAgICAgdTE2IHF1ZXVlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNzgKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkNvbnRleHQgSW5pdGlhbGl6YXRpb24gRGl2aW5nIERlZXAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGNvbnRleHQuY2AgZmlsZSBhZ2Fpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBoYXJkd2FyZSBjb250ZXh0IGlzIGluaXRpYWxpemVkLCBhbmQgdGhhdCBzdGFydHMgd2l0aCB1bmRlcnN0YW5kaW5nIGBod3NfY29udGV4dF9pbml0X2h3c2AuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGhlcmUsIGtub3dpbmcgaG93IHRoaXMgc3lzdGVtIGlzIGFyY2hpdGVjdGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgc2V0dXAuIEkgZXhwZWN0IHRoZXJlIHdpbGwgYmUgcGxlbnR5IG9mIHBvaW50ZXIgbWFuaXB1bGF0aW9uIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRvIGNvbnNpZGVyIGluIHRoaXMgc2VjdGlvbiwgdG9vLCBzbyBJJiMzOTtsbCBiZSBrZWVwaW5nIGEga2VlbiBleWUgb3V0IGZvciB0aG9zZSB0aGluZ3MuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcm5lcnN0b25lLCBzbyB1bmRlcnN0YW5kaW5nIGl0IGlzIGdvaW5nIHRvIGJlIGtleSB0byBkZWJ1Z2dpbmcgYW55IGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHJlZ2lzdGVyIGFzc2lnbm1lbnRzLCBhbnkgbWVtb3J5IG1hcHBpbmcsIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZC4gTm93LCBsZXQmIzM5O3Mgb3BlbiB0aGF0IGZpbGUgYW5kIGdldCBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzQ6XHRzdGF0aWMgaW50IGh3c19jb250ZXh0X2luaXRfaHdzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcbiAxMzU6XHRcdFx0XHRcdHN0cnVjdCBtbHg1aHdzX2NvbnRleHRfYXR0ciAqYXR0cilcbiAxMzY6XHR7XG4gMTM3Olx0XHRpbnQgcmV0O1xuIDEzODpcdFxuIDEzOTpcdFx0aHdzX2NvbnRleHRfY2hlY2tfaHdzX3N1cHAoY3R4KTtcbiAxNDA6XHRcbiAxNDE6XHRcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgTUxYNUhXU19DT05URVhUX0ZMQUdfSFdTX1NVUFBPUlQpKVxuIDE0MjpcdFx0XHRyZXR1cm4gMDtcbiAxNDM6XHRcbiAxNDQ6XHRcdHJldCA9IGh3c19jb250ZXh0X2luaXRfcGQoY3R4KTtcbiAxNDU6XHRcdGlmIChyZXQpXG4gMTQ2Olx0XHRcdHJldHVybiByZXQ7XG4gMTQ3Olx0XG4gMTQ4Olx0XHRyZXQgPSBod3NfY29udGV4dF9wb29sc19pbml0KGN0eCk7XG4gMTQ5Olx0XHRpZiAocmV0KVxuIDE1MDpcdFx0XHRnb3RvIHVuaW5pdF9wZDtcbiAxNTE6XHRcbiAxNTI6XHRcdC8qIENvbnRleHQgaGFzIHN1cHBvcnQgZm9yIGJhY2t3YXJkIGNvbXBhdGlibGUgQVBJLFxuIDE1MzpcdFx0ICogYW5kIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgbmF0aXZlIEhXUyBBUEkuXG4gMTU0Olx0XHQgKi9cbiAxNTU6XHRcdGN0eC1cdTAwM2VmbGFncyB8PSBNTFg1SFdTX0NPTlRFWFRfRkxBR19CV0NfU1VQUE9SVDtcbiAxNTY6XHRcbiAxNTc6XHRcdHJldCA9IG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbihjdHgsIGF0dHItXHUwMDNlcXVldWVzLCBhdHRyLVx1MDAzZXF1ZXVlX3NpemUpO1xuIDE1ODpcdFx0aWYgKHJldClcbiAxNTk6XHRcdFx0Z290byBwb29sc191bmluaXQ7XG4gMTYwOlx0XG4gMTYxOlx0XHRyZXQgPSBtbHg1aHdzX2FjdGlvbl9zdGVfcG9vbF9pbml0KGN0eCk7XG4gMTYyOlx0XHRpZiAocmV0KVxuIDE2MzpcdFx0XHRnb3RvIGNsb3NlX3F1ZXVlcztcbiAxNjQ6XHRcbiAxNjU6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0eC1cdTAwM2V0YmxfbGlzdCk7XG4gMTY2Olx0XG4gMTY3Olx0XHRyZXR1cm4gMDtcbiAxNjg6XHRcbiAxNjk6XHRjbG9zZV9xdWV1ZXM6XG4gMTcwOlx0XHRtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlKGN0eCk7XG4gMTcxOlx0cG9vbHNfdW5pbml0OlxuIDE3MjpcdFx0aHdzX2NvbnRleHRfcG9vbHNfdW5pbml0KGN0eCk7XG4gMTczOlx0dW5pbml0X3BkOlxuIDE3NDpcdFx0aHdzX2NvbnRleHRfdW5pbml0X3BkKGN0eCk7XG4gMTc1Olx0XHRyZXR1cm4gcmV0O1xuIDE3NjpcdH1cbiAxNzc6XHRcbiAxNzg6XHRzdGF0aWMgdm9pZCBod3NfY29udGV4dF91bmluaXRfaHdzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiAxNzk6XHR7XG4gMTgwOlx0XHRpZiAoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IE1MWDVIV1NfQ09OVEVYVF9GTEFHX0hXU19TVVBQT1JUKSlcbiAxODE6XHRcdFx0cmV0dXJuO1xuIDE4MjpcdFxuIDE4MzpcdFx0bWx4NWh3c19hY3Rpb25fc3RlX3Bvb2xfdW5pbml0KGN0eCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTczCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgUmVzb3VyY2UgTGVha3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcmIzM5O3MgYnVnZ2luZyBtZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MsIHJpZ2h0PyBNeSB0aGlua2luZyBpcyB0aGlzOiBpZiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBmYWlscywgdGhlIGV4ZWN1dGlvbiBqdW1wcyB0byBgcG9vbHNfdW5pbml0YC4gVGhlIGlzc3VlIGlzLCBgcG9vbHNfdW5pbml0YCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgYSBjb3JyZXNwb25kaW5nIGNhbGwgdG8gYG1seDVod3Nfc2VuZF9xdWV1ZXNfY2xvc2VgLiBUaGF0IHJhaXNlcyBhIHJlZCBmbGFnOyB3ZSBjb3VsZCBiZSBsZWFraW5nIHJlc291cmNlcyBpZiB0aGF0IGBvcGVuYCBjYWxsIGZhaWxzIGJ1dCB0aGUgcmVzb3VyY2VzIGFyZW4mIzM5O3QgcHJvcGVybHkgY2xvc2VkLgoKQnV0IHdhaXQsIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gYG1seDVod3NfY29udGV4dF9vcGVuYCBhbHNvIGxvb2tzIHNpZ25pZmljYW50IGhlcmUuIEkgc2VlIHRoYXQgaXQgY2FsbHMgYGh3c19jb250ZXh0X2luaXRfaHdzYC4gSWYgYGh3c19jb250ZXh0X2luaXRfaHdzYCBmYWlscyAqZHVyaW5nKiB0aGF0IHByb2Nlc3MsIHRoZSBjb2RlIGRvZXMgcGVyZm9ybSBzb21lIGNsZWFudXAgYW5kIHJldHVybnMuIEludGVyZXN0aW5nbHksIHRoZSBjb250ZXh0IChgY3R4YCkgaXRzZWxmIGFwcGVhcnMgdG8gYmUgZnJlZWQgd2l0aGluIGBtbHg1aHdzX2NvbnRleHRfb3BlbmAgaWYgYW4gZXJyb3Igb2NjdXJzLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBJIHN0aWxsIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGUgcXVldWUgbWFuYWdlbWVudC4KClJpZ2h0LCBzbyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMsIEkgbmVlZCB0byBjaGVjayBgbWx4NWh3c19jb250ZXh0X29wZW5gJiMzOTtzIGxvZ2ljIG1vcmUgY2xvc2VseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uIHRvIGNvbmZpcm0gdGhlIGxlYWsgaXMgcG9zc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21seDVod3NfY29udGV4dF9vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9MTc4PXN0YXRpYyB2b2lkIGh3c19jb250ZXh0X3VuaW5pdF9od3Moc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjE4OTpzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICptbHg1aHdzX2NvbnRleHRfb3BlbihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE5MC1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbWx4NWh3c19jb250ZXh0X2F0dHIgKmF0dHIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYz0xMzA9c3RhdGljIGludCBtbHg1X2NtZF9od3NfY3JlYXRlX25zKHN0cnVjdCBtbHg1X2Zsb3dfcm9vdF9uYW1lc3BhY2UgKm5zKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmMtMTM5LVx0bnMtXHUwMDNlZnNfaHdzX2NvbnRleHQuaHdzX2N0eCA9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jOjE0MDpcdFx0bWx4NWh3c19jb250ZXh0X29wZW4obnMtXHUwMDNlZGV2LCBcdTAwMjZod3NfY3R4X2F0dHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYy0xNDEtXHRpZiAoIW5zLVx1MDAzZWZzX2h3c19jb250ZXh0Lmh3c19jdHgpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21seDVod3MuaD0yMzU9c3RhdGljIGlubGluZSBib29sIG1seDVod3NfaXNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWx4NWh3cy5oLTI0OS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWx4NWh3cy5oOjI1MDogKiBtbHg1aHdzX2NvbnRleHRfb3BlbiAtIE9wZW4gYSBjb250ZXh0IHVzZWQgZm9yIGRpcmVjdCBydWxlIGluc2VydGlvblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tbHg1aHdzLmgtMjUxLSAqIHVzaW5nIGhhcmR3YXJlIHN0ZWVyaW5nLlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWx4NWh3cy5oPTI1OD1zdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWx4NWh3cy5oOjI1OTptbHg1aHdzX2NvbnRleHRfb3BlbihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWx4NWh3cy5oLTI2MC1cdFx0ICAgICBzdHJ1Y3QgbWx4NWh3c19jb250ZXh0X2F0dHIgKmF0dHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQwMQoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG1seDVod3NfY29udGV4dF9vcGVuYCBmdW5jdGlvbi4gQXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBrZXkgYXJlYXMgdG8gc2NydXRpbml6ZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaGFyZHdhcmUgY29udGV4dCDigJMgd2hhdCYjMzk7cyBiZWluZyBpbml0aWFsaXplZD8gV2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGFsbG9jYXRlZD8gSSBleHBlY3QgdG8gc2VlIHRoZSBzZXR1cCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBNZWxsYW5veCBoYXJkd2FyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVycm9yIGhhbmRsaW5nLCBvZiBjb3Vyc2U7IGhvdyByb2J1c3QgaXMgaXQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgYW5kIGhvdyBhcmUgdGhleSBtYW5hZ2VkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBlc3BlY2lhbGx5IGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQ/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHBhdHRlcm5zIGFuZCBwb3RlbnRpYWwgbGVha3MgYXMgd2VsbCwga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBjb250ZXh0IGludGVncmF0ZXMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBJIHdhbnQgdG8gc2VlIGEgY2xlYXIgc2VwYXJhdGlvbiBvZiBjb25jZXJucywgYW5kIGFuIG9idmlvdXMgYXR0ZW1wdCBhdCBjb2RlIG1vZHVsYXJpdHkgLSBjYW4gdGhlIGZ1bmN0aW9uIGJlIGVhc2lseSBleHRlbmRlZCwgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCBpbiB0aGUgZnV0dXJlPyBVbHRpbWF0ZWx5LCBJJiMzOTttIGtlZW4gdG8gZ3Jhc3AgdGhlIGNvcmUgbWVjaGFuaWNzIG9mIGhvdyB0aGUgaGFyZHdhcmUgaXMgYnJvdWdodCBvbmxpbmUgYW5kIG1hZGUgcmVhZHkgZm9yIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTg5Olx0c3RydWN0IG1seDVod3NfY29udGV4dCAqbWx4NWh3c19jb250ZXh0X29wZW4oc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gMTkwOlx0XHRcdFx0XHRcdCAgICAgc3RydWN0IG1seDVod3NfY29udGV4dF9hdHRyICphdHRyKVxuIDE5MTpcdHtcbiAxOTI6XHRcdHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eDtcbiAxOTM6XHRcdGludCByZXQ7XG4gMTk0Olx0XG4gMTk1Olx0XHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcbiAxOTY6XHRcdGlmICghY3R4KVxuIDE5NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxOTg6XHRcbiAxOTk6XHRcdGN0eC1cdTAwM2VtZGV2ID0gbWRldjtcbiAyMDA6XHRcbiAyMDE6XHRcdG11dGV4X2luaXQoXHUwMDI2Y3R4LVx1MDAzZWN0cmxfbG9jayk7XG4gMjAyOlx0XHR4YV9pbml0KFx1MDAyNmN0eC1cdTAwM2VwZWVyX2N0eF94YSk7XG4gMjAzOlx0XG4gMjA0Olx0XHRjdHgtXHUwMDNlY2FwcyA9IGt6YWxsb2Nfb2JqKCpjdHgtXHUwMDNlY2Fwcyk7XG4gMjA1Olx0XHRpZiAoIWN0eC1cdTAwM2VjYXBzKVxuIDIwNjpcdFx0XHRnb3RvIGZyZWVfY3R4O1xuIDIwNzpcdFxuIDIwODpcdFx0cmV0ID0gbWx4NWh3c19jbWRfcXVlcnlfY2FwcyhtZGV2LCBjdHgtXHUwMDNlY2Fwcyk7XG4gMjA5Olx0XHRpZiAocmV0KVxuIDIxMDpcdFx0XHRnb3RvIGZyZWVfY2FwcztcbiAyMTE6XHRcbiAyMTI6XHRcdHJldCA9IG1seDVod3NfdnBvcnRfaW5pdF92cG9ydHMoY3R4KTtcbiAyMTM6XHRcdGlmIChyZXQpXG4gMjE0Olx0XHRcdGdvdG8gZnJlZV9jYXBzO1xuIDIxNTpcdFxuIDIxNjpcdFx0cmV0ID0gaHdzX2NvbnRleHRfaW5pdF9od3MoY3R4LCBhdHRyKTtcbiAyMTc6XHRcdGlmIChyZXQpXG4gMjE4Olx0XHRcdGdvdG8gdW5pbml0X3Zwb3J0cztcbiAyMTk6XHRcbiAyMjA6XHRcdG1seDVod3NfZGVidWdfaW5pdF9kdW1wKGN0eCk7XG4gMjIxOlx0XG4gMjIyOlx0XHRyZXR1cm4gY3R4O1xuIDIyMzpcdFxuIDIyNDpcdHVuaW5pdF92cG9ydHM6XG4gMjI1Olx0XHRtbHg1aHdzX3Zwb3J0X3VuaW5pdF92cG9ydHMoY3R4KTtcbiAyMjY6XHRmcmVlX2NhcHM6XG4gMjI3Olx0XHRrZnJlZShjdHgtXHUwMDNlY2Fwcyk7XG4gMjI4Olx0ZnJlZV9jdHg6XG4gMjI5Olx0XHR4YV9kZXN0cm95KFx1MDAyNmN0eC1cdTAwM2VwZWVyX2N0eF94YSk7XG4gMjMwOlx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmN0eC1cdTAwM2VjdHJsX2xvY2spO1xuIDIzMTpcdFx0a2ZyZWUoY3R4KTtcbiAyMzI6XHRcdHJldHVybiBOVUxMO1xuIDIzMzpcdH1cbiAyMzQ6XHRcbiAyMzU6XHRpbnQgbWx4NWh3c19jb250ZXh0X2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiAyMzY6XHR7XG4gMjM3Olx0XHRtbHg1aHdzX2RlYnVnX3VuaW5pdF9kdW1wKGN0eCk7XG4gMjM4Olx0XHRod3NfY29udGV4dF91bmluaXRfaHdzKGN0eCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzkzCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCBhIHBvdGVudGlhbCBpc3N1ZS4gSXQgc2VlbXMgbGlrZSBpZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscywgdGhlIGBjdHhgIHN0cnVjdCBpcyBpbW1lZGlhdGVseSBmcmVlZC4gVGhlIGJ1ZyBoZXJlIGlzIHRoYXQgYGN0eC0mZ3Q7cXVldWVzYCBnZXRzIGluY3JlbWVudGVkICpiZWZvcmUqIHRoZSBjaGVjayBhbmQgcG90ZW50aWFsIGZyZWUuIEhvd2V2ZXIsIGluIHRoaXMgc3BlY2lmaWMgY2FzZSBpdCBkb2VzbiYjMzk7dCBtYXR0ZXIgZm9yIGBjdHhgIGl0c2VsZiBiZWNhdXNlIGl0IGdldHMgZnJlZWQgaW1tZWRpYXRlbHkuCgpCdXQsIGEgcmVkIGZsYWcgcG9wcGVkIHVwLiBXaGF0IGhhcHBlbnMgaWYgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgZmFpbHMgbGF0ZXIgb24/IFNwZWNpZmljYWxseSwgbGV0JiMzOTtzIHNheSBpdCBmYWlscyB3aXRoaW4gYG1seDVod3Nfc2VuZF9xdWV1ZV9vcGVuYC4gSWYgdGhhdCBoYXBwZW5zLCB0aGUgY29kZSBmbG93IGxlYWRzIHRvIGBjbG9zZV9zZW5kX3F1ZXVlc2AuIFdpdGhpbiBgY2xvc2Vfc2VuZF9xdWV1ZXNgLCB3ZSYjMzk7cmUgY2FsbGluZyBgX19od3Nfc2VuZF9xdWV1ZXNfY2xvc2UoY3R4LCBpKTtgLCBhbmQgKnRoZW4qIHdlIGNhbGwgYGZyZWVfYndjX2xvY2tzYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgaHdzX3NlbmRfcXVldWVzX2J3Y19sb2Nrc19kZXN0cm95KGN0eClgLiBJIG5lZWQgdG8gZGlnIGludG8gYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveWAgbm93IGJlY2F1c2UgaXQmIzM5O3MgcG9zc2libGUgdGhhdCBgY3R4YCBpcyBub3QgdmFsaWQgYXQgdGhpcyBwb2ludCEgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBiZWVuIGluaXRpYWxpemVkIGNvcnJlY3RseSBhbmQgaGFzbiYjMzk7dCBiZWVuIGNvcnJ1cHRlZC4gSSBuZWVkIHRvIGtub3cgd2hhdCBoYXBwZW5zIGlmIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIGZhaWxzICphZnRlciogYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgaGFzIHN1Y2NlZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA5OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYndjX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbjExMDA6XHRcdFx0bXV0ZXhfZGVzdHJveShcdTAwMjZjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3NbaV0pO1xuMTEwMTpcdFx0XHRsb2NrZGVwX3VucmVnaXN0ZXJfa2V5KGN0eC1cdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzICYjNDM7IGkpO1xuMTEwMjpcdFx0fVxuMTEwMzpcdFxuMTEwNDpcdFx0a2ZyZWUoY3R4LVx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMpO1xuMTEwNTpcdFx0a2ZyZWUoY3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzKTtcbjExMDY6XHR9XG4xMTA3Olx0XG4xMTA4Olx0dm9pZCBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbjExMDk6XHR7XG4xMTEwOlx0XHRod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3koY3R4KTtcbjExMTE6XHRcdF9faHdzX3NlbmRfcXVldWVzX2Nsb3NlKGN0eCwgY3R4LVx1MDAzZXF1ZXVlcyk7XG4xMTEyOlx0XHRrZnJlZShjdHgtXHUwMDNlc2VuZF9xdWV1ZSk7XG4xMTEzOlx0fVxuMTExNDpcdFxuMTExNTpcdHN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbjExMTY6XHR7XG4xMTE3Olx0XHQvKiBOdW1iZXIgb2YgQldDIHF1ZXVlcyBpcyBlcXVhbCB0byBudW1iZXIgb2YgdGhlIHVzdWFsIEhXUyBxdWV1ZXMgKi9cbjExMTg6XHRcdGludCBid2NfcXVldWVzID0gY3R4LVx1MDAzZXF1ZXVlcyAtIDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzI4CgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveWAgYW5kIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcgcG9wcyB1cC4gSXQgc2VlbXMgdG8gYmUgZGVjcmVtZW50aW5nIGBjdHgtJmd0O3F1ZXVlc2Agd2l0aCBgYndjX3F1ZXVlcyA9IGN0eC0mZ3Q7cXVldWVzIC0gMTtgIC4gKlRoYXQqIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5JiMzOTtyZSBzdWJ0cmFjdGluZyBvbmUgaGVyZS4gSXMgaXQgYSBwb3RlbnRpYWwgb2ZmLWJ5LW9uZSBlcnJvcj8gQW0gSSBtaXN1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0PyBJcyB0aGlzIGludGVuZGVkIGJlaGF2aW9yIGZvciBzb21lIHN1YnRsZSByZWFzb24gcmVsYXRlZCB0byB0aGUgcXVldWluZyBtZWNoYW5pc20gb3IgYmFuZHdpZHRoIGNvbnRyb2wgdGhhdCBJIG5lZWQgdG8gcmVjYWxsPyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gdmVyaWZ5IHRoaXMgbG9naWMgY2FyZWZ1bGx5IHRvIG1ha2Ugc3VyZSBpdCBpcyBjb3JyZWN0LCBzYWZlLCBhbmQgZWZmaWNpZW50LiBMZXQmIzM5O3MgZGVsdmUgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTA6XHRcbjEwOTE6XHRzdGF0aWMgdm9pZCBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3koc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuMTA5MjpcdHtcbjEwOTM6XHRcdGludCBid2NfcXVldWVzID0gbWx4NWh3c19id2NfcXVldWVzKGN0eCk7XG4xMDk0Olx0XHRpbnQgaTtcbjEwOTU6XHRcbjEwOTY6XHRcdGlmICghbWx4NWh3c19jb250ZXh0X2J3Y19zdXBwb3J0ZWQoY3R4KSlcbjEwOTc6XHRcdFx0cmV0dXJuO1xuMTA5ODpcdFxuMTA5OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYndjX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbjExMDA6XHRcdFx0bXV0ZXhfZGVzdHJveShcdTAwMjZjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3NbaV0pO1xuMTEwMTpcdFx0XHRsb2NrZGVwX3VucmVnaXN0ZXJfa2V5KGN0eC1cdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzICYjNDM7IGkpO1xuMTEwMjpcdFx0fVxuMTEwMzpcdFxuMTEwNDpcdFx0a2ZyZWUoY3R4LVx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMpO1xuMTEwNTpcdFx0a2ZyZWUoY3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzKTtcbjExMDY6XHR9XG4xMTA3Olx0XG4xMTA4Olx0dm9pZCBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbjExMDk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTUxCgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgbWx4NWh3c19id2NfcXVldWVzKGN0eCkgRnVuY3Rpb24gQ2FsbCoqCgpBbHJpZ2h0LCBzbyBgbWx4NWh3c19id2NfcXVldWVzKGN0eClgIGlzIGJlaW5nIGludm9rZWQgaGVyZS4gSW50ZXJlc3RpbmcuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gaW1tZWRpYXRlbHkgZGlzc2VjdCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIGNvbnRleHQsIHNwZWNpZmljYWxseSB3aGF0IGl0JiMzOTtzIGNvbnRyaWJ1dGluZyB0byB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIFRoZSBuYW1lIGl0c2VsZiwgJiMzNDtid2MsJiMzNDsgbGlrZWx5IGhpbnRzIGF0IGJhbmR3aWR0aCBjb250cm9sIG9yIHNvbWUga2luZCBvZiByZXNvdXJjZSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gcXVldWVzLCBnaXZlbiB0aGUgJiMzNDtxdWV1ZXMmIzM0OyBzdWZmaXguIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24sIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMgb24gYGN0eGAgYW5kIGFueSByZWxhdGVkIHN0cnVjdHVyZXMsIGFuZCB1bmRlcnN0YW5kIHRoZSBhbGdvcml0aG1zIHVzZWQgZm9yIGJhbmR3aWR0aCBhbGxvY2F0aW9uIG9yIHF1ZXVlIG1hbmFnZW1lbnQuIElzIGl0IHVzaW5nIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvZiB0aGUgTWVsbGFub3ggYWRhcHRlcj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgSSBzaG91bGQgYmUgYXdhcmUgb2YsIGxpa2UgbG9jayBjb250ZW50aW9uIG9yIGluZWZmaWNpZW50IGRhdGEgc3RydWN0dXJlcz8gVGhlIGBjdHhgIHBhcmFtZXRlciBpcyB0aGUgbmV4dCBjcnVjaWFsIHBpZWNlLiBJJiMzOTtsbCBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBuYXR1cmUgb2YgdGhlIGNvbnRleHQsIGFuZCB3aGF0IGRhdGEgaXQmIzM5O3MgaG9sZGluZyB0byB0cnVseSB1bmRlcnN0YW5kIGhvdyBpdCBpcyBiZWluZyB1c2VkIGJ5IHRoZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWx4NWh3c19id2NfcXVldWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYz02PXN0YXRpYyB1MTYgaHdzX2J3Y19nZW5fcXVldWVfaWR4KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTgtXHQvKiBhc3NpZ24gcmFuZG9tIHF1ZXVlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jOjk6XHRyZXR1cm4gZ2V0X3JhbmRvbV91OCgpICUgbWx4NWh3c19id2NfcXVldWVzKGN0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTEwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jPTI1PXN0YXRpYyB2b2lkIGh3c19id2NfbG9ja19hbGxfcXVldWVzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjYte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYzoyNzpcdHUxNiBid2NfcXVldWVzID0gbWx4NWh3c19id2NfcXVldWVzKGN0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTI4LVx0c3RydWN0IG11dGV4ICpxdWV1ZV9sb2NrOyAvKiBQcm90ZWN0IHRoZSBxdWV1ZSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM9Mzc9c3RhdGljIHZvaWQgaHdzX2J3Y191bmxvY2tfYWxsX3F1ZXVlcyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTM4LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM6Mzk6XHR1MTYgYndjX3F1ZXVlcyA9IG1seDVod3NfYndjX3F1ZXVlcyhjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYy00MC1cdHN0cnVjdCBtdXRleCAqcXVldWVfbG9jazsgLyogUHJvdGVjdCB0aGUgcXVldWUgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jPTY5PWh3c19id2NfbWF0Y2hlcl9tb3ZlX2FsbF9zaW1wbGUoc3RydWN0IG1seDVod3NfYndjX21hdGNoZXIgKmJ3Y19tYXRjaGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtNzMtXHRpbnQgZHJhaW5fZXJyb3IgPSAwLCBtb3ZlX2Vycm9yID0gMCwgcG9sbF9lcnJvciA9IDA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jOjc0Olx0dTE2IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtNzUtXHRzdHJ1Y3QgbWx4NWh3c19ydWxlX2F0dHIgcnVsZV9hdHRyO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM9MjI3PWludCBtbHg1aHdzX2J3Y19tYXRjaGVyX2NyZWF0ZV9zaW1wbGUoc3RydWN0IG1seDVod3NfYndjX21hdGNoZXIgKmJ3Y19tYXRjaGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjM1LVx0c3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4ID0gdGFibGUtXHUwMDNlY3R4O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYzoyMzY6XHR1MTYgYndjX3F1ZXVlcyA9IG1seDVod3NfYndjX3F1ZXVlcyhjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYy0yMzctXHRzdHJ1Y3QgbWx4NWh3c19tYXRjaGVyX2F0dHIgYXR0ciA9IHswfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5oPTk3PWludCBtbHg1aHdzX2J3Y19xdWV1ZV9wb2xsKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5oLTEwMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmg6MTAyOnN0YXRpYyBpbmxpbmUgdTE2IG1seDVod3NfYndjX3F1ZXVlcyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5oLTEwMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuaD0xMTI9c3RhdGljIGlubGluZSB1MTYgbWx4NWh3c19id2NfZ2V0X3F1ZXVlX2lkKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCwgdTE2IGlkeClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmgtMTEzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmg6MTE0Olx0cmV0dXJuIGlkeCAmIzQzOyBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmgtMTE1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Y19jb21wbGV4LmM9OTQ4PWh3c19id2NfbWF0Y2hlcl9pbml0X21vdmUoc3RydWN0IG1seDVod3NfYndjX21hdGNoZXIgKmJ3Y19tYXRjaGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYy05NTAtXHRzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHggPSBid2NfbWF0Y2hlci1cdTAwM2VtYXRjaGVyLVx1MDAzZXRibC1cdTAwM2VjdHg7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Y19jb21wbGV4LmM6OTUxOlx0dTE2IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYy05NTItXHRzdHJ1Y3QgbWx4NWh3c19id2NfcnVsZSAqYndjX3J1bGU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2NfY29tcGxleC5jPTk2OT1pbnQgbWx4NWh3c19id2NfbWF0Y2hlcl9jb21wbGV4X21vdmUoc3RydWN0IG1seDVod3NfYndjX21hdGNoZXIgKmJ3Y19tYXRjaGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYy05NzItXHRzdHJ1Y3QgbWx4NWh3c19tYXRjaGVyICptYXRjaGVyID0gYndjX21hdGNoZXItXHUwMDNlbWF0Y2hlcjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYzo5NzM6XHR1MTYgYndjX3F1ZXVlcyA9IG1seDVod3NfYndjX3F1ZXVlcyhjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2NfY29tcGxleC5jLTk3NC1cdHN0cnVjdCBtbHg1aHdzX2J3Y19ydWxlICp0bXBfYndjX3J1bGU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM9MTA5MT1zdGF0aWMgdm9pZCBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3koc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTA5Mi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYzoxMDkzOlx0aW50IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTEwOTQtXHRpbnQgaTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyODAKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIEJhbmR3aWR0aCBDb250cm9sIFF1ZXVlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGJhbmR3aWR0aCBjb250cm9sIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBNZWxsYW5veCBoYXJkd2FyZSBjb250ZXh0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgdG8gYG1seDVod3NfYndjX3F1ZXVlc2AsIGxpa2VseSBkZWZpbmVkIGluIGBid2MuaGAuIFRoaXMgc3VnZ2VzdHMgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJhbCBkZWZpbml0aW9ucywgY29uc3RhbnRzLCBhbmQgcG90ZW50aWFsbHksIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgZ292ZXJuIHF1ZXVlLWxldmVsIGJhbmR3aWR0aCBhbGxvY2F0aW9uIGFuZCBlbmZvcmNlbWVudCB3aXRoaW4gdGhlIE1MWDUgaGFyZHdhcmUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgdXN1YWxseSByZXNpZGVzLCBlbmFibGluZyB0cmFmZmljIHNoYXBpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRvIHNlZSBkZXRhaWxzIHJlbGF0ZWQgdG8gdGhlIHF1ZXVlIGlkZW50aWZpZXJzLCByYXRlIGxpbWl0aW5nIHBhcmFtZXRlcnMgKGUuZy4sIENJUiwgUElSLCBidXJzdCBzaXplcyksIGFuZCB0aGUgbWVjaGFuaXNtcyBmb3IgZW5mb3JjaW5nIHRoZXNlIGxpbWl0cyB3aXRoaW4gdGhlIGhhcmR3YXJlJiMzOTtzIGludGVybmFsIHNjaGVkdWxpbmcuIEdvaW5nIHRvIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoYXQgc3BlY2lmaWMgZWxlbWVudCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAyOlx0c3RhdGljIGlubGluZSB1MTYgbWx4NWh3c19id2NfcXVldWVzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiAxMDM6XHR7XG4gMTA0Olx0XHQvKiBCZXNpZGVzIHRoZSBjb250cm9sIHF1ZXVlLCBoYWxmIG9mIHRoZSBxdWV1ZXMgYXJlXG4gMTA1Olx0XHQgKiByZWd1bGFyIEhXUyBxdWV1ZXMsIGFuZCB0aGUgb3RoZXIgaGFsZiBhcmUgQldDIHF1ZXVlcy5cbiAxMDY6XHRcdCAqL1xuIDEwNzpcdFx0aWYgKG1seDVod3NfY29udGV4dF9id2Nfc3VwcG9ydGVkKGN0eCkpXG4gMTA4Olx0XHRcdHJldHVybiAoY3R4LVx1MDAzZXF1ZXVlcyAtIDEpIC8gMjtcbiAxMDk6XHRcdHJldHVybiAwO1xuIDExMDpcdH1cbiAxMTE6XHRcbiAxMTI6XHRzdGF0aWMgaW5saW5lIHUxNiBtbHg1aHdzX2J3Y19nZXRfcXVldWVfaWQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LCB1MTYgaWR4KVxuIDExMzpcdHtcbiAxMTQ6XHRcdHJldHVybiBpZHggJiM0MzsgbWx4NWh3c19id2NfcXVldWVzKGN0eCk7XG4gMTE1Olx0fVxuIDExNjpcdFxuIDExNzpcdCNlbmRpZiAvKiBIV1NfQldDX0hfICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODUxCgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogNjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWx4NWh3cyBRdWV1ZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IGBtbHg1aHdzX2J3Y19xdWV1ZXNgIGNhbGN1bGF0aW5nIGAoY3R4LSZndDtxdWV1ZXMgLSAxKSAvIDJgLiBUaGVuLCBJIHN0YXJ0ZWQgZGlnZ2luZyBpbnRvIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBzY2VuYXJpb3MsIHNwZWNpZmljYWxseSBpZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscy4gSSBzZWUgdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGZhaWxzLCBgY3R4LSZndDtxdWV1ZXNgIHdhcyBhbHJlYWR5IGluY3JlbWVudGVkIGJ5IGBid2NfcXVldWVzYCDigJMgd2hpY2ggaXMgZXF1YWwgdG8gdGhlIG9yaWdpbmFsIGBjdHgtJmd0O3F1ZXVlcyAtIDFgLiBTbywgaWYgYGN0eC0mZ3Q7cXVldWVzYCBzdGFydHMgYXQgMywgYGJ3Y19xdWV1ZXNgIGJlY29tZXMgMiwgYW5kIGBjdHgtJmd0O3F1ZXVlc2AgaXMgdXBkYXRlZCB0byA1LgoKTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIElmIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGZhaWxzICphZnRlciogdGhpcyBpbmNyZW1lbnQsIHRoZSByZXR1cm4gdmFsdWUgYGVycmAgaXMgcGFzc2VkIGRpcmVjdGx5IHVwIHRvIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gLiBDcnVjaWFsbHksIGl0IGJ5cGFzc2VzIHRoZSBjbGVhbnVwIHN0ZXBzOiBgZnJlZV9id2NfbG9ja3NgIGFuZCBgY2xvc2Vfc2VuZF9xdWV1ZXNgLiBUaGlzIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgY29uY2VybiwgaS5lLiwgd2hldGhlciB0aGUgbG9ja3Mgd2VyZSBwcm9wZXJseSBmcmVlZC4KCkhvd2V2ZXIsIEkgcmVtZW1iZXJlZCB0aGF0IGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgICpkb2VzKiBwZXJmb3JtIGl0cyBvd24gY2xlYW51cCBvbiBmYWlsdXJlLCBzcGVjaWZpY2FsbHkgZnJlZWluZyBgY3R4LSZndDtid2Nfc2VuZF9xdWV1ZV9sb2Nrc2AuIFNvLCBpdCBmcmVlcyB1cCB0aGF0IG1lbW9yeSB0aGF0IGl0IGFsbG9jYXRlZC4gVGhlIGlzc3VlIGlzIHRoYXQgdGhlIGBjdHgtJmd0O3F1ZXVlc2AgdmFsdWUgcmVtYWlucyBpbmNyZW1lbnRlZCwgZXZlbiB0aG91Z2ggdGhlIGZ1bmN0aW9uIGZhaWxzIQoKQnV0IHRoZW4sIEkgdHJhY2VkIHRoZSBmYWlsdXJlIHBhdGggZnVydGhlci4gVGhlIGVycm9yIGNvZGUsIGxpa2VseSBgLUVOT01FTWAgaW4gdGhpcyBjYXNlLCBidWJibGVzIHVwIGZyb20gYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgdG8gYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgYW5kIHRoZW4gdG8gYGh3c19jb250ZXh0X2luaXRfaHdzYC4gRnJvbSB0aGVyZSwgdGhlIGNvbnRyb2wgZmxvd3MgdGhyb3VnaCBgcG9vbHNfdW5pbml0YCwgY2FsbGluZyBgaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0KGN0eClgLiBGaW5hbGx5LCBgbWx4NWh3c19jb250ZXh0X29wZW5gIGVuZHMgd2l0aCBgdW5pbml0X3Zwb3J0c2AsIHRoZW4gYGZyZWVfY2Fwc2AsIGFuZCBmaW5hbGx5IGBmcmVlX2N0eGAuCgpBaGEhIGBjdHhgIGlzIGZyZWVkIGluIGBmcmVlX2N0eGAhIFNvLCB0aGUgZmFjdCB0aGF0IGBjdHgtJmd0O3F1ZXVlc2AgbWlnaHQgaGF2ZSBhbiBpbmNvcnJlY3QgdmFsdWUgZHVlIHRvIHRoZSBmYWlsZWQgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgZG9lc24mIzM5O3QgYWN0dWFsbHkgbWF0dGVyIGJlY2F1c2UgdGhlIGVudGlyZSBgY3R4YCBpcyBkZWFsbG9jYXRlZC4gSXQmIzM5O3MgYSBiaXQgbWVzc3ksIGJ1dCB1bHRpbWF0ZWx5IHNhZmUgZHVlIHRvIHRoZSBjb21wbGV0ZSB0ZWFyZG93bi4KCkkgbWFkZSBzdXJlIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGlzIG9ubHkgY2FsbGVkIGluIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gLCBhbmQgdGhlIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uY2UuIFRoZSBpbmNyZW1lbnQgaW4gYGN0eC0mZ3Q7cXVldWVzYCBpcyBqdXN0IHRyYW5zaWVudC4gSXQgYmVjb21lcyBpcnJlbGV2YW50IGJlY2F1c2UgdGhlIGNvbnRleHQgaXRzZWxmIGlzIGRlc3Ryb3llZC4gQ2FzZSBjbG9zZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jPTEzND1zdGF0aWMgaW50IGh3c19jb250ZXh0X2luaXRfaHdzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0xNTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYzoxNTc6XHRyZXQgPSBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oY3R4LCBhdHRyLVx1MDAzZXF1ZXVlcywgYXR0ci1cdTAwM2VxdWV1ZV9zaXplKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE1OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM9MTExNT1zdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTE0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjExNTA6aW50IG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbihzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTUxLVx0XHRcdCAgICAgdTE2IHF1ZXVlcyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuaD0xOTM9dm9pZCBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuaC0xOTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuaDoxOTU6aW50IG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbihzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuaC0xOTYtXHRcdFx0ICAgICB1MTYgcXVldWVzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjc2OQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDEzOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBMZWFrIGluIHRoZSBNTFg1IEhXUyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIGZ1bmN0aW9uLiBJdCBzZWVtcyBpdCYjMzk7cyBvbmx5IGNhbGxlZCBmcm9tIGBod3NfY29udGV4dF9pbml0X2h3c2AsIGFuZCBpZiBpdCBmYWlscywgdGhlIGNvbnRleHQgKGBjdHhgKSBpcyBpbW1lZGlhdGVseSBmcmVlZC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCB3aGF0IGlmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSAqYWZ0ZXIqIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIHN1Y2NlZWRzLCBhbmQgdGhlbiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBmYWlscyBsYXRlciBvbj8gRm9yIGV4YW1wbGUsIHdoYXQgaWYgYGt6YWxsb2Nfb2Jqc2AgZmFpbHMgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBgY3R4LSZndDtzZW5kX3F1ZXVlYD8KCkluIHRoaXMgY2FzZSwgaXQganVtcHMgdG8gYGZyZWVfYndjX2xvY2tzYCwgd2hpY2ggY2FsbHMgYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveShjdHgpYC4gSW5zaWRlIHRoYXQsIGBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KWAgaXMgY2FsbGVkLiBUaGlzIGZ1bmN0aW9uIHVzZXMgYGN0eC0mZ3Q7cXVldWVzYCB0byBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBCV0MgcXVldWVzLiBNeSBjb25jZXJuIGlzIHRoYXQgYGN0eC0mZ3Q7cXVldWVzYCBpcyAqaW5jcmVtZW50ZWQqIGluIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgLgoKTGV0JiMzOTtzIHRyYWNlIGl0OiBgY3R4LSZndDtxdWV1ZXNgIGluaXRpYWxseSBnZXRzIHNldCB0byBgcXVldWVzICYjNDM7IDFgICh3aGVyZSBgcXVldWVzYCBpcyB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gKS4gVGhlbiwgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgaXMgY2FsbGVkLCBhbmQgaW5zaWRlIGl0LCBgY3R4LSZndDtxdWV1ZXNgIGJlY29tZXMgYHF1ZXVlcyAmIzQzOyAxICYjNDM7IHF1ZXVlc2AgKG9yIGAyICogcXVldWVzICYjNDM7IDFgKS4gVGhpcyBpcyB0aGVuIHVzZWQgaW4gYG1seDVod3NfYndjX3F1ZXVlc2Agd2hpY2ggY2FsY3VsYXRlcyBgKDIgKiBxdWV1ZXMgJiM0MzsgMSAtIDEpIC8gMiA9IHF1ZXVlc2AuIEl0IG1ha2VzIHNlbnNlLCBhcyB0aGUgbG9ja3MgYXJlIGRlc3Ryb3llZCwgYW5kIG1lbW9yeSBmcmVlZC4gSXQgc2hvdWxkIGJlIGNvcnJlY3QuIFRoZSBgY3R4YCBnZXRzIGZyZWVkLCBidXQgbm8gbWVtb3J5IGxlYWtzIHdlcmUgZm91bmQuCgpTbywgd2hlcmUgd2FzIHRoZSBidWcsIHRoZW4/IEdvaW5nIGJhY2sgdG8gYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAsIEkgc2VlIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGFib3V0IHRoZSBhbGxvY2F0aW9uIG9mIGBjdHgtJmd0O2J3Y19zZW5kX3F1ZXVlX2xvY2tzYC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgbG9va2VkIGxpa2UgdGhpczogYGN0eC0mZ3Q7cXVldWVzICYjNDM7PSBid2NfcXVldWVzO2AgKmJlZm9yZSogYWxsb2NhdGluZyBgY3R4LSZndDtid2Nfc2VuZF9xdWV1ZV9sb2Nrc2AuIElmIGBremFsbG9jX29ianNgIGZhaWxlZCwgdGhlbiBgLUVOT01FTWAgd291bGQgYmUgcmV0dXJuZWQuIENyaXRpY2FsbHksIGBjdHgtJmd0O3F1ZXVlc2Agd291bGQgaGF2ZSBiZWVuICppbmNyZW1lbnRlZCogYmVmb3JlIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gRXZlbiBpZiBgY3R4YCBpcyBmcmVlZCwgdGhlIHZhbHVlIG9mIGBjdHgtJmd0O3F1ZXVlc2Agc2hvdWxkIGhhdmUgYmVlbiBjb3JyZWN0LCBhbmQgdGhlcmUgc2hvdWxkIGJlIG5vIG1lbW9yeSBsZWFrLgoKU28sIGxldCYjMzk7cyB0cmFjayB0aGUgZXJyb3IgcGF0aCBiYWNrIHRvIGBod3NfY29udGV4dF9pbml0X2h3c2AuIElmIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIGZhaWxzLCB0aGUgY29kZSBqdW1wcyB0byBgcG9vbHNfdW5pbml0YCwgY2FsbGluZyBgaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0KGN0eClgLiBUaGUgcXVlc3Rpb24gaXM6IERvZXMgdGhpcyBmdW5jdGlvbiAqdXNlKiBgY3R4LSZndDtxdWV1ZXNgPyBJZiBpdCBkb2VzbiYjMzk7dCwgd2UmIzM5O3JlIHByb2JhYmx5IHNhZmUuIEkgbmVlZCB0byBleGFtaW5lIGBod3NfY29udGV4dF9wb29sc191bmluaXRgIGNhcmVmdWxseSB0byBlbnN1cmUgaXQmIzM5O3Mgbm90IHVzaW5nIHRoZSBwb3RlbnRpYWxseSBpbmNvcnJlY3QgYGN0eC0mZ3Q7cXVldWVzYCB2YWx1ZSBpbiBpdHMgZXJyb3IgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHdzX2NvbnRleHRfcG9vbHNfdW5pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9MjE9c3RhdGljIGludCBod3NfY29udGV4dF9wb29sc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy01Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjU3OnN0YXRpYyB2b2lkIGh3c19jb250ZXh0X3Bvb2xzX3VuaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy01OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9MTM0PXN0YXRpYyBpbnQgaHdzX2NvbnRleHRfaW5pdF9od3Moc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE3MS1wb29sc191bmluaXQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYzoxNzI6XHRod3NfY29udGV4dF9wb29sc191bmluaXQoY3R4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE3My11bmluaXRfcGQ6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9MTc4PXN0YXRpYyB2b2lkIGh3c19jb250ZXh0X3VuaW5pdF9od3Moc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE4NC1cdG1seDVod3Nfc2VuZF9xdWV1ZXNfY2xvc2UoY3R4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjE4NTpcdGh3c19jb250ZXh0X3Bvb2xzX3VuaW5pdChjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMTg2LVx0aHdzX2NvbnRleHRfdW5pbml0X3BkKGN0eCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDU3CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0YCB0aGluZy4gSnVzdCBzZWVpbmcgdGhlIG5hbWUgc3BhcmtzIHNvbWUgaW1tZWRpYXRlIHF1ZXN0aW9ucyBpbiBteSBtaW5kLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZmllbGQuICYjMzQ7VW5pbml0JiMzNDsgc3VnZ2VzdHMgYSBzdGF0ZSBvZiBpbml0aWFsaXphdGlvbiwgb3IgbGFjayB0aGVyZW9mLiBDb25zaWRlcmluZyBteSBleHBlcnRpc2UsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb250ZXh0IHBvb2xzIHdpdGhpbiBzb21lIGhhcmR3YXJlIG9yIHN5c3RlbSBjb250ZXh0LCBhbmQgdGhlaXIgc3RhdHVzIGJlZm9yZSBpbml0aWFsaXphdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nLiBXaGF0IGtpbmQgb2YgcG9vbHMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgaGVyZT8gQXJlIHRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIG9yIG1vcmUgYWJzdHJhY3Q/IEFyZSB0aGV5IHVzZWQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLCB0aHJlYWQgbWFuYWdlbWVudCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBvZiB0aGVzZSBjb250ZXh0IHBvb2xzIGFuZCB3aHkgd2UgYXJlIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSB1bmluaXRpYWxpemVkIHN0YXRlLiBBcmUgd2UgY29uY2VybmVkIGFib3V0IHRoZSBjb25zZXF1ZW5jZXMgb2YgdXNpbmcgdGhlbSBiZWZvcmUgdGhleSBhcmUgcHJvcGVybHkgc2V0IHVwPyBJJiMzOTttIGFudGljaXBhdGluZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZGF0YSBjb3JydXB0aW9uLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHNpbXBseSB1bmV4cGVjdGVkIGJlaGF2aW9yIGlmIHRoaXMgc3RhdGUgaXNuJiMzOTt0IG1hbmFnZWQgY29ycmVjdGx5LiBNeSBicmFpbiBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIGZvcm11bGF0ZSBoeXBvdGhlc2VzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRlc2lnbiBjaG9pY2VzIGFuZCB0aGUgcG90ZW50aWFsIHBpdGZhbGxzIHRoYXQgdGhpcyAmIzM0O3VuaW5pdCYjMzQ7IHN0YXRlIG1pZ2h0IHJlcHJlc2VudC4gTm93LCBsZXQmIzM5O3MgYWN0dWFsbHkgcmVhZCBpdCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTc6XHRzdGF0aWMgdm9pZCBod3NfY29udGV4dF9wb29sc191bmluaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuICA1ODpcdHtcbiAgNTk6XHRcdGlmIChjdHgtXHUwMDNlc3RjX3Bvb2wpXG4gIDYwOlx0XHRcdG1seDVod3NfcG9vbF9kZXN0cm95KGN0eC1cdTAwM2VzdGNfcG9vbCk7XG4gIDYxOlx0XG4gIDYyOlx0XHRtbHg1aHdzX2RlZmluZXJfdW5pbml0X2NhY2hlKGN0eC1cdTAwM2VkZWZpbmVyX2NhY2hlKTtcbiAgNjM6XHRcdG1seDVod3NfcGF0X3VuaW5pdF9wYXR0ZXJuX2NhY2hlKGN0eC1cdTAwM2VwYXR0ZXJuX2NhY2hlKTtcbiAgNjQ6XHR9XG4gIDY1Olx0XG4gIDY2Olx0c3RhdGljIGludCBod3NfY29udGV4dF9pbml0X3BkKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiAgNjc6XHR7XG4gIDY4Olx0XHRpbnQgcmV0ID0gMDtcbiAgNjk6XHRcbiAgNzA6XHRcdHJldCA9IG1seDVfY29yZV9hbGxvY19wZChjdHgtXHUwMDNlbWRldiwgXHUwMDI2Y3R4LVx1MDAzZXBkX251bSk7XG4gIDcxOlx0XHRpZiAocmV0KSB7XG4gIDcyOlx0XHRcdG1seDVod3NfZXJyKGN0eCwgXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFBEXFxuXCYjMzQ7KTtcbiAgNzM6XHRcdFx0cmV0dXJuIHJldDtcbiAgNzQ6XHRcdH1cbiAgNzU6XHRcbiAgNzY6XHRcdGN0eC1cdTAwM2VmbGFncyB8PSBNTFg1SFdTX0NPTlRFWFRfRkxBR19QUklWQVRFX1BEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDEzMAoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqVGhpbmtpbmcgVGhyb3VnaCBDb250ZXh0IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuLi4gYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBubywgaXQgZGVmaW5pdGVseSAqZG9lc24mIzM5O3QqIGxvb2sgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBgY3R4LSZndDtxdWV1ZXNgLiBUaGF0JiMzOTtzIGdvb2QsIGtlZXBzIHRoaW5ncyBjbGVhbmVyLCBJIHN1cHBvc2UuIEhtbSwgd2hlcmUgKmlzKiBpdCBoYW5kbGluZyB0aGUgY2xlYW51cCBvZiByZXNvdXJjZXMsIHRoZW4/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gcmVtZW1iZXIgaG93IHRoZSBjb250ZXh0IHVuaW5pdGlhbGl6YXRpb24gaGFwcGVucy4uLiBBaCwgeWVzLCB3aGF0IGFib3V0IGBod3NfY29udGV4dF91bmluaXRfcGRgPyBUaGF0IHJpbmdzIGEgYmVsbC4gSXQmIzM5O3MgcHJvYmFibHkgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCB0aGUgYXNzb2NpYXRlZCBwcm90ZWN0aW9uIGRvbWFpbi4gTGV0IG1lIGdvIGNoZWNrIHRoYXQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NzpcdFxuICA3ODpcdFx0cmV0dXJuIDA7XG4gIDc5Olx0fVxuICA4MDpcdFxuICA4MTpcdHN0YXRpYyBpbnQgaHdzX2NvbnRleHRfdW5pbml0X3BkKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiAgODI6XHR7XG4gIDgzOlx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBNTFg1SFdTX0NPTlRFWFRfRkxBR19QUklWQVRFX1BEKVxuICA4NDpcdFx0XHRtbHg1X2NvcmVfZGVhbGxvY19wZChjdHgtXHUwMDNlbWRldiwgY3R4LVx1MDAzZXBkX251bSk7XG4gIDg1Olx0XG4gIDg2Olx0XHRyZXR1cm4gMDtcbiAgODc6XHR9XG4gIDg4Olx0XG4gIDg5Olx0c3RhdGljIHZvaWQgaHdzX2NvbnRleHRfY2hlY2tfaHdzX3N1cHAoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuICA5MDpcdHtcbiAgOTE6XHRcdHN0cnVjdCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzICpjYXBzID0gY3R4LVx1MDAzZWNhcHM7XG4gIDkyOlx0XG4gIDkzOlx0XHQvKiBIV1Mgbm90IHN1cHBvcnRlZCBvbiBkZXZpY2UgLyBGVyAqL1xuICA5NDpcdFx0aWYgKCFjYXBzLVx1MDAzZXdxZV9iYXNlZF91cGRhdGUpIHtcbiAgOTU6XHRcdFx0bWx4NWh3c19lcnIoY3R4LCBcJiMzNDtSZXF1aXJlZCBIV1MgV1FFIGJhc2VkIGluc2VydGlvbiBjYXAgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4gIDk2Olx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2NjAKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQSBQb2ludCBvZiBOZWdhdGl2aXR5IEZvbGxvd2VkIGJ5IGEgUXVlc3Rpb24qKgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGEgZmxhdCAmIzM0O05vLiYjMzQ7IFRoaXMgZmVlbHMgbGlrZSBhIHJlZmxleGl2ZSByZXNwb25zZSwgYSBndXQgZmVlbGluZywgcGVyaGFwcyBzdGVtbWluZyBmcm9tIGEgcHJpb3IgbGluZSBvZiB0aG91Z2h0IG9yIGFuIGluc3RpbmN0aXZlIHJlamVjdGlvbiBvZiBzb21ldGhpbmcgaW1wbGllZCBidXQgbm90IGV4cGxpY2l0bHkgc3RhdGVkLiBUaGUgY29udGV4dCBpcyBtaXNzaW5nLCBzbyBJJiMzOTttIGZvcmNlZCB0byBhc3N1bWUgYW4gaW1wbGljaXQgcXVlc3Rpb24uCgpIb3dldmVyLCB0aGUgdGhvdWdodCBwcm9jZXNzIHF1aWNrbHkgcGl2b3RzLiBUaGUgbmVnYXRpdmUgcmVzcG9uc2UgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSB0YXJnZXRlZCBxdWVyeTogJiMzNDtXaGF0IGFib3V0IGBtbHg1aHdzX3Zwb3J0X3VuaW5pdF92cG9ydHNgPyYjMzQ7IFRoaXMgaW5kaWNhdGVzIGEgc2hpZnQgZnJvbSBhIGdlbmVyYWwgZGlzbWlzc2FsIHRvIGEgc3BlY2lmaWMgYXJlYSBvZiBjb25jZXJuLiBJdCByZXZlYWxzIGEgbGV2ZWwgb2YgdGVjaG5pY2FsIGRlcHRoLCB0YXJnZXRpbmcgYSBmdW5jdGlvbiBuYW1lIHRoYXQgaGludHMgYXQgYSBwb3RlbnRpYWwgYXJlYSBvZiBuZXR3b3JrIHZpcnR1YWxpemF0aW9uLiBJJiMzOTttIGhvbWluZyBpbiBvbiB0aGUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGBtbHg1YCBhbmQgaXRzIGhhbmRsaW5nIG9mIHZpcnR1YWwgcG9ydHMsIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaGFyZHdhcmUgb2ZmbG9hZCBvciBhIHNpbWlsYXIgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXNwZWN0LiBUaGUgcXVlc3Rpb24gaXRzZWxmIGltcGxpZXMgYSBzcGVjaWZpYyBjb25jZXJuIHJlZ2FyZGluZyBob3cgdnBvcnRzIGFyZSB1bmluaXRpYWxpemVkLiBJIGFtIHRoaW5raW5nLCBJcyBpdCBhIHBvdGVudGlhbCBidWc/IEFuIG92ZXJzaWdodD8gSXMgaXQgYSBmdW5jdGlvbiB0aGF0IG5lZWRzIHNwZWNpYWwgYXR0ZW50aW9uIGluIHRoZSBjdXJyZW50IHNpdHVhdGlvbj8gV2l0aG91dCBtb3JlIGNvbnRleHQsIHRoZXNlIGFsbCBjb21lIHRvIG1pbmQgYXMgcXVlc3Rpb25zIHRvIHBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jPTE4OT1zdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICptbHg1aHdzX2NvbnRleHRfb3BlbihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0yMjQtdW5pbml0X3Zwb3J0czpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjIyNTpcdG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0cyhjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMjI2LWZyZWVfY2Fwczpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYz0yMzU9aW50IG1seDVod3NfY29udGV4dF9jbG9zZShzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMjM4LVx0aHdzX2NvbnRleHRfdW5pbml0X2h3cyhjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM6MjM5Olx0bWx4NWh3c192cG9ydF91bmluaXRfdnBvcnRzKGN0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0yNDAtXHRrZnJlZShjdHgtXHUwMDNlY2Fwcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy92cG9ydC5jPTY9aW50IG1seDVod3NfdnBvcnRfaW5pdF92cG9ydHMoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuYy0yNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuYzoyNzp2b2lkIG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3Zwb3J0LmMtMjgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuaD03PWludCBtbHg1aHdzX3Zwb3J0X2luaXRfdnBvcnRzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3Zwb3J0LmgtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuaDo5OnZvaWQgbWx4NWh3c192cG9ydF91bmluaXRfdnBvcnRzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3Zwb3J0LmgtMTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzI1CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzIGBtbHg1aHdzX3Zwb3J0X3VuaW5pdF92cG9ydHNgIGZ1bmN0aW9uLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWNvbnN0cnVjdGluZyBgbWx4NWh3c192cG9ydF91bmluaXRfdnBvcnRzYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0c2AgZnVuY3Rpb24uIEkmIzM5O20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB3aGF0ICYjMzQ7dnBvcnQmIzM0OyBpbXBsaWVzIGluIHRoaXMgY29udGV4dCDigJMgVmlydHVhbCBQb3J0LCBvYnZpb3VzbHksIGJ1dCB3aGF0IGxldmVsIG9mIGFic3RyYWN0aW9uIGFyZSB3ZSBkZWFsaW5nIHdpdGg/IElzIHRoaXMgcmVsYXRlZCB0byB0aGUgcGh5c2ljYWwgcG9ydCwgb3IgbW9yZSBvZiBhIGxvZ2ljYWwgY29uc3RydWN0IHdpdGhpbiB0aGUgTUxYNSBkcml2ZXI/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoaXMgd2lsbCBiZSBhIGNsZWFudXAgcm91dGluZSwgc28gdGhlIGtleSBxdWVzdGlvbnMgYXJlOiB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgcmVsZWFzZWQsIGFuZCB3aGF0IGFyZSB0aGUgZmFpbHVyZSBzY2VuYXJpb3MgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Q/IEkgd2FudCB0byBzZWUgaG93IHJvYnVzdCB0aGUgZXJyb3IgaGFuZGxpbmcgaXMuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkZXBlbmRlbmN5IGNoYWluIGhlcmUuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGNhbGwgdGhpcywgYW5kIHdoYXQgZnVuY3Rpb25zIGRvZXMgKnRoaXMqIGZ1bmN0aW9uIGNhbGw/IEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSB0ZWFyZG93biBwcm9jZXNzIGFuZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbGVha3MuIEFyZSB0aGVyZSBhbnkgbG9ja3MgaW52b2x2ZWQsIGFuZCBpZiBzbywgd2hhdCYjMzk7cyB0aGUgbG9ja2luZyBoaWVyYXJjaHkgdG8gcHJldmVudCBkZWFkbG9ja3M/CgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgb3ZlcmFsbCBjb250ZXh0LiBJcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBkdXJpbmcgbW9kdWxlIHVubG9hZCwgZGV2aWNlIHJlbW92YWwsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdGltaW5nIG9mIHRoaXMgZnVuY3Rpb24gaXMgZXh0cmVtZWx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBndWFyYW50ZWVzIGl0IG1ha2VzLCBhbmQgYWxzbyB0aGUgYXNzdW1wdGlvbnMgaXQgY2FuIGhhdmUuIEFyZSB3ZSBpbiBhIHNhZmUgY29udGV4dCwgb3IgY291bGQgd2UgYmUgaW50ZXJydXB0ZWQ/CgpGaW5hbGx5LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSB0aGUgdmFyaW91cyBlcnJvciBwYXRocy4gSXMgdGhlcmUgcHJvcGVyIHJlc291cmNlIGNsZWFudXAgaW4gY2FzZSBvZiBhIGZhaWx1cmUgZHVyaW5nIHRoZSB1bmluaXRpYWxpemF0aW9uPyBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhleSBlbnN1cmUgdGhhdCB0aGUgcmVzb3VyY2VzIGFyZSBjbGVhbmVkIHVwIHByb3Blcmx5LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBjb25zaXN0ZW5jeSBvZiB0aGUgc3RhdGUgd2lsbCBiZS4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIHNhZmUgZnJvbSB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0aWVzLiBVbHRpbWF0ZWx5LCBteSBnb2FsIGlzIHRvIGFzc2VzcyB0aGUgY29kZSYjMzk7cyByZXNpbGllbmNlIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBsYXJnZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjc6XHR2b2lkIG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4gIDI4Olx0e1xuICAyOTpcdFx0aWYgKGN0eC1cdTAwM2VjYXBzLVx1MDAzZWVzd2l0Y2hfbWFuYWdlcilcbiAgMzA6XHRcdFx0eGFfZGVzdHJveShcdTAwMjZjdHgtXHUwMDNldnBvcnRzLnZwb3J0X2d2bWlfeGEpO1xuICAzMTpcdH1cbiAgMzI6XHRcbiAgMzM6XHRzdGF0aWMgaW50IGh3c192cG9ydF9hZGRfZ3ZtaShzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsIHUxNiB2cG9ydClcbiAgMzQ6XHR7XG4gIDM1Olx0XHR1MTYgdnBvcnRfZ3ZtaTtcbiAgMzY6XHRcdGludCByZXQ7XG4gIDM3Olx0XG4gIDM4Olx0XHRyZXQgPSBtbHg1aHdzX2NtZF9xdWVyeV9ndm1pKGN0eC1cdTAwM2VtZGV2LCB0cnVlLCB2cG9ydCwgXHUwMDI2dnBvcnRfZ3ZtaSk7XG4gIDM5Olx0XHRpZiAocmV0KVxuICA0MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgNDE6XHRcbiAgNDI6XHRcdHJldCA9IHhhX2luc2VydChcdTAwMjZjdHgtXHUwMDNldnBvcnRzLnZwb3J0X2d2bWlfeGEsIHZwb3J0LFxuICA0MzpcdFx0XHRcdHhhX21rX3ZhbHVlKHZwb3J0X2d2bWkpLCBHRlBfS0VSTkVMKTtcbiAgNDQ6XHRcdGlmIChyZXQpXG4gIDQ1Olx0XHRcdG1seDVod3NfZGJnKGN0eCwgXCYjMzQ7Q291bGRuJiMzOTt0IGluc2VydCBuZXcgdnBvcnQgZ3ZtaSBpbnRvIHhhcnJheSAoJWQpXFxuXCYjMzQ7LCByZXQpO1xuICA0NjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU2NAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDIwOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMb2dpYyBvZiBRdWV1ZSBJbml0aWFsaXphdGlvbiBhbmQgQ2xlYW51cCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgY29kZS4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgaW5pdGlhbGl6aW5nIHNlbmQgcXVldWVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIEJXQyAoQmFuZHdpZHRoIENvbnRyb2wpIGxvY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBlcnJvciBwYXRocyBoZXJlLCBhcyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBwcm9ibGVtcyBsdXJrLiBGaXJzdCwgSSYjMzk7bSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYGN0eC0mZ3Q7cXVldWVzYCwgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAsIGFuZCB0aGUgdmFyaW91cyBga2ZyZWVgIGNhbGxzIHRoYXQgY2FuIGhhcHBlbiB3aGVuIHRoaW5ncyBnbyB3cm9uZy4KCkluaXRpYWxseSwgSSBzZWUgdGhhdCBpZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscyBlYXJseSwgdGhlIGNvZGUgcmV0dXJucyBkaXJlY3RseSB3aXRob3V0IGluY3JlbWVudGluZyBgY3R4LSZndDtxdWV1ZXNgIGluIHNvbWUgcGxhY2VzIGFmdGVyIHRoZSBwYXRjaCAod2hlcmUgdGhlIGluY3JlbWVudCBoYXBwZW5zIGF0IHRoZSBlbmQpIGJ1dCBub3QgYmVmb3JlIHRoZSBwYXRjaC4gVGhpcyBzZWVtZWQgc3VzcGljaW91cywgZXNwZWNpYWxseSBzaW5jZSBgY3R4YCBpcyBmcmVlZCByaWdodCBhZnRlciBpbiB0aGUgbWFpbiBmbG93LCBzbyBJIGFtIGFza2luZyBteXNlbGYgd2hhdCB2YWx1ZSBgY3R4LSZndDtxdWV1ZXNgIGhhcyBhdCB0aGUgdGltZSBvZiB0aGUgZXJyb3IuIERvZXMgaXQgbWF0dGVyLCBhY3R1YWxseT8gQWZ0ZXIgdGhpbmtpbmcgYWJvdXQgaXQsIGluIHRoZSBlcnJvciBjYXNlLCBiZWNhdXNlIG9mIHRoZSBjb250cm9sIGZsb3csIGBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3lgIGlzIG5vdCBjYWxsZWQsIHNvIGBjdHgtJmd0O3F1ZXVlc2AgZG9lcyBub3QgbWF0dGVyLCBhbmQgaXQgY2FuJiMzOTt0IGJlIHVzZWQgYXQgdGhhdCB0aW1lLgoKVGhlbiwgdGhlcmUmIzM5O3MgYW5vdGhlciBwb2ludCB0byBjb25zaWRlciwgd2hpY2ggaXMgdGhhdCBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBjYW4gYWxzbyBmYWlsIExBVEVSLCBhZnRlciBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBtYXkgb3IgbWF5IG5vdCBzdWNjZWVkLiBJIHNjcnV0aW5pemVkIHRoZSBsb29wIGFuZCBhc3NvY2lhdGVkIGNsZWFudXAgZnVuY3Rpb25zIChgX19od3Nfc2VuZF9xdWV1ZXNfY2xvc2VgLCBga2ZyZWVgLCBgaHdzX3NlbmRfcXVldWVzX2J3Y19sb2Nrc19kZXN0cm95YCkgdmVyeSBjYXJlZnVsbHkgaW4gdGhlIHZhcmlvdXMgZmFpbHVyZSBwYXRocyBvZiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYC4gU3BlY2lmaWNhbGx5IEkgd2FzIGNvbmNlcm5lZCB0aGF0IHRoZSBpbmNyZW1lbnQgb2YgYGN0eC0mZ3Q7cXVldWVzYCBpbiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBtaWdodCBsZWFkIHRvIHNvbWUgZm9ybSBvZiBjb3JydXB0aW9uIGlmIG5vdCBoYW5kbGVkIHByb3Blcmx5IGluIHRoZSBlcnJvciBwYXRocywgYnV0IEkgY291bGRuJiMzOTt0IGZpbmQgYSBzY2VuYXJpbyB3aGVyZSB0aGlzIHdhcyB0aGUgY2FzZS4KCkkgZHJpbGxlZCBkb3duIGludG8gYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveWAgYW5kIHRoZSBjYWxjdWxhdGlvbiBvZiBgYndjX3F1ZXVlc2AgaW4gdGhlcmUsIHdoaWNoIGRlcGVuZHMgb24gYGN0eC0mZ3Q7cXVldWVzYC4gVGhlIGNydWNpYWwgaW5zaWdodCwgaG93ZXZlciwgaXMgdGhhdCBpZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCAqZmFpbHMqLCB0aGVuIGBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3lgIGlzICpub3QqIGNhbGxlZC4gQW5kIGlmIGl0IHN1Y2NlZWRzLCB0aGVyZSB3aWxsIGJlIG5vIGlzc3Vlcy4KCkhvd2V2ZXIsIEkgc3RhcnRlZCB0byBxdWVzdGlvbiB0aGUgcmF0aW9uYWxlIG9mIHRoZSBwYXRjaCwgc2luY2UgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgZmFpbHMuIFdoeSB3YXMgdGhlIGluY3JlbWVudCBtb3ZlZD8KTm93LCBJIHRoaW5rIEkgc2VlIGl0LiBCZWZvcmUgdGhlIHBhdGNoLCBpZiBga3phbGxvY19vYmpzYCBpbiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscywgYGN0eC0mZ3Q7cXVldWVzYCBpcyBpbmNyZW1lbnRlZCBCRUZPUkUgdGhlIGZ1bmN0aW9uIHJldHVybnMgd2l0aCAtRU5PTUVNLiBUaGVuIGBjdHhgIHdvdWxkIGJlIGZyZWVkLCBzbyB0aGUgaW5jcmVtZW50IHdvdWxkIHJlc3VsdCBpbiBzb21lIGdhcmJhZ2UsIHdoaWNoIGlzIG5vdyBhdm9pZGVkLiBTbyBub3cgdGhlIGluY3JlbWVudCBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgZW5kLCBhZnRlciBhbGwgdGhlIGFsbG9jYXRpb25zLCBhbmQgaXQgaXMgY29ycmVjdCBiZWNhdXNlIGl0IGRvZXNuJiMzOTt0IGNhdXNlIGFueSBwcm9ibGVtcy4KCkl0JiMzOTtzIGxpa2VseSB0aGUgcGF0Y2ggd2FzIGludHJvZHVjZWQgdG8gcHJldmVudCBhIHBvdGVudGlhbCBoZWFwIGNvcnJ1cHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h3c19jb250ZXh0X2luaXRfaHdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9ODk9c3RhdGljIHZvaWQgaHdzX2NvbnRleHRfY2hlY2tfaHdzX3N1cHAoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTEzMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjEzNDpzdGF0aWMgaW50IGh3c19jb250ZXh0X2luaXRfaHdzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTEzNS1cdFx0XHRcdHN0cnVjdCBtbHg1aHdzX2NvbnRleHRfYXR0ciAqYXR0cilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYz0xODk9c3RydWN0IG1seDVod3NfY29udGV4dCAqbWx4NWh3c19jb250ZXh0X29wZW4oc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMjE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM6MjE2Olx0cmV0ID0gaHdzX2NvbnRleHRfaW5pdF9od3MoY3R4LCBhdHRyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTIxNy1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1Nzk1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1seDVod3NfY29udGV4dF9vcGVuYCBDYWxsKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHdoZXJlIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gUmlnaHQgbm93LCBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCYjMzk7cyBleGNsdXNpdmVseSBjYWxsZWQgZnJvbSBgbWx4NWh3c19jb250ZXh0X29wZW5gLiBCdXQgaG9sZCBvbiwgSSBuZWVkIHRvIGNvbnNpZGVyIGEgcG90ZW50aWFsIGRlcGVuZGVuY3kuIFRoZXJlIHdhcyBhIGNoYW5nZSBpbnZvbHZpbmcgYGN0eC0mZ3Q7cXVldWVzICYjNDM7PSBid2NfcXVldWVzO2AuIEkmIzM5O20gd29uZGVyaW5nIGlmIGl0cyBsb2NhdGlvbiB3YXMgc2hpZnRlZCBkdWUgdG8gYGt6YWxsb2Nfb2Jqc2AgcmVseWluZyBvbiB0aGUgdmFsdWUgb2YgYGN0eC0mZ3Q7cXVldWVzYC4gSG93ZXZlciwgdGhlIGRlZmluaXRpb24gb2YgYGt6YWxsb2Nfb2Jqc2AgaXMgYSBtYWNybywgYW5kIG5vdCBhIGZ1bmN0aW9uIGNhbGwgYXMgc3VjaDoKCmBgYGMKI2RlZmluZSBremFsbG9jX29ianMob2JqLCBuKSBremFsbG9jKHNpemVvZihvYmopICogKG4pLCBHRlBfS0VSTkVMKQpgYGAKClRoZXJlZm9yZSwgdGhlIG1hY3JvIGV4cGFuc2lvbiBkb2VzIG5vdCBkaXJlY3RseSB1c2UgYGN0eC0mZ3Q7cXVldWVzYCBpbiBhbnkgY2FsY3VsYXRpb24sIG9yIHVzZSB0aGF0IHZhcmlhYmxlIGluIHRoZSBtYWNybyBpdHNlbGYuIEkgc2hvdWxkIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBob3cgYGt6YWxsb2Nfb2Jqc2AgaXMgdXNlZCB0byBtYWtlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQmIzM5O3MgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoYXQgYXNwZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jX29ianMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jPTYxOD1od3NfYWN0aW9uX2NyZWF0ZV9nZW5lcmljX2J1bGsoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmMtNjM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYzo2MzU6XHRhY3Rpb24gPSBremFsbG9jX29ianMoKmFjdGlvbiwgYnVsa19zeik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTYzNi1cdGlmICghYWN0aW9uKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmM9MTM2MT1tbHg1aHdzX2FjdGlvbl9jcmVhdGVfZGVzdF9hcnJheShzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsIHNpemVfdCBudW1fZGVzdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTEzODUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jOjEzODY6XHRkZXN0X2xpc3QgPSBremFsbG9jX29ianMoKmRlc3RfbGlzdCwgbnVtX2Rlc3QpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYy0xMzg3LVx0aWYgKCFkZXN0X2xpc3QpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYz0xNDY1PW1seDVod3NfYWN0aW9uX2NyZWF0ZV9pbnNlcnRfaGVhZGVyKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTE0NzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jOjE0ODA6XHRyZWZvcm1hdF9oZHJzID0ga3phbGxvY19vYmpzKCpyZWZvcm1hdF9oZHJzLCBudW1fb2ZfaGRycyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTE0ODEtXHRpZiAoIXJlZm9ybWF0X2hkcnMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYz0yNjE4PW1seDVod3NfYWN0aW9uX3RlbXBsYXRlX2NyZWF0ZShlbnVtIG1seDVod3NfYWN0aW9uX3R5cGUgYWN0aW9uX3R5cGVbXSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTI2MzEtXHRhdC1cdTAwM2VudW1fYWN0aW9ucyA9IG51bV9hY3Rpb25zIC0gMTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmM6MjYzMjpcdGF0LVx1MDAzZWFjdGlvbl90eXBlX2FyciA9IGt6YWxsb2Nfb2JqcygqYWN0aW9uX3R5cGUsIG51bV9hY3Rpb25zKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmMtMjYzMy1cdGlmICghYXQtXHUwMDNlYWN0aW9uX3R5cGVfYXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uX3N0ZV9wb29sLmM9MzI2PWludCBtbHg1aHdzX2FjdGlvbl9zdGVfcG9vbF9pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbl9zdGVfcG9vbC5jLTMzMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uX3N0ZV9wb29sLmM6MzMyOlx0cG9vbCA9IGt6YWxsb2Nfb2JqcygqcG9vbCwgcXVldWVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uX3N0ZV9wb29sLmMtMzMzLVx0aWYgKCFwb29sKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM9MjI3PWludCBtbHg1aHdzX2J3Y19tYXRjaGVyX2NyZWF0ZV9zaW1wbGUoc3RydWN0IG1seDVod3NfYndjX21hdGNoZXIgKmJ3Y19tYXRjaGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYzoyNDA6XHRid2NfbWF0Y2hlci1cdTAwM2VydWxlcyA9IGt6YWxsb2Nfb2JqcygqYndjX21hdGNoZXItXHUwMDNlcnVsZXMsIGJ3Y19xdWV1ZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYy0yNDEtXHRpZiAoIWJ3Y19tYXRjaGVyLVx1MDAzZXJ1bGVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjU2LVx0YndjX21hdGNoZXItXHUwMDNlc2l6ZV9vZl9hdF9hcnJheSA9IE1MWDVIV1NfQldDX01BVENIRVJfQVRUQUNIX0FUX05VTTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM6MjU3Olx0YndjX21hdGNoZXItXHUwMDNlYXQgPSBremFsbG9jX29ianMoKmJ3Y19tYXRjaGVyLVx1MDAzZWF0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYy0yNTgtXHRcdFx0XHQgICAgICAgYndjX21hdGNoZXItXHUwMDNlc2l6ZV9vZl9hdF9hcnJheSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9kZWZpbmVyLmM9MTY4ND1od3NfZGVmaW5lcl9hbGxvY19jb21wcmVzc2VkX2ZjKHN0cnVjdCBtbHg1aHdzX2RlZmluZXJfZmMgKmZjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZGVmaW5lci5jLTE2OTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2RlZmluZXIuYzoxNjkxOlx0Y29tcHJlc3NlZF9mYyA9IGt6YWxsb2Nfb2JqcygqY29tcHJlc3NlZF9mYywgZGVmaW5lcl9zaXplKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZGVmaW5lci5jLTE2OTItXHRpZiAoIWNvbXByZXNzZWRfZmMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9kZWZpbmVyLmM9MTcyOD1od3NfZGVmaW5lcl9hbGxvY19mYyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9kZWZpbmVyLmMtMTczMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZGVmaW5lci5jOjE3MzQ6XHRmYyA9IGt6YWxsb2Nfb2JqcygqZmMsIGxlbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2RlZmluZXIuYy0xNzM1LVx0aWYgKCFmYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jPTczOT1zdGF0aWMgaW50IG1seDVfZnNfZnRlX2dldF9od3NfYWN0aW9ucyhzdHJ1Y3QgbWx4NV9mbG93X3Jvb3RfbmFtZXNwYWNlICpucyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jLTc2MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmM6NzYyOlx0KnJhY3Rpb25zID0ga3phbGxvY19vYmpzKCoqcmFjdGlvbnMsIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9NQVgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYy03NjMtXHRpZiAoISpyYWN0aW9ucykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmMtNzY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYzo3Njg6XHRmc19hY3Rpb25zID0ga3phbGxvY19vYmpzKCpmc19hY3Rpb25zLCBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTUFYKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmMtNzY5LVx0aWYgKCFmc19hY3Rpb25zKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYy03NzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jOjc3NDpcdGRlc3RfYWN0aW9ucyA9IGt6YWxsb2Nfb2JqcygqZGVzdF9hY3Rpb25zLCBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTUFYKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmMtNzc1LVx0aWYgKCFkZXN0X2FjdGlvbnMpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21hdGNoZXIuYz0xMDcyPWh3c19tYXRjaGVyX3NldF90ZW1wbGF0ZXMoc3RydWN0IG1seDVod3NfbWF0Y2hlciAqbWF0Y2hlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21hdGNoZXIuYy0xMDg2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tYXRjaGVyLmM6MTA4NzpcdG1hdGNoZXItXHUwMDNlbXQgPSBremFsbG9jX29ianMoKm1hdGNoZXItXHUwMDNlbXQsIG51bV9vZl9tdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21hdGNoZXIuYy0xMDg4LVx0aWYgKCFtYXRjaGVyLVx1MDAzZW10KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jPTcxMT1zdGF0aWMgaW50IGh3c19zZW5kX3JpbmdfYWxsb2Nfc3Eoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtNzMzLVx0YnVmX3N6ID0gcXVldWUtXHUwMDNlbnVtX2VudHJpZXMgKiBNQVhfV1FFU19QRVJfUlVMRTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjczNDpcdHNxLVx1MDAzZWRlcF93cWUgPSBremFsbG9jX29ianMoKnNxLVx1MDAzZWRlcF93cWUsIHF1ZXVlLVx1MDAzZW51bV9lbnRyaWVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTczNS1cdGlmICghc3EtXHUwMDNlZGVwX3dxZSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jPTEwNTU9c3RhdGljIGludCBtbHg1aHdzX3NlbmRfcXVldWVfb3BlbihzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTA2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjEwNjY6XHRxdWV1ZS1cdTAwM2Vjb21wbGV0ZWQuZW50cmllcyA9IGt6YWxsb2Nfb2JqcyhxdWV1ZS1cdTAwM2Vjb21wbGV0ZWQuZW50cmllc1swXSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTEwNjctXHRcdFx0XHRcdFx0cXVldWUtXHUwMDNlbnVtX2VudHJpZXMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jPTExMTU9c3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExMjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYzoxMTI0Olx0Y3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzID0ga3phbGxvY19vYmpzKCpjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTI1LVx0XHRcdFx0XHRcdCBid2NfcXVldWVzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM6MTEzMDpcdGN0eC1cdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzID0ga3phbGxvY19vYmpzKCpjdHgtXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExMzEtXHRcdFx0XHRcdFx0YndjX3F1ZXVlcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM9MTE1MD1pbnQgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM6MTE2NTpcdGN0eC1cdTAwM2VzZW5kX3F1ZXVlID0ga3phbGxvY19vYmpzKCpjdHgtXHUwMDNlc2VuZF9xdWV1ZSwgY3R4LVx1MDAzZXF1ZXVlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTY2LVx0aWYgKCFjdHgtXHUwMDNlc2VuZF9xdWV1ZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTM2NgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDU4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBremFsbG9jX29ianMgYW5kIG51bV9oYXNoX2RlZmluZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYGt6YWxsb2Nfb2Jqc2AgaXNuJiMzOTt0IHVzaW5nIGBjdHgtJmd0O3F1ZXVlc2AgZGlyZWN0bHksIHdoaWNoIGlzIGdvb2QuIFRoZW4sIGxvb2tpbmcgYXQgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAsIEkgbm90ZSB0aGUgdXNlIG9mIGBremFsbG9jX29ianNgIHRoZXJlIGFuZCBob3cgYGN0eC0mZ3Q7cXVldWVzYCBtaWdodCBiZSBpbmNyZW1lbnRlZCBpZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscy4gQnV0IHRoZW4sIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIHJldHVybnMgYW4gZXJyb3IsIGFuZCB0aGUgY2FsbGVyIGJhaWxzIG91dCBjbGVhbmx5LCBldmVudHVhbGx5IGZyZWVpbmcgYGN0eGAuIFNvLCB0aGF0IGluY3JlbWVudCB0byBgY3R4LSZndDtxdWV1ZXNgIHNlZW1zIGhhcm1sZXNzIGFmdGVyIGFsbCDigJMgaXQmIzM5O3MgY2xlYW5lZCB1cCBpbiB0aGUgZXJyb3IgcGF0aC4KCkhvd2V2ZXIsIEkgcGF1c2VkIGZvciBhIG1vbWVudCB0byBjb25zaWRlciB3aGV0aGVyIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGNvdWxkIGJlIGNhbGxlZCBlbHNld2hlcmUuIEEgcXVpY2sgY2hlY2sgY29uZmlybWVkIGl0JiMzOTtzIG5vdC4gSXQgc2VlbXMgdGhpcyBtaWdodCBqdXN0IGJlIGEgbG9naWNhbCBjbGVhbnVwLCBhIHdheSB0byBhZGhlcmUgdG8gdGhlICYjMzQ7ZG9uJiMzOTt0IG1vZGlmeSBzdGF0ZSB1bnRpbCBhbGxvY2F0aW9ucyBzdWNjZWVkJiMzNDsgcHJpbmNpcGxlLCB3aGljaCBpcyBhIGNvbW1vbiBrZXJuZWwgcHJhY3RpY2UuCgpOb3csIGxldCYjMzk7cyBzaGlmdCBmb2N1cyB0byB0aGUgY2hhbmdlcyBpbiBgY21kLmNgLiBJIG5vdGljZSB0aGUgcmVtb3ZhbCBvZiBzZXR0aW5nIGBudW1faGFzaF9kZWZpbmVyYCBpbiBgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZWAuIEhtbSwgaW50ZXJlc3RpbmcuIFdoeSB3YXMgdGhpcyByZW1vdmVkPyBQZXJoYXBzIHRoaXMgZmllbGQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSwgb3IgbWF5YmUgaXQgd2FzIGludHJvZHVjaW5nIGlzc3Vlcz8gSWYgaXQgKndhcyogYmVpbmcgc2V0LCBhbmQgaW5jb3JyZWN0bHkgY29uZmlndXJlZCBvciB1bnN1cHBvcnRlZCBieSB0aGUgZmlybXdhcmUsIGl0IGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgRlcgZXJyb3JzLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBkaWcgZnVydGhlciBpbnRvIHRoZSBjb250ZXh0IG9mIGBydGNfYXR0ci0mZ3Q7bnVtX2hhc2hfZGVmaW5lcmAgYW5kIHNlZSB3aGF0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgd2FzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudW1faGFzaF9kZWZpbmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYz0xNTg1PWh3c19hY3Rpb25fY3JlYXRlX2Rlc3RfbWF0Y2hfcmFuZ2VfdGFibGUoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmMtMTYyNS1cdHJ0Y19hdHRyLm1pc3NfZnRfaWQgPSBtaXNzX2Z0X2lkO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYzoxNjI2Olx0cnRjX2F0dHIubnVtX2hhc2hfZGVmaW5lciA9IDE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTE2MjctXHRydGNfYXR0ci51cGRhdGVfaW5kZXhfbW9kZSA9IE1MWDVfSUZDX1JUQ19TVEVfVVBEQVRFX01PREVfQllfSEFTSDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jPTM3Mj1pbnQgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jLTQwMy1cdE1MWDVfU0VUKHJ0YywgYXR0ciwgdGFibGVfdHlwZSwgcnRjX2F0dHItXHUwMDNldGFibGVfdHlwZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jOjQwNDpcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbnVtX2hhc2hfZGVmaW5lciwgcnRjX2F0dHItXHUwMDNlbnVtX2hhc2hfZGVmaW5lcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jLTQwNS1cdE1MWDVfU0VUKHJ0YywgYXR0ciwgbWF0Y2hfZGVmaW5lcl8wLCBydGNfYXR0ci1cdTAwM2VtYXRjaF9kZWZpbmVyXzApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmM9OTM4PWludCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMtMTEzNi1cdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYzoxMTM3Olx0XHRcdFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnJ0Y19tYXhfbnVtX2hhc2hfZGVmaW5lcl9nZW5fd3FlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMtMTEzOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5oPTcwPXN0cnVjdCBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlX2F0dHIge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmgtNzctXHR1OCBhY2Nlc3NfaW5kZXhfbW9kZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmg6Nzg6XHR1OCBudW1faGFzaF9kZWZpbmVyO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuaC03OS1cdHU4IGxvZ19kZXB0aDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21hdGNoZXIuYz00Njg9c3RhdGljIGludCBod3NfbWF0Y2hlcl9jcmVhdGVfcnRjKHN0cnVjdCBtbHg1aHdzX21hdGNoZXIgKm1hdGNoZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tYXRjaGVyLmMtNDk3LVx0XHRcdE1MWDVfSUZDX1JUQ19TVEVfVVBEQVRFX01PREVfQllfT0ZGU0VUO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tYXRjaGVyLmM6NDk4Olx0XHRydGNfYXR0ci5udW1faGFzaF9kZWZpbmVyID0gMTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWF0Y2hlci5jLTQ5OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3BybS5oPTE0OD1zdHJ1Y3QgbWx4NV9pZmNfcnRjX2JpdHMge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvcHJtLmgtMTU2LVx0dTggYWNjZXNzX2luZGV4X21vZGVbMHgzXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvcHJtLmg6MTU3Olx0dTggbnVtX2hhc2hfZGVmaW5lclsweDRdO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9wcm0uaC0xNTgtXHR1OCB1cGRhdGVfbWV0aG9kWzB4MV07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTU1CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlYCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBudW1faGFzaF9kZWZpbmVyYCByZWFsbHkgYmVpbmcgYXNzaWduZWQgYSB2YWx1ZSB0d2ljZSB3aXRoaW4gdGhlIGBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlYCBmdW5jdGlvbj8gVGhhdCBmZWVscy4uLiB1bnVzdWFsLiBMZXQgbWUgcHVsbCB1cCB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24uIFJpZ2h0LCBpdCYjMzk7cyBpbiBgY21kLmNgLCBzbyBJJiMzOTtsbCBuYXZpZ2F0ZSB0aGVyZSBhbmQgZGlnIGludG8gdGhlIGNvZGUuIEdvdHRhIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHdoeSB0aGV5JiMzOTtyZSBwb3RlbnRpYWxseSBvdmVyd3JpdGluZyB0aGF0IHZhcmlhYmxlLiBJcyB0aGVyZSBhIGNvbmRpdGlvbmFsIGludm9sdmVkIHRoYXQgSSBtaXNzZWQ/IEFyZSB0aGV5IGhhbmRsaW5nIGRpZmZlcmVudCBSVEMgY29uZmlndXJhdGlvbnM/IE9yIGlzIHRoaXMgYSBwb3RlbnRpYWwgYnVnIHRoYXQgbmVlZHMgdG8gYmUgYWRkcmVzc2VkPyBUaW1lIHRvIGRpdmUgaW4gYW5kIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBwcm9ibGVtLCBvciBpZiB0aGUgbG9naWMgaXMganVzdGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MDpcdFx0XHQgTUxYNV9JRkNfUlRDX1NURV9GT1JNQVRfOERXKTtcbiAzOTE6XHRcbiAzOTI6XHRcdGlmIChydGNfYXR0ci1cdTAwM2Vpc19zY25kX3JhbmdlKSB7XG4gMzkzOlx0XHRcdE1MWDVfU0VUKHJ0YywgYXR0ciwgc3RlX2Zvcm1hdF8xLCBNTFg1X0lGQ19SVENfU1RFX0ZPUk1BVF9SQU5HRSk7XG4gMzk0Olx0XHRcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbnVtX21hdGNoX3N0ZSwgMik7XG4gMzk1Olx0XHR9XG4gMzk2Olx0XG4gMzk3Olx0XHRNTFg1X1NFVChydGMsIGF0dHIsIHBkLCBydGNfYXR0ci1cdTAwM2VwZCk7XG4gMzk4Olx0XHRNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9tZXRob2QsIHJ0Y19hdHRyLVx1MDAzZWZ3X2dlbl93cWUpO1xuIDM5OTpcdFx0TUxYNV9TRVQocnRjLCBhdHRyLCB1cGRhdGVfaW5kZXhfbW9kZSwgcnRjX2F0dHItXHUwMDNldXBkYXRlX2luZGV4X21vZGUpO1xuIDQwMDpcdFx0TUxYNV9TRVQocnRjLCBhdHRyLCBhY2Nlc3NfaW5kZXhfbW9kZSwgcnRjX2F0dHItXHUwMDNlYWNjZXNzX2luZGV4X21vZGUpO1xuIDQwMTpcdFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfZGVwdGgsIHJ0Y19hdHRyLVx1MDAzZWxvZ19kZXB0aCk7XG4gNDAyOlx0XHRNTFg1X1NFVChydGMsIGF0dHIsIGxvZ19oYXNoX3NpemUsIHJ0Y19hdHRyLVx1MDAzZWxvZ19zaXplKTtcbiA0MDM6XHRcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdGFibGVfdHlwZSwgcnRjX2F0dHItXHUwMDNldGFibGVfdHlwZSk7XG4gNDA0Olx0XHRNTFg1X1NFVChydGMsIGF0dHIsIG51bV9oYXNoX2RlZmluZXIsIHJ0Y19hdHRyLVx1MDAzZW51bV9oYXNoX2RlZmluZXIpO1xuIDQwNTpcdFx0TUxYNV9TRVQocnRjLCBhdHRyLCBtYXRjaF9kZWZpbmVyXzAsIHJ0Y19hdHRyLVx1MDAzZW1hdGNoX2RlZmluZXJfMCk7XG4gNDA2Olx0XHRNTFg1X1NFVChydGMsIGF0dHIsIG1hdGNoX2RlZmluZXJfMSwgcnRjX2F0dHItXHUwMDNlbWF0Y2hfZGVmaW5lcl8xKTtcbiA0MDc6XHRcdE1MWDVfU0VUKHJ0YywgYXR0ciwgc3RjX2lkLCBydGNfYXR0ci1cdTAwM2VzdGNfYmFzZSk7XG4gNDA4Olx0XHRNTFg1X1NFVChydGMsIGF0dHIsIHN0ZV90YWJsZV9iYXNlX2lkLCBydGNfYXR0ci1cdTAwM2VzdGVfYmFzZSk7XG4gNDA5Olx0XHRNTFg1X1NFVChydGMsIGF0dHIsIG1pc3NfZmxvd190YWJsZV9pZCwgcnRjX2F0dHItXHUwMDNlbWlzc19mdF9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDEwCgkJCQkJCQlvdXRwdXQ6IDEzOAoJCQkJCQkJdGhvdWdodHM6IDMwNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IEEgRGVlcCBEaXZlIGludG8gTWVsbGFub3ggbWx4NSBEcml2ZXIgTW9kaWZpY2F0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBhIGZldyB0aGluZ3M6IGR1cGxpY2F0ZSBsaW5lcywgZXJyb3IgbWVzc2FnZSBlbmhhbmNlbWVudHMsIGFuZCB3aGF0IGxvb2tlZCBsaWtlIGEgcG9zc2libGUgYnVnIGZpeC4gRGlnZ2luZyBkZWVwZXIsIGl0JiMzOTtzIGNsZWFyIHRoZSBmaXJzdCB0aGluZyBpcyBhIHNpbXBsZSByZW1vdmFsIG9mIGEgcmVkdW5kYW50IGBNTFg1X1NFVGAgbWFjcm8gY2FsbCBpbiBgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZWAuIE5vIHJlYWwgZnVuY3Rpb25hbCBjaGFuZ2UgdGhlcmUsIGp1c3QgdGlkeWluZyB1cCB0aGUgY29kZS4gVGhlbiwgdGhlcmUmIzM5O3MgYW4gYWRkaXRpb24gb2YgYSBzeW5kcm9tZSB0byBhbiBlcnJvciBtZXNzYWdlLCBhbmQgYSByZW1vdmFsIG9mIGEgZHVwbGljYXRlIGBtbHg1X2NtZF9leGVjYCBjYWxsIGluIGFub3RoZXIgZnVuY3Rpb24uIE1vcmUgbm9pc2UgcmVkdWN0aW9uIHRoYW4gYW55dGhpbmcuIFRoZXNlIGRvbiYjMzk7dCBzZWVtIGxpa2UgdGhleSYjMzk7cmUgd29ydGggZnV6emluZy4KCk5vdywgdGhvc2UgaGVscGVyIGZ1bmN0aW9ucyBiZWluZyBhZGRlZCB0byBjb252ZXJ0IGVudW0vc3RhdHVzIHRvIHN0cmluZyBmb3IgZXJyb3IgbWVzc2FnZXMgaW4gdGhlIGBzZW5kLmNgIGFyZSBwdXJlbHkgZGVjb3JhdGl2ZS4gU2FtZSB3aXRoIGBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWVgLCBpdCBwcmludHMgbW9yZSBpbmZvIC0gbG9nZ2luZy4gTm90IGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpUaGF0IGxlYXZlcyB0aGUgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgY2hhbmdlLiBJdCBsb29rcyBsaWtlIGBjdHgtJmd0O3F1ZXVlc2Agd2FzIGluY3JlbWVudGVkIGJlZm9yZSBga3phbGxvY19vYmpzYCBhbGxvY2F0aW9ucywgcG9zc2libHkgbGVhZGluZyB0byBhbiBpbmNvcnJlY3QgaW5jcmVtZW50IGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gSSBpbml0aWFsbHkgdGhvdWdodCBpdCB3YXMgYSBwcm9ibGVtLCBidXQgYWZ0ZXIgdHJhY2luZyB0aGUgY2FsbCBzdGFjaywgaXQgdHVybnMgb3V0IHRoYXQgb24gYW4gYWxsb2NhdGlvbiBmYWlsdXJlIHRoZSBjb250ZXh0IGlzIGZyZWVkIGltbWVkaWF0ZWx5LiBTbyB0aGUgaW5jcmVtZW50ZWQgYGN0eC0mZ3Q7cXVldWVzYCB2YXJpYWJsZSBpcyBoYXJtbGVzcy4gQSB0aGVvcmV0aWNhbCBidWcsIGJ1dCBubyBpbXBhY3QuCgpMZXQmIzM5O3MgbG9vayBtb3JlIGNsb3NlbHkgYXQgdGhlIGR1cGxpY2F0ZSBgbWx4NV9jbWRfZXhlY2AgcmVtb3ZhbC4gSXQgd2FzIHF1ZXJ5aW5nIHRoZSBIQ0EgY2Fwcy4gVGhlcmUgd2VyZSB0d28gY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4gUmVtb3ZpbmcgdGhlIHNlY29uZCBjYWxsIGp1c3QgcHJldmVudHMgYSByZWR1bmRhbnQgZXhlY3V0aW9uIG9mIHRoZSBzYW1lIGNvbW1hbmQuIE5vIG5ldyBmdW5jdGlvbmFsaXR5IG9yIGJ1ZyBmaXhlcy4gSnVzdCBhIG1pbm9yIG9wdGltaXphdGlvbi4gQW5kIGluIHRoZSBsYXJnZXIgcGljdHVyZSwgaXQmIzM5O3MgYSBtaW5vciBvcHRpbWl6YXRpb24sIGFuZCBpdCYjMzk7cyBub3Qgd29ydGggZnV6emluZy4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgY29zbWV0aWM6IGVycm9yIG1lc3NhZ2UgaW1wcm92ZW1lbnRzLCByZWR1bmRhbnQgY29kZSByZW1vdmFsLCBhbmQgYSBoYXJtbGVzcyBidWcgZml4LiBQbHVzLCB0aGlzIGlzIGFsbCBoYXBwZW5pbmcgd2l0aGluIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgdGhhdCBpc24mIzM5O3QgcmVhZGlseSBlbXVsYXRlZC4gVGhlcmVmb3JlLCB0aGUgYW5zd2VyIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIG9mIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMgKGVuaGFuY2luZyBlcnJvciBtZXNzYWdlcyB3aXRoIHN0cmluZyByZXByZXNlbnRhdGlvbnMgYW5kIGFkZGl0aW9uYWwgZGV0YWlscyksIHJlbW92YWwgb2YgcmVkdW5kYW50IGNvZGUgKGEgZHVwbGljYXRlIE1MWDVfU0VUIGFuZCBhIGR1cGxpY2F0ZSBtbHg1X2NtZF9leGVjIHRoYXQgaWdub3JlZCBpdHMgb3V0cHV0KSwgYW5kIGEgdGhlb3JldGljYWwgZXJyb3IgcGF0aCBmaXggaW4gaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0IHRoYXQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IGJlY2F1c2UgdGhlIGNvbnRleHQgaXMgZnJlZWQgaW1tZWRpYXRlbHkgb24gZmFpbHVyZS4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgTWVsbGFub3ggbWx4NSBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25zaXN0cyBvZiBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIChlbmhhbmNpbmcgZXJyb3IgbWVzc2FnZXMgd2l0aCBzdHJpbmcgcmVwcmVzZW50YXRpb25zIGFuZCBhZGRpdGlvbmFsIGRldGFpbHMpLCByZW1vdmFsIG9mIHJlZHVuZGFudCBjb2RlIChhIGR1cGxpY2F0ZSBNTFg1X1NFVCBhbmQgYSBkdXBsaWNhdGUgbWx4NV9jbWRfZXhlYyB0aGF0IGlnbm9yZWQgaXRzIG91dHB1dCksIGFuZCBhIHRoZW9yZXRpY2FsIGVycm9yIHBhdGggZml4IGluIGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdCB0aGF0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBiZWNhdXNlIHRoZSBjb250ZXh0IGlzIGZyZWVkIGltbWVkaWF0ZWx5IG9uIGZhaWx1cmUuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyBhcmUgaW4gdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUxOjQ4LjA1MzcxMTE0N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjQyMjI4MDI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgb2YgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyAoZW5oYW5jaW5nIGVycm9yIG1lc3NhZ2VzIHdpdGggc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBhbmQgYWRkaXRpb25hbCBkZXRhaWxzKSwgcmVtb3ZhbCBvZiByZWR1bmRhbnQgY29kZSAoYSBkdXBsaWNhdGUgTUxYNV9TRVQgYW5kIGEgZHVwbGljYXRlIG1seDVfY21kX2V4ZWMgdGhhdCBpZ25vcmVkIGl0cyBvdXRwdXQpLCBhbmQgYSB0aGVvcmV0aWNhbCBlcnJvciBwYXRoIGZpeCBpbiBod3NfYndjX3NlbmRfcXVldWVzX2luaXQgdGhhdCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3QgYmVjYXVzZSB0aGUgY29udGV4dCBpcyBmcmVlZCBpbW1lZGlhdGVseSBvbiBmYWlsdXJlLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgYXJlIGluIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUxOjQ4LjA1MzcxNzQ1N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwODg3NDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzNlMzA4M2M0OTQ3MDQ4ZjdiMTdhODVjN2VkZTE5ZDJhNmQwYjI1MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAyMjo1MTo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1xcbmluZGV4IGU2MjRmNWRhOTZjODFiLi5hZmU1ODE4Mjk0ZDk1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1xcbkBAIC0zOTgsNyArMzk4LDYgQEAgaW50IG1seDVod3NfY21kX3J0Y19jcmVhdGUoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuIFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdXBkYXRlX21ldGhvZCwgcnRjX2F0dHItXFx1MDAzZWZ3X2dlbl93cWUpO1xcbiBcXHRNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9pbmRleF9tb2RlLCBydGNfYXR0ci1cXHUwMDNldXBkYXRlX2luZGV4X21vZGUpO1xcbiBcXHRNTFg1X1NFVChydGMsIGF0dHIsIGFjY2Vzc19pbmRleF9tb2RlLCBydGNfYXR0ci1cXHUwMDNlYWNjZXNzX2luZGV4X21vZGUpO1xcbi1cXHRNTFg1X1NFVChydGMsIGF0dHIsIG51bV9oYXNoX2RlZmluZXIsIHJ0Y19hdHRyLVxcdTAwM2VudW1faGFzaF9kZWZpbmVyKTtcXG4gXFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfZGVwdGgsIHJ0Y19hdHRyLVxcdTAwM2Vsb2dfZGVwdGgpO1xcbiBcXHRNTFg1X1NFVChydGMsIGF0dHIsIGxvZ19oYXNoX3NpemUsIHJ0Y19hdHRyLVxcdTAwM2Vsb2dfc2l6ZSk7XFxuIFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdGFibGVfdHlwZSwgcnRjX2F0dHItXFx1MDAzZXRhYmxlX3R5cGUpO1xcbkBAIC02MTEsOSArNjEwLDExIEBAIGludCBtbHg1aHdzX2NtZF9zdGNfbW9kaWZ5KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbiBcXG4gXFx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBzaXplb2Yob3V0KSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcIkZhaWxlZCB0byBtb2RpZnkgU1RDIEZXIGFjdGlvbl90eXBlICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgICBzdGNfYXR0ci1cXHUwMDNlYWN0aW9uX3R5cGUpO1xcbi1cXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LFxcbitcXHRcXHRcXHQgICAgICBcXFwiRmFpbGVkIHRvIG1vZGlmeSBTVEMgYWN0aW9uX3R5cGUgJWQsIGVyciAlZCwgc3luZHJvbWUgMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgc3RjX2F0dHItXFx1MDAzZWFjdGlvbl90eXBlLCByZXQsXFxuK1xcdFxcdFxcdCAgICAgIE1MWDVfR0VUKGdlbmVyYWxfb2JqX291dF9jbWRfaGRyLFxcbitcXHRcXHRcXHRcXHQgICAgICAgb3V0LCBzeW5kcm9tZSkpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC0xMTgxLDEyICsxMTgyLDYgQEAgaW50IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGNhcGFiaWxpdHkuZXN3X2NhcC5tZXJnZWRfZXN3aXRjaCk7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcIkZhaWxlZCB0byBxdWVyeSBkZXZpY2UgYXR0cmlidXRlc1xcXFxuXFxcIik7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcbiBcXHRzbnByaW50ZihjYXBzLVxcdTAwM2Vmd192ZXIsIHNpemVvZihjYXBzLVxcdTAwM2Vmd192ZXIpLCBcXFwiJWQuJWQuJWRcXFwiLFxcbiBcXHRcXHQgZndfcmV2X21haihtZGV2KSwgZndfcmV2X21pbihtZGV2KSwgZndfcmV2X3N1YihtZGV2KSk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXFxuaW5kZXggYWVkMDA5YWVjNGZlODcuLmYwYzNhMmJkYTBjNzM3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNcXG5AQCAtMzQ0LDYgKzM0NCwzNiBAQCBod3Nfc2VuZF9lbmdpbmVfdXBkYXRlX3J1bGVfcmVzaXplKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgY29uc3QgY2hhciAqaHdzX3J1bGVfc3RhdHVzX3RvX3N0cmluZyhlbnVtIG1seDVod3NfcnVsZV9zdGF0dXMgc3RhdHVzKVxcbit7XFxuK1xcdHN3aXRjaCAoc3RhdHVzKSB7XFxuK1xcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19DUkVBVElORzogcmV0dXJuIFxcXCJDUkVBVElOR1xcXCI7XFxuK1xcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19VUERBVElORzogcmV0dXJuIFxcXCJVUERBVElOR1xcXCI7XFxuK1xcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19ERUxFVElORzogcmV0dXJuIFxcXCJERUxFVElOR1xcXCI7XFxuK1xcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19GQUlMSU5HOiByZXR1cm4gXFxcIkZBSUxJTkdcXFwiO1xcbitcXHRkZWZhdWx0OiByZXR1cm4gXFxcIk5BXFxcIjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZyh1OCBzdGF0ZSlcXG4re1xcbitcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuK1xcdGNhc2UgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9JRExFOiByZXR1cm4gXFxcIklETEVcXFwiO1xcbitcXHRjYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORzogcmV0dXJuIFxcXCJXUklUSU5HXFxcIjtcXG4rXFx0Y2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HOiByZXR1cm4gXFxcIkRFTEVUSU5HXFxcIjtcXG4rXFx0ZGVmYXVsdDogcmV0dXJuIFxcXCJVTktOT1dOXFxcIjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmcodTggc3luZHJvbWUpXFxuK3tcXG4rXFx0c3dpdGNoIChzeW5kcm9tZSkge1xcbitcXHRjYXNlIDE6IHJldHVybiBcXFwiU0VUX0ZMT1dfRkFJTFxcXCI7XFxuK1xcdGNhc2UgMjogcmV0dXJuIFxcXCJESVNBQkxFX0ZMT1dfRkFJTFxcXCI7XFxuK1xcdGRlZmF1bHQ6IHJldHVybiBcXFwiVU5LTk9XTlxcXCI7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1seDVod3Nfc2VuZF9yaW5nX3ByaXYgKnByaXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXFxuQEAgLTM1Miw2ICszODIsNyBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxcbiBcXHRzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHggPSBwcml2LVxcdTAwM2VydWxlLVxcdTAwM2VtYXRjaGVyLVxcdTAwM2V0YmwtXFx1MDAzZWN0eDtcXG4gXFx0dTMyIG9wY29kZSA9IGNxZSA/IGdldF9jcWVfb3Bjb2RlKGNxZSkgOiAwO1xcbiBcXHRzdHJ1Y3QgbWx4NWh3c19ydWxlICpydWxlID0gcHJpdi1cXHUwMDNlcnVsZTtcXG4rXFx0dTggc3luZHJvbWU7XFxuIFxcbiBcXHQvKiBJZiBzb21ldGhpbmcgYmFkIGhhcHBlbnMgYW5kIGxvdHMgb2YgcnVsZXMgYXJlIGZhaWxpbmcsIHdlIGRvbid0XFxuIFxcdCAqIHdhbnQgdG8gcG9sbHV0ZSBkbWVzZy4gUHJpbnQgb25seSB0aGUgZmlyc3QgYmFkIGNxZSBwZXIgZW5naW5lLFxcbkBAIC0zNjQsMjYgKzM5NSwxNyBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxcbiBcXG4gXFx0aWYgKG1seDVod3NfcnVsZV9tb3ZlX2luX3Byb2dyZXNzKHJ1bGUpKVxcbiBcXHRcXHRtbHg1aHdzX2VycihjdHgsXFxuLVxcdFxcdFxcdCAgICBcXFwiLS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gbW92aW5nIHJ1bGU6IHBoYXNlICVzLCB3cWVzIGxlZnQgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBcXFwiLS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gbW92aW5nIHJ1bGU6IHBoYXNlICVzICglZCksIHdxZXMgbGVmdCAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXFxuLVxcdFxcdFxcdCAgICBydWxlLVxcdTAwM2VyZXNpemVfaW5mby1cXHUwMDNlc3RhdGUgPT1cXG4tXFx0XFx0XFx0ICAgIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORyA/IFxcXCJXUklUSU5HXFxcIiA6XFxuLVxcdFxcdFxcdCAgICBydWxlLVxcdTAwM2VyZXNpemVfaW5mby1cXHUwMDNlc3RhdGUgPT1cXG4tXFx0XFx0XFx0ICAgIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfREVMRVRJTkcgPyBcXFwiREVMRVRJTkdcXFwiIDpcXG4tXFx0XFx0XFx0ICAgIFxcXCJVTktOT1dOXFxcIixcXG4rXFx0XFx0XFx0ICAgIGh3c19ydWxlX3Jlc2l6ZV9zdGF0ZV90b19zdHJpbmdcXG4rXFx0XFx0XFx0XFx0KHJ1bGUtXFx1MDAzZXJlc2l6ZV9pbmZvLVxcdTAwM2VzdGF0ZSksXFxuK1xcdFxcdFxcdCAgICBydWxlLVxcdTAwM2VyZXNpemVfaW5mby1cXHUwMDNlc3RhdGUsXFxuIFxcdFxcdFxcdCAgICBydWxlLVxcdTAwM2VwZW5kaW5nX3dxZXMpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdG1seDVod3NfZXJyKGN0eCxcXG4gXFx0XFx0XFx0ICAgIFxcXCItLS0gcnVsZSAweCUwOGxseDogZXJyb3IgY29tcGxldGlvbiAlcyAoJWQpLCB3cWVzIGxlZnQgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxcbi1cXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlc3RhdHVzID09XFxuLVxcdFxcdFxcdCAgICBNTFg1SFdTX1JVTEVfU1RBVFVTX0NSRUFUSU5HID8gXFxcIkNSRUFUSU5HXFxcIiA6XFxuLVxcdFxcdFxcdCAgICBydWxlLVxcdTAwM2VzdGF0dXMgPT1cXG4tXFx0XFx0XFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfREVMRVRJTkcgPyBcXFwiREVMRVRJTkdcXFwiIDpcXG4tXFx0XFx0XFx0ICAgIHJ1bGUtXFx1MDAzZXN0YXR1cyA9PVxcbi1cXHRcXHRcXHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19GQUlMSU5HID8gXFxcIkZBSUxJTkdcXFwiIDpcXG4tXFx0XFx0XFx0ICAgIHJ1bGUtXFx1MDAzZXN0YXR1cyA9PVxcbi1cXHRcXHRcXHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19VUERBVElORyA/IFxcXCJVUERBVElOR1xcXCIgOiBcXFwiTkFcXFwiLFxcbitcXHRcXHRcXHQgICAgaHdzX3J1bGVfc3RhdHVzX3RvX3N0cmluZyhydWxlLVxcdTAwM2VzdGF0dXMpLFxcbiBcXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlc3RhdHVzLFxcbiBcXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlcGVuZGluZ193cWVzKTtcXG4gXFxuQEAgLTQyMyw2ICs0NDUsMTUgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcXG4gXFx0XFx0XFx0ICAgIFxcXCIgICAgcnVsZSAweCUwOGxseDogIHwtLS0gc3luZHJvbWUgPSAweCV4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcXG4gXFx0XFx0XFx0ICAgIGVycl9jcWUtXFx1MDAzZXN5bmRyb21lKTtcXG4rXFx0XFx0bWx4NWh3c19lcnIoY3R4LFxcbitcXHRcXHRcXHQgICAgXFxcIiAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBRUE4gPSAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcXG4rXFx0XFx0XFx0ICAgIGJlMzJfdG9fY3B1KGVycl9jcWUtXFx1MDAzZXNfd3FlX29wY29kZV9xcG4pIFxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0XFx0MHhmZmZmZmYpO1xcbitcXHRcXHRtbHg1aHdzX2VycihjdHgsXFxuK1xcdFxcdFxcdCAgICBcXFwiICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tIFdRRV9DTlQgPSAweCUwNHhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxcbitcXHRcXHRcXHQgICAgKHUzMiliZTE2X3RvX2NwdShlcnJfY3FlLVxcdTAwM2V3cWVfY291bnRlcikpO1xcbiBcXHR9XFxuIFxcbiBcXHRtbHg1aHdzX2VycihjdHgsXFxuQEAgLTQzMywxMyArNDY0LDEyIEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXFxuIFxcdFxcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxcbiBcXHRcXHQgICAgKGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlYnl0ZV9jbnQpIFxcdTAwMjYgMHg4MDAwMDAwMCkgP1xcbiBcXHRcXHQgICAgXFxcIkZBSUxVUkVcXFwiIDogXFxcIlNVQ0NFU1NcXFwiKTtcXG4rXFx0Lyogc3luZHJvbWUgaXMgaW4gdGhlIGxvd2VyIDIgYml0cyBvZiBieXRlX2NudCAqL1xcbitcXHRzeW5kcm9tZSA9IGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlYnl0ZV9jbnQpIFxcdTAwMjYgMztcXG4gXFx0bWx4NWh3c19lcnIoY3R4LFxcbi1cXHRcXHQgICAgXFxcIiAgICBydWxlIDB4JTA4bGx4OiAgfC0tLS0tLS0gU1lORFJPTUUgPSAlc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgIFxcXCIgICAgcnVsZSAweCUwOGxseDogIHwtLS0tLS0tIFNZTkRST01FID0gJXMgKCV1KVxcXFxuXFxcIixcXG4gXFx0XFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXFxuLVxcdFxcdCAgICAoKGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlYnl0ZV9jbnQpIFxcdTAwMjYgMHgwMDAwMDAwMykgPT0gMSkgP1xcbi1cXHRcXHQgICAgXFxcIlNFVF9GTE9XX0ZBSUxcXFwiIDpcXG4tXFx0XFx0ICAgICgoYmUzMl90b19jcHUoY3FlLVxcdTAwM2VieXRlX2NudCkgXFx1MDAyNiAweDAwMDAwMDAzKSA9PSAyKSA/XFxuLVxcdFxcdCAgICBcXFwiRElTQUJMRV9GTE9XX0ZBSUxcXFwiIDogXFxcIlVOS05PV05cXFwiKTtcXG4rXFx0XFx0ICAgIGh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nKHN5bmRyb21lKSwgc3luZHJvbWUpO1xcbiBcXHRtbHg1aHdzX2VycihjdHgsXFxuIFxcdFxcdCAgICBcXFwiICAgIHJ1bGUgMHglMDhsbHg6IGNxZS1cXHUwMDNlc29wX2Ryb3BfcXBuICA9IDB4JTA4eFxcXFxuXFxcIixcXG4gXFx0XFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksIGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlc29wX2Ryb3BfcXBuKSk7XFxuQEAgLTEwOTEsOCArMTEyMSw2IEBAIHN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4gXFx0aWYgKCFtbHg1aHdzX2NvbnRleHRfYndjX3N1cHBvcnRlZChjdHgpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGN0eC1cXHUwMDNlcXVldWVzICs9IGJ3Y19xdWV1ZXM7XFxuLVxcbiBcXHRjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzID0ga3phbGxvY19vYmpzKCpjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgYndjX3F1ZXVlcyk7XFxuIFxcbkBAIC0xMTA0LDYgKzExMzIsOCBAQCBzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuIFxcdGlmICghY3R4LVxcdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzKVxcbiBcXHRcXHRnb3RvIGVycl9sb2NrX2NsYXNzX2tleXM7XFxuIFxcbitcXHRjdHgtXFx1MDAzZXF1ZXVlcyArPSBid2NfcXVldWVzO1xcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJ3Y19xdWV1ZXM7IGkrKykge1xcbiBcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzW2ldKTtcXG4gXFx0XFx0bG9ja2RlcF9yZWdpc3Rlcl9rZXkoY3R4LVxcdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzICsgaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUxOjQ4LjU5NTQ0Mjk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTU1ODgwNTQyMDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBvZiBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIChlbmhhbmNpbmcgZXJyb3IgbWVzc2FnZXMgd2l0aCBzdHJpbmcgcmVwcmVzZW50YXRpb25zIGFuZCBhZGRpdGlvbmFsIGRldGFpbHMpLCByZW1vdmFsIG9mIHJlZHVuZGFudCBjb2RlIChhIGR1cGxpY2F0ZSBNTFg1X1NFVCBhbmQgYSBkdXBsaWNhdGUgbWx4NV9jbWRfZXhlYyB0aGF0IGlnbm9yZWQgaXRzIG91dHB1dCksIGFuZCBhIHRoZW9yZXRpY2FsIGVycm9yIHBhdGggZml4IGluIGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdCB0aGF0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBiZWNhdXNlIHRoZSBjb250ZXh0IGlzIGZyZWVkIGltbWVkaWF0ZWx5IG9uIGZhaWx1cmUuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyBhcmUgaW4gdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzNlMzA4M2M0OTQ3MDQ4ZjdiMTdhODVjN2VkZTE5ZDJhNmQwYjI1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDIyOjUxOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNcbmluZGV4IGU2MjRmNWRhOTZjODFiLi5hZmU1ODE4Mjk0ZDk1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNcbkBAIC0zOTgsNyArMzk4LDYgQEAgaW50IG1seDVod3NfY21kX3J0Y19jcmVhdGUoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9tZXRob2QsIHJ0Y19hdHRyLVx1MDAzZWZ3X2dlbl93cWUpO1xuIFx0TUxYNV9TRVQocnRjLCBhdHRyLCB1cGRhdGVfaW5kZXhfbW9kZSwgcnRjX2F0dHItXHUwMDNldXBkYXRlX2luZGV4X21vZGUpO1xuIFx0TUxYNV9TRVQocnRjLCBhdHRyLCBhY2Nlc3NfaW5kZXhfbW9kZSwgcnRjX2F0dHItXHUwMDNlYWNjZXNzX2luZGV4X21vZGUpO1xuLVx0TUxYNV9TRVQocnRjLCBhdHRyLCBudW1faGFzaF9kZWZpbmVyLCBydGNfYXR0ci1cdTAwM2VudW1faGFzaF9kZWZpbmVyKTtcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbG9nX2RlcHRoLCBydGNfYXR0ci1cdTAwM2Vsb2dfZGVwdGgpO1xuIFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfaGFzaF9zaXplLCBydGNfYXR0ci1cdTAwM2Vsb2dfc2l6ZSk7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIHRhYmxlX3R5cGUsIHJ0Y19hdHRyLVx1MDAzZXRhYmxlX3R5cGUpO1xuQEAgLTYxMSw5ICs2MTAsMTEgQEAgaW50IG1seDVod3NfY21kX3N0Y19tb2RpZnkoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gXG4gXHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIHNpemVvZihvdXQpKTtcbiBcdGlmIChyZXQpXG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCJGYWlsZWQgdG8gbW9kaWZ5IFNUQyBGVyBhY3Rpb25fdHlwZSAlZFxcblwiLFxuLVx0XHRcdCAgICAgIHN0Y19hdHRyLVx1MDAzZWFjdGlvbl90eXBlKTtcbi1cbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuK1x0XHRcdCAgICAgIFwiRmFpbGVkIHRvIG1vZGlmeSBTVEMgYWN0aW9uX3R5cGUgJWQsIGVyciAlZCwgc3luZHJvbWUgMHgleFxcblwiLFxuK1x0XHRcdCAgICAgIHN0Y19hdHRyLVx1MDAzZWFjdGlvbl90eXBlLCByZXQsXG4rXHRcdFx0ICAgICAgTUxYNV9HRVQoZ2VuZXJhbF9vYmpfb3V0X2NtZF9oZHIsXG4rXHRcdFx0XHQgICAgICAgb3V0LCBzeW5kcm9tZSkpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTE4MSwxMiArMTE4Miw2IEBAIGludCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxuIFx0XHRcdFx0XHRcdGNhcGFiaWxpdHkuZXN3X2NhcC5tZXJnZWRfZXN3aXRjaCk7XG4gXHR9XG4gXG4tXHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dF9zaXplKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcIkZhaWxlZCB0byBxdWVyeSBkZXZpY2UgYXR0cmlidXRlc1xcblwiKTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4gXHRzbnByaW50ZihjYXBzLVx1MDAzZWZ3X3Zlciwgc2l6ZW9mKGNhcHMtXHUwMDNlZndfdmVyKSwgXCIlZC4lZC4lZFwiLFxuIFx0XHQgZndfcmV2X21haihtZGV2KSwgZndfcmV2X21pbihtZGV2KSwgZndfcmV2X3N1YihtZGV2KSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1xuaW5kZXggYWVkMDA5YWVjNGZlODcuLmYwYzNhMmJkYTBjNzM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXG5AQCAtMzQ0LDYgKzM0NCwzNiBAQCBod3Nfc2VuZF9lbmdpbmVfdXBkYXRlX3J1bGVfcmVzaXplKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGNvbnN0IGNoYXIgKmh3c19ydWxlX3N0YXR1c190b19zdHJpbmcoZW51bSBtbHg1aHdzX3J1bGVfc3RhdHVzIHN0YXR1cylcbit7XG4rXHRzd2l0Y2ggKHN0YXR1cykge1xuK1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0NSRUFUSU5HOiByZXR1cm4gXCJDUkVBVElOR1wiO1xuK1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX1VQREFUSU5HOiByZXR1cm4gXCJVUERBVElOR1wiO1xuK1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0RFTEVUSU5HOiByZXR1cm4gXCJERUxFVElOR1wiO1xuK1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0ZBSUxJTkc6IHJldHVybiBcIkZBSUxJTkdcIjtcbitcdGRlZmF1bHQ6IHJldHVybiBcIk5BXCI7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpod3NfcnVsZV9yZXNpemVfc3RhdGVfdG9fc3RyaW5nKHU4IHN0YXRlKVxuK3tcbitcdHN3aXRjaCAoc3RhdGUpIHtcbitcdGNhc2UgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9JRExFOiByZXR1cm4gXCJJRExFXCI7XG4rXHRjYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORzogcmV0dXJuIFwiV1JJVElOR1wiO1xuK1x0Y2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HOiByZXR1cm4gXCJERUxFVElOR1wiO1xuK1x0ZGVmYXVsdDogcmV0dXJuIFwiVU5LTk9XTlwiO1xuK1x0fVxuK31cbitcbitzdGF0aWMgY29uc3QgY2hhciAqaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmcodTggc3luZHJvbWUpXG4re1xuK1x0c3dpdGNoIChzeW5kcm9tZSkge1xuK1x0Y2FzZSAxOiByZXR1cm4gXCJTRVRfRkxPV19GQUlMXCI7XG4rXHRjYXNlIDI6IHJldHVybiBcIkRJU0FCTEVfRkxPV19GQUlMXCI7XG4rXHRkZWZhdWx0OiByZXR1cm4gXCJVTktOT1dOXCI7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBtbHg1aHdzX3NlbmRfcmluZ19wcml2ICpwcml2LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuQEAgLTM1Miw2ICszODIsNyBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFx0c3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4ID0gcHJpdi1cdTAwM2VydWxlLVx1MDAzZW1hdGNoZXItXHUwMDNldGJsLVx1MDAzZWN0eDtcbiBcdHUzMiBvcGNvZGUgPSBjcWUgPyBnZXRfY3FlX29wY29kZShjcWUpIDogMDtcbiBcdHN0cnVjdCBtbHg1aHdzX3J1bGUgKnJ1bGUgPSBwcml2LVx1MDAzZXJ1bGU7XG4rXHR1OCBzeW5kcm9tZTtcbiBcbiBcdC8qIElmIHNvbWV0aGluZyBiYWQgaGFwcGVucyBhbmQgbG90cyBvZiBydWxlcyBhcmUgZmFpbGluZywgd2UgZG9uJ3RcbiBcdCAqIHdhbnQgdG8gcG9sbHV0ZSBkbWVzZy4gUHJpbnQgb25seSB0aGUgZmlyc3QgYmFkIGNxZSBwZXIgZW5naW5lLFxuQEAgLTM2NCwyNiArMzk1LDE3IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXG4gXHRpZiAobWx4NWh3c19ydWxlX21vdmVfaW5fcHJvZ3Jlc3MocnVsZSkpXG4gXHRcdG1seDVod3NfZXJyKGN0eCxcbi1cdFx0XHQgICAgXCItLS0gcnVsZSAweCUwOGxseDogZXJyb3IgY29tcGxldGlvbiBtb3ZpbmcgcnVsZTogcGhhc2UgJXMsIHdxZXMgbGVmdCAlZFxcblwiLFxuK1x0XHRcdCAgICBcIi0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uIG1vdmluZyBydWxlOiBwaGFzZSAlcyAoJWQpLCB3cWVzIGxlZnQgJWRcXG5cIixcbiBcdFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VyZXNpemVfaW5mby1cdTAwM2VzdGF0ZSA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX1dSSVRJTkcgPyBcIldSSVRJTkdcIiA6XG4tXHRcdFx0ICAgIHJ1bGUtXHUwMDNlcmVzaXplX2luZm8tXHUwMDNlc3RhdGUgPT1cbi1cdFx0XHQgICAgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9ERUxFVElORyA/IFwiREVMRVRJTkdcIiA6XG4tXHRcdFx0ICAgIFwiVU5LTk9XTlwiLFxuK1x0XHRcdCAgICBod3NfcnVsZV9yZXNpemVfc3RhdGVfdG9fc3RyaW5nXG4rXHRcdFx0XHQocnVsZS1cdTAwM2VyZXNpemVfaW5mby1cdTAwM2VzdGF0ZSksXG4rXHRcdFx0ICAgIHJ1bGUtXHUwMDNlcmVzaXplX2luZm8tXHUwMDNlc3RhdGUsXG4gXHRcdFx0ICAgIHJ1bGUtXHUwMDNlcGVuZGluZ193cWVzKTtcbiBcdGVsc2VcbiBcdFx0bWx4NWh3c19lcnIoY3R4LFxuIFx0XHRcdCAgICBcIi0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uICVzICglZCksIHdxZXMgbGVmdCAlZFxcblwiLFxuIFx0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuLVx0XHRcdCAgICBydWxlLVx1MDAzZXN0YXR1cyA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfU1RBVFVTX0NSRUFUSU5HID8gXCJDUkVBVElOR1wiIDpcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VzdGF0dXMgPT1cbi1cdFx0XHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19ERUxFVElORyA/IFwiREVMRVRJTkdcIiA6XG4tXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfRkFJTElORyA/IFwiRkFJTElOR1wiIDpcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VzdGF0dXMgPT1cbi1cdFx0XHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19VUERBVElORyA/IFwiVVBEQVRJTkdcIiA6IFwiTkFcIixcbitcdFx0XHQgICAgaHdzX3J1bGVfc3RhdHVzX3RvX3N0cmluZyhydWxlLVx1MDAzZXN0YXR1cyksXG4gXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzLFxuIFx0XHRcdCAgICBydWxlLVx1MDAzZXBlbmRpbmdfd3Flcyk7XG4gXG5AQCAtNDIzLDYgKzQ0NSwxNSBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFx0XHRcdCAgICBcIiAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBzeW5kcm9tZSA9IDB4JXhcXG5cIixcbiBcdFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbiBcdFx0XHQgICAgZXJyX2NxZS1cdTAwM2VzeW5kcm9tZSk7XG4rXHRcdG1seDVod3NfZXJyKGN0eCxcbitcdFx0XHQgICAgXCIgICAgcnVsZSAweCUwOGxseDogIHwtLS0gUVBOID0gMHgleFxcblwiLFxuK1x0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuK1x0XHRcdCAgICBiZTMyX3RvX2NwdShlcnJfY3FlLVx1MDAzZXNfd3FlX29wY29kZV9xcG4pIFx1MDAyNlxuK1x0XHRcdFx0XHQweGZmZmZmZik7XG4rXHRcdG1seDVod3NfZXJyKGN0eCxcbitcdFx0XHQgICAgXCIgICAgcnVsZSAweCUwOGxseDogIHwtLS0gV1FFX0NOVCA9IDB4JTA0eFxcblwiLFxuK1x0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuK1x0XHRcdCAgICAodTMyKWJlMTZfdG9fY3B1KGVycl9jcWUtXHUwMDNld3FlX2NvdW50ZXIpKTtcbiBcdH1cbiBcbiBcdG1seDVod3NfZXJyKGN0eCxcbkBAIC00MzMsMTMgKzQ2NCwxMiBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbiBcdFx0ICAgIChiZTMyX3RvX2NwdShjcWUtXHUwMDNlYnl0ZV9jbnQpIFx1MDAyNiAweDgwMDAwMDAwKSA/XG4gXHRcdCAgICBcIkZBSUxVUkVcIiA6IFwiU1VDQ0VTU1wiKTtcbitcdC8qIHN5bmRyb21lIGlzIGluIHRoZSBsb3dlciAyIGJpdHMgb2YgYnl0ZV9jbnQgKi9cbitcdHN5bmRyb21lID0gYmUzMl90b19jcHUoY3FlLVx1MDAzZWJ5dGVfY250KSBcdTAwMjYgMztcbiBcdG1seDVod3NfZXJyKGN0eCxcbi1cdFx0ICAgIFwiICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tLS0tLSBTWU5EUk9NRSA9ICVzXFxuXCIsXG4rXHRcdCAgICBcIiAgICBydWxlIDB4JTA4bGx4OiAgfC0tLS0tLS0gU1lORFJPTUUgPSAlcyAoJXUpXFxuXCIsXG4gXHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuLVx0XHQgICAgKChiZTMyX3RvX2NwdShjcWUtXHUwMDNlYnl0ZV9jbnQpIFx1MDAyNiAweDAwMDAwMDAzKSA9PSAxKSA/XG4tXHRcdCAgICBcIlNFVF9GTE9XX0ZBSUxcIiA6XG4tXHRcdCAgICAoKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VieXRlX2NudCkgXHUwMDI2IDB4MDAwMDAwMDMpID09IDIpID9cbi1cdFx0ICAgIFwiRElTQUJMRV9GTE9XX0ZBSUxcIiA6IFwiVU5LTk9XTlwiKTtcbitcdFx0ICAgIGh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nKHN5bmRyb21lKSwgc3luZHJvbWUpO1xuIFx0bWx4NWh3c19lcnIoY3R4LFxuIFx0XHQgICAgXCIgICAgcnVsZSAweCUwOGxseDogY3FlLVx1MDAzZXNvcF9kcm9wX3FwbiAgPSAweCUwOHhcXG5cIixcbiBcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksIGJlMzJfdG9fY3B1KGNxZS1cdTAwM2Vzb3BfZHJvcF9xcG4pKTtcbkBAIC0xMDkxLDggKzExMjEsNiBAQCBzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4gXHRpZiAoIW1seDVod3NfY29udGV4dF9id2Nfc3VwcG9ydGVkKGN0eCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0Y3R4LVx1MDAzZXF1ZXVlcyArPSBid2NfcXVldWVzO1xuLVxuIFx0Y3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzID0ga3phbGxvY19vYmpzKCpjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MsXG4gXHRcdFx0XHRcdFx0IGJ3Y19xdWV1ZXMpO1xuIFxuQEAgLTExMDQsNiArMTEzMiw4IEBAIHN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiBcdGlmICghY3R4LVx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMpXG4gXHRcdGdvdG8gZXJyX2xvY2tfY2xhc3Nfa2V5cztcbiBcbitcdGN0eC1cdTAwM2VxdWV1ZXMgKz0gYndjX3F1ZXVlcztcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJ3Y19xdWV1ZXM7IGkrKykge1xuIFx0XHRtdXRleF9pbml0KFx1MDAyNmN0eC1cdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2Nrc1tpXSk7XG4gXHRcdGxvY2tkZXBfcmVnaXN0ZXJfa2V5KGN0eC1cdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzICsgaSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MTo0OC41OTU0NDQ2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNDgyNzc3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbGxhbm94IEhXUyBDb21tYW5kIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY2AgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY2AuIExldCdzIGRpdmUgaW4uXG5cbkZpcnN0LCBgY21kLmNgOiBJIHNlZSBhIGNoYW5nZSBpbiBgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZWAsIHdoZXJlIHRoZXkndmUgcmVtb3ZlZCBgTUxYNV9TRVQocnRjLCBhdHRyLCBudW1faGFzaF9kZWZpbmVyLCBydGNfYXR0ci1cdTAwM2VudW1faGFzaF9kZWZpbmVyKTtgLiBDdXJpb3VzLCBtdXN0IGJlIGEgc2ltcGxpZmljYXRpb24gb3IgYSBkaWZmZXJlbnQgd2F5IG9mIGhhbmRsaW5nIGhhc2ggZGVmaW5lcnMgbm93LiBUaGVuLCBpbiBgbWx4NWh3c19jbWRfc3RjX21vZGlmeWAsIHRoZXkndmUgYWRkZWQgYSBzeW5kcm9tZSB0byB0aGUgZXJyb3IgbWVzc2FnZSwgdGhhdCdzIGdvb2QgZm9yIGRlYnVnZ2luZy4gQnV0IHRoaXMgYG1seDVod3NfY21kX3F1ZXJ5X2NhcHNgIGNoYW5nZSBpcyB3aGF0J3MgZ3JhYmJlZCBteSBhdHRlbnRpb24uIFRoZXkndmUgcmVtb3ZlZCBhIGNhbGwgdG8gYG1seDVfY21kX2V4ZWNgIGFuZCBpdHMgYXNzb2NpYXRlZCBlcnJvciBoYW5kbGluZy4gV2FpdCwgKnJlbW92ZWQqPyBJcyBgbWx4NV9jbWRfZXhlY2AgZ29uZSBlbnRpcmVseT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkaWZmIG1vcmUgY2xvc2VseS5cblxuYGBgY1xuQEAgLTExODEsMTIgKzExODIsNiBAQCBpbnQgbWx4NWh3c19jbWRfcXVlcnlfY2FwcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiBcdFx0XHRcdFx0XHRjYXBhYmlsaXR5LmVzd19jYXAubWVyZ2VkX2Vzd2l0Y2gpO1xuIFx0fVxuIFxuLVx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCJGYWlsZWQgdG8gcXVlcnkgZGV2aWNlIGF0dHJpYnV0ZXNcXG5cIik7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0c25wcmludGYoY2Fwcy1cdTAwM2Vmd192ZXIsIHNpemVvZihjYXBzLVx1MDAzZWZ3X3ZlciksIFwiJWQuJWQuJWRcIixcbiBcdFx0IGZ3X3Jldl9tYWoobWRldiksIGZ3X3Jldl9taW4obWRldiksIGZ3X3Jldl9zdWIobWRldikpO1xuIGBgYFxuXG5ZZXAsIGl0J3MgZGVmaW5pdGVseSBnb25lLiBTbyB0aGUgY29tbWFuZCBpcyAqbm8gbG9uZ2VyIGV4ZWN1dGVkKj8gT3IsIHdhcyBpdCBhIHJlZHVuZGFudCBjYWxsIHRoYXQncyBiZWVuIGVsaW1pbmF0ZWQ/IFRoaXMgcmVxdWlyZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCBgbWx4NWh3c19jbWRfcXVlcnlfY2Fwc2AgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTY1LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTE6NTQuODQzNzI1NTAxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMjA3MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1seDVod3NfY21kX3F1ZXJ5X2NhcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jPTg5Mz1pbnQgbWx4NWh3c19jbWRfZ2VuZXJhdGVfd3FlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYy05MzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYzo5Mzg6aW50IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYzo5Mzk6XFx0XFx0XFx0ICAgc3RydWN0IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMgKmNhcHMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYy05NDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MTo1NC45MDY5NTU2NzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY1OTM0NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzYCoqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgdGhlIGNvZGUgZm9yIGBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbidzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIE1lbGxhbm94IGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBzcGVjaWZpYyBjYXBhYmlsaXRpZXMgaXMgdGhpcyByb3V0aW5lIHF1ZXJ5aW5nPyBBcmUgd2UgdGFsa2luZyBhYm91dCBiYXNpYyBkZXZpY2UgaW5mb3JtYXRpb24sIGZlYXR1cmUgc2V0cywgcGVyaGFwcyBzdXBwb3J0ZWQgb2ZmbG9hZHM/IFRoZSBmdW5jdGlvbidzIG5hbWUgc3VnZ2VzdHMgaXQncyBjZW50cmFsIHRvIGRpc2NvdmVyaW5nIHRoZSBoYXJkd2FyZSdzIGNhcGFiaWxpdGllcywgYnV0IEkgd2FudCB0byBzZWUgdGhlIGdyYW51bGFyaXR5LlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBNTFg1IGRldmljZSwgdGhlIGNvbW1hbmQgc3RydWN0dXJlcyBpdCBjb25zdHJ1Y3RzIGFuZCBzZW5kcywgYW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpdCBpbnRlcnByZXRzIHRoZSByZXNwb25zZXMuIEknbSBrZWVuIHRvIHNlZSBpZiBpdCBoYW5kbGVzIGRpZmZlcmVudCBmaXJtd2FyZSB2ZXJzaW9ucyBvciBoYXJkd2FyZSBnZW5lcmF0aW9ucyBncmFjZWZ1bGx5LiBFcnJvciBoYW5kbGluZyBpcyBhbm90aGVyIGtleSBhc3BlY3QuIEkgZXhwZWN0IHJvYnVzdCB2YWxpZGF0aW9uIGFuZCBpbmZvcm1hdGl2ZSBlcnJvciBjb2RlcywgZXNwZWNpYWxseSBzaW5jZSBjYXBhYmlsaXR5IHF1ZXJpZXMgYXJlIGZvdW5kYXRpb25hbCBmb3IgZHJpdmVyIG9wZXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgcmV0dXJuIHZhbHVlcyBhbmQgYW55IGFzc29jaWF0ZWQgc2lkZSBlZmZlY3RzIGFyZSBjcml0aWNhbC4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIHBhaW50cyBhIHBpY3R1cmUgb2YgdGhlIGF2YWlsYWJsZSBoYXJkd2FyZSByZXNvdXJjZXMgZm9yIHRoZSB1cHBlciBsYXllcnMgb2YgdGhlIGRyaXZlci4gTGV0J3Mgc2VlIGhvdyBpdCBnb2VzIGFib3V0IGRvaW5nIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNDEsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MTo1OC4zNzI4OTI2MjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MzgsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTM4OlxcdGludCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbiA5Mzk6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMgKmNhcHMpXFxuIDk0MDpcXHR7XFxuIDk0MTpcXHRcXHR1MzIgaW5bTUxYNV9TVF9TWl9EVyhxdWVyeV9oY2FfY2FwX2luKV0gPSB7MH07XFxuIDk0MjpcXHRcXHR1MzIgb3V0X3NpemU7XFxuIDk0MzpcXHRcXHR1MzIgKm91dDtcXG4gOTQ0OlxcdFxcdGludCByZXQ7XFxuIDk0NTpcXHRcXG4gOTQ2OlxcdFxcdG91dF9zaXplID0gTUxYNV9TVF9TWl9CWVRFUyhxdWVyeV9oY2FfY2FwX291dCk7XFxuIDk0NzpcXHRcXHRvdXQgPSBremFsbG9jKG91dF9zaXplLCBHRlBfS0VSTkVMKTtcXG4gOTQ4OlxcdFxcdGlmICghb3V0KVxcbiA5NDk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDk1MDpcXHRcXG4gOTUxOlxcdFxcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcGNvZGUsIE1MWDVfQ01EX09QX1FVRVJZX0hDQV9DQVApO1xcbiA5NTI6XFx0XFx0TUxYNV9TRVQocXVlcnlfaGNhX2NhcF9pbiwgaW4sIG9wX21vZCxcXG4gOTUzOlxcdFxcdFxcdCBNTFg1X1NFVF9IQ0FfQ0FQX09QX01PRF9HRU5FUkFMX0RFVklDRSB8IEhDQV9DQVBfT1BNT0RfR0VUX0NVUik7XFxuIDk1NDpcXHRcXG4gOTU1OlxcdFxcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xcbiA5NTY6XFx0XFx0aWYgKHJldCkge1xcbiA5NTc6XFx0XFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiRmFpbGVkIHRvIHF1ZXJ5IGRldmljZSBjYXBzXFxcXG5cXFwiKTtcXG4gOTU4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA5NTk6XFx0XFx0fVxcbiA5NjA6XFx0XFxuIDk2MTpcXHRcXHRjYXBzLVxcdTAwM2V3cWVfYmFzZWRfdXBkYXRlID1cXG4gOTYyOlxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuIDk2MzpcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC53cWVfYmFzZWRfZmxvd190YWJsZV91cGRhdGVfY2FwKTtcXG4gOTY0OlxcdFxcbiA5NjU6XFx0XFx0Y2Fwcy1cXHUwMDNlZXN3aXRjaF9tYW5hZ2VyID0gTUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4gOTY2OlxcdFxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLmVzd2l0Y2hfbWFuYWdlcik7XFxuIDk2NzpcXHRcXG4gOTY4OlxcdFxcdGNhcHMtXFx1MDAzZWZsZXhfcHJvdG9jb2xzID0gTUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4gOTY5OlxcdFxcdFxcdFxcdFxcdFxcdGNhcGFiaWxpdHkuY21kX2hjYV9jYXAuZmxleF9wYXJzZXJfcHJvdG9jb2xzKTtcXG4gOTcwOlxcdFxcbiA5NzE6XFx0XFx0aWYgKGNhcHMtXFx1MDAzZWZsZXhfcHJvdG9jb2xzIFxcdTAwMjYgTUxYNV9GTEVYX1BBUlNFUl9HRU5FVkVfVExWX09QVElPTl8wX0VOQUJMRUQpXFxuIDk3MjpcXHRcXHRcXHRjYXBzLVxcdTAwM2VmbGV4X3BhcnNlcl9pZF9nZW5ldmVfdGx2X29wdGlvbl8wID1cXG4gOTczOlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuIDk3NDpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5mbGV4X3BhcnNlcl9pZF9nZW5ldmVfdGx2X29wdGlvbl8wKTtcXG4gOTc1OlxcdFxcbiA5NzY6XFx0XFx0aWYgKGNhcHMtXFx1MDAzZWZsZXhfcHJvdG9jb2xzIFxcdTAwMjYgTUxYNV9GTEVYX1BBUlNFUl9NUExTX09WRVJfR1JFX0VOQUJMRUQpXFxuIDk3NzpcXHRcXHRcXHRjYXBzLVxcdTAwM2VmbGV4X3BhcnNlcl9pZF9tcGxzX292ZXJfZ3JlID1cXG4gOTc4OlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuIDk3OTpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5mbGV4X3BhcnNlcl9pZF9vdXRlcl9maXJzdF9tcGxzX292ZXJfZ3JlKTtcXG4gOTgwOlxcdFxcbiA5ODE6XFx0XFx0aWYgKGNhcHMtXFx1MDAzZWZsZXhfcHJvdG9jb2xzIFxcdTAwMjYgTUxYNV9GTEVYX1BBUlNFUl9NUExTX09WRVJfVURQX0VOQUJMRUQpXFxuIDk4MjpcXHRcXHRcXHRjYXBzLVxcdTAwM2VmbGV4X3BhcnNlcl9pZF9tcGxzX292ZXJfdWRwID1cXG4gOTgzOlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuIDk4NDpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5mbGV4X3BhcnNlcl9pZF9vdXRlcl9maXJzdF9tcGxzX292ZXJfdWRwX2xhYmVsKTtcXG4gOTg1OlxcdFxcbiA5ODY6XFx0XFx0Y2Fwcy1cXHUwMDNlbG9nX2hlYWRlcl9tb2RpZnlfYXJndW1lbnRfZ3JhbnVsYXJpdHkgPVxcbiA5ODc6XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4gOTg4OlxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLmxvZ19oZWFkZXJfbW9kaWZ5X2FyZ3VtZW50X2dyYW51bGFyaXR5KTtcXG4gOTg5OlxcdFxcbiA5OTA6XFx0XFx0Y2Fwcy1cXHUwMDNlbG9nX2hlYWRlcl9tb2RpZnlfYXJndW1lbnRfZ3JhbnVsYXJpdHkgLT1cXG4gOTkxOlxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuIDk5MjpcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5sb2dfaGVhZGVyX21vZGlmeV9hcmd1bWVudF9ncmFudWxhcml0eV9vZmZzZXQpO1xcbiA5OTM6XFx0XFxuIDk5NDpcXHRcXHRjYXBzLVxcdTAwM2Vsb2dfaGVhZGVyX21vZGlmeV9hcmd1bWVudF9tYXhfYWxsb2MgPVxcbiA5OTU6XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4gOTk2OlxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLmxvZ19oZWFkZXJfbW9kaWZ5X2FyZ3VtZW50X21heF9hbGxvYyk7XFxuIDk5NzpcXHRcXG4gOTk4OlxcdFxcdGNhcHMtXFx1MDAzZWRlZmluZXJfZm9ybWF0X3N1cCA9XFxuIDk5OTpcXHRcXHRcXHRNTFg1X0dFVDY0KHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTAwMDpcXHRcXHRcXHRcXHQgICBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLm1hdGNoX2RlZmluZXJfZm9ybWF0X3N1cHBvcnRlZCk7XFxuMTAwMTpcXHRcXG4xMDAyOlxcdFxcdGNhcHMtXFx1MDAzZXZoY2FfaWQgPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwMDM6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXAudmhjYV9pZCk7XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdGNhcHMtXFx1MDAzZXNxX3RzX2Zvcm1hdCA9IE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTAwNjpcXHRcXHRcXHRcXHRcXHQgICAgICBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLnNxX3RzX2Zvcm1hdCk7XFxuMTAwNzpcXHRcXG4xMDA4OlxcdFxcdGNhcHMtXFx1MDAzZWlwc2VjX29mZmxvYWQgPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwMDk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNhcGFiaWxpdHkuY21kX2hjYV9jYXAuaXBzZWNfb2ZmbG9hZCk7XFxuMTAxMDpcXHRcXG4xMDExOlxcdFxcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcF9tb2QsXFxuMTAxMjpcXHRcXHRcXHQgTUxYNV9HRVRfSENBX0NBUF9PUF9NT0RfR0VORVJBTF9ERVZJQ0VfMiB8IEhDQV9DQVBfT1BNT0RfR0VUX0NVUik7XFxuMTAxMzpcXHRcXG4xMDE0OlxcdFxcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xcbjEwMTU6XFx0XFx0aWYgKHJldCkge1xcbjEwMTY6XFx0XFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiRmFpbGVkIHRvIHF1ZXJ5IGRldmljZSBjYXBzIDJcXFxcblxcXCIpO1xcbjEwMTc6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTAxODpcXHRcXHR9XFxuMTAxOTpcXHRcXG4xMDIwOlxcdFxcdGNhcHMtXFx1MDAzZWZ1bGxfZHdfanVtYm9fc3VwcG9ydCA9XFxuMTAyMTpcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwMjI6XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXBfMi5mb3JtYXRfc2VsZWN0X2R3XzhfNl9leHQpO1xcbjEwMjM6XFx0XFxuMTAyNDpcXHRcXHRjYXBzLVxcdTAwM2Vmb3JtYXRfc2VsZWN0X2d0cHVfZHdfMCA9XFxuMTAyNTpcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwMjY6XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXBfMi5mb3JtYXRfc2VsZWN0X2R3X2d0cHVfZHdfMCk7XFxuMTAyNzpcXHRcXG4xMDI4OlxcdFxcdGNhcHMtXFx1MDAzZWZvcm1hdF9zZWxlY3RfZ3RwdV9kd18xID1cXG4xMDI5OlxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTAzMDpcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcF8yLmZvcm1hdF9zZWxlY3RfZHdfZ3RwdV9kd18xKTtcXG4xMDMxOlxcdFxcbjEwMzI6XFx0XFx0Y2Fwcy1cXHUwMDNlZm9ybWF0X3NlbGVjdF9ndHB1X2R3XzIgPVxcbjEwMzM6XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMDM0OlxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwXzIuZm9ybWF0X3NlbGVjdF9kd19ndHB1X2R3XzIpO1xcbjEwMzU6XFx0XFxuMTAzNjpcXHRcXHRjYXBzLVxcdTAwM2Vmb3JtYXRfc2VsZWN0X2d0cHVfZXh0X2R3XzAgPVxcbjEwMzc6XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTE6NTguMzczMDM3MTgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY0Njk4ODE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydC5cblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIC0gTmV4dCBTdGVwcyoqXG5cbkFscmlnaHQsIEkndmUgZ290IHRoZSBpbml0aWFsIHN0cnVjdHVyZSBvZiB0aGUgZnVuY3Rpb24gaW4gbXkgaGVhZC4gSSd2ZSBjb25zaWRlcmVkIGl0cyBiYXNpYyBpbnB1dHMgYW5kIG91dHB1dHMuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBsb2dpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIGZ1bmN0aW9uIHByb2Nlc3NlcyBkYXRhLiBMZXQncyBzZWUgaG93IHRoaXMgdW5mb2xkcy4uLiBMZXQncyByZWFkIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6ODYxMSwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MDEuMDIwMDI3Nzk5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAzOCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzg6XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXBfMi5mb3JtYXRfc2VsZWN0X2R3X2d0cHVfZmlyc3RfZXh0X2R3XzApO1xcbjEwMzk6XFx0XFxuMTA0MDpcXHRcXHRjYXBzLVxcdTAwM2VzdXBwX3R5cGVfZ2VuX3dxZSA9XFxuMTA0MTpcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwNDI6XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXBfMi5nZW5lcmF0ZV93cWVfdHlwZSk7XFxuMTA0MzpcXHRcXG4xMDQ0OlxcdFxcdGNhcHMtXFx1MDAzZWZsb3dfdGFibGVfaGFzaF90eXBlID1cXG4xMDQ1OlxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTA0NjpcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcF8yLmZsb3dfdGFibGVfaGFzaF90eXBlKTtcXG4xMDQ3OlxcdFxcbjEwNDg6XFx0XFx0TUxYNV9TRVQocXVlcnlfaGNhX2NhcF9pbiwgaW4sIG9wX21vZCxcXG4xMDQ5OlxcdFxcdFxcdCBNTFg1X0dFVF9IQ0FfQ0FQX09QX01PRF9OSUNfRkxPV19UQUJMRSB8IEhDQV9DQVBfT1BNT0RfR0VUX0NVUik7XFxuMTA1MDpcXHRcXG4xMDUxOlxcdFxcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xcbjEwNTI6XFx0XFx0aWYgKHJldCkge1xcbjEwNTM6XFx0XFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiRmFpbGVkIHRvIHF1ZXJ5IGZsb3cgdGFibGUgY2Fwc1xcXFxuXFxcIik7XFxuMTA1NDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDU1OlxcdFxcdH1cXG4xMDU2OlxcdFxcbjEwNTc6XFx0XFx0Y2Fwcy1cXHUwMDNlbmljX2Z0Lm1heF9sZXZlbCA9XFxuMTA1ODpcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwNTk6XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuZmxvd190YWJsZV9uaWNfY2FwLmZsb3dfdGFibGVfcHJvcGVydGllc19uaWNfcmVjZWl2ZS5tYXhfZnRfbGV2ZWwpO1xcbjEwNjA6XFx0XFxuMTA2MTpcXHRcXHRjYXBzLVxcdTAwM2VuaWNfZnQucmVwYXJzZSA9XFxuMTA2MjpcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwNjM6XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuZmxvd190YWJsZV9uaWNfY2FwLmZsb3dfdGFibGVfcHJvcGVydGllc19uaWNfcmVjZWl2ZS5yZXBhcnNlKTtcXG4xMDY0OlxcdFxcbjEwNjU6XFx0XFx0Y2Fwcy1cXHUwMDNlbmljX2Z0Lmlnbm9yZV9mbG93X2xldmVsX3J0Y192YWxpZCA9XFxuMTA2NjpcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwNjc6XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuZmxvd190YWJsZV9uaWNfY2FwLmZsb3dfdGFibGVfcHJvcGVydGllc19uaWNfcmVjZWl2ZS5pZ25vcmVfZmxvd19sZXZlbF9ydGNfdmFsaWQpO1xcbjEwNjg6XFx0XFxuMTA2OTpcXHRcXHRjYXBzLVxcdTAwM2VmbGV4X3BhcnNlcl9va19iaXRzX3N1cHAgPVxcbjEwNzA6XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMDcxOlxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUuZnRfZmllbGRfc3VwcG9ydC5nZW5ldmVfdGx2X29wdGlvbl8wX2V4aXN0KTtcXG4xMDcyOlxcdFxcbjEwNzM6XFx0XFx0aWYgKGNhcHMtXFx1MDAzZXdxZV9iYXNlZF91cGRhdGUpIHtcXG4xMDc0OlxcdFxcdFxcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcF9tb2QsXFxuMTA3NTpcXHRcXHRcXHRcXHQgTUxYNV9HRVRfSENBX0NBUF9PUF9NT0RfV1FFX0JBU0VEX0ZMT1dfVEFCTEUgfCBIQ0FfQ0FQX09QTU9EX0dFVF9DVVIpO1xcbjEwNzY6XFx0XFxuMTA3NzpcXHRcXHRcXHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dF9zaXplKTtcXG4xMDc4OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4xMDc5OlxcdFxcdFxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcIkZhaWxlZCB0byBxdWVyeSBXUUUgYmFzZWQgRlQgY2Fwc1xcXFxuXFxcIik7XFxuMTA4MDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDgxOlxcdFxcdFxcdH1cXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlcnRjX3JlcGFyc2VfbW9kZSA9XFxuMTA4NDpcXHRcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwODU6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnJ0Y19yZXBhcnNlX21vZGUpO1xcbjEwODY6XFx0XFxuMTA4NzpcXHRcXHRcXHRjYXBzLVxcdTAwM2VzdGVfZm9ybWF0ID1cXG4xMDg4OlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTA4OTpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAuc3RlX2Zvcm1hdCk7XFxuMTA5MDpcXHRcXG4xMDkxOlxcdFxcdFxcdGNhcHMtXFx1MDAzZXJ0Y19pbmRleF9tb2RlID1cXG4xMDkyOlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTA5MzpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAucnRjX2luZGV4X21vZGUpO1xcbjEwOTQ6XFx0XFxuMTA5NTpcXHRcXHRcXHRjYXBzLVxcdTAwM2VydGNfbG9nX2RlcHRoX21heCA9XFxuMTA5NjpcXHRcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwOTc6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnJ0Y19sb2dfZGVwdGhfbWF4KTtcXG4xMDk4OlxcdFxcbjEwOTk6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlc3RlX2FsbG9jX2xvZ19tYXggPVxcbjExMDA6XFx0XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMTAxOlxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC5zdGVfYWxsb2NfbG9nX21heCk7XFxuMTEwMjpcXHRcXG4xMTAzOlxcdFxcdFxcdGNhcHMtXFx1MDAzZXN0ZV9hbGxvY19sb2dfZ3JhbiA9XFxuMTEwNDpcXHRcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExMDU6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnN0ZV9hbGxvY19sb2dfZ3JhbnVsYXJpdHkpO1xcbjExMDY6XFx0XFxuMTEwNzpcXHRcXHRcXHRjYXBzLVxcdTAwM2V0cml2aWFsX21hdGNoX2RlZmluZXIgPVxcbjExMDg6XFx0XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMTA5OlxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC50cml2aWFsX21hdGNoX2RlZmluZXIpO1xcbjExMTA6XFx0XFxuMTExMTpcXHRcXHRcXHRjYXBzLVxcdTAwM2VzdGNfYWxsb2NfbG9nX21heCA9XFxuMTExMjpcXHRcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExMTM6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnN0Y19hbGxvY19sb2dfbWF4KTtcXG4xMTE0OlxcdFxcbjExMTU6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlc3RjX2FsbG9jX2xvZ19ncmFuID1cXG4xMTE2OlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTExNzpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAuc3RjX2FsbG9jX2xvZ19ncmFudWxhcml0eSk7XFxuMTExODpcXHRcXG4xMTE5OlxcdFxcdFxcdGNhcHMtXFx1MDAzZXJ0Y19oYXNoX3NwbGl0X3RhYmxlID1cXG4xMTIwOlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTEyMTpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAucnRjX2hhc2hfc3BsaXRfdGFibGUpO1xcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHRcXHRjYXBzLVxcdTAwM2VydGNfbGluZWFyX2xvb2t1cF90YWJsZSA9XFxuMTEyNDpcXHRcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExMjU6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnJ0Y19saW5lYXJfbG9va3VwX3RhYmxlKTtcXG4xMTI2OlxcdFxcbjExMjc6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlYWNjZXNzX2luZGV4X21vZGUgPVxcbjExMjg6XFx0XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMTI5OlxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC5hY2Nlc3NfaW5kZXhfbW9kZSk7XFxuMTEzMDpcXHRcXG4xMTMxOlxcdFxcdFxcdGNhcHMtXFx1MDAzZWxpbmVhcl9tYXRjaF9kZWZpbmVyID1cXG4xMTMyOlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTEzMzpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAubGluZWFyX21hdGNoX2RlZmluZXJfcmVnX2MzKTtcXG4xMTM0OlxcdFxcbjExMzU6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlcnRjX21heF9oYXNoX2RlZl9nZW5fd3FlID1cXG4xMTM2OlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTEzNzpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAucnRjX21heF9udW1faGFzaF9kZWZpbmVyX2dlbl93cWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MjowMS4wMjAxNDk3NjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYzNDYzMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbidzIENvbnRleHQqKlxuXG5SaWdodCwgc28gSSd2ZSBqdXN0IGJlZW4gcHJvbXB0ZWQgdG8gYXNzZXNzIHNvbWUgY29kZSBvciBhIGRlc2NyaXB0aW9uIG9mIGEgZnVuY3Rpb24uIFRoZSBpbW1lZGlhdGUgdGhvdWdodCBpcywgKkkgbmVlZCBtb3JlIGluZm9ybWF0aW9uKi4gSSdtIG5vdCBnb2luZyB0byBqdW1wIHRvIGFueSBjb25jbHVzaW9ucyBiYXNlZCBvbiBqdXN0IGEgc25pcHBldC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaW5uZXIgd29ya2luZ3MgaXMgdG8gc2VlIHRoZSB3aG9sZSB0aGluZywgb3IgYXQgbGVhc3QgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIGl0LiBJIHdhbnQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGRhdGEgaXQgb3BlcmF0ZXMgb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZW50cnkgcG9pbnRzLCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gVGhpcyBcIkxldCdzIHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uXCIgaXMgY3J1Y2lhbDsgSSB1bmRlcnN0YW5kIHRoZSBpbXBvcnRhbmNlIG9mIGNvbXBsZXRlIGNvbnRleHQgdG8gbWFrZSBhIHNvdW5kIGV2YWx1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzU0LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MjowNC4wODM2MTYwOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTM4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEzODpcXHRcXG4xMTM5OlxcdFxcdFxcdGNhcHMtXFx1MDAzZXN1cHBfc3RlX2Zvcm1hdF9nZW5fd3FlID1cXG4xMTQwOlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTE0MTpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAuc3RlX2Zvcm1hdF9nZW5fd3FlKTtcXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlZmRiX3Rpcl9zdGMgPVxcbjExNDQ6XFx0XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMTQ1OlxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC5mZGJfanVtcF90b190aXJfc3RjKTtcXG4xMTQ2OlxcdFxcdH1cXG4xMTQ3OlxcdFxcbjExNDg6XFx0XFx0aWYgKGNhcHMtXFx1MDAzZWVzd2l0Y2hfbWFuYWdlcikge1xcbjExNDk6XFx0XFx0XFx0TUxYNV9TRVQocXVlcnlfaGNhX2NhcF9pbiwgaW4sIG9wX21vZCxcXG4xMTUwOlxcdFxcdFxcdFxcdCBNTFg1X0dFVF9IQ0FfQ0FQX09QX01PRF9FU1dfRkxPV19UQUJMRSB8IEhDQV9DQVBfT1BNT0RfR0VUX0NVUik7XFxuMTE1MTpcXHRcXG4xMTUyOlxcdFxcdFxcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xcbjExNTM6XFx0XFx0XFx0aWYgKHJldCkge1xcbjExNTQ6XFx0XFx0XFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiRmFpbGVkIHRvIHF1ZXJ5IGZsb3cgdGFibGUgZXN3IGNhcHNcXFxcblxcXCIpO1xcbjExNTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE1NjpcXHRcXHRcXHR9XFxuMTE1NzpcXHRcXG4xMTU4OlxcdFxcdFxcdGNhcHMtXFx1MDAzZWZkYl9mdC5tYXhfbGV2ZWwgPVxcbjExNTk6XFx0XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMTYwOlxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUubWF4X2Z0X2xldmVsKTtcXG4xMTYxOlxcdFxcbjExNjI6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlZmRiX2Z0LnJlcGFyc2UgPVxcbjExNjM6XFx0XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMTY0OlxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUucmVwYXJzZSk7XFxuMTE2NTpcXHRcXG4xMTY2OlxcdFxcdFxcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcF9tb2QsXFxuMTE2NzpcXHRcXHRcXHRcXHQgTUxYNV9TRVRfSENBX0NBUF9PUF9NT0RfRVNXIHwgSENBX0NBUF9PUE1PRF9HRVRfQ1VSKTtcXG4xMTY4OlxcdFxcbjExNjk6XFx0XFx0XFx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XFxuMTE3MDpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMTE3MTpcXHRcXHRcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJGYWlsZWQgdG8gcXVlcnkgZXN3aXRjaCBjYXBhYmlsaXRpZXNcXFxcblxcXCIpO1xcbjExNzI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE3MzpcXHRcXHRcXHR9XFxuMTE3NDpcXHRcXG4xMTc1OlxcdFxcdFxcdGlmIChNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExNzY6XFx0XFx0XFx0XFx0ICAgICBjYXBhYmlsaXR5LmVzd19jYXAuZXN3X21hbmFnZXJfdnBvcnRfbnVtYmVyX3ZhbGlkKSlcXG4xMTc3OlxcdFxcdFxcdFxcdGNhcHMtXFx1MDAzZWVzd2l0Y2hfbWFuYWdlcl92cG9ydF9udW1iZXIgPVxcbjExNzg6XFx0XFx0XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMTc5OlxcdFxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmVzd19jYXAuZXN3X21hbmFnZXJfdnBvcnRfbnVtYmVyKTtcXG4xMTgwOlxcdFxcbjExODE6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlbWVyZ2VkX2Vzd2l0Y2ggPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2FwYWJpbGl0eS5lc3dfY2FwLm1lcmdlZF9lc3dpdGNoKTtcXG4xMTgzOlxcdFxcdH1cXG4xMTg0OlxcdFxcbjExODU6XFx0XFx0c25wcmludGYoY2Fwcy1cXHUwMDNlZndfdmVyLCBzaXplb2YoY2Fwcy1cXHUwMDNlZndfdmVyKSwgXFxcIiVkLiVkLiVkXFxcIixcXG4xMTg2OlxcdFxcdFxcdCBmd19yZXZfbWFqKG1kZXYpLCBmd19yZXZfbWluKG1kZXYpLCBmd19yZXZfc3ViKG1kZXYpKTtcXG4xMTg3OlxcdFxcbjExODg6XFx0XFx0Y2Fwcy1cXHUwMDNlaXNfZWNwZiA9IG1seDVfY29yZV9pc19lY3BmX2Vzd19tYW5hZ2VyKG1kZXYpO1xcbjExODk6XFx0XFxuMTE5MDpcXHRvdXQ6XFxuMTE5MTpcXHRcXHRrZnJlZShvdXQpO1xcbjExOTI6XFx0XFx0cmV0dXJuIHJldDtcXG4xMTkzOlxcdH1cXG4xMTk0OlxcdFxcbjExOTU6XFx0aW50IG1seDVod3NfY21kX3F1ZXJ5X2d2bWkoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIGJvb2wgb3RoZXJfZnVuY3Rpb24sXFxuMTE5NjpcXHRcXHRcXHRcXHQgICB1MTYgdnBvcnRfbnVtYmVyLCB1MTYgKmd2bWkpXFxuMTE5NzpcXHR7XFxuMTE5ODpcXHRcXHRpbnQgZXJyO1xcbjExOTk6XFx0XFxuMTIwMDpcXHRcXHRpZiAoIW90aGVyX2Z1bmN0aW9uKSB7XFxuMTIwMTpcXHRcXHRcXHQvKiBzZWxmIHZoY2FfaWQgKi9cXG4xMjAyOlxcdFxcdFxcdCpndm1pID0gTUxYNV9DQVBfR0VOKG1kZXYsIHZoY2FfaWQpO1xcbjEyMDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTIwNDpcXHRcXHR9XFxuMTIwNTpcXHRcXG4xMjA2OlxcdFxcdGVyciA9IG1seDVfdnBvcnRfZ2V0X3ZoY2FfaWQobWRldiwgdnBvcnRfbnVtYmVyLCBndm1pKTtcXG4xMjA3OlxcdFxcdGlmIChlcnIpIHtcXG4xMjA4OlxcdFxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcIkZhaWxlZCB0byBnZXQgdnBvcnQgdmhjYSBpZCBmb3IgdnBvcnQgJWRcXFxcblxcXCIsXFxuMTIwOTpcXHRcXHRcXHRcXHQgICAgICB2cG9ydF9udW1iZXIpO1xcbjEyMTA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMjExOlxcdFxcdH1cXG4xMjEyOlxcdFxcbjEyMTM6XFx0XFx0cmV0dXJuIDA7XFxuMTIxNDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUyOjA0LjA4MzczNjY3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MzIwODYzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWNlbnQgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgb3ZlciB0aGlzIGRpZmYuIEZpcnN0LCB0aGUgcmVtb3ZhbCBvZiBgbWx4NV9jbWRfZXhlY2AgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCB3YXMgYSBkdXBsaWNhdGUgY2FsbCwgZXhlY3V0aW5nIHRoZSBzYW1lIGNvbW1hbmQgcmVkdW5kYW50bHksIGFzIEkgc3VzcGVjdGVkLiBJdCB3YXNuJ3QgcHVsbGluZyBhbnkgb3V0cHV0IGZyb20gdGhlIGNvbW1hbmQsIHNvIGl0IHdhcyBjbGVhcmx5IGFuIG92ZXJzaWdodC4gVGhhdCdzIGEgY2xlYW4tdXAsIG5vdGhpbmcgY29tcGxleCB0aGVyZS5cblxuTm93LCB0aGUgY2hhbmdlcyBpbiBgc2VuZC5jYCBhcmUgbW9yZSBpbnRlcmVzdGluZy4gQWRkaW5nIHRoZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBlbnVtL3N0YXR1cyBjb252ZXJzaW9ucyBpcyBhIGdvb2QgbW92ZTogYGh3c19ydWxlX3N0YXR1c190b19zdHJpbmdgLCBgaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZ2AsIGFuZCBgaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmdgLiBUaGlzIHdpbGwgZGVmaW5pdGVseSBpbXByb3ZlIGRlYnVnZ2luZyBhbmQgbG9nZ2luZywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aG9zZSBlcnJvciBkdW1wcyBpbiBgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlYC4gR2V0dGluZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiAoc3luZHJvbWUsIFFQTiwgV1FFX0NOVCkgbWFrZXMgYSBiaWcgZGlmZmVyZW5jZSBpbiBwaW5wb2ludGluZyBpc3N1ZXMsIGFuZCB1c2luZyBzdHJpbmdzIGluc3RlYWQgb2YganVzdCBjcnlwdGljIGludGVnZXIgdmFsdWVzIG1ha2VzIHRoZSBvdXRwdXQgbXVjaCBtb3JlIHJlYWRhYmxlLiBHb29kIHN0dWZmLlxuXG5UaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgb3JkZXIgY2hhbmdlIGluIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgLiBTd2FwcGluZyB0aGUgaW5jcmVtZW50IG9mIGBjdHgtXHUwMDNlcXVldWVzYCB3aXRoIHRoZSBhbGxvY2F0aW9uIG9mIGBjdHgtXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5c2AgaW1tZWRpYXRlbHkgcmFpc2VkIGEgZmxhZyBmb3IgbWUuIEl0J3MgYSBjbGFzc2ljIGVycm9yLWhhbmRsaW5nIGltcHJvdmVtZW50LiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGNsZWFudXAgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiBJbmNyZW1lbnRpbmcgdGhlIGBjdHgtXHUwMDNlcXVldWVzYCBiZWZvcmUgYWxsb2NhdGlvbiBjb3VsZCBtZWFuIGFuIGVycm9yIGxlYXZlcyB0aGUgYGN0eC1cdTAwM2VxdWV1ZXNgIGluY3JlbWVudGVkLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCBtZSByZXZpZXcgdGhlIGNvZGUgYW5kIHRoZSBlcnJvciBwYXRocyBtb3JlIGNsb3NlbHkgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gSSdtIGZvY3VzaW5nIG9uIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGFuZCBpdHMgYXNzb2NpYXRlZCBlcnJvciBoYW5kbGluZyBmb3IgY2xlYW51cCwgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIG1lbW9yeSBsZWFrcyBvciBpbmNvcnJlY3QgY291bnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2MiwiT3V0cHV0VG9rZW5zIjo1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUyOjEyLjUxNTgyNTg3OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNTI1NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYz0xMTA4PXZvaWQgbWx4NWh3c19zZW5kX3F1ZXVlc19jbG9zZShzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjExMTU6c3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExMTYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM9MTE1MD1pbnQgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExNjAtXFx0Lyogb3BlbiBhIHNlcGFyYXRlIHNldCBvZiBxdWV1ZXMgYW5kIGxvY2tzIGZvciBid2MgQVBJICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM6MTE2MTpcXHRlcnIgPSBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTYyLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUyOjEyLjk1ODM1NzA0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzE2MTIyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZSBpcyBkb2luZy4gSXQncyBvYnZpb3VzbHkgc2V0dGluZyB1cCBzZW5kIHF1ZXVlcywgYnV0IHRoZSBcImJ3Y1wiIHBhcnQgbWFrZXMgbWUgdGhpbmsgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBiYW5kd2lkdGggY29udHJvbCBvciBzb21lIGtpbmQgb2YgZmxvdyBtYW5hZ2VtZW50LiBUaGF0J3MgbXkgaW5pdGlhbCBodW5jaC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsIGFyZWFzIHRvIGxvb2sgZm9yOiBsb2NrIGNvbnRlbnRpb24sIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgZm9yIHRoZSBxdWV1ZXMgdGhlbXNlbHZlcywgYW5kIGhvdyB0aGlzIGluaXRpYWxpemF0aW9uIGludGVyYWN0cyB3aXRoIGludGVycnVwdCBoYW5kbGluZywgaWYgYXQgYWxsLiBJdCdzIGFsc28gaW1wb3J0YW50IHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0OyB3aGVyZSBpcyB0aGlzIGNvZGUgc2l0dWF0ZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbT8gSXMgaXQgcGFydCBvZiB0aGUgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIsIGEgc3BlY2lmaWMgbmV0d29yayBzdGFjaywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBkb2N1bWVudGF0aW9uIHNob3VsZCBoZWxwIG1lIGFuc3dlciB0aGlzLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIG5vdGUgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkIGhlcmUuIE9rYXksIGxldOKAmXMgcmVhZCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5OTIsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MjoxNi4xODk5NzE4MzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMTU6XFx0c3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbjExMTY6XFx0e1xcbjExMTc6XFx0XFx0LyogTnVtYmVyIG9mIEJXQyBxdWV1ZXMgaXMgZXF1YWwgdG8gbnVtYmVyIG9mIHRoZSB1c3VhbCBIV1MgcXVldWVzICovXFxuMTExODpcXHRcXHRpbnQgYndjX3F1ZXVlcyA9IGN0eC1cXHUwMDNlcXVldWVzIC0gMTtcXG4xMTE5OlxcdFxcdGludCBpO1xcbjExMjA6XFx0XFxuMTEyMTpcXHRcXHRpZiAoIW1seDVod3NfY29udGV4dF9id2Nfc3VwcG9ydGVkKGN0eCkpXFxuMTEyMjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTIzOlxcdFxcbjExMjQ6XFx0XFx0Y3R4LVxcdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2NrcyA9IGt6YWxsb2Nfb2JqcygqY3R4LVxcdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2NrcyxcXG4xMTI1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBid2NfcXVldWVzKTtcXG4xMTI2OlxcdFxcbjExMjc6XFx0XFx0aWYgKCFjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzKVxcbjExMjg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTEyOTpcXHRcXG4xMTMwOlxcdFxcdGN0eC1cXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyA9IGt6YWxsb2Nfb2JqcygqY3R4LVxcdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzLFxcbjExMzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0YndjX3F1ZXVlcyk7XFxuMTEzMjpcXHRcXHRpZiAoIWN0eC1cXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cylcXG4xMTMzOlxcdFxcdFxcdGdvdG8gZXJyX2xvY2tfY2xhc3Nfa2V5cztcXG4xMTM0OlxcdFxcbjExMzU6XFx0XFx0Y3R4LVxcdTAwM2VxdWV1ZXMgKz0gYndjX3F1ZXVlcztcXG4xMTM2OlxcdFxcbjExMzc6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJ3Y19xdWV1ZXM7IGkrKykge1xcbjExMzg6XFx0XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2Nrc1tpXSk7XFxuMTEzOTpcXHRcXHRcXHRsb2NrZGVwX3JlZ2lzdGVyX2tleShjdHgtXFx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMgKyBpKTtcXG4xMTQwOlxcdFxcdFxcdGxvY2tkZXBfc2V0X2NsYXNzKGN0eC1cXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MgKyBpLCBjdHgtXFx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMgKyBpKTtcXG4xMTQxOlxcdFxcdH1cXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0cmV0dXJuIDA7XFxuMTE0NDpcXHRcXG4xMTQ1OlxcdGVycl9sb2NrX2NsYXNzX2tleXM6XFxuMTE0NjpcXHRcXHRrZnJlZShjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzKTtcXG4xMTQ3OlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjExNDg6XFx0fVxcbjExNDk6XFx0XFxuMTE1MDpcXHRpbnQgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG4xMTUxOlxcdFxcdFxcdFxcdCAgICAgdTE2IHF1ZXVlcyxcXG4xMTUyOlxcdFxcdFxcdFxcdCAgICAgdTE2IHF1ZXVlX3NpemUpXFxuMTE1MzpcXHR7XFxuMTE1NDpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMTU1OlxcdFxcdGludCBpID0gMDtcXG4xMTU2OlxcdFxcbjExNTc6XFx0XFx0LyogT3BlbiBvbmUgZXh0cmEgcXVldWUgZm9yIGNvbnRyb2wgcGF0aCAqL1xcbjExNTg6XFx0XFx0Y3R4LVxcdTAwM2VxdWV1ZXMgPSBxdWV1ZXMgKyAxO1xcbjExNTk6XFx0XFxuMTE2MDpcXHRcXHQvKiBvcGVuIGEgc2VwYXJhdGUgc2V0IG9mIHF1ZXVlcyBhbmQgbG9ja3MgZm9yIGJ3YyBBUEkgKi9cXG4xMTYxOlxcdFxcdGVyciA9IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChjdHgpO1xcbjExNjI6XFx0XFx0aWYgKGVycilcXG4xMTYzOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTE2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MTYuMTkwMDk0MjY2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODY3NzA0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgUXVldWUgTWFuYWdlbWVudCBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZydzIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lLiBJdCBzZWVtcyBsaWtlIGBjdHgtXHUwMDNlcXVldWVzYCBnZXRzIGluY3JlbWVudGVkICpiZWZvcmUqIHRoZSBjYWxscyB0byBga3phbGxvY19vYmpzYC4gVGhlIHBvdGVudGlhbCBwcm9ibGVtIGhlcmUgaXMgdGhpczogaWYgdGhvc2UgYGt6YWxsb2Nfb2Jqc2AgY2FsbHMgZmFpbCwgYGN0eC1cdTAwM2VxdWV1ZXNgIGlzIHN0aWxsIGluY3JlbWVudGVkLCB3aGljaCBmZWVscyBsaWtlIGl0IGNvdWxkIGxlYWQgdG8gdHJvdWJsZSBkb3duIHRoZSBsaW5lLCBwb3RlbnRpYWxseSB3aGVuIGBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlYCBpcyBjYWxsZWQsIG9yIG1heWJlIHNvbWV3aGVyZSBlbHNlIGluIHRoZSBjb2RlIGJhc2UuIEEgZGFuZ2xpbmcgcG9pbnRlciwgcGVyaGFwcz8gT3IgaW5jb3JyZWN0IHF1ZXVlIGFjY291bnRpbmc/XG5cbldhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciBub3csIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIHJldHVybnMgYGVycmAgaWYgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgZmFpbHMuIFRoYXQncyBhIGdvb2QgZmFpbC1zYWZlLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBpbXBsaWNhdGlvbnMgb2YgdGhhdCBlcnJvciBwYXRoLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBoYW5kbGVzIGVycm9ycyBpbiB0aGlzIGNvbnRleHQuIExldCdzIHNlZSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgaW4gYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgd2hlbiB0aGF0IGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDQzLCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MjAuMDc2ODY3ODM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTUwOlxcdGludCBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxcbjExNTE6XFx0XFx0XFx0XFx0ICAgICB1MTYgcXVldWVzLFxcbjExNTI6XFx0XFx0XFx0XFx0ICAgICB1MTYgcXVldWVfc2l6ZSlcXG4xMTUzOlxcdHtcXG4xMTU0OlxcdFxcdGludCBlcnIgPSAwO1xcbjExNTU6XFx0XFx0aW50IGkgPSAwO1xcbjExNTY6XFx0XFxuMTE1NzpcXHRcXHQvKiBPcGVuIG9uZSBleHRyYSBxdWV1ZSBmb3IgY29udHJvbCBwYXRoICovXFxuMTE1ODpcXHRcXHRjdHgtXFx1MDAzZXF1ZXVlcyA9IHF1ZXVlcyArIDE7XFxuMTE1OTpcXHRcXG4xMTYwOlxcdFxcdC8qIG9wZW4gYSBzZXBhcmF0ZSBzZXQgb2YgcXVldWVzIGFuZCBsb2NrcyBmb3IgYndjIEFQSSAqL1xcbjExNjE6XFx0XFx0ZXJyID0gaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KGN0eCk7XFxuMTE2MjpcXHRcXHRpZiAoZXJyKVxcbjExNjM6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMTY0OlxcdFxcbjExNjU6XFx0XFx0Y3R4LVxcdTAwM2VzZW5kX3F1ZXVlID0ga3phbGxvY19vYmpzKCpjdHgtXFx1MDAzZXNlbmRfcXVldWUsIGN0eC1cXHUwMDNlcXVldWVzKTtcXG4xMTY2OlxcdFxcdGlmICghY3R4LVxcdTAwM2VzZW5kX3F1ZXVlKSB7XFxuMTE2NzpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjExNjg6XFx0XFx0XFx0Z290byBmcmVlX2J3Y19sb2NrcztcXG4xMTY5OlxcdFxcdH1cXG4xMTcwOlxcdFxcbjExNzE6XFx0XFx0LyogSWYgbmF0aXZlIEFQSSBpc24ndCBzdXBwb3J0ZWQsIHNraXAgdGhlIHVudXNlZCBuYXRpdmUgcXVldWVzOlxcbjExNzI6XFx0XFx0ICogaW5pdGlhbGl6ZSBCV0MgcXVldWVzIGFuZCBjb250cm9sIHF1ZXVlIG9ubHkuXFxuMTE3MzpcXHRcXHQgKi9cXG4xMTc0OlxcdFxcdGlmICghbWx4NWh3c19jb250ZXh0X25hdGl2ZV9zdXBwb3J0ZWQoY3R4KSlcXG4xMTc1OlxcdFxcdFxcdGkgPSBtbHg1aHdzX2J3Y19nZXRfcXVldWVfaWQoY3R4LCAwKTtcXG4xMTc2OlxcdFxcbjExNzc6XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBjdHgtXFx1MDAzZXF1ZXVlczsgaSsrKSB7XFxuMTE3ODpcXHRcXHRcXHRlcnIgPSBtbHg1aHdzX3NlbmRfcXVldWVfb3BlbihjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXNlbmRfcXVldWVbaV0sIHF1ZXVlX3NpemUpO1xcbjExNzk6XFx0XFx0XFx0aWYgKGVycilcXG4xMTgwOlxcdFxcdFxcdFxcdGdvdG8gY2xvc2Vfc2VuZF9xdWV1ZXM7XFxuMTE4MTpcXHRcXHR9XFxuMTE4MjpcXHRcXG4xMTgzOlxcdFxcdHJldHVybiAwO1xcbjExODQ6XFx0XFxuMTE4NTpcXHRjbG9zZV9zZW5kX3F1ZXVlczpcXG4xMTg2OlxcdFxcdCBfX2h3c19zZW5kX3F1ZXVlc19jbG9zZShjdHgsIGkpO1xcbjExODc6XFx0XFxuMTE4ODpcXHRcXHRrZnJlZShjdHgtXFx1MDAzZXNlbmRfcXVldWUpO1xcbjExODk6XFx0XFxuMTE5MDpcXHRmcmVlX2J3Y19sb2NrczpcXG4xMTkxOlxcdFxcdGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveShjdHgpO1xcbjExOTI6XFx0XFxuMTE5MzpcXHRcXHRyZXR1cm4gZXJyO1xcbjExOTQ6XFx0fVxcbjExOTU6XFx0XFxuMTE5NjpcXHRpbnQgbWx4NWh3c19zZW5kX3F1ZXVlX2FjdGlvbihzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXFxuMTE5NzpcXHRcXHRcXHRcXHQgICAgICB1MTYgcXVldWVfaWQsXFxuMTE5ODpcXHRcXHRcXHRcXHQgICAgICB1MzIgYWN0aW9ucylcXG4xMTk5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MjAuMDc3MDE5MzU1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNDUwMzIxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBSZXNvdXJjZSBMZWFrcyoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgYSBzcGVjaWZpYyBzY2VuYXJpbyBjYXVnaHQgbXkgZXllLiBJZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBlcnJvcnMgb3V0LCBpdCBqdXN0IHBhc3NlcyB0aGF0IGBlcnJgIHZhbHVlIHN0cmFpZ2h0IHVwIHRvIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gLCBhbmQgdGhlbiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCByZXR1cm5zLiBCdXQgSSdtIGNvbmNlcm5lZCBhYm91dCB3aGF0IGhhcHBlbnMgdG8gYGN0eC1cdTAwM2VxdWV1ZXNgIGluIHRoZSBtZWFudGltZS4gSXQgc2VlbXMgbGlrZSBgY3R4LVx1MDAzZXF1ZXVlc2AgbWlnaHQgZ2V0IG1vZGlmaWVkICpiZWZvcmUqIHRoZSBlcnJvciwgYnV0IHRoZSBjbGVhbnVwIG1pZ2h0IGJlIGluY29tcGxldGUgaWYgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgZmFpbHMgcmlnaHQgYWZ0ZXIuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgY2xlYW5zIHVwIGBjdHhgIHdoZW4gaXQgZXJyb3JzIG91dCwgYmVjYXVzZSBpZiBpdCBkb2Vzbid0LCB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgcmVzb3VyY2UgbGVhayBvbiBvdXIgaGFuZHMuXG5cblRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIG9mIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBldmVyeXdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcuIFRoYXQncyB0aGUgbmV4dCBzdGVwLCBJIHN1cHBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjA5LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MjQuMTIyMDU0MzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MTk3MjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYz0xMzQ9c3RhdGljIGludCBod3NfY29udGV4dF9pbml0X2h3cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0xNTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM6MTU3OlxcdHJldCA9IG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbihjdHgsIGF0dHItXFx1MDAzZXF1ZXVlcywgYXR0ci1cXHUwMDNlcXVldWVfc2l6ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMTU4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYz0xMTE1PXN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM6MTE1MDppbnQgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTUxLVxcdFxcdFxcdCAgICAgdTE2IHF1ZXVlcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5oPTE5Mz12b2lkIG1seDVod3Nfc2VuZF9xdWV1ZXNfY2xvc2Uoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuaC0xOTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmg6MTk1OmludCBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5oLTE5Ni1cXHRcXHRcXHQgICAgIHUxNiBxdWV1ZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUyOjI0LjE4ODI1NzMyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk3NzI2NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkNvbnRleHQgSW5pdGlhbGl6YXRpb24gRGl2aW5nIERlZXAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgY29udGV4dC5jYCBmaWxlIGFnYWluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIGhhcmR3YXJlIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQsIGFuZCB0aGF0IHN0YXJ0cyB3aXRoIHVuZGVyc3RhbmRpbmcgYGh3c19jb250ZXh0X2luaXRfaHdzYC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBoZXJlLCBrbm93aW5nIGhvdyB0aGlzIHN5c3RlbSBpcyBhcmNoaXRlY3RlZC4gTGV0J3Mgc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBzZXR1cC4gSSBleHBlY3QgdGhlcmUgd2lsbCBiZSBwbGVudHkgb2YgcG9pbnRlciBtYW5pcHVsYXRpb24gYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdG8gY29uc2lkZXIgaW4gdGhpcyBzZWN0aW9uLCB0b28sIHNvIEknbGwgYmUga2VlcGluZyBhIGtlZW4gZXllIG91dCBmb3IgdGhvc2UgdGhpbmdzLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb3JuZXJzdG9uZSwgc28gdW5kZXJzdGFuZGluZyBpdCBpcyBnb2luZyB0byBiZSBrZXkgdG8gZGVidWdnaW5nIGFueSBpc3N1ZXMgZG93biB0aGUgbGluZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHJlZ2lzdGVyIGFzc2lnbm1lbnRzLCBhbnkgbWVtb3J5IG1hcHBpbmcsIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZC4gTm93LCBsZXQncyBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTc4LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MjcuMzg1OTg2NzQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzQ6XFx0c3RhdGljIGludCBod3NfY29udGV4dF9pbml0X2h3cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXFxuIDEzNTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWx4NWh3c19jb250ZXh0X2F0dHIgKmF0dHIpXFxuIDEzNjpcXHR7XFxuIDEzNzpcXHRcXHRpbnQgcmV0O1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHRod3NfY29udGV4dF9jaGVja19od3Nfc3VwcChjdHgpO1xcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHRpZiAoIShjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUxYNUhXU19DT05URVhUX0ZMQUdfSFdTX1NVUFBPUlQpKVxcbiAxNDI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdHJldCA9IGh3c19jb250ZXh0X2luaXRfcGQoY3R4KTtcXG4gMTQ1OlxcdFxcdGlmIChyZXQpXFxuIDE0NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHRyZXQgPSBod3NfY29udGV4dF9wb29sc19pbml0KGN0eCk7XFxuIDE0OTpcXHRcXHRpZiAocmV0KVxcbiAxNTA6XFx0XFx0XFx0Z290byB1bmluaXRfcGQ7XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcdC8qIENvbnRleHQgaGFzIHN1cHBvcnQgZm9yIGJhY2t3YXJkIGNvbXBhdGlibGUgQVBJLFxcbiAxNTM6XFx0XFx0ICogYW5kIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgbmF0aXZlIEhXUyBBUEkuXFxuIDE1NDpcXHRcXHQgKi9cXG4gMTU1OlxcdFxcdGN0eC1cXHUwMDNlZmxhZ3MgfD0gTUxYNUhXU19DT05URVhUX0ZMQUdfQldDX1NVUFBPUlQ7XFxuIDE1NjpcXHRcXG4gMTU3OlxcdFxcdHJldCA9IG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbihjdHgsIGF0dHItXFx1MDAzZXF1ZXVlcywgYXR0ci1cXHUwMDNlcXVldWVfc2l6ZSk7XFxuIDE1ODpcXHRcXHRpZiAocmV0KVxcbiAxNTk6XFx0XFx0XFx0Z290byBwb29sc191bmluaXQ7XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdHJldCA9IG1seDVod3NfYWN0aW9uX3N0ZV9wb29sX2luaXQoY3R4KTtcXG4gMTYyOlxcdFxcdGlmIChyZXQpXFxuIDE2MzpcXHRcXHRcXHRnb3RvIGNsb3NlX3F1ZXVlcztcXG4gMTY0OlxcdFxcbiAxNjU6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmN0eC1cXHUwMDNldGJsX2xpc3QpO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRyZXR1cm4gMDtcXG4gMTY4OlxcdFxcbiAxNjk6XFx0Y2xvc2VfcXVldWVzOlxcbiAxNzA6XFx0XFx0bWx4NWh3c19zZW5kX3F1ZXVlc19jbG9zZShjdHgpO1xcbiAxNzE6XFx0cG9vbHNfdW5pbml0OlxcbiAxNzI6XFx0XFx0aHdzX2NvbnRleHRfcG9vbHNfdW5pbml0KGN0eCk7XFxuIDE3MzpcXHR1bmluaXRfcGQ6XFxuIDE3NDpcXHRcXHRod3NfY29udGV4dF91bmluaXRfcGQoY3R4KTtcXG4gMTc1OlxcdFxcdHJldHVybiByZXQ7XFxuIDE3NjpcXHR9XFxuIDE3NzpcXHRcXG4gMTc4OlxcdHN0YXRpYyB2b2lkIGh3c19jb250ZXh0X3VuaW5pdF9od3Moc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbiAxNzk6XFx0e1xcbiAxODA6XFx0XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IE1MWDVIV1NfQ09OVEVYVF9GTEFHX0hXU19TVVBQT1JUKSlcXG4gMTgxOlxcdFxcdFxcdHJldHVybjtcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0bWx4NWh3c19hY3Rpb25fc3RlX3Bvb2xfdW5pbml0KGN0eCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUyOjI3LjM4NjEzMTQ2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU3OTExNzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgUmVzb3VyY2UgTGVha3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgc29tZXRoaW5nJ3MgYnVnZ2luZyBtZS4gU3BlY2lmaWNhbGx5LCBJJ20gY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcywgcmlnaHQ/IE15IHRoaW5raW5nIGlzIHRoaXM6IGlmIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIGZhaWxzLCB0aGUgZXhlY3V0aW9uIGp1bXBzIHRvIGBwb29sc191bmluaXRgLiBUaGUgaXNzdWUgaXMsIGBwb29sc191bmluaXRgIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgY29ycmVzcG9uZGluZyBjYWxsIHRvIGBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlYC4gVGhhdCByYWlzZXMgYSByZWQgZmxhZzsgd2UgY291bGQgYmUgbGVha2luZyByZXNvdXJjZXMgaWYgdGhhdCBgb3BlbmAgY2FsbCBmYWlscyBidXQgdGhlIHJlc291cmNlcyBhcmVuJ3QgcHJvcGVybHkgY2xvc2VkLlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0LiBgbWx4NWh3c19jb250ZXh0X29wZW5gIGFsc28gbG9va3Mgc2lnbmlmaWNhbnQgaGVyZS4gSSBzZWUgdGhhdCBpdCBjYWxscyBgaHdzX2NvbnRleHRfaW5pdF9od3NgLiBJZiBgaHdzX2NvbnRleHRfaW5pdF9od3NgIGZhaWxzICpkdXJpbmcqIHRoYXQgcHJvY2VzcywgdGhlIGNvZGUgZG9lcyBwZXJmb3JtIHNvbWUgY2xlYW51cCBhbmQgcmV0dXJucy4gSW50ZXJlc3RpbmdseSwgdGhlIGNvbnRleHQgKGBjdHhgKSBpdHNlbGYgYXBwZWFycyB0byBiZSBmcmVlZCB3aXRoaW4gYG1seDVod3NfY29udGV4dF9vcGVuYCBpZiBhbiBlcnJvciBvY2N1cnMuIFRoYXQncyBnb29kLCBidXQgSSBzdGlsbCBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhlIHF1ZXVlIG1hbmFnZW1lbnQuXG5cblJpZ2h0LCBzbyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMsIEkgbmVlZCB0byBjaGVjayBgbWx4NWh3c19jb250ZXh0X29wZW5gJ3MgbG9naWMgbW9yZSBjbG9zZWx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBlcnJvciBoYW5kbGluZywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoYXQgZnVuY3Rpb24gdG8gY29uZmlybSB0aGUgbGVhayBpcyBwb3NzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxNzMsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MjozMS41NDQwNDY1OThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMDc5OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1seDVod3NfY29udGV4dF9vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jPTE3OD1zdGF0aWMgdm9pZCBod3NfY29udGV4dF91bmluaXRfaHdzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE4OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYzoxODk6c3RydWN0IG1seDVod3NfY29udGV4dCAqbWx4NWh3c19jb250ZXh0X29wZW4oc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMTkwLVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1seDVod3NfY29udGV4dF9hdHRyICphdHRyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYz0xMzA9c3RhdGljIGludCBtbHg1X2NtZF9od3NfY3JlYXRlX25zKHN0cnVjdCBtbHg1X2Zsb3dfcm9vdF9uYW1lc3BhY2UgKm5zKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYy0xMzktXFx0bnMtXFx1MDAzZWZzX2h3c19jb250ZXh0Lmh3c19jdHggPVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmM6MTQwOlxcdFxcdG1seDVod3NfY29udGV4dF9vcGVuKG5zLVxcdTAwM2VkZXYsIFxcdTAwMjZod3NfY3R4X2F0dHIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmMtMTQxLVxcdGlmICghbnMtXFx1MDAzZWZzX2h3c19jb250ZXh0Lmh3c19jdHgpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWx4NWh3cy5oPTIzNT1zdGF0aWMgaW5saW5lIGJvb2wgbWx4NWh3c19pc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21seDVod3MuaC0yNDktLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tbHg1aHdzLmg6MjUwOiAqIG1seDVod3NfY29udGV4dF9vcGVuIC0gT3BlbiBhIGNvbnRleHQgdXNlZCBmb3IgZGlyZWN0IHJ1bGUgaW5zZXJ0aW9uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tbHg1aHdzLmgtMjUxLSAqIHVzaW5nIGhhcmR3YXJlIHN0ZWVyaW5nLlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tbHg1aHdzLmg9MjU4PXN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWx4NWh3cy5oOjI1OTptbHg1aHdzX2NvbnRleHRfb3BlbihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21seDVod3MuaC0yNjAtXFx0XFx0ICAgICBzdHJ1Y3QgbWx4NWh3c19jb250ZXh0X2F0dHIgKmF0dHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MjozMS42MTUxMzE4OTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5Njc0MTY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG1seDVod3NfY29udGV4dF9vcGVuYCBmdW5jdGlvbi4gQXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGtleSBhcmVhcyB0byBzY3J1dGluaXplLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGhhcmR3YXJlIGNvbnRleHQg4oCTIHdoYXQncyBiZWluZyBpbml0aWFsaXplZD8gV2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGFsbG9jYXRlZD8gSSBleHBlY3QgdG8gc2VlIHRoZSBzZXR1cCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBNZWxsYW5veCBoYXJkd2FyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVycm9yIGhhbmRsaW5nLCBvZiBjb3Vyc2U7IGhvdyByb2J1c3QgaXMgaXQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgYW5kIGhvdyBhcmUgdGhleSBtYW5hZ2VkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBlc3BlY2lhbGx5IGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQ/IEknbGwgYmUgbG9va2luZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcGF0dGVybnMgYW5kIHBvdGVudGlhbCBsZWFrcyBhcyB3ZWxsLCBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGNvbnRleHQgaW50ZWdyYXRlcyB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUuIEkgd2FudCB0byBzZWUgYSBjbGVhciBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLCBhbmQgYW4gb2J2aW91cyBhdHRlbXB0IGF0IGNvZGUgbW9kdWxhcml0eSAtIGNhbiB0aGUgZnVuY3Rpb24gYmUgZWFzaWx5IGV4dGVuZGVkLCBtb2RpZmllZCBvciByZWZhY3RvcmVkIGluIHRoZSBmdXR1cmU/IFVsdGltYXRlbHksIEknbSBrZWVuIHRvIGdyYXNwIHRoZSBjb3JlIG1lY2hhbmljcyBvZiBob3cgdGhlIGhhcmR3YXJlIGlzIGJyb3VnaHQgb25saW5lIGFuZCBtYWRlIHJlYWR5IGZvciBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDAxLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MzQuOTExODc3MDAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODk6XFx0c3RydWN0IG1seDVod3NfY29udGV4dCAqbWx4NWh3c19jb250ZXh0X29wZW4oc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuIDE5MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtbHg1aHdzX2NvbnRleHRfYXR0ciAqYXR0cilcXG4gMTkxOlxcdHtcXG4gMTkyOlxcdFxcdHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eDtcXG4gMTkzOlxcdFxcdGludCByZXQ7XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xcbiAxOTY6XFx0XFx0aWYgKCFjdHgpXFxuIDE5NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTk4OlxcdFxcbiAxOTk6XFx0XFx0Y3R4LVxcdTAwM2VtZGV2ID0gbWRldjtcXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2VjdHJsX2xvY2spO1xcbiAyMDI6XFx0XFx0eGFfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2VwZWVyX2N0eF94YSk7XFxuIDIwMzpcXHRcXG4gMjA0OlxcdFxcdGN0eC1cXHUwMDNlY2FwcyA9IGt6YWxsb2Nfb2JqKCpjdHgtXFx1MDAzZWNhcHMpO1xcbiAyMDU6XFx0XFx0aWYgKCFjdHgtXFx1MDAzZWNhcHMpXFxuIDIwNjpcXHRcXHRcXHRnb3RvIGZyZWVfY3R4O1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRyZXQgPSBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzKG1kZXYsIGN0eC1cXHUwMDNlY2Fwcyk7XFxuIDIwOTpcXHRcXHRpZiAocmV0KVxcbiAyMTA6XFx0XFx0XFx0Z290byBmcmVlX2NhcHM7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdHJldCA9IG1seDVod3NfdnBvcnRfaW5pdF92cG9ydHMoY3R4KTtcXG4gMjEzOlxcdFxcdGlmIChyZXQpXFxuIDIxNDpcXHRcXHRcXHRnb3RvIGZyZWVfY2FwcztcXG4gMjE1OlxcdFxcbiAyMTY6XFx0XFx0cmV0ID0gaHdzX2NvbnRleHRfaW5pdF9od3MoY3R4LCBhdHRyKTtcXG4gMjE3OlxcdFxcdGlmIChyZXQpXFxuIDIxODpcXHRcXHRcXHRnb3RvIHVuaW5pdF92cG9ydHM7XFxuIDIxOTpcXHRcXG4gMjIwOlxcdFxcdG1seDVod3NfZGVidWdfaW5pdF9kdW1wKGN0eCk7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdHJldHVybiBjdHg7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdHVuaW5pdF92cG9ydHM6XFxuIDIyNTpcXHRcXHRtbHg1aHdzX3Zwb3J0X3VuaW5pdF92cG9ydHMoY3R4KTtcXG4gMjI2OlxcdGZyZWVfY2FwczpcXG4gMjI3OlxcdFxcdGtmcmVlKGN0eC1cXHUwMDNlY2Fwcyk7XFxuIDIyODpcXHRmcmVlX2N0eDpcXG4gMjI5OlxcdFxcdHhhX2Rlc3Ryb3koXFx1MDAyNmN0eC1cXHUwMDNlcGVlcl9jdHhfeGEpO1xcbiAyMzA6XFx0XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2Y3R4LVxcdTAwM2VjdHJsX2xvY2spO1xcbiAyMzE6XFx0XFx0a2ZyZWUoY3R4KTtcXG4gMjMyOlxcdFxcdHJldHVybiBOVUxMO1xcbiAyMzM6XFx0fVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRpbnQgbWx4NWh3c19jb250ZXh0X2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4gMjM2OlxcdHtcXG4gMjM3OlxcdFxcdG1seDVod3NfZGVidWdfdW5pbml0X2R1bXAoY3R4KTtcXG4gMjM4OlxcdFxcdGh3c19jb250ZXh0X3VuaW5pdF9od3MoY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MzQuOTExOTgzNTUzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDk3MTUyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBMZWFrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCBhIHBvdGVudGlhbCBpc3N1ZS4gSXQgc2VlbXMgbGlrZSBpZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscywgdGhlIGBjdHhgIHN0cnVjdCBpcyBpbW1lZGlhdGVseSBmcmVlZC4gVGhlIGJ1ZyBoZXJlIGlzIHRoYXQgYGN0eC1cdTAwM2VxdWV1ZXNgIGdldHMgaW5jcmVtZW50ZWQgKmJlZm9yZSogdGhlIGNoZWNrIGFuZCBwb3RlbnRpYWwgZnJlZS4gSG93ZXZlciwgaW4gdGhpcyBzcGVjaWZpYyBjYXNlIGl0IGRvZXNuJ3QgbWF0dGVyIGZvciBgY3R4YCBpdHNlbGYgYmVjYXVzZSBpdCBnZXRzIGZyZWVkIGltbWVkaWF0ZWx5LlxuXG5CdXQsIGEgcmVkIGZsYWcgcG9wcGVkIHVwLiBXaGF0IGhhcHBlbnMgaWYgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgZmFpbHMgbGF0ZXIgb24/IFNwZWNpZmljYWxseSwgbGV0J3Mgc2F5IGl0IGZhaWxzIHdpdGhpbiBgbWx4NWh3c19zZW5kX3F1ZXVlX29wZW5gLiBJZiB0aGF0IGhhcHBlbnMsIHRoZSBjb2RlIGZsb3cgbGVhZHMgdG8gYGNsb3NlX3NlbmRfcXVldWVzYC4gV2l0aGluIGBjbG9zZV9zZW5kX3F1ZXVlc2AsIHdlJ3JlIGNhbGxpbmcgYF9faHdzX3NlbmRfcXVldWVzX2Nsb3NlKGN0eCwgaSk7YCwgYW5kICp0aGVuKiB3ZSBjYWxsIGBmcmVlX2J3Y19sb2Nrc2AsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveShjdHgpYC4gSSBuZWVkIHRvIGRpZyBpbnRvIGBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3lgIG5vdyBiZWNhdXNlIGl0J3MgcG9zc2libGUgdGhhdCBgY3R4YCBpcyBub3QgdmFsaWQgYXQgdGhpcyBwb2ludCEgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBiZWVuIGluaXRpYWxpemVkIGNvcnJlY3RseSBhbmQgaGFzbid0IGJlZW4gY29ycnVwdGVkLiBJIG5lZWQgdG8ga25vdyB3aGF0IGhhcHBlbnMgaWYgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgZmFpbHMgKmFmdGVyKiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBoYXMgc3VjY2VlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM5MywiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUyOjM5LjUyMTcwMjM4OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5OSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA5OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYndjX3F1ZXVlczsgaSsrKSB7XFxuMTEwMDpcXHRcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzW2ldKTtcXG4xMTAxOlxcdFxcdFxcdGxvY2tkZXBfdW5yZWdpc3Rlcl9rZXkoY3R4LVxcdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzICsgaSk7XFxuMTEwMjpcXHRcXHR9XFxuMTEwMzpcXHRcXG4xMTA0OlxcdFxcdGtmcmVlKGN0eC1cXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyk7XFxuMTEwNTpcXHRcXHRrZnJlZShjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzKTtcXG4xMTA2OlxcdH1cXG4xMTA3OlxcdFxcbjExMDg6XFx0dm9pZCBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4xMTA5OlxcdHtcXG4xMTEwOlxcdFxcdGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveShjdHgpO1xcbjExMTE6XFx0XFx0X19od3Nfc2VuZF9xdWV1ZXNfY2xvc2UoY3R4LCBjdHgtXFx1MDAzZXF1ZXVlcyk7XFxuMTExMjpcXHRcXHRrZnJlZShjdHgtXFx1MDAzZXNlbmRfcXVldWUpO1xcbjExMTM6XFx0fVxcbjExMTQ6XFx0XFxuMTExNTpcXHRzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuMTExNjpcXHR7XFxuMTExNzpcXHRcXHQvKiBOdW1iZXIgb2YgQldDIHF1ZXVlcyBpcyBlcXVhbCB0byBudW1iZXIgb2YgdGhlIHVzdWFsIEhXUyBxdWV1ZXMgKi9cXG4xMTE4OlxcdFxcdGludCBid2NfcXVldWVzID0gY3R4LVxcdTAwM2VxdWV1ZXMgLSAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MjozOS41MjE4MTYzNDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwNDE4MzQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3lgIGFuZCBpbW1lZGlhdGVseSBhIHJlZCBmbGFnIHBvcHMgdXAuIEl0IHNlZW1zIHRvIGJlIGRlY3JlbWVudGluZyBgY3R4LVx1MDAzZXF1ZXVlc2Agd2l0aCBgYndjX3F1ZXVlcyA9IGN0eC1cdTAwM2VxdWV1ZXMgLSAxO2AgLiAqVGhhdCogd2FycmFudHMgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkncmUgc3VidHJhY3Rpbmcgb25lIGhlcmUuIElzIGl0IGEgcG90ZW50aWFsIG9mZi1ieS1vbmUgZXJyb3I/IEFtIEkgbWlzdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dD8gSXMgdGhpcyBpbnRlbmRlZCBiZWhhdmlvciBmb3Igc29tZSBzdWJ0bGUgcmVhc29uIHJlbGF0ZWQgdG8gdGhlIHF1ZXVpbmcgbWVjaGFuaXNtIG9yIGJhbmR3aWR0aCBjb250cm9sIHRoYXQgSSBuZWVkIHRvIHJlY2FsbD8gSSdtIGdvaW5nIHRvIGhhdmUgdG8gdmVyaWZ5IHRoaXMgbG9naWMgY2FyZWZ1bGx5IHRvIG1ha2Ugc3VyZSBpdCBpcyBjb3JyZWN0LCBzYWZlLCBhbmQgZWZmaWNpZW50LiBMZXQncyBkZWx2ZSBpbiBhbmQgc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMyOCwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6NDIuODI2MDAyMzU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDkwOlxcdFxcbjEwOTE6XFx0c3RhdGljIHZvaWQgaHdzX3NlbmRfcXVldWVzX2J3Y19sb2Nrc19kZXN0cm95KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4xMDkyOlxcdHtcXG4xMDkzOlxcdFxcdGludCBid2NfcXVldWVzID0gbWx4NWh3c19id2NfcXVldWVzKGN0eCk7XFxuMTA5NDpcXHRcXHRpbnQgaTtcXG4xMDk1OlxcdFxcbjEwOTY6XFx0XFx0aWYgKCFtbHg1aHdzX2NvbnRleHRfYndjX3N1cHBvcnRlZChjdHgpKVxcbjEwOTc6XFx0XFx0XFx0cmV0dXJuO1xcbjEwOTg6XFx0XFxuMTA5OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYndjX3F1ZXVlczsgaSsrKSB7XFxuMTEwMDpcXHRcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzW2ldKTtcXG4xMTAxOlxcdFxcdFxcdGxvY2tkZXBfdW5yZWdpc3Rlcl9rZXkoY3R4LVxcdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzICsgaSk7XFxuMTEwMjpcXHRcXHR9XFxuMTEwMzpcXHRcXG4xMTA0OlxcdFxcdGtmcmVlKGN0eC1cXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyk7XFxuMTEwNTpcXHRcXHRrZnJlZShjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzKTtcXG4xMTA2OlxcdH1cXG4xMTA3OlxcdFxcbjExMDg6XFx0dm9pZCBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4xMTA5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6NDIuODI2MTEwOTU4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjkxODQwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIG1seDVod3NfYndjX3F1ZXVlcyhjdHgpIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyBgbWx4NWh3c19id2NfcXVldWVzKGN0eClgIGlzIGJlaW5nIGludm9rZWQgaGVyZS4gSW50ZXJlc3RpbmcuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gaW1tZWRpYXRlbHkgZGlzc2VjdCB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgY29udGV4dCwgc3BlY2lmaWNhbGx5IHdoYXQgaXQncyBjb250cmlidXRpbmcgdG8gdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBUaGUgbmFtZSBpdHNlbGYsIFwiYndjLFwiIGxpa2VseSBoaW50cyBhdCBiYW5kd2lkdGggY29udHJvbCBvciBzb21lIGtpbmQgb2YgcmVzb3VyY2UgbWFuYWdlbWVudCByZWxhdGVkIHRvIHF1ZXVlcywgZ2l2ZW4gdGhlIFwicXVldWVzXCIgc3VmZml4LiBNeSBtZW50YWwgY2hlY2tsaXN0IGtpY2tzIGluOiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24sIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMgb24gYGN0eGAgYW5kIGFueSByZWxhdGVkIHN0cnVjdHVyZXMsIGFuZCB1bmRlcnN0YW5kIHRoZSBhbGdvcml0aG1zIHVzZWQgZm9yIGJhbmR3aWR0aCBhbGxvY2F0aW9uIG9yIHF1ZXVlIG1hbmFnZW1lbnQuIElzIGl0IHVzaW5nIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvZiB0aGUgTWVsbGFub3ggYWRhcHRlcj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgSSBzaG91bGQgYmUgYXdhcmUgb2YsIGxpa2UgbG9jayBjb250ZW50aW9uIG9yIGluZWZmaWNpZW50IGRhdGEgc3RydWN0dXJlcz8gVGhlIGBjdHhgIHBhcmFtZXRlciBpcyB0aGUgbmV4dCBjcnVjaWFsIHBpZWNlLiBJJ2xsIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIG5hdHVyZSBvZiB0aGUgY29udGV4dCwgYW5kIHdoYXQgZGF0YSBpdCdzIGhvbGRpbmcgdG8gdHJ1bHkgdW5kZXJzdGFuZCBob3cgaXQgaXMgYmVpbmcgdXNlZCBieSB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTUxLCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1Mjo0Ni40OTUyOTgwODVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTYyNzkyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbHg1aHdzX2J3Y19xdWV1ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYz02PXN0YXRpYyB1MTYgaHdzX2J3Y19nZW5fcXVldWVfaWR4KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtOC1cXHQvKiBhc3NpZ24gcmFuZG9tIHF1ZXVlICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYzo5OlxcdHJldHVybiBnZXRfcmFuZG9tX3U4KCkgJSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTEwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM9MjU9c3RhdGljIHZvaWQgaHdzX2J3Y19sb2NrX2FsbF9xdWV1ZXMoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM6Mjc6XFx0dTE2IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTI4LVxcdHN0cnVjdCBtdXRleCAqcXVldWVfbG9jazsgLyogUHJvdGVjdCB0aGUgcXVldWUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM9Mzc9c3RhdGljIHZvaWQgaHdzX2J3Y191bmxvY2tfYWxsX3F1ZXVlcyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYy0zOC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYzozOTpcXHR1MTYgYndjX3F1ZXVlcyA9IG1seDVod3NfYndjX3F1ZXVlcyhjdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtNDAtXFx0c3RydWN0IG11dGV4ICpxdWV1ZV9sb2NrOyAvKiBQcm90ZWN0IHRoZSBxdWV1ZSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYz02OT1od3NfYndjX21hdGNoZXJfbW92ZV9hbGxfc2ltcGxlKHN0cnVjdCBtbHg1aHdzX2J3Y19tYXRjaGVyICpid2NfbWF0Y2hlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtNzMtXFx0aW50IGRyYWluX2Vycm9yID0gMCwgbW92ZV9lcnJvciA9IDAsIHBvbGxfZXJyb3IgPSAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM6NzQ6XFx0dTE2IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTc1LVxcdHN0cnVjdCBtbHg1aHdzX3J1bGVfYXR0ciBydWxlX2F0dHI7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jPTIyNz1pbnQgbWx4NWh3c19id2NfbWF0Y2hlcl9jcmVhdGVfc2ltcGxlKHN0cnVjdCBtbHg1aHdzX2J3Y19tYXRjaGVyICpid2NfbWF0Y2hlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjM1LVxcdHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCA9IHRhYmxlLVxcdTAwM2VjdHg7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYzoyMzY6XFx0dTE2IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTIzNy1cXHRzdHJ1Y3QgbWx4NWh3c19tYXRjaGVyX2F0dHIgYXR0ciA9IHswfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmg9OTc9aW50IG1seDVod3NfYndjX3F1ZXVlX3BvbGwoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuaC0xMDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuaDoxMDI6c3RhdGljIGlubGluZSB1MTYgbWx4NWh3c19id2NfcXVldWVzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5oLTEwMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5oPTExMj1zdGF0aWMgaW5saW5lIHUxNiBtbHg1aHdzX2J3Y19nZXRfcXVldWVfaWQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LCB1MTYgaWR4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmgtMTEzLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5oOjExNDpcXHRyZXR1cm4gaWR4ICsgbWx4NWh3c19id2NfcXVldWVzKGN0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuaC0xMTUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2NfY29tcGxleC5jPTk0OD1od3NfYndjX21hdGNoZXJfaW5pdF9tb3ZlKHN0cnVjdCBtbHg1aHdzX2J3Y19tYXRjaGVyICpid2NfbWF0Y2hlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYy05NTAtXFx0c3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4ID0gYndjX21hdGNoZXItXFx1MDAzZW1hdGNoZXItXFx1MDAzZXRibC1cXHUwMDNlY3R4O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYzo5NTE6XFx0dTE2IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Y19jb21wbGV4LmMtOTUyLVxcdHN0cnVjdCBtbHg1aHdzX2J3Y19ydWxlICpid2NfcnVsZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYz05Njk9aW50IG1seDVod3NfYndjX21hdGNoZXJfY29tcGxleF9tb3ZlKHN0cnVjdCBtbHg1aHdzX2J3Y19tYXRjaGVyICpid2NfbWF0Y2hlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYy05NzItXFx0c3RydWN0IG1seDVod3NfbWF0Y2hlciAqbWF0Y2hlciA9IGJ3Y19tYXRjaGVyLVxcdTAwM2VtYXRjaGVyO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYzo5NzM6XFx0dTE2IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Y19jb21wbGV4LmMtOTc0LVxcdHN0cnVjdCBtbHg1aHdzX2J3Y19ydWxlICp0bXBfYndjX3J1bGU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYz0xMDkxPXN0YXRpYyB2b2lkIGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveShzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTA5Mi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM6MTA5MzpcXHRpbnQgYndjX3F1ZXVlcyA9IG1seDVod3NfYndjX3F1ZXVlcyhjdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTEwOTQtXFx0aW50IGk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUyOjQ2Ljg2NDkzMDg2M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk4ODcyMzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIEJhbmR3aWR0aCBDb250cm9sIFF1ZXVlcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGJhbmR3aWR0aCBjb250cm9sIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBNZWxsYW5veCBoYXJkd2FyZSBjb250ZXh0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgdG8gYG1seDVod3NfYndjX3F1ZXVlc2AsIGxpa2VseSBkZWZpbmVkIGluIGBid2MuaGAuIFRoaXMgc3VnZ2VzdHMgSSdtIGxvb2tpbmcgZm9yIHRoZSBzdHJ1Y3R1cmFsIGRlZmluaXRpb25zLCBjb25zdGFudHMsIGFuZCBwb3RlbnRpYWxseSwgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBnb3Zlcm4gcXVldWUtbGV2ZWwgYmFuZHdpZHRoIGFsbG9jYXRpb24gYW5kIGVuZm9yY2VtZW50IHdpdGhpbiB0aGUgTUxYNSBoYXJkd2FyZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB1c3VhbGx5IHJlc2lkZXMsIGVuYWJsaW5nIHRyYWZmaWMgc2hhcGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC4gSSdtIGFudGljaXBhdGluZyB0byBzZWUgZGV0YWlscyByZWxhdGVkIHRvIHRoZSBxdWV1ZSBpZGVudGlmaWVycywgcmF0ZSBsaW1pdGluZyBwYXJhbWV0ZXJzIChlLmcuLCBDSVIsIFBJUiwgYnVyc3Qgc2l6ZXMpLCBhbmQgdGhlIG1lY2hhbmlzbXMgZm9yIGVuZm9yY2luZyB0aGVzZSBsaW1pdHMgd2l0aGluIHRoZSBoYXJkd2FyZSdzIGludGVybmFsIHNjaGVkdWxpbmcuIEdvaW5nIHRvIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoYXQgc3BlY2lmaWMgZWxlbWVudCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjgwLCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6NTAuMjYzODA2MTg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMjpcXHRzdGF0aWMgaW5saW5lIHUxNiBtbHg1aHdzX2J3Y19xdWV1ZXMoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbiAxMDM6XFx0e1xcbiAxMDQ6XFx0XFx0LyogQmVzaWRlcyB0aGUgY29udHJvbCBxdWV1ZSwgaGFsZiBvZiB0aGUgcXVldWVzIGFyZVxcbiAxMDU6XFx0XFx0ICogcmVndWxhciBIV1MgcXVldWVzLCBhbmQgdGhlIG90aGVyIGhhbGYgYXJlIEJXQyBxdWV1ZXMuXFxuIDEwNjpcXHRcXHQgKi9cXG4gMTA3OlxcdFxcdGlmIChtbHg1aHdzX2NvbnRleHRfYndjX3N1cHBvcnRlZChjdHgpKVxcbiAxMDg6XFx0XFx0XFx0cmV0dXJuIChjdHgtXFx1MDAzZXF1ZXVlcyAtIDEpIC8gMjtcXG4gMTA5OlxcdFxcdHJldHVybiAwO1xcbiAxMTA6XFx0fVxcbiAxMTE6XFx0XFxuIDExMjpcXHRzdGF0aWMgaW5saW5lIHUxNiBtbHg1aHdzX2J3Y19nZXRfcXVldWVfaWQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LCB1MTYgaWR4KVxcbiAxMTM6XFx0e1xcbiAxMTQ6XFx0XFx0cmV0dXJuIGlkeCArIG1seDVod3NfYndjX3F1ZXVlcyhjdHgpO1xcbiAxMTU6XFx0fVxcbiAxMTY6XFx0XFxuIDExNzpcXHQjZW5kaWYgLyogSFdTX0JXQ19IXyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1Mjo1MC4yNjM5MzgyMTVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkwMTAyNjY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG1seDVod3MgUXVldWUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgYG1seDVod3NfYndjX3F1ZXVlc2AgY2FsY3VsYXRpbmcgYChjdHgtXHUwMDNlcXVldWVzIC0gMSkgLyAyYC4gVGhlbiwgSSBzdGFydGVkIGRpZ2dpbmcgaW50byB0aGUgcG90ZW50aWFsIGZhaWx1cmUgc2NlbmFyaW9zLCBzcGVjaWZpY2FsbHkgaWYgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgZmFpbHMuIEkgc2VlIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBmYWlscywgYGN0eC1cdTAwM2VxdWV1ZXNgIHdhcyBhbHJlYWR5IGluY3JlbWVudGVkIGJ5IGBid2NfcXVldWVzYCDigJMgd2hpY2ggaXMgZXF1YWwgdG8gdGhlIG9yaWdpbmFsIGBjdHgtXHUwMDNlcXVldWVzIC0gMWAuIFNvLCBpZiBgY3R4LVx1MDAzZXF1ZXVlc2Agc3RhcnRzIGF0IDMsIGBid2NfcXVldWVzYCBiZWNvbWVzIDIsIGFuZCBgY3R4LVx1MDAzZXF1ZXVlc2AgaXMgdXBkYXRlZCB0byA1LlxuXG5Ob3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscyAqYWZ0ZXIqIHRoaXMgaW5jcmVtZW50LCB0aGUgcmV0dXJuIHZhbHVlIGBlcnJgIGlzIHBhc3NlZCBkaXJlY3RseSB1cCB0byBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYC4gQ3J1Y2lhbGx5LCBpdCBieXBhc3NlcyB0aGUgY2xlYW51cCBzdGVwczogYGZyZWVfYndjX2xvY2tzYCBhbmQgYGNsb3NlX3NlbmRfcXVldWVzYC4gVGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIGNvbmNlcm4sIGkuZS4sIHdoZXRoZXIgdGhlIGxvY2tzIHdlcmUgcHJvcGVybHkgZnJlZWQuXG5cbkhvd2V2ZXIsIEkgcmVtZW1iZXJlZCB0aGF0IGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgICpkb2VzKiBwZXJmb3JtIGl0cyBvd24gY2xlYW51cCBvbiBmYWlsdXJlLCBzcGVjaWZpY2FsbHkgZnJlZWluZyBgY3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzYC4gU28sIGl0IGZyZWVzIHVwIHRoYXQgbWVtb3J5IHRoYXQgaXQgYWxsb2NhdGVkLiBUaGUgaXNzdWUgaXMgdGhhdCB0aGUgYGN0eC1cdTAwM2VxdWV1ZXNgIHZhbHVlIHJlbWFpbnMgaW5jcmVtZW50ZWQsIGV2ZW4gdGhvdWdoIHRoZSBmdW5jdGlvbiBmYWlscyFcblxuQnV0IHRoZW4sIEkgdHJhY2VkIHRoZSBmYWlsdXJlIHBhdGggZnVydGhlci4gVGhlIGVycm9yIGNvZGUsIGxpa2VseSBgLUVOT01FTWAgaW4gdGhpcyBjYXNlLCBidWJibGVzIHVwIGZyb20gYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgdG8gYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgYW5kIHRoZW4gdG8gYGh3c19jb250ZXh0X2luaXRfaHdzYC4gRnJvbSB0aGVyZSwgdGhlIGNvbnRyb2wgZmxvd3MgdGhyb3VnaCBgcG9vbHNfdW5pbml0YCwgY2FsbGluZyBgaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0KGN0eClgLiBGaW5hbGx5LCBgbWx4NWh3c19jb250ZXh0X29wZW5gIGVuZHMgd2l0aCBgdW5pbml0X3Zwb3J0c2AsIHRoZW4gYGZyZWVfY2Fwc2AsIGFuZCBmaW5hbGx5IGBmcmVlX2N0eGAuXG5cbkFoYSEgYGN0eGAgaXMgZnJlZWQgaW4gYGZyZWVfY3R4YCEgU28sIHRoZSBmYWN0IHRoYXQgYGN0eC1cdTAwM2VxdWV1ZXNgIG1pZ2h0IGhhdmUgYW4gaW5jb3JyZWN0IHZhbHVlIGR1ZSB0byB0aGUgZmFpbGVkIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGRvZXNuJ3QgYWN0dWFsbHkgbWF0dGVyIGJlY2F1c2UgdGhlIGVudGlyZSBgY3R4YCBpcyBkZWFsbG9jYXRlZC4gSXQncyBhIGJpdCBtZXNzeSwgYnV0IHVsdGltYXRlbHkgc2FmZSBkdWUgdG8gdGhlIGNvbXBsZXRlIHRlYXJkb3duLlxuXG5JIG1hZGUgc3VyZSBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBpcyBvbmx5IGNhbGxlZCBpbiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCwgYW5kIHRoZSBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBvbmNlLiBUaGUgaW5jcmVtZW50IGluIGBjdHgtXHUwMDNlcXVldWVzYCBpcyBqdXN0IHRyYW5zaWVudC4gSXQgYmVjb21lcyBpcnJlbGV2YW50IGJlY2F1c2UgdGhlIGNvbnRleHQgaXRzZWxmIGlzIGRlc3Ryb3llZC4gQ2FzZSBjbG9zZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODUxLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6NTkuMTY0OTY4MjQzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTIwMzMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9MTM0PXN0YXRpYyBpbnQgaHdzX2NvbnRleHRfaW5pdF9od3Moc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMTU2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjE1NzpcXHRyZXQgPSBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oY3R4LCBhdHRyLVxcdTAwM2VxdWV1ZXMsIGF0dHItXFx1MDAzZXF1ZXVlX3NpemUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE1OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM9MTExNT1zdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTQ5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjExNTA6aW50IG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbihzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTE1MS1cXHRcXHRcXHQgICAgIHUxNiBxdWV1ZXMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuaD0xOTM9dm9pZCBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmgtMTk0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5oOjE5NTppbnQgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuaC0xOTYtXFx0XFx0XFx0ICAgICB1MTYgcXVldWVzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1Mjo1OS4yMzQxODEwMjdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2ODUwNzAyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBMZWFrIGluIHRoZSBNTFg1IEhXUyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBmdW5jdGlvbi4gSXQgc2VlbXMgaXQncyBvbmx5IGNhbGxlZCBmcm9tIGBod3NfY29udGV4dF9pbml0X2h3c2AsIGFuZCBpZiBpdCBmYWlscywgdGhlIGNvbnRleHQgKGBjdHhgKSBpcyBpbW1lZGlhdGVseSBmcmVlZC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCB3aGF0IGlmIHRoZXJlJ3MgYSBwcm9ibGVtICphZnRlciogYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgc3VjY2VlZHMsIGFuZCB0aGVuIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIGZhaWxzIGxhdGVyIG9uPyBGb3IgZXhhbXBsZSwgd2hhdCBpZiBga3phbGxvY19vYmpzYCBmYWlscyB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGBjdHgtXHUwMDNlc2VuZF9xdWV1ZWA/XG5cbkluIHRoaXMgY2FzZSwgaXQganVtcHMgdG8gYGZyZWVfYndjX2xvY2tzYCwgd2hpY2ggY2FsbHMgYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveShjdHgpYC4gSW5zaWRlIHRoYXQsIGBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KWAgaXMgY2FsbGVkLiBUaGlzIGZ1bmN0aW9uIHVzZXMgYGN0eC1cdTAwM2VxdWV1ZXNgIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIEJXQyBxdWV1ZXMuIE15IGNvbmNlcm4gaXMgdGhhdCBgY3R4LVx1MDAzZXF1ZXVlc2AgaXMgKmluY3JlbWVudGVkKiBpbiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YC5cblxuTGV0J3MgdHJhY2UgaXQ6IGBjdHgtXHUwMDNlcXVldWVzYCBpbml0aWFsbHkgZ2V0cyBzZXQgdG8gYHF1ZXVlcyArIDFgICh3aGVyZSBgcXVldWVzYCBpcyB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gKS4gVGhlbiwgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgaXMgY2FsbGVkLCBhbmQgaW5zaWRlIGl0LCBgY3R4LVx1MDAzZXF1ZXVlc2AgYmVjb21lcyBgcXVldWVzICsgMSArIHF1ZXVlc2AgKG9yIGAyICogcXVldWVzICsgMWApLiBUaGlzIGlzIHRoZW4gdXNlZCBpbiBgbWx4NWh3c19id2NfcXVldWVzYCB3aGljaCBjYWxjdWxhdGVzIGAoMiAqIHF1ZXVlcyArIDEgLSAxKSAvIDIgPSBxdWV1ZXNgLiBJdCBtYWtlcyBzZW5zZSwgYXMgdGhlIGxvY2tzIGFyZSBkZXN0cm95ZWQsIGFuZCBtZW1vcnkgZnJlZWQuIEl0IHNob3VsZCBiZSBjb3JyZWN0LiBUaGUgYGN0eGAgZ2V0cyBmcmVlZCwgYnV0IG5vIG1lbW9yeSBsZWFrcyB3ZXJlIGZvdW5kLlxuXG5Tbywgd2hlcmUgd2FzIHRoZSBidWcsIHRoZW4/IEdvaW5nIGJhY2sgdG8gYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAsIEkgc2VlIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGFib3V0IHRoZSBhbGxvY2F0aW9uIG9mIGBjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3NgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSBsb29rZWQgbGlrZSB0aGlzOiBgY3R4LVx1MDAzZXF1ZXVlcyArPSBid2NfcXVldWVzO2AgKmJlZm9yZSogYWxsb2NhdGluZyBgY3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzYC4gSWYgYGt6YWxsb2Nfb2Jqc2AgZmFpbGVkLCB0aGVuIGAtRU5PTUVNYCB3b3VsZCBiZSByZXR1cm5lZC4gQ3JpdGljYWxseSwgYGN0eC1cdTAwM2VxdWV1ZXNgIHdvdWxkIGhhdmUgYmVlbiAqaW5jcmVtZW50ZWQqIGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuIEV2ZW4gaWYgYGN0eGAgaXMgZnJlZWQsIHRoZSB2YWx1ZSBvZiBgY3R4LVx1MDAzZXF1ZXVlc2Agc2hvdWxkIGhhdmUgYmVlbiBjb3JyZWN0LCBhbmQgdGhlcmUgc2hvdWxkIGJlIG5vIG1lbW9yeSBsZWFrLlxuXG5TbywgbGV0J3MgdHJhY2sgdGhlIGVycm9yIHBhdGggYmFjayB0byBgaHdzX2NvbnRleHRfaW5pdF9od3NgLiBJZiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBmYWlscywgdGhlIGNvZGUganVtcHMgdG8gYHBvb2xzX3VuaW5pdGAsIGNhbGxpbmcgYGh3c19jb250ZXh0X3Bvb2xzX3VuaW5pdChjdHgpYC4gVGhlIHF1ZXN0aW9uIGlzOiBEb2VzIHRoaXMgZnVuY3Rpb24gKnVzZSogYGN0eC1cdTAwM2VxdWV1ZXNgPyBJZiBpdCBkb2Vzbid0LCB3ZSdyZSBwcm9iYWJseSBzYWZlLiBJIG5lZWQgdG8gZXhhbWluZSBgaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0YCBjYXJlZnVsbHkgdG8gZW5zdXJlIGl0J3Mgbm90IHVzaW5nIHRoZSBwb3RlbnRpYWxseSBpbmNvcnJlY3QgYGN0eC1cdTAwM2VxdWV1ZXNgIHZhbHVlIGluIGl0cyBlcnJvciBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjc2OSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6MTEuOTE5MjU0MDAzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMyMTM4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jPTIxPXN0YXRpYyBpbnQgaHdzX2NvbnRleHRfcG9vbHNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy01Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYzo1NzpzdGF0aWMgdm9pZCBod3NfY29udGV4dF9wb29sc191bmluaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTU4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jPTEzND1zdGF0aWMgaW50IGh3c19jb250ZXh0X2luaXRfaHdzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE3MS1wb29sc191bmluaXQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM6MTcyOlxcdGh3c19jb250ZXh0X3Bvb2xzX3VuaW5pdChjdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE3My11bmluaXRfcGQ6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYz0xNzg9c3RhdGljIHZvaWQgaHdzX2NvbnRleHRfdW5pbml0X2h3cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0xODQtXFx0bWx4NWh3c19zZW5kX3F1ZXVlc19jbG9zZShjdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjE4NTpcXHRod3NfY29udGV4dF9wb29sc191bmluaXQoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0xODYtXFx0aHdzX2NvbnRleHRfdW5pbml0X3BkKGN0eCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUzOjEyLjA0MjQ3Mjk4MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjcyNTg1NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0YCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMgYGh3c19jb250ZXh0X3Bvb2xzX3VuaW5pdGAgdGhpbmcuIEp1c3Qgc2VlaW5nIHRoZSBuYW1lIHNwYXJrcyBzb21lIGltbWVkaWF0ZSBxdWVzdGlvbnMgaW4gbXkgbWluZCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZpZWxkLiBcIlVuaW5pdFwiIHN1Z2dlc3RzIGEgc3RhdGUgb2YgaW5pdGlhbGl6YXRpb24sIG9yIGxhY2sgdGhlcmVvZi4gQ29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2UncmUgZGVhbGluZyB3aXRoIGNvbnRleHQgcG9vbHMgd2l0aGluIHNvbWUgaGFyZHdhcmUgb3Igc3lzdGVtIGNvbnRleHQsIGFuZCB0aGVpciBzdGF0dXMgYmVmb3JlIGluaXRpYWxpemF0aW9uLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCwgY29uY3VycmVuY3ksIGFuZCBlcnJvciBoYW5kbGluZy4gV2hhdCBraW5kIG9mIHBvb2xzIGFyZSB3ZSB0YWxraW5nIGFib3V0IGhlcmU/IEFyZSB0aGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBvciBtb3JlIGFic3RyYWN0PyBBcmUgdGhleSB1c2VkIGZvciBtZW1vcnkgYWxsb2NhdGlvbiwgdGhyZWFkIG1hbmFnZW1lbnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gb2YgdGhlc2UgY29udGV4dCBwb29scyBhbmQgd2h5IHdlIGFyZSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZS4gQXJlIHdlIGNvbmNlcm5lZCBhYm91dCB0aGUgY29uc2VxdWVuY2VzIG9mIHVzaW5nIHRoZW0gYmVmb3JlIHRoZXkgYXJlIHByb3Blcmx5IHNldCB1cD8gSSdtIGFudGljaXBhdGluZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZGF0YSBjb3JydXB0aW9uLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHNpbXBseSB1bmV4cGVjdGVkIGJlaGF2aW9yIGlmIHRoaXMgc3RhdGUgaXNuJ3QgbWFuYWdlZCBjb3JyZWN0bHkuIE15IGJyYWluIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gZm9ybXVsYXRlIGh5cG90aGVzZXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGVzaWduIGNob2ljZXMgYW5kIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHMgdGhhdCB0aGlzIFwidW5pbml0XCIgc3RhdGUgbWlnaHQgcmVwcmVzZW50LiBOb3csIGxldCdzIGFjdHVhbGx5IHJlYWQgaXQgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDU3LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6MTUuNzE1MDYwOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1NzpcXHRzdGF0aWMgdm9pZCBod3NfY29udGV4dF9wb29sc191bmluaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbiAgNTg6XFx0e1xcbiAgNTk6XFx0XFx0aWYgKGN0eC1cXHUwMDNlc3RjX3Bvb2wpXFxuICA2MDpcXHRcXHRcXHRtbHg1aHdzX3Bvb2xfZGVzdHJveShjdHgtXFx1MDAzZXN0Y19wb29sKTtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0bWx4NWh3c19kZWZpbmVyX3VuaW5pdF9jYWNoZShjdHgtXFx1MDAzZWRlZmluZXJfY2FjaGUpO1xcbiAgNjM6XFx0XFx0bWx4NWh3c19wYXRfdW5pbml0X3BhdHRlcm5fY2FjaGUoY3R4LVxcdTAwM2VwYXR0ZXJuX2NhY2hlKTtcXG4gIDY0OlxcdH1cXG4gIDY1OlxcdFxcbiAgNjY6XFx0c3RhdGljIGludCBod3NfY29udGV4dF9pbml0X3BkKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4gIDY3OlxcdHtcXG4gIDY4OlxcdFxcdGludCByZXQgPSAwO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRyZXQgPSBtbHg1X2NvcmVfYWxsb2NfcGQoY3R4LVxcdTAwM2VtZGV2LCBcXHUwMDI2Y3R4LVxcdTAwM2VwZF9udW0pO1xcbiAgNzE6XFx0XFx0aWYgKHJldCkge1xcbiAgNzI6XFx0XFx0XFx0bWx4NWh3c19lcnIoY3R4LCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIFBEXFxcXG5cXFwiKTtcXG4gIDczOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA3NDpcXHRcXHR9XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdGN0eC1cXHUwMDNlZmxhZ3MgfD0gTUxYNUhXU19DT05URVhUX0ZMQUdfUFJJVkFURV9QRDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6MTUuNzE1MTQ1NTFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyOTQ5NTI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZTpcblxuKipUaGlua2luZyBUaHJvdWdoIENvbnRleHQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuLi4gYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBubywgaXQgZGVmaW5pdGVseSAqZG9lc24ndCogbG9vayBsaWtlIGl0J3MgdG91Y2hpbmcgYGN0eC1cdTAwM2VxdWV1ZXNgLiBUaGF0J3MgZ29vZCwga2VlcHMgdGhpbmdzIGNsZWFuZXIsIEkgc3VwcG9zZS4gSG1tLCB3aGVyZSAqaXMqIGl0IGhhbmRsaW5nIHRoZSBjbGVhbnVwIG9mIHJlc291cmNlcywgdGhlbj8gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIHJlbWVtYmVyIGhvdyB0aGUgY29udGV4dCB1bmluaXRpYWxpemF0aW9uIGhhcHBlbnMuLi4gQWgsIHllcywgd2hhdCBhYm91dCBgaHdzX2NvbnRleHRfdW5pbml0X3BkYD8gVGhhdCByaW5ncyBhIGJlbGwuIEl0J3MgcHJvYmFibHkgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCB0aGUgYXNzb2NpYXRlZCBwcm90ZWN0aW9uIGRvbWFpbi4gTGV0IG1lIGdvIGNoZWNrIHRoYXQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDEzMCwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6MTguOTQ0NjQ0MDY3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc3OlxcdFxcbiAgNzg6XFx0XFx0cmV0dXJuIDA7XFxuICA3OTpcXHR9XFxuICA4MDpcXHRcXG4gIDgxOlxcdHN0YXRpYyBpbnQgaHdzX2NvbnRleHRfdW5pbml0X3BkKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4gIDgyOlxcdHtcXG4gIDgzOlxcdFxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUxYNUhXU19DT05URVhUX0ZMQUdfUFJJVkFURV9QRClcXG4gIDg0OlxcdFxcdFxcdG1seDVfY29yZV9kZWFsbG9jX3BkKGN0eC1cXHUwMDNlbWRldiwgY3R4LVxcdTAwM2VwZF9udW0pO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRyZXR1cm4gMDtcXG4gIDg3OlxcdH1cXG4gIDg4OlxcdFxcbiAgODk6XFx0c3RhdGljIHZvaWQgaHdzX2NvbnRleHRfY2hlY2tfaHdzX3N1cHAoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbiAgOTA6XFx0e1xcbiAgOTE6XFx0XFx0c3RydWN0IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMgKmNhcHMgPSBjdHgtXFx1MDAzZWNhcHM7XFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdC8qIEhXUyBub3Qgc3VwcG9ydGVkIG9uIGRldmljZSAvIEZXICovXFxuICA5NDpcXHRcXHRpZiAoIWNhcHMtXFx1MDAzZXdxZV9iYXNlZF91cGRhdGUpIHtcXG4gIDk1OlxcdFxcdFxcdG1seDVod3NfZXJyKGN0eCwgXFxcIlJlcXVpcmVkIEhXUyBXUUUgYmFzZWQgaW5zZXJ0aW9uIGNhcCBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4gIDk2OlxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6MTguOTQ0NzM1Nzg3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDc1MzEzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBBIFBvaW50IG9mIE5lZ2F0aXZpdHkgRm9sbG93ZWQgYnkgYSBRdWVzdGlvbioqXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyBhIGZsYXQgXCJOby5cIiBUaGlzIGZlZWxzIGxpa2UgYSByZWZsZXhpdmUgcmVzcG9uc2UsIGEgZ3V0IGZlZWxpbmcsIHBlcmhhcHMgc3RlbW1pbmcgZnJvbSBhIHByaW9yIGxpbmUgb2YgdGhvdWdodCBvciBhbiBpbnN0aW5jdGl2ZSByZWplY3Rpb24gb2Ygc29tZXRoaW5nIGltcGxpZWQgYnV0IG5vdCBleHBsaWNpdGx5IHN0YXRlZC4gVGhlIGNvbnRleHQgaXMgbWlzc2luZywgc28gSSdtIGZvcmNlZCB0byBhc3N1bWUgYW4gaW1wbGljaXQgcXVlc3Rpb24uXG5cbkhvd2V2ZXIsIHRoZSB0aG91Z2h0IHByb2Nlc3MgcXVpY2tseSBwaXZvdHMuIFRoZSBuZWdhdGl2ZSByZXNwb25zZSBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHRhcmdldGVkIHF1ZXJ5OiBcIldoYXQgYWJvdXQgYG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0c2A/XCIgVGhpcyBpbmRpY2F0ZXMgYSBzaGlmdCBmcm9tIGEgZ2VuZXJhbCBkaXNtaXNzYWwgdG8gYSBzcGVjaWZpYyBhcmVhIG9mIGNvbmNlcm4uIEl0IHJldmVhbHMgYSBsZXZlbCBvZiB0ZWNobmljYWwgZGVwdGgsIHRhcmdldGluZyBhIGZ1bmN0aW9uIG5hbWUgdGhhdCBoaW50cyBhdCBhIHBvdGVudGlhbCBhcmVhIG9mIG5ldHdvcmsgdmlydHVhbGl6YXRpb24uIEknbSBob21pbmcgaW4gb24gdGhlIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBgbWx4NWAgYW5kIGl0cyBoYW5kbGluZyBvZiB2aXJ0dWFsIHBvcnRzLCBsaWtlbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGhhcmR3YXJlIG9mZmxvYWQgb3IgYSBzaW1pbGFyIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFzcGVjdC4gVGhlIHF1ZXN0aW9uIGl0c2VsZiBpbXBsaWVzIGEgc3BlY2lmaWMgY29uY2VybiByZWdhcmRpbmcgaG93IHZwb3J0cyBhcmUgdW5pbml0aWFsaXplZC4gSSBhbSB0aGlua2luZywgSXMgaXQgYSBwb3RlbnRpYWwgYnVnPyBBbiBvdmVyc2lnaHQ/IElzIGl0IGEgZnVuY3Rpb24gdGhhdCBuZWVkcyBzcGVjaWFsIGF0dGVudGlvbiBpbiB0aGUgY3VycmVudCBzaXR1YXRpb24/IFdpdGhvdXQgbW9yZSBjb250ZXh0LCB0aGVzZSBhbGwgY29tZSB0byBtaW5kIGFzIHF1ZXN0aW9ucyB0byBwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY2MCwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6MjIuNTUyMjcwMDZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDA2OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYz0xODk9c3RydWN0IG1seDVod3NfY29udGV4dCAqbWx4NWh3c19jb250ZXh0X29wZW4oc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0yMjQtdW5pbml0X3Zwb3J0czpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYzoyMjU6XFx0bWx4NWh3c192cG9ydF91bmluaXRfdnBvcnRzKGN0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMjI2LWZyZWVfY2FwczpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jPTIzNT1pbnQgbWx4NWh3c19jb250ZXh0X2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTIzOC1cXHRod3NfY29udGV4dF91bmluaXRfaHdzKGN0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM6MjM5OlxcdG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0cyhjdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTI0MC1cXHRrZnJlZShjdHgtXFx1MDAzZWNhcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy92cG9ydC5jPTY9aW50IG1seDVod3NfdnBvcnRfaW5pdF92cG9ydHMoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy92cG9ydC5jLTI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuYzoyNzp2b2lkIG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy92cG9ydC5jLTI4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuaD03PWludCBtbHg1aHdzX3Zwb3J0X2luaXRfdnBvcnRzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy92cG9ydC5oLTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy92cG9ydC5oOjk6dm9pZCBtbHg1aHdzX3Zwb3J0X3VuaW5pdF92cG9ydHMoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3Zwb3J0LmgtMTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUzOjIyLjYzNDI4Mzk2M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYzOTIxNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgYG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0c2AgZnVuY3Rpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWNvbnN0cnVjdGluZyBgbWx4NWh3c192cG9ydF91bmluaXRfdnBvcnRzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBtbHg1aHdzX3Zwb3J0X3VuaW5pdF92cG9ydHNgIGZ1bmN0aW9uLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB3aGF0IFwidnBvcnRcIiBpbXBsaWVzIGluIHRoaXMgY29udGV4dCDigJMgVmlydHVhbCBQb3J0LCBvYnZpb3VzbHksIGJ1dCB3aGF0IGxldmVsIG9mIGFic3RyYWN0aW9uIGFyZSB3ZSBkZWFsaW5nIHdpdGg/IElzIHRoaXMgcmVsYXRlZCB0byB0aGUgcGh5c2ljYWwgcG9ydCwgb3IgbW9yZSBvZiBhIGxvZ2ljYWwgY29uc3RydWN0IHdpdGhpbiB0aGUgTUxYNSBkcml2ZXI/IEknbSBhbnRpY2lwYXRpbmcgdGhpcyB3aWxsIGJlIGEgY2xlYW51cCByb3V0aW5lLCBzbyB0aGUga2V5IHF1ZXN0aW9ucyBhcmU6IHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyByZWxlYXNlZCwgYW5kIHdoYXQgYXJlIHRoZSBmYWlsdXJlIHNjZW5hcmlvcyBhbmQgdGhlaXIgcG90ZW50aWFsIGltcGFjdD8gSSB3YW50IHRvIHNlZSBob3cgcm9idXN0IHRoZSBlcnJvciBoYW5kbGluZyBpcy5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkZXBlbmRlbmN5IGNoYWluIGhlcmUuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGNhbGwgdGhpcywgYW5kIHdoYXQgZnVuY3Rpb25zIGRvZXMgKnRoaXMqIGZ1bmN0aW9uIGNhbGw/IEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSB0ZWFyZG93biBwcm9jZXNzIGFuZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbGVha3MuIEFyZSB0aGVyZSBhbnkgbG9ja3MgaW52b2x2ZWQsIGFuZCBpZiBzbywgd2hhdCdzIHRoZSBsb2NraW5nIGhpZXJhcmNoeSB0byBwcmV2ZW50IGRlYWRsb2Nrcz9cblxuSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgb3ZlcmFsbCBjb250ZXh0LiBJcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBkdXJpbmcgbW9kdWxlIHVubG9hZCwgZGV2aWNlIHJlbW92YWwsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdGltaW5nIG9mIHRoaXMgZnVuY3Rpb24gaXMgZXh0cmVtZWx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBndWFyYW50ZWVzIGl0IG1ha2VzLCBhbmQgYWxzbyB0aGUgYXNzdW1wdGlvbnMgaXQgY2FuIGhhdmUuIEFyZSB3ZSBpbiBhIHNhZmUgY29udGV4dCwgb3IgY291bGQgd2UgYmUgaW50ZXJydXB0ZWQ/XG5cbkZpbmFsbHksIGxldCdzIHNlZSBob3cgdGhleSBoYW5kbGUgdGhlIHZhcmlvdXMgZXJyb3IgcGF0aHMuIElzIHRoZXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwIGluIGNhc2Ugb2YgYSBmYWlsdXJlIGR1cmluZyB0aGUgdW5pbml0aWFsaXphdGlvbj8gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhleSBlbnN1cmUgdGhhdCB0aGUgcmVzb3VyY2VzIGFyZSBjbGVhbmVkIHVwIHByb3Blcmx5LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBjb25zaXN0ZW5jeSBvZiB0aGUgc3RhdGUgd2lsbCBiZS4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIHNhZmUgZnJvbSB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0aWVzLiBVbHRpbWF0ZWx5LCBteSBnb2FsIGlzIHRvIGFzc2VzcyB0aGUgY29kZSdzIHJlc2lsaWVuY2UgYW5kIGl0cyBpbXBhY3Qgb24gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzI1LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6MjYuODk4MjA5MjU4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNzpcXHR2b2lkIG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHRpZiAoY3R4LVxcdTAwM2VjYXBzLVxcdTAwM2Vlc3dpdGNoX21hbmFnZXIpXFxuICAzMDpcXHRcXHRcXHR4YV9kZXN0cm95KFxcdTAwMjZjdHgtXFx1MDAzZXZwb3J0cy52cG9ydF9ndm1pX3hhKTtcXG4gIDMxOlxcdH1cXG4gIDMyOlxcdFxcbiAgMzM6XFx0c3RhdGljIGludCBod3NfdnBvcnRfYWRkX2d2bWkoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LCB1MTYgdnBvcnQpXFxuICAzNDpcXHR7XFxuICAzNTpcXHRcXHR1MTYgdnBvcnRfZ3ZtaTtcXG4gIDM2OlxcdFxcdGludCByZXQ7XFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdHJldCA9IG1seDVod3NfY21kX3F1ZXJ5X2d2bWkoY3R4LVxcdTAwM2VtZGV2LCB0cnVlLCB2cG9ydCwgXFx1MDAyNnZwb3J0X2d2bWkpO1xcbiAgMzk6XFx0XFx0aWYgKHJldClcXG4gIDQwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHRyZXQgPSB4YV9pbnNlcnQoXFx1MDAyNmN0eC1cXHUwMDNldnBvcnRzLnZwb3J0X2d2bWlfeGEsIHZwb3J0LFxcbiAgNDM6XFx0XFx0XFx0XFx0eGFfbWtfdmFsdWUodnBvcnRfZ3ZtaSksIEdGUF9LRVJORUwpO1xcbiAgNDQ6XFx0XFx0aWYgKHJldClcXG4gIDQ1OlxcdFxcdFxcdG1seDVod3NfZGJnKGN0eCwgXFxcIkNvdWxkbid0IGluc2VydCBuZXcgdnBvcnQgZ3ZtaSBpbnRvIHhhcnJheSAoJWQpXFxcXG5cXFwiLCByZXQpO1xcbiAgNDY6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUzOjI2Ljg5ODI4NzY4OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzU5MzA5MTgyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvZ2ljIG9mIFF1ZXVlIEluaXRpYWxpemF0aW9uIGFuZCBDbGVhbnVwKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZS4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgaW5pdGlhbGl6aW5nIHNlbmQgcXVldWVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIEJXQyAoQmFuZHdpZHRoIENvbnRyb2wpIGxvY2tzLiBJJ20gZm9jdXNpbmcgb24gdGhlIGVycm9yIHBhdGhzIGhlcmUsIGFzIHRoYXQncyBvZnRlbiB3aGVyZSB0aGUgcHJvYmxlbXMgbHVyay4gRmlyc3QsIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYGN0eC1cdTAwM2VxdWV1ZXNgLCBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCwgYW5kIHRoZSB2YXJpb3VzIGBrZnJlZWAgY2FsbHMgdGhhdCBjYW4gaGFwcGVuIHdoZW4gdGhpbmdzIGdvIHdyb25nLlxuXG5Jbml0aWFsbHksIEkgc2VlIHRoYXQgaWYgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgZmFpbHMgZWFybHksIHRoZSBjb2RlIHJldHVybnMgZGlyZWN0bHkgd2l0aG91dCBpbmNyZW1lbnRpbmcgYGN0eC1cdTAwM2VxdWV1ZXNgIGluIHNvbWUgcGxhY2VzIGFmdGVyIHRoZSBwYXRjaCAod2hlcmUgdGhlIGluY3JlbWVudCBoYXBwZW5zIGF0IHRoZSBlbmQpIGJ1dCBub3QgYmVmb3JlIHRoZSBwYXRjaC4gVGhpcyBzZWVtZWQgc3VzcGljaW91cywgZXNwZWNpYWxseSBzaW5jZSBgY3R4YCBpcyBmcmVlZCByaWdodCBhZnRlciBpbiB0aGUgbWFpbiBmbG93LCBzbyBJIGFtIGFza2luZyBteXNlbGYgd2hhdCB2YWx1ZSBgY3R4LVx1MDAzZXF1ZXVlc2AgaGFzIGF0IHRoZSB0aW1lIG9mIHRoZSBlcnJvci4gRG9lcyBpdCBtYXR0ZXIsIGFjdHVhbGx5PyBBZnRlciB0aGlua2luZyBhYm91dCBpdCwgaW4gdGhlIGVycm9yIGNhc2UsIGJlY2F1c2Ugb2YgdGhlIGNvbnRyb2wgZmxvdywgYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveWAgaXMgbm90IGNhbGxlZCwgc28gYGN0eC1cdTAwM2VxdWV1ZXNgIGRvZXMgbm90IG1hdHRlciwgYW5kIGl0IGNhbid0IGJlIHVzZWQgYXQgdGhhdCB0aW1lLlxuXG5UaGVuLCB0aGVyZSdzIGFub3RoZXIgcG9pbnQgdG8gY29uc2lkZXIsIHdoaWNoIGlzIHRoYXQgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgY2FuIGFsc28gZmFpbCBMQVRFUiwgYWZ0ZXIgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgbWF5IG9yIG1heSBub3Qgc3VjY2VlZC4gSSBzY3J1dGluaXplZCB0aGUgbG9vcCBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwIGZ1bmN0aW9ucyAoYF9faHdzX3NlbmRfcXVldWVzX2Nsb3NlYCwgYGtmcmVlYCwgYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveWApIHZlcnkgY2FyZWZ1bGx5IGluIHRoZSB2YXJpb3VzIGZhaWx1cmUgcGF0aHMgb2YgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAuIFNwZWNpZmljYWxseSBJIHdhcyBjb25jZXJuZWQgdGhhdCB0aGUgaW5jcmVtZW50IG9mIGBjdHgtXHUwMDNlcXVldWVzYCBpbiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBtaWdodCBsZWFkIHRvIHNvbWUgZm9ybSBvZiBjb3JydXB0aW9uIGlmIG5vdCBoYW5kbGVkIHByb3Blcmx5IGluIHRoZSBlcnJvciBwYXRocywgYnV0IEkgY291bGRuJ3QgZmluZCBhIHNjZW5hcmlvIHdoZXJlIHRoaXMgd2FzIHRoZSBjYXNlLlxuXG5JIGRyaWxsZWQgZG93biBpbnRvIGBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3lgIGFuZCB0aGUgY2FsY3VsYXRpb24gb2YgYGJ3Y19xdWV1ZXNgIGluIHRoZXJlLCB3aGljaCBkZXBlbmRzIG9uIGBjdHgtXHUwMDNlcXVldWVzYC4gVGhlIGNydWNpYWwgaW5zaWdodCwgaG93ZXZlciwgaXMgdGhhdCBpZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCAqZmFpbHMqLCB0aGVuIGBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3lgIGlzICpub3QqIGNhbGxlZC4gQW5kIGlmIGl0IHN1Y2NlZWRzLCB0aGVyZSB3aWxsIGJlIG5vIGlzc3Vlcy5cblxuSG93ZXZlciwgSSBzdGFydGVkIHRvIHF1ZXN0aW9uIHRoZSByYXRpb25hbGUgb2YgdGhlIHBhdGNoLCBzaW5jZSBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscy4gV2h5IHdhcyB0aGUgaW5jcmVtZW50IG1vdmVkP1xuTm93LCBJIHRoaW5rIEkgc2VlIGl0LiBCZWZvcmUgdGhlIHBhdGNoLCBpZiBga3phbGxvY19vYmpzYCBpbiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscywgYGN0eC1cdTAwM2VxdWV1ZXNgIGlzIGluY3JlbWVudGVkIEJFRk9SRSB0aGUgZnVuY3Rpb24gcmV0dXJucyB3aXRoIC1FTk9NRU0uIFRoZW4gYGN0eGAgd291bGQgYmUgZnJlZWQsIHNvIHRoZSBpbmNyZW1lbnQgd291bGQgcmVzdWx0IGluIHNvbWUgZ2FyYmFnZSwgd2hpY2ggaXMgbm93IGF2b2lkZWQuIFNvIG5vdyB0aGUgaW5jcmVtZW50IGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBlbmQsIGFmdGVyIGFsbCB0aGUgYWxsb2NhdGlvbnMsIGFuZCBpdCBpcyBjb3JyZWN0IGJlY2F1c2UgaXQgZG9lc24ndCBjYXVzZSBhbnkgcHJvYmxlbXMuXG5cbkl0J3MgbGlrZWx5IHRoZSBwYXRjaCB3YXMgaW50cm9kdWNlZCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIGhlYXAgY29ycnVwdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NjQsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6NDQuNDkxMzgzMTI0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTMxMzE1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHdzX2NvbnRleHRfaW5pdF9od3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9ODk9c3RhdGljIHZvaWQgaHdzX2NvbnRleHRfY2hlY2tfaHdzX3N1cHAoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMTMzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjEzNDpzdGF0aWMgaW50IGh3c19jb250ZXh0X2luaXRfaHdzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0xMzUtXFx0XFx0XFx0XFx0c3RydWN0IG1seDVod3NfY29udGV4dF9hdHRyICphdHRyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9MTg5PXN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKm1seDVod3NfY29udGV4dF9vcGVuKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMjE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjIxNjpcXHRyZXQgPSBod3NfY29udGV4dF9pbml0X2h3cyhjdHgsIGF0dHIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTIxNy1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1Mzo0NC44NDQ1MjAzMTNaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4NDQyMjU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtbHg1aHdzX2NvbnRleHRfb3BlbmAgQ2FsbCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2Ugd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBSaWdodCBub3csIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0J3MgZXhjbHVzaXZlbHkgY2FsbGVkIGZyb20gYG1seDVod3NfY29udGV4dF9vcGVuYC4gQnV0IGhvbGQgb24sIEkgbmVlZCB0byBjb25zaWRlciBhIHBvdGVudGlhbCBkZXBlbmRlbmN5LiBUaGVyZSB3YXMgYSBjaGFuZ2UgaW52b2x2aW5nIGBjdHgtXHUwMDNlcXVldWVzICs9IGJ3Y19xdWV1ZXM7YC4gSSdtIHdvbmRlcmluZyBpZiBpdHMgbG9jYXRpb24gd2FzIHNoaWZ0ZWQgZHVlIHRvIGBremFsbG9jX29ianNgIHJlbHlpbmcgb24gdGhlIHZhbHVlIG9mIGBjdHgtXHUwMDNlcXVldWVzYC4gSG93ZXZlciwgdGhlIGRlZmluaXRpb24gb2YgYGt6YWxsb2Nfb2Jqc2AgaXMgYSBtYWNybywgYW5kIG5vdCBhIGZ1bmN0aW9uIGNhbGwgYXMgc3VjaDpcblxuYGBgY1xuI2RlZmluZSBremFsbG9jX29ianMob2JqLCBuKSBremFsbG9jKHNpemVvZihvYmopICogKG4pLCBHRlBfS0VSTkVMKVxuYGBgXG5cblRoZXJlZm9yZSwgdGhlIG1hY3JvIGV4cGFuc2lvbiBkb2VzIG5vdCBkaXJlY3RseSB1c2UgYGN0eC1cdTAwM2VxdWV1ZXNgIGluIGFueSBjYWxjdWxhdGlvbiwgb3IgdXNlIHRoYXQgdmFyaWFibGUgaW4gdGhlIG1hY3JvIGl0c2VsZi4gSSBzaG91bGQgY29uZmlybSB0aGlzIGJ5IGNoZWNraW5nIGhvdyBga3phbGxvY19vYmpzYCBpcyB1c2VkIHRvIG1ha2Ugc3VyZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGl0J3MgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIExldCdzIGRlbHZlIGludG8gdGhhdCBhc3BlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1Nzk1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUzOjQ4LjgyODk0NTQ5M1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAwODkwMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvY19vYmpzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmM9NjE4PWh3c19hY3Rpb25fY3JlYXRlX2dlbmVyaWNfYnVsayhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTYzNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jOjYzNTpcXHRhY3Rpb24gPSBremFsbG9jX29ianMoKmFjdGlvbiwgYnVsa19zeik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYy02MzYtXFx0aWYgKCFhY3Rpb24pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jPTEzNjE9bWx4NWh3c19hY3Rpb25fY3JlYXRlX2Rlc3RfYXJyYXkoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LCBzaXplX3QgbnVtX2Rlc3QsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTEzODUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYzoxMzg2OlxcdGRlc3RfbGlzdCA9IGt6YWxsb2Nfb2JqcygqZGVzdF9saXN0LCBudW1fZGVzdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYy0xMzg3LVxcdGlmICghZGVzdF9saXN0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYz0xNDY1PW1seDVod3NfYWN0aW9uX2NyZWF0ZV9pbnNlcnRfaGVhZGVyKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmMtMTQ3OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jOjE0ODA6XFx0cmVmb3JtYXRfaGRycyA9IGt6YWxsb2Nfb2JqcygqcmVmb3JtYXRfaGRycywgbnVtX29mX2hkcnMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmMtMTQ4MS1cXHRpZiAoIXJlZm9ybWF0X2hkcnMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jPTI2MTg9bWx4NWh3c19hY3Rpb25fdGVtcGxhdGVfY3JlYXRlKGVudW0gbWx4NWh3c19hY3Rpb25fdHlwZSBhY3Rpb25fdHlwZVtdKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYy0yNjMxLVxcdGF0LVxcdTAwM2VudW1fYWN0aW9ucyA9IG51bV9hY3Rpb25zIC0gMTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jOjI2MzI6XFx0YXQtXFx1MDAzZWFjdGlvbl90eXBlX2FyciA9IGt6YWxsb2Nfb2JqcygqYWN0aW9uX3R5cGUsIG51bV9hY3Rpb25zKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTI2MzMtXFx0aWYgKCFhdC1cXHUwMDNlYWN0aW9uX3R5cGVfYXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb25fc3RlX3Bvb2wuYz0zMjY9aW50IG1seDVod3NfYWN0aW9uX3N0ZV9wb29sX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb25fc3RlX3Bvb2wuYy0zMzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb25fc3RlX3Bvb2wuYzozMzI6XFx0cG9vbCA9IGt6YWxsb2Nfb2JqcygqcG9vbCwgcXVldWVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbl9zdGVfcG9vbC5jLTMzMy1cXHRpZiAoIXBvb2wpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jPTIyNz1pbnQgbWx4NWh3c19id2NfbWF0Y2hlcl9jcmVhdGVfc2ltcGxlKHN0cnVjdCBtbHg1aHdzX2J3Y19tYXRjaGVyICpid2NfbWF0Y2hlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjM5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM6MjQwOlxcdGJ3Y19tYXRjaGVyLVxcdTAwM2VydWxlcyA9IGt6YWxsb2Nfb2JqcygqYndjX21hdGNoZXItXFx1MDAzZXJ1bGVzLCBid2NfcXVldWVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTI0MS1cXHRpZiAoIWJ3Y19tYXRjaGVyLVxcdTAwM2VydWxlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjU2LVxcdGJ3Y19tYXRjaGVyLVxcdTAwM2VzaXplX29mX2F0X2FycmF5ID0gTUxYNUhXU19CV0NfTUFUQ0hFUl9BVFRBQ0hfQVRfTlVNO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM6MjU3OlxcdGJ3Y19tYXRjaGVyLVxcdTAwM2VhdCA9IGt6YWxsb2Nfb2JqcygqYndjX21hdGNoZXItXFx1MDAzZWF0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjU4LVxcdFxcdFxcdFxcdCAgICAgICBid2NfbWF0Y2hlci1cXHUwMDNlc2l6ZV9vZl9hdF9hcnJheSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2RlZmluZXIuYz0xNjg0PWh3c19kZWZpbmVyX2FsbG9jX2NvbXByZXNzZWRfZmMoc3RydWN0IG1seDVod3NfZGVmaW5lcl9mYyAqZmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2RlZmluZXIuYy0xNjkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZGVmaW5lci5jOjE2OTE6XFx0Y29tcHJlc3NlZF9mYyA9IGt6YWxsb2Nfb2JqcygqY29tcHJlc3NlZF9mYywgZGVmaW5lcl9zaXplKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2RlZmluZXIuYy0xNjkyLVxcdGlmICghY29tcHJlc3NlZF9mYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZGVmaW5lci5jPTE3Mjg9aHdzX2RlZmluZXJfYWxsb2NfZmMoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9kZWZpbmVyLmMtMTczMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2RlZmluZXIuYzoxNzM0OlxcdGZjID0ga3phbGxvY19vYmpzKCpmYywgbGVuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2RlZmluZXIuYy0xNzM1LVxcdGlmICghZmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jPTczOT1zdGF0aWMgaW50IG1seDVfZnNfZnRlX2dldF9od3NfYWN0aW9ucyhzdHJ1Y3QgbWx4NV9mbG93X3Jvb3RfbmFtZXNwYWNlICpucyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmMtNzYxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmM6NzYyOlxcdCpyYWN0aW9ucyA9IGt6YWxsb2Nfb2JqcygqKnJhY3Rpb25zLCBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTUFYKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jLTc2My1cXHRpZiAoISpyYWN0aW9ucykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYy03NjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYzo3Njg6XFx0ZnNfYWN0aW9ucyA9IGt6YWxsb2Nfb2JqcygqZnNfYWN0aW9ucywgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01BWCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYy03NjktXFx0aWYgKCFmc19hY3Rpb25zKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jLTc3My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jOjc3NDpcXHRkZXN0X2FjdGlvbnMgPSBremFsbG9jX29ianMoKmRlc3RfYWN0aW9ucywgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01BWCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYy03NzUtXFx0aWYgKCFkZXN0X2FjdGlvbnMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWF0Y2hlci5jPTEwNzI9aHdzX21hdGNoZXJfc2V0X3RlbXBsYXRlcyhzdHJ1Y3QgbWx4NWh3c19tYXRjaGVyICptYXRjaGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tYXRjaGVyLmMtMTA4Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21hdGNoZXIuYzoxMDg3OlxcdG1hdGNoZXItXFx1MDAzZW10ID0ga3phbGxvY19vYmpzKCptYXRjaGVyLVxcdTAwM2VtdCwgbnVtX29mX210KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21hdGNoZXIuYy0xMDg4LVxcdGlmICghbWF0Y2hlci1cXHUwMDNlbXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYz03MTE9c3RhdGljIGludCBod3Nfc2VuZF9yaW5nX2FsbG9jX3NxKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtNzMzLVxcdGJ1Zl9zeiA9IHF1ZXVlLVxcdTAwM2VudW1fZW50cmllcyAqIE1BWF9XUUVTX1BFUl9SVUxFO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjczNDpcXHRzcS1cXHUwMDNlZGVwX3dxZSA9IGt6YWxsb2Nfb2Jqcygqc3EtXFx1MDAzZWRlcF93cWUsIHF1ZXVlLVxcdTAwM2VudW1fZW50cmllcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtNzM1LVxcdGlmICghc3EtXFx1MDAzZWRlcF93cWUpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jPTEwNTU9c3RhdGljIGludCBtbHg1aHdzX3NlbmRfcXVldWVfb3BlbihzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMDY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjEwNjY6XFx0cXVldWUtXFx1MDAzZWNvbXBsZXRlZC5lbnRyaWVzID0ga3phbGxvY19vYmpzKHF1ZXVlLVxcdTAwM2Vjb21wbGV0ZWQuZW50cmllc1swXSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMDY3LVxcdFxcdFxcdFxcdFxcdFxcdHF1ZXVlLVxcdTAwM2VudW1fZW50cmllcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYz0xMTE1PXN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExMjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM6MTEyNDpcXHRjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzID0ga3phbGxvY19vYmpzKCpjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExMjUtXFx0XFx0XFx0XFx0XFx0XFx0IGJ3Y19xdWV1ZXMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTEyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYzoxMTMwOlxcdGN0eC1cXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyA9IGt6YWxsb2Nfb2JqcygqY3R4LVxcdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExMzEtXFx0XFx0XFx0XFx0XFx0XFx0YndjX3F1ZXVlcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYz0xMTUwPWludCBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTE2NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYzoxMTY1OlxcdGN0eC1cXHUwMDNlc2VuZF9xdWV1ZSA9IGt6YWxsb2Nfb2JqcygqY3R4LVxcdTAwM2VzZW5kX3F1ZXVlLCBjdHgtXFx1MDAzZXF1ZXVlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTE2Ni1cXHRpZiAoIWN0eC1cXHUwMDNlc2VuZF9xdWV1ZSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1Mzo0OC44OTkwNDAyNTdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYzMzkyOTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBremFsbG9jX29ianMgYW5kIG51bV9oYXNoX2RlZmluZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBremFsbG9jX29ianNgIGlzbid0IHVzaW5nIGBjdHgtXHUwMDNlcXVldWVzYCBkaXJlY3RseSwgd2hpY2ggaXMgZ29vZC4gVGhlbiwgbG9va2luZyBhdCBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCwgSSBub3RlIHRoZSB1c2Ugb2YgYGt6YWxsb2Nfb2Jqc2AgdGhlcmUgYW5kIGhvdyBgY3R4LVx1MDAzZXF1ZXVlc2AgbWlnaHQgYmUgaW5jcmVtZW50ZWQgaWYgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgZmFpbHMuIEJ1dCB0aGVuLCBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCByZXR1cm5zIGFuIGVycm9yLCBhbmQgdGhlIGNhbGxlciBiYWlscyBvdXQgY2xlYW5seSwgZXZlbnR1YWxseSBmcmVlaW5nIGBjdHhgLiBTbywgdGhhdCBpbmNyZW1lbnQgdG8gYGN0eC1cdTAwM2VxdWV1ZXNgIHNlZW1zIGhhcm1sZXNzIGFmdGVyIGFsbCDigJMgaXQncyBjbGVhbmVkIHVwIGluIHRoZSBlcnJvciBwYXRoLlxuXG5Ib3dldmVyLCBJIHBhdXNlZCBmb3IgYSBtb21lbnQgdG8gY29uc2lkZXIgd2hldGhlciBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBjb3VsZCBiZSBjYWxsZWQgZWxzZXdoZXJlLiBBIHF1aWNrIGNoZWNrIGNvbmZpcm1lZCBpdCdzIG5vdC4gSXQgc2VlbXMgdGhpcyBtaWdodCBqdXN0IGJlIGEgbG9naWNhbCBjbGVhbnVwLCBhIHdheSB0byBhZGhlcmUgdG8gdGhlIFwiZG9uJ3QgbW9kaWZ5IHN0YXRlIHVudGlsIGFsbG9jYXRpb25zIHN1Y2NlZWRcIiBwcmluY2lwbGUsIHdoaWNoIGlzIGEgY29tbW9uIGtlcm5lbCBwcmFjdGljZS5cblxuTm93LCBsZXQncyBzaGlmdCBmb2N1cyB0byB0aGUgY2hhbmdlcyBpbiBgY21kLmNgLiBJIG5vdGljZSB0aGUgcmVtb3ZhbCBvZiBzZXR0aW5nIGBudW1faGFzaF9kZWZpbmVyYCBpbiBgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZWAuIEhtbSwgaW50ZXJlc3RpbmcuIFdoeSB3YXMgdGhpcyByZW1vdmVkPyBQZXJoYXBzIHRoaXMgZmllbGQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSwgb3IgbWF5YmUgaXQgd2FzIGludHJvZHVjaW5nIGlzc3Vlcz8gSWYgaXQgKndhcyogYmVpbmcgc2V0LCBhbmQgaW5jb3JyZWN0bHkgY29uZmlndXJlZCBvciB1bnN1cHBvcnRlZCBieSB0aGUgZmlybXdhcmUsIGl0IGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgRlcgZXJyb3JzLiBMZXQncyBzZWUgaWYgd2UgY2FuIGRpZyBmdXJ0aGVyIGludG8gdGhlIGNvbnRleHQgb2YgYHJ0Y19hdHRyLVx1MDAzZW51bV9oYXNoX2RlZmluZXJgIGFuZCBzZWUgd2hhdCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIHdhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkzNjYsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6NTYuNTMyOTc0NTc2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjAzNzIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudW1faGFzaF9kZWZpbmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmM9MTU4NT1od3NfYWN0aW9uX2NyZWF0ZV9kZXN0X21hdGNoX3JhbmdlX3RhYmxlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmMtMTYyNS1cXHRydGNfYXR0ci5taXNzX2Z0X2lkID0gbWlzc19mdF9pZDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jOjE2MjY6XFx0cnRjX2F0dHIubnVtX2hhc2hfZGVmaW5lciA9IDE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYy0xNjI3LVxcdHJ0Y19hdHRyLnVwZGF0ZV9pbmRleF9tb2RlID0gTUxYNV9JRkNfUlRDX1NURV9VUERBVEVfTU9ERV9CWV9IQVNIO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYz0zNzI9aW50IG1seDVod3NfY21kX3J0Y19jcmVhdGUoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jLTQwMy1cXHRNTFg1X1NFVChydGMsIGF0dHIsIHRhYmxlX3R5cGUsIHJ0Y19hdHRyLVxcdTAwM2V0YWJsZV90eXBlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jOjQwNDpcXHRNTFg1X1NFVChydGMsIGF0dHIsIG51bV9oYXNoX2RlZmluZXIsIHJ0Y19hdHRyLVxcdTAwM2VudW1faGFzaF9kZWZpbmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jLTQwNS1cXHRNTFg1X1NFVChydGMsIGF0dHIsIG1hdGNoX2RlZmluZXJfMCwgcnRjX2F0dHItXFx1MDAzZW1hdGNoX2RlZmluZXJfMCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jPTkzOD1pbnQgbWx4NWh3c19jbWRfcXVlcnlfY2FwcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMtMTEzNi1cXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmM6MTEzNzpcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAucnRjX21heF9udW1faGFzaF9kZWZpbmVyX2dlbl93cWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMtMTEzOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmg9NzA9c3RydWN0IG1seDVod3NfY21kX3J0Y19jcmVhdGVfYXR0ciB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5oLTc3LVxcdHU4IGFjY2Vzc19pbmRleF9tb2RlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmg6Nzg6XFx0dTggbnVtX2hhc2hfZGVmaW5lcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5oLTc5LVxcdHU4IGxvZ19kZXB0aDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWF0Y2hlci5jPTQ2OD1zdGF0aWMgaW50IGh3c19tYXRjaGVyX2NyZWF0ZV9ydGMoc3RydWN0IG1seDVod3NfbWF0Y2hlciAqbWF0Y2hlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWF0Y2hlci5jLTQ5Ny1cXHRcXHRcXHRNTFg1X0lGQ19SVENfU1RFX1VQREFURV9NT0RFX0JZX09GRlNFVDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21hdGNoZXIuYzo0OTg6XFx0XFx0cnRjX2F0dHIubnVtX2hhc2hfZGVmaW5lciA9IDE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tYXRjaGVyLmMtNDk5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9wcm0uaD0xNDg9c3RydWN0IG1seDVfaWZjX3J0Y19iaXRzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvcHJtLmgtMTU2LVxcdHU4IGFjY2Vzc19pbmRleF9tb2RlWzB4M107XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9wcm0uaDoxNTc6XFx0dTggbnVtX2hhc2hfZGVmaW5lclsweDRdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvcHJtLmgtMTU4LVxcdHU4IHVwZGF0ZV9tZXRob2RbMHgxXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6NTYuNTk1MDE2MzQxWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTA5MTc4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZWAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBudW1faGFzaF9kZWZpbmVyYCByZWFsbHkgYmVpbmcgYXNzaWduZWQgYSB2YWx1ZSB0d2ljZSB3aXRoaW4gdGhlIGBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlYCBmdW5jdGlvbj8gVGhhdCBmZWVscy4uLiB1bnVzdWFsLiBMZXQgbWUgcHVsbCB1cCB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24uIFJpZ2h0LCBpdCdzIGluIGBjbWQuY2AsIHNvIEknbGwgbmF2aWdhdGUgdGhlcmUgYW5kIGRpZyBpbnRvIHRoZSBjb2RlLiBHb3R0YSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB3aHkgdGhleSdyZSBwb3RlbnRpYWxseSBvdmVyd3JpdGluZyB0aGF0IHZhcmlhYmxlLiBJcyB0aGVyZSBhIGNvbmRpdGlvbmFsIGludm9sdmVkIHRoYXQgSSBtaXNzZWQ/IEFyZSB0aGV5IGhhbmRsaW5nIGRpZmZlcmVudCBSVEMgY29uZmlndXJhdGlvbnM/IE9yIGlzIHRoaXMgYSBwb3RlbnRpYWwgYnVnIHRoYXQgbmVlZHMgdG8gYmUgYWRkcmVzc2VkPyBUaW1lIHRvIGRpdmUgaW4gYW5kIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBwcm9ibGVtLCBvciBpZiB0aGUgbG9naWMgaXMganVzdGlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTU1NSwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjU0OjAwLjA4NTkzNzE2NFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0XFx0XFx0IE1MWDVfSUZDX1JUQ19TVEVfRk9STUFUXzhEVyk7XFxuIDM5MTpcXHRcXG4gMzkyOlxcdFxcdGlmIChydGNfYXR0ci1cXHUwMDNlaXNfc2NuZF9yYW5nZSkge1xcbiAzOTM6XFx0XFx0XFx0TUxYNV9TRVQocnRjLCBhdHRyLCBzdGVfZm9ybWF0XzEsIE1MWDVfSUZDX1JUQ19TVEVfRk9STUFUX1JBTkdFKTtcXG4gMzk0OlxcdFxcdFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbnVtX21hdGNoX3N0ZSwgMik7XFxuIDM5NTpcXHRcXHR9XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgcGQsIHJ0Y19hdHRyLVxcdTAwM2VwZCk7XFxuIDM5ODpcXHRcXHRNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9tZXRob2QsIHJ0Y19hdHRyLVxcdTAwM2Vmd19nZW5fd3FlKTtcXG4gMzk5OlxcdFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdXBkYXRlX2luZGV4X21vZGUsIHJ0Y19hdHRyLVxcdTAwM2V1cGRhdGVfaW5kZXhfbW9kZSk7XFxuIDQwMDpcXHRcXHRNTFg1X1NFVChydGMsIGF0dHIsIGFjY2Vzc19pbmRleF9tb2RlLCBydGNfYXR0ci1cXHUwMDNlYWNjZXNzX2luZGV4X21vZGUpO1xcbiA0MDE6XFx0XFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfZGVwdGgsIHJ0Y19hdHRyLVxcdTAwM2Vsb2dfZGVwdGgpO1xcbiA0MDI6XFx0XFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfaGFzaF9zaXplLCBydGNfYXR0ci1cXHUwMDNlbG9nX3NpemUpO1xcbiA0MDM6XFx0XFx0TUxYNV9TRVQocnRjLCBhdHRyLCB0YWJsZV90eXBlLCBydGNfYXR0ci1cXHUwMDNldGFibGVfdHlwZSk7XFxuIDQwNDpcXHRcXHRNTFg1X1NFVChydGMsIGF0dHIsIG51bV9oYXNoX2RlZmluZXIsIHJ0Y19hdHRyLVxcdTAwM2VudW1faGFzaF9kZWZpbmVyKTtcXG4gNDA1OlxcdFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbWF0Y2hfZGVmaW5lcl8wLCBydGNfYXR0ci1cXHUwMDNlbWF0Y2hfZGVmaW5lcl8wKTtcXG4gNDA2OlxcdFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbWF0Y2hfZGVmaW5lcl8xLCBydGNfYXR0ci1cXHUwMDNlbWF0Y2hfZGVmaW5lcl8xKTtcXG4gNDA3OlxcdFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgc3RjX2lkLCBydGNfYXR0ci1cXHUwMDNlc3RjX2Jhc2UpO1xcbiA0MDg6XFx0XFx0TUxYNV9TRVQocnRjLCBhdHRyLCBzdGVfdGFibGVfYmFzZV9pZCwgcnRjX2F0dHItXFx1MDAzZXN0ZV9iYXNlKTtcXG4gNDA5OlxcdFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbWlzc19mbG93X3RhYmxlX2lkLCBydGNfYXR0ci1cXHUwMDNlbWlzc19mdF9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjU0OjAwLjA4NjA0NjkzNFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDM4OTkwNjA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQSBEZWVwIERpdmUgaW50byBNZWxsYW5veCBtbHg1IERyaXZlciBNb2RpZmljYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBhIGZldyB0aGluZ3M6IGR1cGxpY2F0ZSBsaW5lcywgZXJyb3IgbWVzc2FnZSBlbmhhbmNlbWVudHMsIGFuZCB3aGF0IGxvb2tlZCBsaWtlIGEgcG9zc2libGUgYnVnIGZpeC4gRGlnZ2luZyBkZWVwZXIsIGl0J3MgY2xlYXIgdGhlIGZpcnN0IHRoaW5nIGlzIGEgc2ltcGxlIHJlbW92YWwgb2YgYSByZWR1bmRhbnQgYE1MWDVfU0VUYCBtYWNybyBjYWxsIGluIGBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlYC4gTm8gcmVhbCBmdW5jdGlvbmFsIGNoYW5nZSB0aGVyZSwganVzdCB0aWR5aW5nIHVwIHRoZSBjb2RlLiBUaGVuLCB0aGVyZSdzIGFuIGFkZGl0aW9uIG9mIGEgc3luZHJvbWUgdG8gYW4gZXJyb3IgbWVzc2FnZSwgYW5kIGEgcmVtb3ZhbCBvZiBhIGR1cGxpY2F0ZSBgbWx4NV9jbWRfZXhlY2AgY2FsbCBpbiBhbm90aGVyIGZ1bmN0aW9uLiBNb3JlIG5vaXNlIHJlZHVjdGlvbiB0aGFuIGFueXRoaW5nLiBUaGVzZSBkb24ndCBzZWVtIGxpa2UgdGhleSdyZSB3b3J0aCBmdXp6aW5nLlxuXG5Ob3csIHRob3NlIGhlbHBlciBmdW5jdGlvbnMgYmVpbmcgYWRkZWQgdG8gY29udmVydCBlbnVtL3N0YXR1cyB0byBzdHJpbmcgZm9yIGVycm9yIG1lc3NhZ2VzIGluIHRoZSBgc2VuZC5jYCBhcmUgcHVyZWx5IGRlY29yYXRpdmUuIFNhbWUgd2l0aCBgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlYCwgaXQgcHJpbnRzIG1vcmUgaW5mbyAtIGxvZ2dpbmcuIE5vdCBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5UaGF0IGxlYXZlcyB0aGUgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgY2hhbmdlLiBJdCBsb29rcyBsaWtlIGBjdHgtXHUwMDNlcXVldWVzYCB3YXMgaW5jcmVtZW50ZWQgYmVmb3JlIGBremFsbG9jX29ianNgIGFsbG9jYXRpb25zLCBwb3NzaWJseSBsZWFkaW5nIHRvIGFuIGluY29ycmVjdCBpbmNyZW1lbnQgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiBJIGluaXRpYWxseSB0aG91Z2h0IGl0IHdhcyBhIHByb2JsZW0sIGJ1dCBhZnRlciB0cmFjaW5nIHRoZSBjYWxsIHN0YWNrLCBpdCB0dXJucyBvdXQgdGhhdCBvbiBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgdGhlIGNvbnRleHQgaXMgZnJlZWQgaW1tZWRpYXRlbHkuIFNvIHRoZSBpbmNyZW1lbnRlZCBgY3R4LVx1MDAzZXF1ZXVlc2AgdmFyaWFibGUgaXMgaGFybWxlc3MuIEEgdGhlb3JldGljYWwgYnVnLCBidXQgbm8gaW1wYWN0LlxuXG5MZXQncyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgZHVwbGljYXRlIGBtbHg1X2NtZF9leGVjYCByZW1vdmFsLiBJdCB3YXMgcXVlcnlpbmcgdGhlIEhDQSBjYXBzLiBUaGVyZSB3ZXJlIHR3byBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLiBSZW1vdmluZyB0aGUgc2Vjb25kIGNhbGwganVzdCBwcmV2ZW50cyBhIHJlZHVuZGFudCBleGVjdXRpb24gb2YgdGhlIHNhbWUgY29tbWFuZC4gTm8gbmV3IGZ1bmN0aW9uYWxpdHkgb3IgYnVnIGZpeGVzLiBKdXN0IGEgbWlub3Igb3B0aW1pemF0aW9uLiBBbmQgaW4gdGhlIGxhcmdlciBwaWN0dXJlLCBpdCdzIGEgbWlub3Igb3B0aW1pemF0aW9uLCBhbmQgaXQncyBub3Qgd29ydGggZnV6emluZy5cblxuTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBjb3NtZXRpYzogZXJyb3IgbWVzc2FnZSBpbXByb3ZlbWVudHMsIHJlZHVuZGFudCBjb2RlIHJlbW92YWwsIGFuZCBhIGhhcm1sZXNzIGJ1ZyBmaXguIFBsdXMsIHRoaXMgaXMgYWxsIGhhcHBlbmluZyB3aXRoaW4gdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSB0aGF0IGlzbid0IHJlYWRpbHkgZW11bGF0ZWQuIFRoZXJlZm9yZSwgdGhlIGFuc3dlciBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0MTAsIk91dHB1dFRva2VucyI6MTM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjU0OjI0LjQ3NTk1NjE0MloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIG9mIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMgKGVuaGFuY2luZyBlcnJvciBtZXNzYWdlcyB3aXRoIHN0cmluZyByZXByZXNlbnRhdGlvbnMgYW5kIGFkZGl0aW9uYWwgZGV0YWlscyksIHJlbW92YWwgb2YgcmVkdW5kYW50IGNvZGUgKGEgZHVwbGljYXRlIE1MWDVfU0VUIGFuZCBhIGR1cGxpY2F0ZSBtbHg1X2NtZF9leGVjIHRoYXQgaWdub3JlZCBpdHMgb3V0cHV0KSwgYW5kIGEgdGhlb3JldGljYWwgZXJyb3IgcGF0aCBmaXggaW4gaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0IHRoYXQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IGJlY2F1c2UgdGhlIGNvbnRleHQgaXMgZnJlZWQgaW1tZWRpYXRlbHkgb24gZmFpbHVyZS4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgTWVsbGFub3ggbWx4NSBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBvZiBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIChlbmhhbmNpbmcgZXJyb3IgbWVzc2FnZXMgd2l0aCBzdHJpbmcgcmVwcmVzZW50YXRpb25zIGFuZCBhZGRpdGlvbmFsIGRldGFpbHMpLCByZW1vdmFsIG9mIHJlZHVuZGFudCBjb2RlIChhIGR1cGxpY2F0ZSBNTFg1X1NFVCBhbmQgYSBkdXBsaWNhdGUgbWx4NV9jbWRfZXhlYyB0aGF0IGlnbm9yZWQgaXRzIG91dHB1dCksIGFuZCBhIHRoZW9yZXRpY2FsIGVycm9yIHBhdGggZml4IGluIGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdCB0aGF0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBiZWNhdXNlIHRoZSBjb250ZXh0IGlzIGZyZWVkIGltbWVkaWF0ZWx5IG9uIGZhaWx1cmUuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyBhcmUgaW4gdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowl8gdr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 22:40:25 +0000 UTC FinishedAt: 2026-07-25 22:54:25 +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+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIG9mIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMgKGVuaGFuY2luZyBlcnJvciBtZXNzYWdlcyB3aXRoIHN0cmluZyByZXByZXNlbnRhdGlvbnMgYW5kIGFkZGl0aW9uYWwgZGV0YWlscyksIHJlbW92YWwgb2YgcmVkdW5kYW50IGNvZGUgKGEgZHVwbGljYXRlIE1MWDVfU0VUIGFuZCBhIGR1cGxpY2F0ZSBtbHg1X2NtZF9leGVjIHRoYXQgaWdub3JlZCBpdHMgb3V0cHV0KSwgYW5kIGEgdGhlb3JldGljYWwgZXJyb3IgcGF0aCBmaXggaW4gaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0IHRoYXQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IGJlY2F1c2UgdGhlIGNvbnRleHQgaXMgZnJlZWQgaW1tZWRpYXRlbHkgb24gZmFpbHVyZS4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgTWVsbGFub3ggbWx4NSBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzNlMzA4M2M0OTQ3MDQ4ZjdiMTdhODVjN2VkZTE5ZDJhNmQwYjI1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDIyOjUxOjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jXG5pbmRleCBlNjI0ZjVkYTk2YzgxYi4uYWZlNTgxODI5NGQ5NTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jXG5AQCAtMzk4LDcgJiM0MzszOTgsNiBAQCBpbnQgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdXBkYXRlX21ldGhvZCwgcnRjX2F0dHItXHUwMDNlZndfZ2VuX3dxZSk7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9pbmRleF9tb2RlLCBydGNfYXR0ci1cdTAwM2V1cGRhdGVfaW5kZXhfbW9kZSk7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIGFjY2Vzc19pbmRleF9tb2RlLCBydGNfYXR0ci1cdTAwM2VhY2Nlc3NfaW5kZXhfbW9kZSk7XG4tXHRNTFg1X1NFVChydGMsIGF0dHIsIG51bV9oYXNoX2RlZmluZXIsIHJ0Y19hdHRyLVx1MDAzZW51bV9oYXNoX2RlZmluZXIpO1xuIFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfZGVwdGgsIHJ0Y19hdHRyLVx1MDAzZWxvZ19kZXB0aCk7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIGxvZ19oYXNoX3NpemUsIHJ0Y19hdHRyLVx1MDAzZWxvZ19zaXplKTtcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdGFibGVfdHlwZSwgcnRjX2F0dHItXHUwMDNldGFibGVfdHlwZSk7XG5AQCAtNjExLDkgJiM0Mzs2MTAsMTEgQEAgaW50IG1seDVod3NfY21kX3N0Y19tb2RpZnkoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gXG4gXHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIHNpemVvZihvdXQpKTtcbiBcdGlmIChyZXQpXG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7RmFpbGVkIHRvIG1vZGlmeSBTVEMgRlcgYWN0aW9uX3R5cGUgJWRcXG5cJiMzNDssXG4tXHRcdFx0ICAgICAgc3RjX2F0dHItXHUwMDNlYWN0aW9uX3R5cGUpO1xuLVxuJiM0MztcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuJiM0MztcdFx0XHQgICAgICBcJiMzNDtGYWlsZWQgdG8gbW9kaWZ5IFNUQyBhY3Rpb25fdHlwZSAlZCwgZXJyICVkLCBzeW5kcm9tZSAweCV4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICBzdGNfYXR0ci1cdTAwM2VhY3Rpb25fdHlwZSwgcmV0LFxuJiM0MztcdFx0XHQgICAgICBNTFg1X0dFVChnZW5lcmFsX29ial9vdXRfY21kX2hkcixcbiYjNDM7XHRcdFx0XHQgICAgICAgb3V0LCBzeW5kcm9tZSkpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTE4MSwxMiAmIzQzOzExODIsNiBAQCBpbnQgbWx4NWh3c19jbWRfcXVlcnlfY2FwcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiBcdFx0XHRcdFx0XHRjYXBhYmlsaXR5LmVzd19jYXAubWVyZ2VkX2Vzd2l0Y2gpO1xuIFx0fVxuIFxuLVx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7RmFpbGVkIHRvIHF1ZXJ5IGRldmljZSBhdHRyaWJ1dGVzXFxuXCYjMzQ7KTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4gXHRzbnByaW50ZihjYXBzLVx1MDAzZWZ3X3Zlciwgc2l6ZW9mKGNhcHMtXHUwMDNlZndfdmVyKSwgXCYjMzQ7JWQuJWQuJWRcJiMzNDssXG4gXHRcdCBmd19yZXZfbWFqKG1kZXYpLCBmd19yZXZfbWluKG1kZXYpLCBmd19yZXZfc3ViKG1kZXYpKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXG5pbmRleCBhZWQwMDlhZWM0ZmU4Ny4uZjBjM2EyYmRhMGM3MzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNcbkBAIC0zNDQsNiAmIzQzOzM0NCwzNiBAQCBod3Nfc2VuZF9lbmdpbmVfdXBkYXRlX3J1bGVfcmVzaXplKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICpod3NfcnVsZV9zdGF0dXNfdG9fc3RyaW5nKGVudW0gbWx4NWh3c19ydWxlX3N0YXR1cyBzdGF0dXMpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHN0YXR1cykge1xuJiM0MztcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19DUkVBVElORzogcmV0dXJuIFwmIzM0O0NSRUFUSU5HXCYjMzQ7O1xuJiM0MztcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19VUERBVElORzogcmV0dXJuIFwmIzM0O1VQREFUSU5HXCYjMzQ7O1xuJiM0MztcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19ERUxFVElORzogcmV0dXJuIFwmIzM0O0RFTEVUSU5HXCYjMzQ7O1xuJiM0MztcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19GQUlMSU5HOiByZXR1cm4gXCYjMzQ7RkFJTElOR1wmIzM0OztcbiYjNDM7XHRkZWZhdWx0OiByZXR1cm4gXCYjMzQ7TkFcJiMzNDs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZyh1OCBzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoc3RhdGUpIHtcbiYjNDM7XHRjYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfSURMRTogcmV0dXJuIFwmIzM0O0lETEVcJiMzNDs7XG4mIzQzO1x0Y2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX1dSSVRJTkc6IHJldHVybiBcJiMzNDtXUklUSU5HXCYjMzQ7O1xuJiM0MztcdGNhc2UgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9ERUxFVElORzogcmV0dXJuIFwmIzM0O0RFTEVUSU5HXCYjMzQ7O1xuJiM0MztcdGRlZmF1bHQ6IHJldHVybiBcJiMzNDtVTktOT1dOXCYjMzQ7O1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nKHU4IHN5bmRyb21lKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChzeW5kcm9tZSkge1xuJiM0MztcdGNhc2UgMTogcmV0dXJuIFwmIzM0O1NFVF9GTE9XX0ZBSUxcJiMzNDs7XG4mIzQzO1x0Y2FzZSAyOiByZXR1cm4gXCYjMzQ7RElTQUJMRV9GTE9XX0ZBSUxcJiMzNDs7XG4mIzQzO1x0ZGVmYXVsdDogcmV0dXJuIFwmIzM0O1VOS05PV05cJiMzNDs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBtbHg1aHdzX3NlbmRfcmluZ19wcml2ICpwcml2LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuQEAgLTM1Miw2ICYjNDM7MzgyLDcgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcbiBcdHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCA9IHByaXYtXHUwMDNlcnVsZS1cdTAwM2VtYXRjaGVyLVx1MDAzZXRibC1cdTAwM2VjdHg7XG4gXHR1MzIgb3Bjb2RlID0gY3FlID8gZ2V0X2NxZV9vcGNvZGUoY3FlKSA6IDA7XG4gXHRzdHJ1Y3QgbWx4NWh3c19ydWxlICpydWxlID0gcHJpdi1cdTAwM2VydWxlO1xuJiM0MztcdHU4IHN5bmRyb21lO1xuIFxuIFx0LyogSWYgc29tZXRoaW5nIGJhZCBoYXBwZW5zIGFuZCBsb3RzIG9mIHJ1bGVzIGFyZSBmYWlsaW5nLCB3ZSBkb24mIzM5O3RcbiBcdCAqIHdhbnQgdG8gcG9sbHV0ZSBkbWVzZy4gUHJpbnQgb25seSB0aGUgZmlyc3QgYmFkIGNxZSBwZXIgZW5naW5lLFxuQEAgLTM2NCwyNiAmIzQzOzM5NSwxNyBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFxuIFx0aWYgKG1seDVod3NfcnVsZV9tb3ZlX2luX3Byb2dyZXNzKHJ1bGUpKVxuIFx0XHRtbHg1aHdzX2VycihjdHgsXG4tXHRcdFx0ICAgIFwmIzM0Oy0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uIG1vdmluZyBydWxlOiBwaGFzZSAlcywgd3FlcyBsZWZ0ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7LS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gbW92aW5nIHJ1bGU6IHBoYXNlICVzICglZCksIHdxZXMgbGVmdCAlZFxcblwmIzM0OyxcbiBcdFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VyZXNpemVfaW5mby1cdTAwM2VzdGF0ZSA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX1dSSVRJTkcgPyBcJiMzNDtXUklUSU5HXCYjMzQ7IDpcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VyZXNpemVfaW5mby1cdTAwM2VzdGF0ZSA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HID8gXCYjMzQ7REVMRVRJTkdcJiMzNDsgOlxuLVx0XHRcdCAgICBcJiMzNDtVTktOT1dOXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZ1xuJiM0MztcdFx0XHRcdChydWxlLVx1MDAzZXJlc2l6ZV9pbmZvLVx1MDAzZXN0YXRlKSxcbiYjNDM7XHRcdFx0ICAgIHJ1bGUtXHUwMDNlcmVzaXplX2luZm8tXHUwMDNlc3RhdGUsXG4gXHRcdFx0ICAgIHJ1bGUtXHUwMDNlcGVuZGluZ193cWVzKTtcbiBcdGVsc2VcbiBcdFx0bWx4NWh3c19lcnIoY3R4LFxuIFx0XHRcdCAgICBcJiMzNDstLS0gcnVsZSAweCUwOGxseDogZXJyb3IgY29tcGxldGlvbiAlcyAoJWQpLCB3cWVzIGxlZnQgJWRcXG5cJiMzNDssXG4gXHRcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4tXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfQ1JFQVRJTkcgPyBcJiMzNDtDUkVBVElOR1wmIzM0OyA6XG4tXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfREVMRVRJTkcgPyBcJiMzNDtERUxFVElOR1wmIzM0OyA6XG4tXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfRkFJTElORyA/IFwmIzM0O0ZBSUxJTkdcJiMzNDsgOlxuLVx0XHRcdCAgICBydWxlLVx1MDAzZXN0YXR1cyA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfU1RBVFVTX1VQREFUSU5HID8gXCYjMzQ7VVBEQVRJTkdcJiMzNDsgOiBcJiMzNDtOQVwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGh3c19ydWxlX3N0YXR1c190b19zdHJpbmcocnVsZS1cdTAwM2VzdGF0dXMpLFxuIFx0XHRcdCAgICBydWxlLVx1MDAzZXN0YXR1cyxcbiBcdFx0XHQgICAgcnVsZS1cdTAwM2VwZW5kaW5nX3dxZXMpO1xuIFxuQEAgLTQyMyw2ICYjNDM7NDQ1LDE1IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXHRcdFx0ICAgIFwmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBzeW5kcm9tZSA9IDB4JXhcXG5cJiMzNDssXG4gXHRcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4gXHRcdFx0ICAgIGVycl9jcWUtXHUwMDNlc3luZHJvbWUpO1xuJiM0MztcdFx0bWx4NWh3c19lcnIoY3R4LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tIFFQTiA9IDB4JXhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuJiM0MztcdFx0XHQgICAgYmUzMl90b19jcHUoZXJyX2NxZS1cdTAwM2VzX3dxZV9vcGNvZGVfcXBuKSBcdTAwMjZcbiYjNDM7XHRcdFx0XHRcdDB4ZmZmZmZmKTtcbiYjNDM7XHRcdG1seDVod3NfZXJyKGN0eCxcbiYjNDM7XHRcdFx0ICAgIFwmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBXUUVfQ05UID0gMHglMDR4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbiYjNDM7XHRcdFx0ICAgICh1MzIpYmUxNl90b19jcHUoZXJyX2NxZS1cdTAwM2V3cWVfY291bnRlcikpO1xuIFx0fVxuIFxuIFx0bWx4NWh3c19lcnIoY3R4LFxuQEAgLTQzMywxMyAmIzQzOzQ2NCwxMiBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbiBcdFx0ICAgIChiZTMyX3RvX2NwdShjcWUtXHUwMDNlYnl0ZV9jbnQpIFx1MDAyNiAweDgwMDAwMDAwKSA/XG4gXHRcdCAgICBcJiMzNDtGQUlMVVJFXCYjMzQ7IDogXCYjMzQ7U1VDQ0VTU1wmIzM0Oyk7XG4mIzQzO1x0Lyogc3luZHJvbWUgaXMgaW4gdGhlIGxvd2VyIDIgYml0cyBvZiBieXRlX2NudCAqL1xuJiM0MztcdHN5bmRyb21lID0gYmUzMl90b19jcHUoY3FlLVx1MDAzZWJ5dGVfY250KSBcdTAwMjYgMztcbiBcdG1seDVod3NfZXJyKGN0eCxcbi1cdFx0ICAgIFwmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLS0tLS0gU1lORFJPTUUgPSAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgICBcJiMzNDsgICAgcnVsZSAweCUwOGxseDogIHwtLS0tLS0tIFNZTkRST01FID0gJXMgKCV1KVxcblwmIzM0OyxcbiBcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4tXHRcdCAgICAoKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VieXRlX2NudCkgXHUwMDI2IDB4MDAwMDAwMDMpID09IDEpID9cbi1cdFx0ICAgIFwmIzM0O1NFVF9GTE9XX0ZBSUxcJiMzNDsgOlxuLVx0XHQgICAgKChiZTMyX3RvX2NwdShjcWUtXHUwMDNlYnl0ZV9jbnQpIFx1MDAyNiAweDAwMDAwMDAzKSA9PSAyKSA/XG4tXHRcdCAgICBcJiMzNDtESVNBQkxFX0ZMT1dfRkFJTFwmIzM0OyA6IFwmIzM0O1VOS05PV05cJiMzNDspO1xuJiM0MztcdFx0ICAgIGh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nKHN5bmRyb21lKSwgc3luZHJvbWUpO1xuIFx0bWx4NWh3c19lcnIoY3R4LFxuIFx0XHQgICAgXCYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6IGNxZS1cdTAwM2Vzb3BfZHJvcF9xcG4gID0gMHglMDh4XFxuXCYjMzQ7LFxuIFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSwgYmUzMl90b19jcHUoY3FlLVx1MDAzZXNvcF9kcm9wX3FwbikpO1xuQEAgLTEwOTEsOCAmIzQzOzExMjEsNiBAQCBzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4gXHRpZiAoIW1seDVod3NfY29udGV4dF9id2Nfc3VwcG9ydGVkKGN0eCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0Y3R4LVx1MDAzZXF1ZXVlcyAmIzQzOz0gYndjX3F1ZXVlcztcbi1cbiBcdGN0eC1cdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2NrcyA9IGt6YWxsb2Nfb2JqcygqY3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzLFxuIFx0XHRcdFx0XHRcdCBid2NfcXVldWVzKTtcbiBcbkBAIC0xMTA0LDYgJiM0MzsxMTMyLDggQEAgc3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuIFx0aWYgKCFjdHgtXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cylcbiBcdFx0Z290byBlcnJfbG9ja19jbGFzc19rZXlzO1xuIFxuJiM0MztcdGN0eC1cdTAwM2VxdWV1ZXMgJiM0Mzs9IGJ3Y19xdWV1ZXM7XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYndjX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0bXV0ZXhfaW5pdChcdTAwMjZjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3NbaV0pO1xuIFx0XHRsb2NrZGVwX3JlZ2lzdGVyX2tleShjdHgtXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyAmIzQzOyBpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgb2YgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyAoZW5oYW5jaW5nIGVycm9yIG1lc3NhZ2VzIHdpdGggc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBhbmQgYWRkaXRpb25hbCBkZXRhaWxzKSwgcmVtb3ZhbCBvZiByZWR1bmRhbnQgY29kZSAoYSBkdXBsaWNhdGUgTUxYNV9TRVQgYW5kIGEgZHVwbGljYXRlIG1seDVfY21kX2V4ZWMgdGhhdCBpZ25vcmVkIGl0cyBvdXRwdXQpLCBhbmQgYSB0aGVvcmV0aWNhbCBlcnJvciBwYXRoIGZpeCBpbiBod3NfYndjX3NlbmRfcXVldWVzX2luaXQgdGhhdCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3QgYmVjYXVzZSB0aGUgY29udGV4dCBpcyBmcmVlZCBpbW1lZGlhdGVseSBvbiBmYWlsdXJlLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgYXJlIGluIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjM2UzMDgzYzQ5NDcwNDhmN2IxN2E4NWM3ZWRlMTlkMmE2ZDBiMjUwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMjI6NTE6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYwppbmRleCBlNjI0ZjVkYTk2YzgxYi4uYWZlNTgxODI5NGQ5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYwpAQCAtMzk4LDcgJiM0MzszOTgsNiBAQCBpbnQgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwKIAlNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9tZXRob2QsIHJ0Y19hdHRyLSZndDtmd19nZW5fd3FlKTsKIAlNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9pbmRleF9tb2RlLCBydGNfYXR0ci0mZ3Q7dXBkYXRlX2luZGV4X21vZGUpOwogCU1MWDVfU0VUKHJ0YywgYXR0ciwgYWNjZXNzX2luZGV4X21vZGUsIHJ0Y19hdHRyLSZndDthY2Nlc3NfaW5kZXhfbW9kZSk7Ci0JTUxYNV9TRVQocnRjLCBhdHRyLCBudW1faGFzaF9kZWZpbmVyLCBydGNfYXR0ci0mZ3Q7bnVtX2hhc2hfZGVmaW5lcik7CiAJTUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfZGVwdGgsIHJ0Y19hdHRyLSZndDtsb2dfZGVwdGgpOwogCU1MWDVfU0VUKHJ0YywgYXR0ciwgbG9nX2hhc2hfc2l6ZSwgcnRjX2F0dHItJmd0O2xvZ19zaXplKTsKIAlNTFg1X1NFVChydGMsIGF0dHIsIHRhYmxlX3R5cGUsIHJ0Y19hdHRyLSZndDt0YWJsZV90eXBlKTsKQEAgLTYxMSw5ICYjNDM7NjEwLDExIEBAIGludCBtbHg1aHdzX2NtZF9zdGNfbW9kaWZ5KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LAogCiAJcmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBzaXplb2Yob3V0KSk7CiAJaWYgKHJldCkKLQkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O0ZhaWxlZCB0byBtb2RpZnkgU1RDIEZXIGFjdGlvbl90eXBlICVkXG4mIzM0OywKLQkJCSAgICAgIHN0Y19hdHRyLSZndDthY3Rpb25fdHlwZSk7Ci0KJiM0MzsJCW1seDVfY29yZV9lcnIobWRldiwKJiM0MzsJCQkgICAgICAmIzM0O0ZhaWxlZCB0byBtb2RpZnkgU1RDIGFjdGlvbl90eXBlICVkLCBlcnIgJWQsIHN5bmRyb21lIDB4JXhcbiYjMzQ7LAomIzQzOwkJCSAgICAgIHN0Y19hdHRyLSZndDthY3Rpb25fdHlwZSwgcmV0LAomIzQzOwkJCSAgICAgIE1MWDVfR0VUKGdlbmVyYWxfb2JqX291dF9jbWRfaGRyLAomIzQzOwkJCQkgICAgICAgb3V0LCBzeW5kcm9tZSkpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTExODEsMTIgJiM0MzsxMTgyLDYgQEAgaW50IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsCiAJCQkJCQljYXBhYmlsaXR5LmVzd19jYXAubWVyZ2VkX2Vzd2l0Y2gpOwogCX0KIAotCXJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpOwotCWlmIChyZXQpIHsKLQkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O0ZhaWxlZCB0byBxdWVyeSBkZXZpY2UgYXR0cmlidXRlc1xuJiMzNDspOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlzbnByaW50ZihjYXBzLSZndDtmd192ZXIsIHNpemVvZihjYXBzLSZndDtmd192ZXIpLCAmIzM0OyVkLiVkLiVkJiMzNDssCiAJCSBmd19yZXZfbWFqKG1kZXYpLCBmd19yZXZfbWluKG1kZXYpLCBmd19yZXZfc3ViKG1kZXYpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYwppbmRleCBhZWQwMDlhZWM0ZmU4Ny4uZjBjM2EyYmRhMGM3MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jCkBAIC0zNDQsNiAmIzQzOzM0NCwzNiBAQCBod3Nfc2VuZF9lbmdpbmVfdXBkYXRlX3J1bGVfcmVzaXplKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSwKIAl9CiB9CiAKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaHdzX3J1bGVfc3RhdHVzX3RvX3N0cmluZyhlbnVtIG1seDVod3NfcnVsZV9zdGF0dXMgc3RhdHVzKQomIzQzO3sKJiM0MzsJc3dpdGNoIChzdGF0dXMpIHsKJiM0MzsJY2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0NSRUFUSU5HOiByZXR1cm4gJiMzNDtDUkVBVElORyYjMzQ7OwomIzQzOwljYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfVVBEQVRJTkc6IHJldHVybiAmIzM0O1VQREFUSU5HJiMzNDs7CiYjNDM7CWNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19ERUxFVElORzogcmV0dXJuICYjMzQ7REVMRVRJTkcmIzM0OzsKJiM0MzsJY2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0ZBSUxJTkc6IHJldHVybiAmIzM0O0ZBSUxJTkcmIzM0OzsKJiM0MzsJZGVmYXVsdDogcmV0dXJuICYjMzQ7TkEmIzM0OzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZyh1OCBzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoc3RhdGUpIHsKJiM0MzsJY2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0lETEU6IHJldHVybiAmIzM0O0lETEUmIzM0OzsKJiM0MzsJY2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX1dSSVRJTkc6IHJldHVybiAmIzM0O1dSSVRJTkcmIzM0OzsKJiM0MzsJY2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HOiByZXR1cm4gJiMzNDtERUxFVElORyYjMzQ7OwomIzQzOwlkZWZhdWx0OiByZXR1cm4gJiMzNDtVTktOT1dOJiMzNDs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nKHU4IHN5bmRyb21lKQomIzQzO3sKJiM0MzsJc3dpdGNoIChzeW5kcm9tZSkgewomIzQzOwljYXNlIDE6IHJldHVybiAmIzM0O1NFVF9GTE9XX0ZBSUwmIzM0OzsKJiM0MzsJY2FzZSAyOiByZXR1cm4gJiMzNDtESVNBQkxFX0ZMT1dfRkFJTCYjMzQ7OwomIzQzOwlkZWZhdWx0OiByZXR1cm4gJiMzNDtVTktOT1dOJiMzNDs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLAogCQkJCQkgICBzdHJ1Y3QgbWx4NWh3c19zZW5kX3JpbmdfcHJpdiAqcHJpdiwKIAkJCQkJICAgc3RydWN0IG1seDVfY3FlNjQgKmNxZSkKQEAgLTM1Miw2ICYjNDM7MzgyLDcgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSwKIAlzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHggPSBwcml2LSZndDtydWxlLSZndDttYXRjaGVyLSZndDt0YmwtJmd0O2N0eDsKIAl1MzIgb3Bjb2RlID0gY3FlID8gZ2V0X2NxZV9vcGNvZGUoY3FlKSA6IDA7CiAJc3RydWN0IG1seDVod3NfcnVsZSAqcnVsZSA9IHByaXYtJmd0O3J1bGU7CiYjNDM7CXU4IHN5bmRyb21lOwogCiAJLyogSWYgc29tZXRoaW5nIGJhZCBoYXBwZW5zIGFuZCBsb3RzIG9mIHJ1bGVzIGFyZSBmYWlsaW5nLCB3ZSBkb24mIzM5O3QKIAkgKiB3YW50IHRvIHBvbGx1dGUgZG1lc2cuIFByaW50IG9ubHkgdGhlIGZpcnN0IGJhZCBjcWUgcGVyIGVuZ2luZSwKQEAgLTM2NCwyNiAmIzQzOzM5NSwxNyBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLAogCiAJaWYgKG1seDVod3NfcnVsZV9tb3ZlX2luX3Byb2dyZXNzKHJ1bGUpKQogCQltbHg1aHdzX2VycihjdHgsCi0JCQkgICAgJiMzNDstLS0gcnVsZSAweCUwOGxseDogZXJyb3IgY29tcGxldGlvbiBtb3ZpbmcgcnVsZTogcGhhc2UgJXMsIHdxZXMgbGVmdCAlZFxuJiMzNDssCiYjNDM7CQkJICAgICYjMzQ7LS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gbW92aW5nIHJ1bGU6IHBoYXNlICVzICglZCksIHdxZXMgbGVmdCAlZFxuJiMzNDssCiAJCQkgICAgSFdTX1BUUl9UT19JRChydWxlKSwKLQkJCSAgICBydWxlLSZndDtyZXNpemVfaW5mby0mZ3Q7c3RhdGUgPT0KLQkJCSAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX1dSSVRJTkcgPyAmIzM0O1dSSVRJTkcmIzM0OyA6Ci0JCQkgICAgcnVsZS0mZ3Q7cmVzaXplX2luZm8tJmd0O3N0YXRlID09Ci0JCQkgICAgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9ERUxFVElORyA/ICYjMzQ7REVMRVRJTkcmIzM0OyA6Ci0JCQkgICAgJiMzNDtVTktOT1dOJiMzNDssCiYjNDM7CQkJICAgIGh3c19ydWxlX3Jlc2l6ZV9zdGF0ZV90b19zdHJpbmcKJiM0MzsJCQkJKHJ1bGUtJmd0O3Jlc2l6ZV9pbmZvLSZndDtzdGF0ZSksCiYjNDM7CQkJICAgIHJ1bGUtJmd0O3Jlc2l6ZV9pbmZvLSZndDtzdGF0ZSwKIAkJCSAgICBydWxlLSZndDtwZW5kaW5nX3dxZXMpOwogCWVsc2UKIAkJbWx4NWh3c19lcnIoY3R4LAogCQkJICAgICYjMzQ7LS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gJXMgKCVkKSwgd3FlcyBsZWZ0ICVkXG4mIzM0OywKIAkJCSAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLAotCQkJICAgIHJ1bGUtJmd0O3N0YXR1cyA9PQotCQkJICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfQ1JFQVRJTkcgPyAmIzM0O0NSRUFUSU5HJiMzNDsgOgotCQkJICAgIHJ1bGUtJmd0O3N0YXR1cyA9PQotCQkJICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfREVMRVRJTkcgPyAmIzM0O0RFTEVUSU5HJiMzNDsgOgotCQkJICAgIHJ1bGUtJmd0O3N0YXR1cyA9PQotCQkJICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfRkFJTElORyA/ICYjMzQ7RkFJTElORyYjMzQ7IDoKLQkJCSAgICBydWxlLSZndDtzdGF0dXMgPT0KLQkJCSAgICBNTFg1SFdTX1JVTEVfU1RBVFVTX1VQREFUSU5HID8gJiMzNDtVUERBVElORyYjMzQ7IDogJiMzNDtOQSYjMzQ7LAomIzQzOwkJCSAgICBod3NfcnVsZV9zdGF0dXNfdG9fc3RyaW5nKHJ1bGUtJmd0O3N0YXR1cyksCiAJCQkgICAgcnVsZS0mZ3Q7c3RhdHVzLAogCQkJICAgIHJ1bGUtJmd0O3BlbmRpbmdfd3Flcyk7CiAKQEAgLTQyMyw2ICYjNDM7NDQ1LDE1IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsCiAJCQkgICAgJiMzNDsgICAgcnVsZSAweCUwOGxseDogIHwtLS0gc3luZHJvbWUgPSAweCV4XG4mIzM0OywKIAkJCSAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLAogCQkJICAgIGVycl9jcWUtJmd0O3N5bmRyb21lKTsKJiM0MzsJCW1seDVod3NfZXJyKGN0eCwKJiM0MzsJCQkgICAgJiMzNDsgICAgcnVsZSAweCUwOGxseDogIHwtLS0gUVBOID0gMHgleFxuJiMzNDssCiYjNDM7CQkJICAgIEhXU19QVFJfVE9fSUQocnVsZSksCiYjNDM7CQkJICAgIGJlMzJfdG9fY3B1KGVycl9jcWUtJmd0O3Nfd3FlX29wY29kZV9xcG4pICZhbXA7CiYjNDM7CQkJCQkweGZmZmZmZik7CiYjNDM7CQltbHg1aHdzX2VycihjdHgsCiYjNDM7CQkJICAgICYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tIFdRRV9DTlQgPSAweCUwNHhcbiYjMzQ7LAomIzQzOwkJCSAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLAomIzQzOwkJCSAgICAodTMyKWJlMTZfdG9fY3B1KGVycl9jcWUtJmd0O3dxZV9jb3VudGVyKSk7CiAJfQogCiAJbWx4NWh3c19lcnIoY3R4LApAQCAtNDMzLDEzICYjNDM7NDY0LDEyIEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsCiAJCSAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLAogCQkgICAgKGJlMzJfdG9fY3B1KGNxZS0mZ3Q7Ynl0ZV9jbnQpICZhbXA7IDB4ODAwMDAwMDApID8KIAkJICAgICYjMzQ7RkFJTFVSRSYjMzQ7IDogJiMzNDtTVUNDRVNTJiMzNDspOwomIzQzOwkvKiBzeW5kcm9tZSBpcyBpbiB0aGUgbG93ZXIgMiBiaXRzIG9mIGJ5dGVfY250ICovCiYjNDM7CXN5bmRyb21lID0gYmUzMl90b19jcHUoY3FlLSZndDtieXRlX2NudCkgJmFtcDsgMzsKIAltbHg1aHdzX2VycihjdHgsCi0JCSAgICAmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLS0tLS0gU1lORFJPTUUgPSAlc1xuJiMzNDssCiYjNDM7CQkgICAgJiMzNDsgICAgcnVsZSAweCUwOGxseDogIHwtLS0tLS0tIFNZTkRST01FID0gJXMgKCV1KVxuJiMzNDssCiAJCSAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLAotCQkgICAgKChiZTMyX3RvX2NwdShjcWUtJmd0O2J5dGVfY250KSAmYW1wOyAweDAwMDAwMDAzKSA9PSAxKSA/Ci0JCSAgICAmIzM0O1NFVF9GTE9XX0ZBSUwmIzM0OyA6Ci0JCSAgICAoKGJlMzJfdG9fY3B1KGNxZS0mZ3Q7Ynl0ZV9jbnQpICZhbXA7IDB4MDAwMDAwMDMpID09IDIpID8KLQkJICAgICYjMzQ7RElTQUJMRV9GTE9XX0ZBSUwmIzM0OyA6ICYjMzQ7VU5LTk9XTiYjMzQ7KTsKJiM0MzsJCSAgICBod3NfZ3RhX3N5bmRyb21lX3RvX3N0cmluZyhzeW5kcm9tZSksIHN5bmRyb21lKTsKIAltbHg1aHdzX2VycihjdHgsCiAJCSAgICAmIzM0OyAgICBydWxlIDB4JTA4bGx4OiBjcWUtJmd0O3NvcF9kcm9wX3FwbiAgPSAweCUwOHhcbiYjMzQ7LAogCQkgICAgSFdTX1BUUl9UT19JRChydWxlKSwgYmUzMl90b19jcHUoY3FlLSZndDtzb3BfZHJvcF9xcG4pKTsKQEAgLTEwOTEsOCAmIzQzOzExMjEsNiBAQCBzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpCiAJaWYgKCFtbHg1aHdzX2NvbnRleHRfYndjX3N1cHBvcnRlZChjdHgpKQogCQlyZXR1cm4gMDsKIAotCWN0eC0mZ3Q7cXVldWVzICYjNDM7PSBid2NfcXVldWVzOwotCiAJY3R4LSZndDtid2Nfc2VuZF9xdWV1ZV9sb2NrcyA9IGt6YWxsb2Nfb2JqcygqY3R4LSZndDtid2Nfc2VuZF9xdWV1ZV9sb2NrcywKIAkJCQkJCSBid2NfcXVldWVzKTsKIApAQCAtMTEwNCw2ICYjNDM7MTEzMiw4IEBAIHN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCkKIAlpZiAoIWN0eC0mZ3Q7YndjX2xvY2tfY2xhc3Nfa2V5cykKIAkJZ290byBlcnJfbG9ja19jbGFzc19rZXlzOwogCiYjNDM7CWN0eC0mZ3Q7cXVldWVzICYjNDM7PSBid2NfcXVldWVzOwomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBid2NfcXVldWVzOyBpJiM0MzsmIzQzOykgewogCQltdXRleF9pbml0KCZhbXA7Y3R4LSZndDtid2Nfc2VuZF9xdWV1ZV9sb2Nrc1tpXSk7CiAJCWxvY2tkZXBfcmVnaXN0ZXJfa2V5KGN0eC0mZ3Q7YndjX2xvY2tfY2xhc3Nfa2V5cyAmIzQzOyBpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2NQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDQ2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVsbGFub3ggSFdTIENvbW1hbmQgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNgIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNgLiBMZXQmIzM5O3MgZGl2ZSBpbi4KCkZpcnN0LCBgY21kLmNgOiBJIHNlZSBhIGNoYW5nZSBpbiBgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZWAsIHdoZXJlIHRoZXkmIzM5O3ZlIHJlbW92ZWQgYE1MWDVfU0VUKHJ0YywgYXR0ciwgbnVtX2hhc2hfZGVmaW5lciwgcnRjX2F0dHItJmd0O251bV9oYXNoX2RlZmluZXIpO2AuIEN1cmlvdXMsIG11c3QgYmUgYSBzaW1wbGlmaWNhdGlvbiBvciBhIGRpZmZlcmVudCB3YXkgb2YgaGFuZGxpbmcgaGFzaCBkZWZpbmVycyBub3cuIFRoZW4sIGluIGBtbHg1aHdzX2NtZF9zdGNfbW9kaWZ5YCwgdGhleSYjMzk7dmUgYWRkZWQgYSBzeW5kcm9tZSB0byB0aGUgZXJyb3IgbWVzc2FnZSwgdGhhdCYjMzk7cyBnb29kIGZvciBkZWJ1Z2dpbmcuIEJ1dCB0aGlzIGBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzYCBjaGFuZ2UgaXMgd2hhdCYjMzk7cyBncmFiYmVkIG15IGF0dGVudGlvbi4gVGhleSYjMzk7dmUgcmVtb3ZlZCBhIGNhbGwgdG8gYG1seDVfY21kX2V4ZWNgIGFuZCBpdHMgYXNzb2NpYXRlZCBlcnJvciBoYW5kbGluZy4gV2FpdCwgKnJlbW92ZWQqPyBJcyBgbWx4NV9jbWRfZXhlY2AgZ29uZSBlbnRpcmVseT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkaWZmIG1vcmUgY2xvc2VseS4KCmBgYGMKQEAgLTExODEsMTIgJiM0MzsxMTgyLDYgQEAgaW50IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsCiAJCQkJCQljYXBhYmlsaXR5LmVzd19jYXAubWVyZ2VkX2Vzd2l0Y2gpOwogCX0KIAotCXJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpOwotCWlmIChyZXQpIHsKLQkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O0ZhaWxlZCB0byBxdWVyeSBkZXZpY2UgYXR0cmlidXRlc1xuJiMzNDspOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlzbnByaW50ZihjYXBzLSZndDtmd192ZXIsIHNpemVvZihjYXBzLSZndDtmd192ZXIpLCAmIzM0OyVkLiVkLiVkJiMzNDssCiAJCSBmd19yZXZfbWFqKG1kZXYpLCBmd19yZXZfbWluKG1kZXYpLCBmd19yZXZfc3ViKG1kZXYpKTsKIGBgYAoKWWVwLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGdvbmUuIFNvIHRoZSBjb21tYW5kIGlzICpubyBsb25nZXIgZXhlY3V0ZWQqPyBPciwgd2FzIGl0IGEgcmVkdW5kYW50IGNhbGwgdGhhdCYjMzk7cyBiZWVuIGVsaW1pbmF0ZWQ/IFRoaXMgcmVxdWlyZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCBgbWx4NWh3c19jbWRfcXVlcnlfY2Fwc2AgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21seDVod3NfY21kX3F1ZXJ5X2NhcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmM9ODkzPWludCBtbHg1aHdzX2NtZF9nZW5lcmF0ZV93cWUoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYy05MzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jOjkzODppbnQgbWx4NWh3c19jbWRfcXVlcnlfY2FwcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmM6OTM5Olx0XHRcdCAgIHN0cnVjdCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzICpjYXBzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYy05NDAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNDEKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzYCoqCgpPa2F5LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgY29kZSBmb3IgYG1seDVod3NfY21kX3F1ZXJ5X2NhcHNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJiMzOTtzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIE1lbGxhbm94IGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBzcGVjaWZpYyBjYXBhYmlsaXRpZXMgaXMgdGhpcyByb3V0aW5lIHF1ZXJ5aW5nPyBBcmUgd2UgdGFsa2luZyBhYm91dCBiYXNpYyBkZXZpY2UgaW5mb3JtYXRpb24sIGZlYXR1cmUgc2V0cywgcGVyaGFwcyBzdXBwb3J0ZWQgb2ZmbG9hZHM/IFRoZSBmdW5jdGlvbiYjMzk7cyBuYW1lIHN1Z2dlc3RzIGl0JiMzOTtzIGNlbnRyYWwgdG8gZGlzY292ZXJpbmcgdGhlIGhhcmR3YXJlJiMzOTtzIGNhcGFiaWxpdGllcywgYnV0IEkgd2FudCB0byBzZWUgdGhlIGdyYW51bGFyaXR5LgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIE1MWDUgZGV2aWNlLCB0aGUgY29tbWFuZCBzdHJ1Y3R1cmVzIGl0IGNvbnN0cnVjdHMgYW5kIHNlbmRzLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaG93IGl0IGludGVycHJldHMgdGhlIHJlc3BvbnNlcy4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiBpdCBoYW5kbGVzIGRpZmZlcmVudCBmaXJtd2FyZSB2ZXJzaW9ucyBvciBoYXJkd2FyZSBnZW5lcmF0aW9ucyBncmFjZWZ1bGx5LiBFcnJvciBoYW5kbGluZyBpcyBhbm90aGVyIGtleSBhc3BlY3QuIEkgZXhwZWN0IHJvYnVzdCB2YWxpZGF0aW9uIGFuZCBpbmZvcm1hdGl2ZSBlcnJvciBjb2RlcywgZXNwZWNpYWxseSBzaW5jZSBjYXBhYmlsaXR5IHF1ZXJpZXMgYXJlIGZvdW5kYXRpb25hbCBmb3IgZHJpdmVyIG9wZXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgcmV0dXJuIHZhbHVlcyBhbmQgYW55IGFzc29jaWF0ZWQgc2lkZSBlZmZlY3RzIGFyZSBjcml0aWNhbC4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIHBhaW50cyBhIHBpY3R1cmUgb2YgdGhlIGF2YWlsYWJsZSBoYXJkd2FyZSByZXNvdXJjZXMgZm9yIHRoZSB1cHBlciBsYXllcnMgb2YgdGhlIGRyaXZlci4gTGV0JiMzOTtzIHNlZSBob3cgaXQgZ29lcyBhYm91dCBkb2luZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkzOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkzODpcdGludCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxuIDkzOTpcdFx0XHRcdCAgIHN0cnVjdCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzICpjYXBzKVxuIDk0MDpcdHtcbiA5NDE6XHRcdHUzMiBpbltNTFg1X1NUX1NaX0RXKHF1ZXJ5X2hjYV9jYXBfaW4pXSA9IHswfTtcbiA5NDI6XHRcdHUzMiBvdXRfc2l6ZTtcbiA5NDM6XHRcdHUzMiAqb3V0O1xuIDk0NDpcdFx0aW50IHJldDtcbiA5NDU6XHRcbiA5NDY6XHRcdG91dF9zaXplID0gTUxYNV9TVF9TWl9CWVRFUyhxdWVyeV9oY2FfY2FwX291dCk7XG4gOTQ3Olx0XHRvdXQgPSBremFsbG9jKG91dF9zaXplLCBHRlBfS0VSTkVMKTtcbiA5NDg6XHRcdGlmICghb3V0KVxuIDk0OTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5NTA6XHRcbiA5NTE6XHRcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcGNvZGUsIE1MWDVfQ01EX09QX1FVRVJZX0hDQV9DQVApO1xuIDk1MjpcdFx0TUxYNV9TRVQocXVlcnlfaGNhX2NhcF9pbiwgaW4sIG9wX21vZCxcbiA5NTM6XHRcdFx0IE1MWDVfU0VUX0hDQV9DQVBfT1BfTU9EX0dFTkVSQUxfREVWSUNFIHwgSENBX0NBUF9PUE1PRF9HRVRfQ1VSKTtcbiA5NTQ6XHRcbiA5NTU6XHRcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xuIDk1NjpcdFx0aWYgKHJldCkge1xuIDk1NzpcdFx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O0ZhaWxlZCB0byBxdWVyeSBkZXZpY2UgY2Fwc1xcblwmIzM0Oyk7XG4gOTU4Olx0XHRcdGdvdG8gb3V0O1xuIDk1OTpcdFx0fVxuIDk2MDpcdFxuIDk2MTpcdFx0Y2Fwcy1cdTAwM2V3cWVfYmFzZWRfdXBkYXRlID1cbiA5NjI6XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbiA5NjM6XHRcdFx0XHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC53cWVfYmFzZWRfZmxvd190YWJsZV91cGRhdGVfY2FwKTtcbiA5NjQ6XHRcbiA5NjU6XHRcdGNhcHMtXHUwMDNlZXN3aXRjaF9tYW5hZ2VyID0gTUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbiA5NjY6XHRcdFx0XHRcdFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXAuZXN3aXRjaF9tYW5hZ2VyKTtcbiA5Njc6XHRcbiA5Njg6XHRcdGNhcHMtXHUwMDNlZmxleF9wcm90b2NvbHMgPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuIDk2OTpcdFx0XHRcdFx0XHRjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLmZsZXhfcGFyc2VyX3Byb3RvY29scyk7XG4gOTcwOlx0XG4gOTcxOlx0XHRpZiAoY2Fwcy1cdTAwM2VmbGV4X3Byb3RvY29scyBcdTAwMjYgTUxYNV9GTEVYX1BBUlNFUl9HRU5FVkVfVExWX09QVElPTl8wX0VOQUJMRUQpXG4gOTcyOlx0XHRcdGNhcHMtXHUwMDNlZmxleF9wYXJzZXJfaWRfZ2VuZXZlX3Rsdl9vcHRpb25fMCA9XG4gOTczOlx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbiA5NzQ6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLmZsZXhfcGFyc2VyX2lkX2dlbmV2ZV90bHZfb3B0aW9uXzApO1xuIDk3NTpcdFxuIDk3NjpcdFx0aWYgKGNhcHMtXHUwMDNlZmxleF9wcm90b2NvbHMgXHUwMDI2IE1MWDVfRkxFWF9QQVJTRVJfTVBMU19PVkVSX0dSRV9FTkFCTEVEKVxuIDk3NzpcdFx0XHRjYXBzLVx1MDAzZWZsZXhfcGFyc2VyX2lkX21wbHNfb3Zlcl9ncmUgPVxuIDk3ODpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4gOTc5Olx0XHRcdFx0XHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5mbGV4X3BhcnNlcl9pZF9vdXRlcl9maXJzdF9tcGxzX292ZXJfZ3JlKTtcbiA5ODA6XHRcbiA5ODE6XHRcdGlmIChjYXBzLVx1MDAzZWZsZXhfcHJvdG9jb2xzIFx1MDAyNiBNTFg1X0ZMRVhfUEFSU0VSX01QTFNfT1ZFUl9VRFBfRU5BQkxFRClcbiA5ODI6XHRcdFx0Y2Fwcy1cdTAwM2VmbGV4X3BhcnNlcl9pZF9tcGxzX292ZXJfdWRwID1cbiA5ODM6XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuIDk4NDpcdFx0XHRcdFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXAuZmxleF9wYXJzZXJfaWRfb3V0ZXJfZmlyc3RfbXBsc19vdmVyX3VkcF9sYWJlbCk7XG4gOTg1Olx0XG4gOTg2Olx0XHRjYXBzLVx1MDAzZWxvZ19oZWFkZXJfbW9kaWZ5X2FyZ3VtZW50X2dyYW51bGFyaXR5ID1cbiA5ODc6XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbiA5ODg6XHRcdFx0XHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5sb2dfaGVhZGVyX21vZGlmeV9hcmd1bWVudF9ncmFudWxhcml0eSk7XG4gOTg5Olx0XG4gOTkwOlx0XHRjYXBzLVx1MDAzZWxvZ19oZWFkZXJfbW9kaWZ5X2FyZ3VtZW50X2dyYW51bGFyaXR5IC09XG4gOTkxOlx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4gOTkyOlx0XHRcdFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXAubG9nX2hlYWRlcl9tb2RpZnlfYXJndW1lbnRfZ3JhbnVsYXJpdHlfb2Zmc2V0KTtcbiA5OTM6XHRcbiA5OTQ6XHRcdGNhcHMtXHUwMDNlbG9nX2hlYWRlcl9tb2RpZnlfYXJndW1lbnRfbWF4X2FsbG9jID1cbiA5OTU6XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbiA5OTY6XHRcdFx0XHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5sb2dfaGVhZGVyX21vZGlmeV9hcmd1bWVudF9tYXhfYWxsb2MpO1xuIDk5NzpcdFxuIDk5ODpcdFx0Y2Fwcy1cdTAwM2VkZWZpbmVyX2Zvcm1hdF9zdXAgPVxuIDk5OTpcdFx0XHRNTFg1X0dFVDY0KHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMDAwOlx0XHRcdFx0ICAgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5tYXRjaF9kZWZpbmVyX2Zvcm1hdF9zdXBwb3J0ZWQpO1xuMTAwMTpcdFxuMTAwMjpcdFx0Y2Fwcy1cdTAwM2V2aGNhX2lkID0gTUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjEwMDM6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLnZoY2FfaWQpO1xuMTAwNDpcdFxuMTAwNTpcdFx0Y2Fwcy1cdTAwM2VzcV90c19mb3JtYXQgPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTAwNjpcdFx0XHRcdFx0ICAgICAgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5zcV90c19mb3JtYXQpO1xuMTAwNzpcdFxuMTAwODpcdFx0Y2Fwcy1cdTAwM2VpcHNlY19vZmZsb2FkID0gTUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjEwMDk6XHRcdFx0XHRcdCAgICAgICBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLmlwc2VjX29mZmxvYWQpO1xuMTAxMDpcdFxuMTAxMTpcdFx0TUxYNV9TRVQocXVlcnlfaGNhX2NhcF9pbiwgaW4sIG9wX21vZCxcbjEwMTI6XHRcdFx0IE1MWDVfR0VUX0hDQV9DQVBfT1BfTU9EX0dFTkVSQUxfREVWSUNFXzIgfCBIQ0FfQ0FQX09QTU9EX0dFVF9DVVIpO1xuMTAxMzpcdFxuMTAxNDpcdFx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XG4xMDE1Olx0XHRpZiAocmV0KSB7XG4xMDE2Olx0XHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7RmFpbGVkIHRvIHF1ZXJ5IGRldmljZSBjYXBzIDJcXG5cJiMzNDspO1xuMTAxNzpcdFx0XHRnb3RvIG91dDtcbjEwMTg6XHRcdH1cbjEwMTk6XHRcbjEwMjA6XHRcdGNhcHMtXHUwMDNlZnVsbF9kd19qdW1ib19zdXBwb3J0ID1cbjEwMjE6XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjEwMjI6XHRcdFx0XHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcF8yLmZvcm1hdF9zZWxlY3RfZHdfOF82X2V4dCk7XG4xMDIzOlx0XG4xMDI0Olx0XHRjYXBzLVx1MDAzZWZvcm1hdF9zZWxlY3RfZ3RwdV9kd18wID1cbjEwMjU6XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjEwMjY6XHRcdFx0XHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcF8yLmZvcm1hdF9zZWxlY3RfZHdfZ3RwdV9kd18wKTtcbjEwMjc6XHRcbjEwMjg6XHRcdGNhcHMtXHUwMDNlZm9ybWF0X3NlbGVjdF9ndHB1X2R3XzEgPVxuMTAyOTpcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTAzMDpcdFx0XHRcdCBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwXzIuZm9ybWF0X3NlbGVjdF9kd19ndHB1X2R3XzEpO1xuMTAzMTpcdFxuMTAzMjpcdFx0Y2Fwcy1cdTAwM2Vmb3JtYXRfc2VsZWN0X2d0cHVfZHdfMiA9XG4xMDMzOlx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMDM0Olx0XHRcdFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXBfMi5mb3JtYXRfc2VsZWN0X2R3X2d0cHVfZHdfMik7XG4xMDM1Olx0XG4xMDM2Olx0XHRjYXBzLVx1MDAzZWZvcm1hdF9zZWxlY3RfZ3RwdV9leHRfZHdfMCA9XG4xMDM3Olx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYxMQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydC4KCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiAtIE5leHQgU3RlcHMqKgoKQWxyaWdodCwgSSYjMzk7dmUgZ290IHRoZSBpbml0aWFsIHN0cnVjdHVyZSBvZiB0aGUgZnVuY3Rpb24gaW4gbXkgaGVhZC4gSSYjMzk7dmUgY29uc2lkZXJlZCBpdHMgYmFzaWMgaW5wdXRzIGFuZCBvdXRwdXRzLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgbG9naWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBmdW5jdGlvbiBwcm9jZXNzZXMgZGF0YS4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyB1bmZvbGRzLi4uIExldCYjMzk7cyByZWFkIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDM4Olx0XHRcdFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXBfMi5mb3JtYXRfc2VsZWN0X2R3X2d0cHVfZmlyc3RfZXh0X2R3XzApO1xuMTAzOTpcdFxuMTA0MDpcdFx0Y2Fwcy1cdTAwM2VzdXBwX3R5cGVfZ2VuX3dxZSA9XG4xMDQxOlx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMDQyOlx0XHRcdFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXBfMi5nZW5lcmF0ZV93cWVfdHlwZSk7XG4xMDQzOlx0XG4xMDQ0Olx0XHRjYXBzLVx1MDAzZWZsb3dfdGFibGVfaGFzaF90eXBlID1cbjEwNDU6XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjEwNDY6XHRcdFx0XHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcF8yLmZsb3dfdGFibGVfaGFzaF90eXBlKTtcbjEwNDc6XHRcbjEwNDg6XHRcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcF9tb2QsXG4xMDQ5Olx0XHRcdCBNTFg1X0dFVF9IQ0FfQ0FQX09QX01PRF9OSUNfRkxPV19UQUJMRSB8IEhDQV9DQVBfT1BNT0RfR0VUX0NVUik7XG4xMDUwOlx0XG4xMDUxOlx0XHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dF9zaXplKTtcbjEwNTI6XHRcdGlmIChyZXQpIHtcbjEwNTM6XHRcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtGYWlsZWQgdG8gcXVlcnkgZmxvdyB0YWJsZSBjYXBzXFxuXCYjMzQ7KTtcbjEwNTQ6XHRcdFx0Z290byBvdXQ7XG4xMDU1Olx0XHR9XG4xMDU2Olx0XG4xMDU3Olx0XHRjYXBzLVx1MDAzZW5pY19mdC5tYXhfbGV2ZWwgPVxuMTA1ODpcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTA1OTpcdFx0XHRcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUubWF4X2Z0X2xldmVsKTtcbjEwNjA6XHRcbjEwNjE6XHRcdGNhcHMtXHUwMDNlbmljX2Z0LnJlcGFyc2UgPVxuMTA2MjpcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTA2MzpcdFx0XHRcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUucmVwYXJzZSk7XG4xMDY0Olx0XG4xMDY1Olx0XHRjYXBzLVx1MDAzZW5pY19mdC5pZ25vcmVfZmxvd19sZXZlbF9ydGNfdmFsaWQgPVxuMTA2NjpcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTA2NzpcdFx0XHRcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUuaWdub3JlX2Zsb3dfbGV2ZWxfcnRjX3ZhbGlkKTtcbjEwNjg6XHRcbjEwNjk6XHRcdGNhcHMtXHUwMDNlZmxleF9wYXJzZXJfb2tfYml0c19zdXBwID1cbjEwNzA6XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjEwNzE6XHRcdFx0XHQgY2FwYWJpbGl0eS5mbG93X3RhYmxlX25pY19jYXAuZmxvd190YWJsZV9wcm9wZXJ0aWVzX25pY19yZWNlaXZlLmZ0X2ZpZWxkX3N1cHBvcnQuZ2VuZXZlX3Rsdl9vcHRpb25fMF9leGlzdCk7XG4xMDcyOlx0XG4xMDczOlx0XHRpZiAoY2Fwcy1cdTAwM2V3cWVfYmFzZWRfdXBkYXRlKSB7XG4xMDc0Olx0XHRcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcF9tb2QsXG4xMDc1Olx0XHRcdFx0IE1MWDVfR0VUX0hDQV9DQVBfT1BfTU9EX1dRRV9CQVNFRF9GTE9XX1RBQkxFIHwgSENBX0NBUF9PUE1PRF9HRVRfQ1VSKTtcbjEwNzY6XHRcbjEwNzc6XHRcdFx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XG4xMDc4Olx0XHRcdGlmIChyZXQpIHtcbjEwNzk6XHRcdFx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O0ZhaWxlZCB0byBxdWVyeSBXUUUgYmFzZWQgRlQgY2Fwc1xcblwmIzM0Oyk7XG4xMDgwOlx0XHRcdFx0Z290byBvdXQ7XG4xMDgxOlx0XHRcdH1cbjEwODI6XHRcbjEwODM6XHRcdFx0Y2Fwcy1cdTAwM2VydGNfcmVwYXJzZV9tb2RlID1cbjEwODQ6XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTA4NTpcdFx0XHRcdFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnJ0Y19yZXBhcnNlX21vZGUpO1xuMTA4NjpcdFxuMTA4NzpcdFx0XHRjYXBzLVx1MDAzZXN0ZV9mb3JtYXQgPVxuMTA4ODpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMDg5Olx0XHRcdFx0XHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAuc3RlX2Zvcm1hdCk7XG4xMDkwOlx0XG4xMDkxOlx0XHRcdGNhcHMtXHUwMDNlcnRjX2luZGV4X21vZGUgPVxuMTA5MjpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMDkzOlx0XHRcdFx0XHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAucnRjX2luZGV4X21vZGUpO1xuMTA5NDpcdFxuMTA5NTpcdFx0XHRjYXBzLVx1MDAzZXJ0Y19sb2dfZGVwdGhfbWF4ID1cbjEwOTY6XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTA5NzpcdFx0XHRcdFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnJ0Y19sb2dfZGVwdGhfbWF4KTtcbjEwOTg6XHRcbjEwOTk6XHRcdFx0Y2Fwcy1cdTAwM2VzdGVfYWxsb2NfbG9nX21heCA9XG4xMTAwOlx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExMDE6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC5zdGVfYWxsb2NfbG9nX21heCk7XG4xMTAyOlx0XG4xMTAzOlx0XHRcdGNhcHMtXHUwMDNlc3RlX2FsbG9jX2xvZ19ncmFuID1cbjExMDQ6XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTEwNTpcdFx0XHRcdFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnN0ZV9hbGxvY19sb2dfZ3JhbnVsYXJpdHkpO1xuMTEwNjpcdFxuMTEwNzpcdFx0XHRjYXBzLVx1MDAzZXRyaXZpYWxfbWF0Y2hfZGVmaW5lciA9XG4xMTA4Olx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExMDk6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC50cml2aWFsX21hdGNoX2RlZmluZXIpO1xuMTExMDpcdFxuMTExMTpcdFx0XHRjYXBzLVx1MDAzZXN0Y19hbGxvY19sb2dfbWF4ID1cbjExMTI6XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTExMzpcdFx0XHRcdFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnN0Y19hbGxvY19sb2dfbWF4KTtcbjExMTQ6XHRcbjExMTU6XHRcdFx0Y2Fwcy1cdTAwM2VzdGNfYWxsb2NfbG9nX2dyYW4gPVxuMTExNjpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMTE3Olx0XHRcdFx0XHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAuc3RjX2FsbG9jX2xvZ19ncmFudWxhcml0eSk7XG4xMTE4Olx0XG4xMTE5Olx0XHRcdGNhcHMtXHUwMDNlcnRjX2hhc2hfc3BsaXRfdGFibGUgPVxuMTEyMDpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMTIxOlx0XHRcdFx0XHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAucnRjX2hhc2hfc3BsaXRfdGFibGUpO1xuMTEyMjpcdFxuMTEyMzpcdFx0XHRjYXBzLVx1MDAzZXJ0Y19saW5lYXJfbG9va3VwX3RhYmxlID1cbjExMjQ6XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTEyNTpcdFx0XHRcdFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnJ0Y19saW5lYXJfbG9va3VwX3RhYmxlKTtcbjExMjY6XHRcbjExMjc6XHRcdFx0Y2Fwcy1cdTAwM2VhY2Nlc3NfaW5kZXhfbW9kZSA9XG4xMTI4Olx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExMjk6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC5hY2Nlc3NfaW5kZXhfbW9kZSk7XG4xMTMwOlx0XG4xMTMxOlx0XHRcdGNhcHMtXHUwMDNlbGluZWFyX21hdGNoX2RlZmluZXIgPVxuMTEzMjpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMTMzOlx0XHRcdFx0XHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAubGluZWFyX21hdGNoX2RlZmluZXJfcmVnX2MzKTtcbjExMzQ6XHRcbjExMzU6XHRcdFx0Y2Fwcy1cdTAwM2VydGNfbWF4X2hhc2hfZGVmX2dlbl93cWUgPVxuMTEzNjpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMTM3Olx0XHRcdFx0XHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAucnRjX21heF9udW1faGFzaF9kZWZpbmVyX2dlbl93cWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzU0CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24mIzM5O3MgQ29udGV4dCoqCgpSaWdodCwgc28gSSYjMzk7dmUganVzdCBiZWVuIHByb21wdGVkIHRvIGFzc2VzcyBzb21lIGNvZGUgb3IgYSBkZXNjcmlwdGlvbiBvZiBhIGZ1bmN0aW9uLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMsICpJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiouIEkmIzM5O20gbm90IGdvaW5nIHRvIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zIGJhc2VkIG9uIGp1c3QgYSBzbmlwcGV0LiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBpbm5lciB3b3JraW5ncyBpcyB0byBzZWUgdGhlIHdob2xlIHRoaW5nLCBvciBhdCBsZWFzdCBhIHNpZ25pZmljYW50IHBvcnRpb24gb2YgaXQuIEkgd2FudCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBlbnRyeSBwb2ludHMsIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzICYjMzQ7TGV0JiMzOTtzIHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uJiMzNDsgaXMgY3J1Y2lhbDsgSSB1bmRlcnN0YW5kIHRoZSBpbXBvcnRhbmNlIG9mIGNvbXBsZXRlIGNvbnRleHQgdG8gbWFrZSBhIHNvdW5kIGV2YWx1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMzg6XHRcbjExMzk6XHRcdFx0Y2Fwcy1cdTAwM2VzdXBwX3N0ZV9mb3JtYXRfZ2VuX3dxZSA9XG4xMTQwOlx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExNDE6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC5zdGVfZm9ybWF0X2dlbl93cWUpO1xuMTE0MjpcdFxuMTE0MzpcdFx0XHRjYXBzLVx1MDAzZWZkYl90aXJfc3RjID1cbjExNDQ6XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTE0NTpcdFx0XHRcdFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLmZkYl9qdW1wX3RvX3Rpcl9zdGMpO1xuMTE0NjpcdFx0fVxuMTE0NzpcdFxuMTE0ODpcdFx0aWYgKGNhcHMtXHUwMDNlZXN3aXRjaF9tYW5hZ2VyKSB7XG4xMTQ5Olx0XHRcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcF9tb2QsXG4xMTUwOlx0XHRcdFx0IE1MWDVfR0VUX0hDQV9DQVBfT1BfTU9EX0VTV19GTE9XX1RBQkxFIHwgSENBX0NBUF9PUE1PRF9HRVRfQ1VSKTtcbjExNTE6XHRcbjExNTI6XHRcdFx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XG4xMTUzOlx0XHRcdGlmIChyZXQpIHtcbjExNTQ6XHRcdFx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O0ZhaWxlZCB0byBxdWVyeSBmbG93IHRhYmxlIGVzdyBjYXBzXFxuXCYjMzQ7KTtcbjExNTU6XHRcdFx0XHRnb3RvIG91dDtcbjExNTY6XHRcdFx0fVxuMTE1NzpcdFxuMTE1ODpcdFx0XHRjYXBzLVx1MDAzZWZkYl9mdC5tYXhfbGV2ZWwgPVxuMTE1OTpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMTYwOlx0XHRcdFx0XHQgY2FwYWJpbGl0eS5mbG93X3RhYmxlX25pY19jYXAuZmxvd190YWJsZV9wcm9wZXJ0aWVzX25pY19yZWNlaXZlLm1heF9mdF9sZXZlbCk7XG4xMTYxOlx0XG4xMTYyOlx0XHRcdGNhcHMtXHUwMDNlZmRiX2Z0LnJlcGFyc2UgPVxuMTE2MzpcdFx0XHRcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXG4xMTY0Olx0XHRcdFx0XHQgY2FwYWJpbGl0eS5mbG93X3RhYmxlX25pY19jYXAuZmxvd190YWJsZV9wcm9wZXJ0aWVzX25pY19yZWNlaXZlLnJlcGFyc2UpO1xuMTE2NTpcdFxuMTE2NjpcdFx0XHRNTFg1X1NFVChxdWVyeV9oY2FfY2FwX2luLCBpbiwgb3BfbW9kLFxuMTE2NzpcdFx0XHRcdCBNTFg1X1NFVF9IQ0FfQ0FQX09QX01PRF9FU1cgfCBIQ0FfQ0FQX09QTU9EX0dFVF9DVVIpO1xuMTE2ODpcdFxuMTE2OTpcdFx0XHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dF9zaXplKTtcbjExNzA6XHRcdFx0aWYgKHJldCkge1xuMTE3MTpcdFx0XHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7RmFpbGVkIHRvIHF1ZXJ5IGVzd2l0Y2ggY2FwYWJpbGl0aWVzXFxuXCYjMzQ7KTtcbjExNzI6XHRcdFx0XHRnb3RvIG91dDtcbjExNzM6XHRcdFx0fVxuMTE3NDpcdFxuMTE3NTpcdFx0XHRpZiAoTUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExNzY6XHRcdFx0XHQgICAgIGNhcGFiaWxpdHkuZXN3X2NhcC5lc3dfbWFuYWdlcl92cG9ydF9udW1iZXJfdmFsaWQpKVxuMTE3NzpcdFx0XHRcdGNhcHMtXHUwMDNlZXN3aXRjaF9tYW5hZ2VyX3Zwb3J0X251bWJlciA9XG4xMTc4Olx0XHRcdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTE3OTpcdFx0XHRcdFx0XHQgY2FwYWJpbGl0eS5lc3dfY2FwLmVzd19tYW5hZ2VyX3Zwb3J0X251bWJlcik7XG4xMTgwOlx0XG4xMTgxOlx0XHRcdGNhcHMtXHUwMDNlbWVyZ2VkX2Vzd2l0Y2ggPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTE4MjpcdFx0XHRcdFx0XHRcdGNhcGFiaWxpdHkuZXN3X2NhcC5tZXJnZWRfZXN3aXRjaCk7XG4xMTgzOlx0XHR9XG4xMTg0Olx0XG4xMTg1Olx0XHRzbnByaW50ZihjYXBzLVx1MDAzZWZ3X3Zlciwgc2l6ZW9mKGNhcHMtXHUwMDNlZndfdmVyKSwgXCYjMzQ7JWQuJWQuJWRcJiMzNDssXG4xMTg2Olx0XHRcdCBmd19yZXZfbWFqKG1kZXYpLCBmd19yZXZfbWluKG1kZXYpLCBmd19yZXZfc3ViKG1kZXYpKTtcbjExODc6XHRcbjExODg6XHRcdGNhcHMtXHUwMDNlaXNfZWNwZiA9IG1seDVfY29yZV9pc19lY3BmX2Vzd19tYW5hZ2VyKG1kZXYpO1xuMTE4OTpcdFxuMTE5MDpcdG91dDpcbjExOTE6XHRcdGtmcmVlKG91dCk7XG4xMTkyOlx0XHRyZXR1cm4gcmV0O1xuMTE5MzpcdH1cbjExOTQ6XHRcbjExOTU6XHRpbnQgbWx4NWh3c19jbWRfcXVlcnlfZ3ZtaShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgYm9vbCBvdGhlcl9mdW5jdGlvbixcbjExOTY6XHRcdFx0XHQgICB1MTYgdnBvcnRfbnVtYmVyLCB1MTYgKmd2bWkpXG4xMTk3Olx0e1xuMTE5ODpcdFx0aW50IGVycjtcbjExOTk6XHRcbjEyMDA6XHRcdGlmICghb3RoZXJfZnVuY3Rpb24pIHtcbjEyMDE6XHRcdFx0Lyogc2VsZiB2aGNhX2lkICovXG4xMjAyOlx0XHRcdCpndm1pID0gTUxYNV9DQVBfR0VOKG1kZXYsIHZoY2FfaWQpO1xuMTIwMzpcdFx0XHRyZXR1cm4gMDtcbjEyMDQ6XHRcdH1cbjEyMDU6XHRcbjEyMDY6XHRcdGVyciA9IG1seDVfdnBvcnRfZ2V0X3ZoY2FfaWQobWRldiwgdnBvcnRfbnVtYmVyLCBndm1pKTtcbjEyMDc6XHRcdGlmIChlcnIpIHtcbjEyMDg6XHRcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtGYWlsZWQgdG8gZ2V0IHZwb3J0IHZoY2EgaWQgZm9yIHZwb3J0ICVkXFxuXCYjMzQ7LFxuMTIwOTpcdFx0XHRcdCAgICAgIHZwb3J0X251bWJlcik7XG4xMjEwOlx0XHRcdHJldHVybiBlcnI7XG4xMjExOlx0XHR9XG4xMjEyOlx0XG4xMjEzOlx0XHRyZXR1cm4gMDtcbjEyMTQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzYyCgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogNzkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVjZW50IENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgb3ZlciB0aGlzIGRpZmYuIEZpcnN0LCB0aGUgcmVtb3ZhbCBvZiBgbWx4NV9jbWRfZXhlY2AgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCB3YXMgYSBkdXBsaWNhdGUgY2FsbCwgZXhlY3V0aW5nIHRoZSBzYW1lIGNvbW1hbmQgcmVkdW5kYW50bHksIGFzIEkgc3VzcGVjdGVkLiBJdCB3YXNuJiMzOTt0IHB1bGxpbmcgYW55IG91dHB1dCBmcm9tIHRoZSBjb21tYW5kLCBzbyBpdCB3YXMgY2xlYXJseSBhbiBvdmVyc2lnaHQuIFRoYXQmIzM5O3MgYSBjbGVhbi11cCwgbm90aGluZyBjb21wbGV4IHRoZXJlLgoKTm93LCB0aGUgY2hhbmdlcyBpbiBgc2VuZC5jYCBhcmUgbW9yZSBpbnRlcmVzdGluZy4gQWRkaW5nIHRoZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBlbnVtL3N0YXR1cyBjb252ZXJzaW9ucyBpcyBhIGdvb2QgbW92ZTogYGh3c19ydWxlX3N0YXR1c190b19zdHJpbmdgLCBgaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZ2AsIGFuZCBgaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmdgLiBUaGlzIHdpbGwgZGVmaW5pdGVseSBpbXByb3ZlIGRlYnVnZ2luZyBhbmQgbG9nZ2luZywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aG9zZSBlcnJvciBkdW1wcyBpbiBgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlYC4gR2V0dGluZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiAoc3luZHJvbWUsIFFQTiwgV1FFX0NOVCkgbWFrZXMgYSBiaWcgZGlmZmVyZW5jZSBpbiBwaW5wb2ludGluZyBpc3N1ZXMsIGFuZCB1c2luZyBzdHJpbmdzIGluc3RlYWQgb2YganVzdCBjcnlwdGljIGludGVnZXIgdmFsdWVzIG1ha2VzIHRoZSBvdXRwdXQgbXVjaCBtb3JlIHJlYWRhYmxlLiBHb29kIHN0dWZmLgoKVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIG9yZGVyIGNoYW5nZSBpbiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YC4gU3dhcHBpbmcgdGhlIGluY3JlbWVudCBvZiBgY3R4LSZndDtxdWV1ZXNgIHdpdGggdGhlIGFsbG9jYXRpb24gb2YgYGN0eC0mZ3Q7YndjX2xvY2tfY2xhc3Nfa2V5c2AgaW1tZWRpYXRlbHkgcmFpc2VkIGEgZmxhZyBmb3IgbWUuIEl0JiMzOTtzIGEgY2xhc3NpYyBlcnJvci1oYW5kbGluZyBpbXByb3ZlbWVudC4gSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBjbGVhbnVwIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gSW5jcmVtZW50aW5nIHRoZSBgY3R4LSZndDtxdWV1ZXNgIGJlZm9yZSBhbGxvY2F0aW9uIGNvdWxkIG1lYW4gYW4gZXJyb3IgbGVhdmVzIHRoZSBgY3R4LSZndDtxdWV1ZXNgIGluY3JlbWVudGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQgbWUgcmV2aWV3IHRoZSBjb2RlIGFuZCB0aGUgZXJyb3IgcGF0aHMgbW9yZSBjbG9zZWx5IHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uIEkmIzM5O20gZm9jdXNpbmcgb24gYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgYW5kIGl0cyBhc3NvY2lhdGVkIGVycm9yIGhhbmRsaW5nIGZvciBjbGVhbnVwLCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIG1lbW9yeSBsZWFrcyBvciBpbmNvcnJlY3QgY291bnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtod3NfYndjX3NlbmRfcXVldWVzX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYz0xMTA4PXZvaWQgbWx4NWh3c19zZW5kX3F1ZXVlc19jbG9zZShzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTExNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjExMTU6c3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTExNi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM9MTE1MD1pbnQgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTYwLVx0Lyogb3BlbiBhIHNlcGFyYXRlIHNldCBvZiBxdWV1ZXMgYW5kIGxvY2tzIGZvciBid2MgQVBJICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYzoxMTYxOlx0ZXJyID0gaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KGN0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTYyLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5OTIKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZSBpcyBkb2luZy4gSXQmIzM5O3Mgb2J2aW91c2x5IHNldHRpbmcgdXAgc2VuZCBxdWV1ZXMsIGJ1dCB0aGUgJiMzNDtid2MmIzM0OyBwYXJ0IG1ha2VzIG1lIHRoaW5rIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gYmFuZHdpZHRoIGNvbnRyb2wgb3Igc29tZSBraW5kIG9mIGZsb3cgbWFuYWdlbWVudC4gVGhhdCYjMzk7cyBteSBpbml0aWFsIGh1bmNoLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsIGFyZWFzIHRvIGxvb2sgZm9yOiBsb2NrIGNvbnRlbnRpb24sIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgZm9yIHRoZSBxdWV1ZXMgdGhlbXNlbHZlcywgYW5kIGhvdyB0aGlzIGluaXRpYWxpemF0aW9uIGludGVyYWN0cyB3aXRoIGludGVycnVwdCBoYW5kbGluZywgaWYgYXQgYWxsLiBJdCYjMzk7cyBhbHNvIGltcG9ydGFudCB0byBjb25zaWRlciB0aGUgY29udGV4dDsgd2hlcmUgaXMgdGhpcyBjb2RlIHNpdHVhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0/IElzIGl0IHBhcnQgb2YgdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyLCBhIHNwZWNpZmljIG5ldHdvcmsgc3RhY2ssIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgZG9jdW1lbnRhdGlvbiBzaG91bGQgaGVscCBtZSBhbnN3ZXIgdGhpcy4gSeKAmWxsIG1ha2Ugc3VyZSB0byBub3RlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCBoZXJlLiBPa2F5LCBsZXTigJlzIHJlYWQgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMTU6XHRzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4xMTE2Olx0e1xuMTExNzpcdFx0LyogTnVtYmVyIG9mIEJXQyBxdWV1ZXMgaXMgZXF1YWwgdG8gbnVtYmVyIG9mIHRoZSB1c3VhbCBIV1MgcXVldWVzICovXG4xMTE4Olx0XHRpbnQgYndjX3F1ZXVlcyA9IGN0eC1cdTAwM2VxdWV1ZXMgLSAxO1xuMTExOTpcdFx0aW50IGk7XG4xMTIwOlx0XG4xMTIxOlx0XHRpZiAoIW1seDVod3NfY29udGV4dF9id2Nfc3VwcG9ydGVkKGN0eCkpXG4xMTIyOlx0XHRcdHJldHVybiAwO1xuMTEyMzpcdFxuMTEyNDpcdFx0Y3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzID0ga3phbGxvY19vYmpzKCpjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MsXG4xMTI1Olx0XHRcdFx0XHRcdFx0IGJ3Y19xdWV1ZXMpO1xuMTEyNjpcdFxuMTEyNzpcdFx0aWYgKCFjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MpXG4xMTI4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTEyOTpcdFxuMTEzMDpcdFx0Y3R4LVx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMgPSBremFsbG9jX29ianMoKmN0eC1cdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzLFxuMTEzMTpcdFx0XHRcdFx0XHRcdGJ3Y19xdWV1ZXMpO1xuMTEzMjpcdFx0aWYgKCFjdHgtXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cylcbjExMzM6XHRcdFx0Z290byBlcnJfbG9ja19jbGFzc19rZXlzO1xuMTEzNDpcdFxuMTEzNTpcdFx0Y3R4LVx1MDAzZXF1ZXVlcyAmIzQzOz0gYndjX3F1ZXVlcztcbjExMzY6XHRcbjExMzc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJ3Y19xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4xMTM4Olx0XHRcdG11dGV4X2luaXQoXHUwMDI2Y3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzW2ldKTtcbjExMzk6XHRcdFx0bG9ja2RlcF9yZWdpc3Rlcl9rZXkoY3R4LVx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMgJiM0MzsgaSk7XG4xMTQwOlx0XHRcdGxvY2tkZXBfc2V0X2NsYXNzKGN0eC1cdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2NrcyAmIzQzOyBpLCBjdHgtXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyAmIzQzOyBpKTtcbjExNDE6XHRcdH1cbjExNDI6XHRcbjExNDM6XHRcdHJldHVybiAwO1xuMTE0NDpcdFxuMTE0NTpcdGVycl9sb2NrX2NsYXNzX2tleXM6XG4xMTQ2Olx0XHRrZnJlZShjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MpO1xuMTE0NzpcdFx0cmV0dXJuIC1FTk9NRU07XG4xMTQ4Olx0fVxuMTE0OTpcdFxuMTE1MDpcdGludCBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuMTE1MTpcdFx0XHRcdCAgICAgdTE2IHF1ZXVlcyxcbjExNTI6XHRcdFx0XHQgICAgIHUxNiBxdWV1ZV9zaXplKVxuMTE1MzpcdHtcbjExNTQ6XHRcdGludCBlcnIgPSAwO1xuMTE1NTpcdFx0aW50IGkgPSAwO1xuMTE1NjpcdFxuMTE1NzpcdFx0LyogT3BlbiBvbmUgZXh0cmEgcXVldWUgZm9yIGNvbnRyb2wgcGF0aCAqL1xuMTE1ODpcdFx0Y3R4LVx1MDAzZXF1ZXVlcyA9IHF1ZXVlcyAmIzQzOyAxO1xuMTE1OTpcdFxuMTE2MDpcdFx0Lyogb3BlbiBhIHNlcGFyYXRlIHNldCBvZiBxdWV1ZXMgYW5kIGxvY2tzIGZvciBid2MgQVBJICovXG4xMTYxOlx0XHRlcnIgPSBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoY3R4KTtcbjExNjI6XHRcdGlmIChlcnIpXG4xMTYzOlx0XHRcdHJldHVybiBlcnI7XG4xMTY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDQzCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFF1ZXVlIE1hbmFnZW1lbnQgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZyYjMzk7cyBpbW1lZGlhdGVseSBqdW1waW5nIG91dCBhdCBtZS4gSXQgc2VlbXMgbGlrZSBgY3R4LSZndDtxdWV1ZXNgIGdldHMgaW5jcmVtZW50ZWQgKmJlZm9yZSogdGhlIGNhbGxzIHRvIGBremFsbG9jX29ianNgLiBUaGUgcG90ZW50aWFsIHByb2JsZW0gaGVyZSBpcyB0aGlzOiBpZiB0aG9zZSBga3phbGxvY19vYmpzYCBjYWxscyBmYWlsLCBgY3R4LSZndDtxdWV1ZXNgIGlzIHN0aWxsIGluY3JlbWVudGVkLCB3aGljaCBmZWVscyBsaWtlIGl0IGNvdWxkIGxlYWQgdG8gdHJvdWJsZSBkb3duIHRoZSBsaW5lLCBwb3RlbnRpYWxseSB3aGVuIGBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlYCBpcyBjYWxsZWQsIG9yIG1heWJlIHNvbWV3aGVyZSBlbHNlIGluIHRoZSBjb2RlIGJhc2UuIEEgZGFuZ2xpbmcgcG9pbnRlciwgcGVyaGFwcz8gT3IgaW5jb3JyZWN0IHF1ZXVlIGFjY291bnRpbmc/CgpXYWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgbm93LCBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCByZXR1cm5zIGBlcnJgIGlmIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGZhaWxzLiBUaGF0JiMzOTtzIGEgZ29vZCBmYWlsLXNhZmUsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBpbXBsaWNhdGlvbnMgb2YgdGhhdCBlcnJvciBwYXRoLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBoYW5kbGVzIGVycm9ycyBpbiB0aGlzIGNvbnRleHQuIExldCYjMzk7cyBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCB3aGVuIHRoYXQgaGFwcGVucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1MDpcdGludCBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuMTE1MTpcdFx0XHRcdCAgICAgdTE2IHF1ZXVlcyxcbjExNTI6XHRcdFx0XHQgICAgIHUxNiBxdWV1ZV9zaXplKVxuMTE1MzpcdHtcbjExNTQ6XHRcdGludCBlcnIgPSAwO1xuMTE1NTpcdFx0aW50IGkgPSAwO1xuMTE1NjpcdFxuMTE1NzpcdFx0LyogT3BlbiBvbmUgZXh0cmEgcXVldWUgZm9yIGNvbnRyb2wgcGF0aCAqL1xuMTE1ODpcdFx0Y3R4LVx1MDAzZXF1ZXVlcyA9IHF1ZXVlcyAmIzQzOyAxO1xuMTE1OTpcdFxuMTE2MDpcdFx0Lyogb3BlbiBhIHNlcGFyYXRlIHNldCBvZiBxdWV1ZXMgYW5kIGxvY2tzIGZvciBid2MgQVBJICovXG4xMTYxOlx0XHRlcnIgPSBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoY3R4KTtcbjExNjI6XHRcdGlmIChlcnIpXG4xMTYzOlx0XHRcdHJldHVybiBlcnI7XG4xMTY0Olx0XG4xMTY1Olx0XHRjdHgtXHUwMDNlc2VuZF9xdWV1ZSA9IGt6YWxsb2Nfb2JqcygqY3R4LVx1MDAzZXNlbmRfcXVldWUsIGN0eC1cdTAwM2VxdWV1ZXMpO1xuMTE2NjpcdFx0aWYgKCFjdHgtXHUwMDNlc2VuZF9xdWV1ZSkge1xuMTE2NzpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMTE2ODpcdFx0XHRnb3RvIGZyZWVfYndjX2xvY2tzO1xuMTE2OTpcdFx0fVxuMTE3MDpcdFxuMTE3MTpcdFx0LyogSWYgbmF0aXZlIEFQSSBpc24mIzM5O3Qgc3VwcG9ydGVkLCBza2lwIHRoZSB1bnVzZWQgbmF0aXZlIHF1ZXVlczpcbjExNzI6XHRcdCAqIGluaXRpYWxpemUgQldDIHF1ZXVlcyBhbmQgY29udHJvbCBxdWV1ZSBvbmx5LlxuMTE3MzpcdFx0ICovXG4xMTc0Olx0XHRpZiAoIW1seDVod3NfY29udGV4dF9uYXRpdmVfc3VwcG9ydGVkKGN0eCkpXG4xMTc1Olx0XHRcdGkgPSBtbHg1aHdzX2J3Y19nZXRfcXVldWVfaWQoY3R4LCAwKTtcbjExNzY6XHRcbjExNzc6XHRcdGZvciAoOyBpIFx1MDAzYyBjdHgtXHUwMDNlcXVldWVzOyBpJiM0MzsmIzQzOykge1xuMTE3ODpcdFx0XHRlcnIgPSBtbHg1aHdzX3NlbmRfcXVldWVfb3BlbihjdHgsIFx1MDAyNmN0eC1cdTAwM2VzZW5kX3F1ZXVlW2ldLCBxdWV1ZV9zaXplKTtcbjExNzk6XHRcdFx0aWYgKGVycilcbjExODA6XHRcdFx0XHRnb3RvIGNsb3NlX3NlbmRfcXVldWVzO1xuMTE4MTpcdFx0fVxuMTE4MjpcdFxuMTE4MzpcdFx0cmV0dXJuIDA7XG4xMTg0Olx0XG4xMTg1Olx0Y2xvc2Vfc2VuZF9xdWV1ZXM6XG4xMTg2Olx0XHQgX19od3Nfc2VuZF9xdWV1ZXNfY2xvc2UoY3R4LCBpKTtcbjExODc6XHRcbjExODg6XHRcdGtmcmVlKGN0eC1cdTAwM2VzZW5kX3F1ZXVlKTtcbjExODk6XHRcbjExOTA6XHRmcmVlX2J3Y19sb2NrczpcbjExOTE6XHRcdGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveShjdHgpO1xuMTE5MjpcdFxuMTE5MzpcdFx0cmV0dXJuIGVycjtcbjExOTQ6XHR9XG4xMTk1Olx0XG4xMTk2Olx0aW50IG1seDVod3Nfc2VuZF9xdWV1ZV9hY3Rpb24oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuMTE5NzpcdFx0XHRcdCAgICAgIHUxNiBxdWV1ZV9pZCxcbjExOTg6XHRcdFx0XHQgICAgICB1MzIgYWN0aW9ucylcbjExOTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjA5CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgUmVzb3VyY2UgTGVha3MqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBhIHNwZWNpZmljIHNjZW5hcmlvIGNhdWdodCBteSBleWUuIElmIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGVycm9ycyBvdXQsIGl0IGp1c3QgcGFzc2VzIHRoYXQgYGVycmAgdmFsdWUgc3RyYWlnaHQgdXAgdG8gYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAsIGFuZCB0aGVuIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIHJldHVybnMuIEJ1dCBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCB3aGF0IGhhcHBlbnMgdG8gYGN0eC0mZ3Q7cXVldWVzYCBpbiB0aGUgbWVhbnRpbWUuIEl0IHNlZW1zIGxpa2UgYGN0eC0mZ3Q7cXVldWVzYCBtaWdodCBnZXQgbW9kaWZpZWQgKmJlZm9yZSogdGhlIGVycm9yLCBidXQgdGhlIGNsZWFudXAgbWlnaHQgYmUgaW5jb21wbGV0ZSBpZiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBmYWlscyByaWdodCBhZnRlci4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBjbGVhbnMgdXAgYGN0eGAgd2hlbiBpdCBlcnJvcnMgb3V0LCBiZWNhdXNlIGlmIGl0IGRvZXNuJiMzOTt0LCB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgb24gb3VyIGhhbmRzLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIG9mIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBldmVyeXdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcCwgSSBzdXBwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbHg1aHdzX3NlbmRfcXVldWVzX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYz0xMzQ9c3RhdGljIGludCBod3NfY29udGV4dF9pbml0X2h3cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMTU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM6MTU3Olx0cmV0ID0gbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuKGN0eCwgYXR0ci1cdTAwM2VxdWV1ZXMsIGF0dHItXHUwMDNlcXVldWVfc2l6ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0xNTgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jPTExMTU9c3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYzoxMTUwOmludCBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTE1MS1cdFx0XHQgICAgIHUxNiBxdWV1ZXMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmg9MTkzPXZvaWQgbWx4NWh3c19zZW5kX3F1ZXVlc19jbG9zZShzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmgtMTk0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmg6MTk1OmludCBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmgtMTk2LVx0XHRcdCAgICAgdTE2IHF1ZXVlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNzgKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkNvbnRleHQgSW5pdGlhbGl6YXRpb24gRGl2aW5nIERlZXAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGNvbnRleHQuY2AgZmlsZSBhZ2Fpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBoYXJkd2FyZSBjb250ZXh0IGlzIGluaXRpYWxpemVkLCBhbmQgdGhhdCBzdGFydHMgd2l0aCB1bmRlcnN0YW5kaW5nIGBod3NfY29udGV4dF9pbml0X2h3c2AuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGhlcmUsIGtub3dpbmcgaG93IHRoaXMgc3lzdGVtIGlzIGFyY2hpdGVjdGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgc2V0dXAuIEkgZXhwZWN0IHRoZXJlIHdpbGwgYmUgcGxlbnR5IG9mIHBvaW50ZXIgbWFuaXB1bGF0aW9uIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRvIGNvbnNpZGVyIGluIHRoaXMgc2VjdGlvbiwgdG9vLCBzbyBJJiMzOTtsbCBiZSBrZWVwaW5nIGEga2VlbiBleWUgb3V0IGZvciB0aG9zZSB0aGluZ3MuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcm5lcnN0b25lLCBzbyB1bmRlcnN0YW5kaW5nIGl0IGlzIGdvaW5nIHRvIGJlIGtleSB0byBkZWJ1Z2dpbmcgYW55IGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHJlZ2lzdGVyIGFzc2lnbm1lbnRzLCBhbnkgbWVtb3J5IG1hcHBpbmcsIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZC4gTm93LCBsZXQmIzM5O3Mgb3BlbiB0aGF0IGZpbGUgYW5kIGdldCBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzQ6XHRzdGF0aWMgaW50IGh3c19jb250ZXh0X2luaXRfaHdzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcbiAxMzU6XHRcdFx0XHRcdHN0cnVjdCBtbHg1aHdzX2NvbnRleHRfYXR0ciAqYXR0cilcbiAxMzY6XHR7XG4gMTM3Olx0XHRpbnQgcmV0O1xuIDEzODpcdFxuIDEzOTpcdFx0aHdzX2NvbnRleHRfY2hlY2tfaHdzX3N1cHAoY3R4KTtcbiAxNDA6XHRcbiAxNDE6XHRcdGlmICghKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgTUxYNUhXU19DT05URVhUX0ZMQUdfSFdTX1NVUFBPUlQpKVxuIDE0MjpcdFx0XHRyZXR1cm4gMDtcbiAxNDM6XHRcbiAxNDQ6XHRcdHJldCA9IGh3c19jb250ZXh0X2luaXRfcGQoY3R4KTtcbiAxNDU6XHRcdGlmIChyZXQpXG4gMTQ2Olx0XHRcdHJldHVybiByZXQ7XG4gMTQ3Olx0XG4gMTQ4Olx0XHRyZXQgPSBod3NfY29udGV4dF9wb29sc19pbml0KGN0eCk7XG4gMTQ5Olx0XHRpZiAocmV0KVxuIDE1MDpcdFx0XHRnb3RvIHVuaW5pdF9wZDtcbiAxNTE6XHRcbiAxNTI6XHRcdC8qIENvbnRleHQgaGFzIHN1cHBvcnQgZm9yIGJhY2t3YXJkIGNvbXBhdGlibGUgQVBJLFxuIDE1MzpcdFx0ICogYW5kIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgbmF0aXZlIEhXUyBBUEkuXG4gMTU0Olx0XHQgKi9cbiAxNTU6XHRcdGN0eC1cdTAwM2VmbGFncyB8PSBNTFg1SFdTX0NPTlRFWFRfRkxBR19CV0NfU1VQUE9SVDtcbiAxNTY6XHRcbiAxNTc6XHRcdHJldCA9IG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbihjdHgsIGF0dHItXHUwMDNlcXVldWVzLCBhdHRyLVx1MDAzZXF1ZXVlX3NpemUpO1xuIDE1ODpcdFx0aWYgKHJldClcbiAxNTk6XHRcdFx0Z290byBwb29sc191bmluaXQ7XG4gMTYwOlx0XG4gMTYxOlx0XHRyZXQgPSBtbHg1aHdzX2FjdGlvbl9zdGVfcG9vbF9pbml0KGN0eCk7XG4gMTYyOlx0XHRpZiAocmV0KVxuIDE2MzpcdFx0XHRnb3RvIGNsb3NlX3F1ZXVlcztcbiAxNjQ6XHRcbiAxNjU6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0eC1cdTAwM2V0YmxfbGlzdCk7XG4gMTY2Olx0XG4gMTY3Olx0XHRyZXR1cm4gMDtcbiAxNjg6XHRcbiAxNjk6XHRjbG9zZV9xdWV1ZXM6XG4gMTcwOlx0XHRtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlKGN0eCk7XG4gMTcxOlx0cG9vbHNfdW5pbml0OlxuIDE3MjpcdFx0aHdzX2NvbnRleHRfcG9vbHNfdW5pbml0KGN0eCk7XG4gMTczOlx0dW5pbml0X3BkOlxuIDE3NDpcdFx0aHdzX2NvbnRleHRfdW5pbml0X3BkKGN0eCk7XG4gMTc1Olx0XHRyZXR1cm4gcmV0O1xuIDE3NjpcdH1cbiAxNzc6XHRcbiAxNzg6XHRzdGF0aWMgdm9pZCBod3NfY29udGV4dF91bmluaXRfaHdzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiAxNzk6XHR7XG4gMTgwOlx0XHRpZiAoIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IE1MWDVIV1NfQ09OVEVYVF9GTEFHX0hXU19TVVBQT1JUKSlcbiAxODE6XHRcdFx0cmV0dXJuO1xuIDE4MjpcdFxuIDE4MzpcdFx0bWx4NWh3c19hY3Rpb25fc3RlX3Bvb2xfdW5pbml0KGN0eCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTczCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgUmVzb3VyY2UgTGVha3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcmIzM5O3MgYnVnZ2luZyBtZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MsIHJpZ2h0PyBNeSB0aGlua2luZyBpcyB0aGlzOiBpZiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBmYWlscywgdGhlIGV4ZWN1dGlvbiBqdW1wcyB0byBgcG9vbHNfdW5pbml0YC4gVGhlIGlzc3VlIGlzLCBgcG9vbHNfdW5pbml0YCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgYSBjb3JyZXNwb25kaW5nIGNhbGwgdG8gYG1seDVod3Nfc2VuZF9xdWV1ZXNfY2xvc2VgLiBUaGF0IHJhaXNlcyBhIHJlZCBmbGFnOyB3ZSBjb3VsZCBiZSBsZWFraW5nIHJlc291cmNlcyBpZiB0aGF0IGBvcGVuYCBjYWxsIGZhaWxzIGJ1dCB0aGUgcmVzb3VyY2VzIGFyZW4mIzM5O3QgcHJvcGVybHkgY2xvc2VkLgoKQnV0IHdhaXQsIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gYG1seDVod3NfY29udGV4dF9vcGVuYCBhbHNvIGxvb2tzIHNpZ25pZmljYW50IGhlcmUuIEkgc2VlIHRoYXQgaXQgY2FsbHMgYGh3c19jb250ZXh0X2luaXRfaHdzYC4gSWYgYGh3c19jb250ZXh0X2luaXRfaHdzYCBmYWlscyAqZHVyaW5nKiB0aGF0IHByb2Nlc3MsIHRoZSBjb2RlIGRvZXMgcGVyZm9ybSBzb21lIGNsZWFudXAgYW5kIHJldHVybnMuIEludGVyZXN0aW5nbHksIHRoZSBjb250ZXh0IChgY3R4YCkgaXRzZWxmIGFwcGVhcnMgdG8gYmUgZnJlZWQgd2l0aGluIGBtbHg1aHdzX2NvbnRleHRfb3BlbmAgaWYgYW4gZXJyb3Igb2NjdXJzLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBJIHN0aWxsIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGUgcXVldWUgbWFuYWdlbWVudC4KClJpZ2h0LCBzbyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMsIEkgbmVlZCB0byBjaGVjayBgbWx4NWh3c19jb250ZXh0X29wZW5gJiMzOTtzIGxvZ2ljIG1vcmUgY2xvc2VseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uIHRvIGNvbmZpcm0gdGhlIGxlYWsgaXMgcG9zc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21seDVod3NfY29udGV4dF9vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9MTc4PXN0YXRpYyB2b2lkIGh3c19jb250ZXh0X3VuaW5pdF9od3Moc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjE4OTpzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICptbHg1aHdzX2NvbnRleHRfb3BlbihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE5MC1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbWx4NWh3c19jb250ZXh0X2F0dHIgKmF0dHIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYz0xMzA9c3RhdGljIGludCBtbHg1X2NtZF9od3NfY3JlYXRlX25zKHN0cnVjdCBtbHg1X2Zsb3dfcm9vdF9uYW1lc3BhY2UgKm5zKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmMtMTM5LVx0bnMtXHUwMDNlZnNfaHdzX2NvbnRleHQuaHdzX2N0eCA9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jOjE0MDpcdFx0bWx4NWh3c19jb250ZXh0X29wZW4obnMtXHUwMDNlZGV2LCBcdTAwMjZod3NfY3R4X2F0dHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYy0xNDEtXHRpZiAoIW5zLVx1MDAzZWZzX2h3c19jb250ZXh0Lmh3c19jdHgpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21seDVod3MuaD0yMzU9c3RhdGljIGlubGluZSBib29sIG1seDVod3NfaXNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWx4NWh3cy5oLTI0OS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWx4NWh3cy5oOjI1MDogKiBtbHg1aHdzX2NvbnRleHRfb3BlbiAtIE9wZW4gYSBjb250ZXh0IHVzZWQgZm9yIGRpcmVjdCBydWxlIGluc2VydGlvblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tbHg1aHdzLmgtMjUxLSAqIHVzaW5nIGhhcmR3YXJlIHN0ZWVyaW5nLlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWx4NWh3cy5oPTI1OD1zdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWx4NWh3cy5oOjI1OTptbHg1aHdzX2NvbnRleHRfb3BlbihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWx4NWh3cy5oLTI2MC1cdFx0ICAgICBzdHJ1Y3QgbWx4NWh3c19jb250ZXh0X2F0dHIgKmF0dHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQwMQoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG1seDVod3NfY29udGV4dF9vcGVuYCBmdW5jdGlvbi4gQXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBrZXkgYXJlYXMgdG8gc2NydXRpbml6ZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaGFyZHdhcmUgY29udGV4dCDigJMgd2hhdCYjMzk7cyBiZWluZyBpbml0aWFsaXplZD8gV2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGFsbG9jYXRlZD8gSSBleHBlY3QgdG8gc2VlIHRoZSBzZXR1cCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBNZWxsYW5veCBoYXJkd2FyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVycm9yIGhhbmRsaW5nLCBvZiBjb3Vyc2U7IGhvdyByb2J1c3QgaXMgaXQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgYW5kIGhvdyBhcmUgdGhleSBtYW5hZ2VkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBlc3BlY2lhbGx5IGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQ/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHBhdHRlcm5zIGFuZCBwb3RlbnRpYWwgbGVha3MgYXMgd2VsbCwga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBjb250ZXh0IGludGVncmF0ZXMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBJIHdhbnQgdG8gc2VlIGEgY2xlYXIgc2VwYXJhdGlvbiBvZiBjb25jZXJucywgYW5kIGFuIG9idmlvdXMgYXR0ZW1wdCBhdCBjb2RlIG1vZHVsYXJpdHkgLSBjYW4gdGhlIGZ1bmN0aW9uIGJlIGVhc2lseSBleHRlbmRlZCwgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCBpbiB0aGUgZnV0dXJlPyBVbHRpbWF0ZWx5LCBJJiMzOTttIGtlZW4gdG8gZ3Jhc3AgdGhlIGNvcmUgbWVjaGFuaWNzIG9mIGhvdyB0aGUgaGFyZHdhcmUgaXMgYnJvdWdodCBvbmxpbmUgYW5kIG1hZGUgcmVhZHkgZm9yIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTg5Olx0c3RydWN0IG1seDVod3NfY29udGV4dCAqbWx4NWh3c19jb250ZXh0X29wZW4oc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gMTkwOlx0XHRcdFx0XHRcdCAgICAgc3RydWN0IG1seDVod3NfY29udGV4dF9hdHRyICphdHRyKVxuIDE5MTpcdHtcbiAxOTI6XHRcdHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eDtcbiAxOTM6XHRcdGludCByZXQ7XG4gMTk0Olx0XG4gMTk1Olx0XHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcbiAxOTY6XHRcdGlmICghY3R4KVxuIDE5NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxOTg6XHRcbiAxOTk6XHRcdGN0eC1cdTAwM2VtZGV2ID0gbWRldjtcbiAyMDA6XHRcbiAyMDE6XHRcdG11dGV4X2luaXQoXHUwMDI2Y3R4LVx1MDAzZWN0cmxfbG9jayk7XG4gMjAyOlx0XHR4YV9pbml0KFx1MDAyNmN0eC1cdTAwM2VwZWVyX2N0eF94YSk7XG4gMjAzOlx0XG4gMjA0Olx0XHRjdHgtXHUwMDNlY2FwcyA9IGt6YWxsb2Nfb2JqKCpjdHgtXHUwMDNlY2Fwcyk7XG4gMjA1Olx0XHRpZiAoIWN0eC1cdTAwM2VjYXBzKVxuIDIwNjpcdFx0XHRnb3RvIGZyZWVfY3R4O1xuIDIwNzpcdFxuIDIwODpcdFx0cmV0ID0gbWx4NWh3c19jbWRfcXVlcnlfY2FwcyhtZGV2LCBjdHgtXHUwMDNlY2Fwcyk7XG4gMjA5Olx0XHRpZiAocmV0KVxuIDIxMDpcdFx0XHRnb3RvIGZyZWVfY2FwcztcbiAyMTE6XHRcbiAyMTI6XHRcdHJldCA9IG1seDVod3NfdnBvcnRfaW5pdF92cG9ydHMoY3R4KTtcbiAyMTM6XHRcdGlmIChyZXQpXG4gMjE0Olx0XHRcdGdvdG8gZnJlZV9jYXBzO1xuIDIxNTpcdFxuIDIxNjpcdFx0cmV0ID0gaHdzX2NvbnRleHRfaW5pdF9od3MoY3R4LCBhdHRyKTtcbiAyMTc6XHRcdGlmIChyZXQpXG4gMjE4Olx0XHRcdGdvdG8gdW5pbml0X3Zwb3J0cztcbiAyMTk6XHRcbiAyMjA6XHRcdG1seDVod3NfZGVidWdfaW5pdF9kdW1wKGN0eCk7XG4gMjIxOlx0XG4gMjIyOlx0XHRyZXR1cm4gY3R4O1xuIDIyMzpcdFxuIDIyNDpcdHVuaW5pdF92cG9ydHM6XG4gMjI1Olx0XHRtbHg1aHdzX3Zwb3J0X3VuaW5pdF92cG9ydHMoY3R4KTtcbiAyMjY6XHRmcmVlX2NhcHM6XG4gMjI3Olx0XHRrZnJlZShjdHgtXHUwMDNlY2Fwcyk7XG4gMjI4Olx0ZnJlZV9jdHg6XG4gMjI5Olx0XHR4YV9kZXN0cm95KFx1MDAyNmN0eC1cdTAwM2VwZWVyX2N0eF94YSk7XG4gMjMwOlx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmN0eC1cdTAwM2VjdHJsX2xvY2spO1xuIDIzMTpcdFx0a2ZyZWUoY3R4KTtcbiAyMzI6XHRcdHJldHVybiBOVUxMO1xuIDIzMzpcdH1cbiAyMzQ6XHRcbiAyMzU6XHRpbnQgbWx4NWh3c19jb250ZXh0X2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiAyMzY6XHR7XG4gMjM3Olx0XHRtbHg1aHdzX2RlYnVnX3VuaW5pdF9kdW1wKGN0eCk7XG4gMjM4Olx0XHRod3NfY29udGV4dF91bmluaXRfaHdzKGN0eCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzkzCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCBhIHBvdGVudGlhbCBpc3N1ZS4gSXQgc2VlbXMgbGlrZSBpZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscywgdGhlIGBjdHhgIHN0cnVjdCBpcyBpbW1lZGlhdGVseSBmcmVlZC4gVGhlIGJ1ZyBoZXJlIGlzIHRoYXQgYGN0eC0mZ3Q7cXVldWVzYCBnZXRzIGluY3JlbWVudGVkICpiZWZvcmUqIHRoZSBjaGVjayBhbmQgcG90ZW50aWFsIGZyZWUuIEhvd2V2ZXIsIGluIHRoaXMgc3BlY2lmaWMgY2FzZSBpdCBkb2VzbiYjMzk7dCBtYXR0ZXIgZm9yIGBjdHhgIGl0c2VsZiBiZWNhdXNlIGl0IGdldHMgZnJlZWQgaW1tZWRpYXRlbHkuCgpCdXQsIGEgcmVkIGZsYWcgcG9wcGVkIHVwLiBXaGF0IGhhcHBlbnMgaWYgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgZmFpbHMgbGF0ZXIgb24/IFNwZWNpZmljYWxseSwgbGV0JiMzOTtzIHNheSBpdCBmYWlscyB3aXRoaW4gYG1seDVod3Nfc2VuZF9xdWV1ZV9vcGVuYC4gSWYgdGhhdCBoYXBwZW5zLCB0aGUgY29kZSBmbG93IGxlYWRzIHRvIGBjbG9zZV9zZW5kX3F1ZXVlc2AuIFdpdGhpbiBgY2xvc2Vfc2VuZF9xdWV1ZXNgLCB3ZSYjMzk7cmUgY2FsbGluZyBgX19od3Nfc2VuZF9xdWV1ZXNfY2xvc2UoY3R4LCBpKTtgLCBhbmQgKnRoZW4qIHdlIGNhbGwgYGZyZWVfYndjX2xvY2tzYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgaHdzX3NlbmRfcXVldWVzX2J3Y19sb2Nrc19kZXN0cm95KGN0eClgLiBJIG5lZWQgdG8gZGlnIGludG8gYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveWAgbm93IGJlY2F1c2UgaXQmIzM5O3MgcG9zc2libGUgdGhhdCBgY3R4YCBpcyBub3QgdmFsaWQgYXQgdGhpcyBwb2ludCEgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBiZWVuIGluaXRpYWxpemVkIGNvcnJlY3RseSBhbmQgaGFzbiYjMzk7dCBiZWVuIGNvcnJ1cHRlZC4gSSBuZWVkIHRvIGtub3cgd2hhdCBoYXBwZW5zIGlmIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIGZhaWxzICphZnRlciogYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgaGFzIHN1Y2NlZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA5OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYndjX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbjExMDA6XHRcdFx0bXV0ZXhfZGVzdHJveShcdTAwMjZjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3NbaV0pO1xuMTEwMTpcdFx0XHRsb2NrZGVwX3VucmVnaXN0ZXJfa2V5KGN0eC1cdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzICYjNDM7IGkpO1xuMTEwMjpcdFx0fVxuMTEwMzpcdFxuMTEwNDpcdFx0a2ZyZWUoY3R4LVx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMpO1xuMTEwNTpcdFx0a2ZyZWUoY3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzKTtcbjExMDY6XHR9XG4xMTA3Olx0XG4xMTA4Olx0dm9pZCBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbjExMDk6XHR7XG4xMTEwOlx0XHRod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3koY3R4KTtcbjExMTE6XHRcdF9faHdzX3NlbmRfcXVldWVzX2Nsb3NlKGN0eCwgY3R4LVx1MDAzZXF1ZXVlcyk7XG4xMTEyOlx0XHRrZnJlZShjdHgtXHUwMDNlc2VuZF9xdWV1ZSk7XG4xMTEzOlx0fVxuMTExNDpcdFxuMTExNTpcdHN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbjExMTY6XHR7XG4xMTE3Olx0XHQvKiBOdW1iZXIgb2YgQldDIHF1ZXVlcyBpcyBlcXVhbCB0byBudW1iZXIgb2YgdGhlIHVzdWFsIEhXUyBxdWV1ZXMgKi9cbjExMTg6XHRcdGludCBid2NfcXVldWVzID0gY3R4LVx1MDAzZXF1ZXVlcyAtIDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzI4CgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveWAgYW5kIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcgcG9wcyB1cC4gSXQgc2VlbXMgdG8gYmUgZGVjcmVtZW50aW5nIGBjdHgtJmd0O3F1ZXVlc2Agd2l0aCBgYndjX3F1ZXVlcyA9IGN0eC0mZ3Q7cXVldWVzIC0gMTtgIC4gKlRoYXQqIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5JiMzOTtyZSBzdWJ0cmFjdGluZyBvbmUgaGVyZS4gSXMgaXQgYSBwb3RlbnRpYWwgb2ZmLWJ5LW9uZSBlcnJvcj8gQW0gSSBtaXN1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0PyBJcyB0aGlzIGludGVuZGVkIGJlaGF2aW9yIGZvciBzb21lIHN1YnRsZSByZWFzb24gcmVsYXRlZCB0byB0aGUgcXVldWluZyBtZWNoYW5pc20gb3IgYmFuZHdpZHRoIGNvbnRyb2wgdGhhdCBJIG5lZWQgdG8gcmVjYWxsPyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gdmVyaWZ5IHRoaXMgbG9naWMgY2FyZWZ1bGx5IHRvIG1ha2Ugc3VyZSBpdCBpcyBjb3JyZWN0LCBzYWZlLCBhbmQgZWZmaWNpZW50LiBMZXQmIzM5O3MgZGVsdmUgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTA6XHRcbjEwOTE6XHRzdGF0aWMgdm9pZCBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3koc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuMTA5MjpcdHtcbjEwOTM6XHRcdGludCBid2NfcXVldWVzID0gbWx4NWh3c19id2NfcXVldWVzKGN0eCk7XG4xMDk0Olx0XHRpbnQgaTtcbjEwOTU6XHRcbjEwOTY6XHRcdGlmICghbWx4NWh3c19jb250ZXh0X2J3Y19zdXBwb3J0ZWQoY3R4KSlcbjEwOTc6XHRcdFx0cmV0dXJuO1xuMTA5ODpcdFxuMTA5OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYndjX3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbjExMDA6XHRcdFx0bXV0ZXhfZGVzdHJveShcdTAwMjZjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3NbaV0pO1xuMTEwMTpcdFx0XHRsb2NrZGVwX3VucmVnaXN0ZXJfa2V5KGN0eC1cdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzICYjNDM7IGkpO1xuMTEwMjpcdFx0fVxuMTEwMzpcdFxuMTEwNDpcdFx0a2ZyZWUoY3R4LVx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMpO1xuMTEwNTpcdFx0a2ZyZWUoY3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzKTtcbjExMDY6XHR9XG4xMTA3Olx0XG4xMTA4Olx0dm9pZCBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbjExMDk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTUxCgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgbWx4NWh3c19id2NfcXVldWVzKGN0eCkgRnVuY3Rpb24gQ2FsbCoqCgpBbHJpZ2h0LCBzbyBgbWx4NWh3c19id2NfcXVldWVzKGN0eClgIGlzIGJlaW5nIGludm9rZWQgaGVyZS4gSW50ZXJlc3RpbmcuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gaW1tZWRpYXRlbHkgZGlzc2VjdCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIGNvbnRleHQsIHNwZWNpZmljYWxseSB3aGF0IGl0JiMzOTtzIGNvbnRyaWJ1dGluZyB0byB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIFRoZSBuYW1lIGl0c2VsZiwgJiMzNDtid2MsJiMzNDsgbGlrZWx5IGhpbnRzIGF0IGJhbmR3aWR0aCBjb250cm9sIG9yIHNvbWUga2luZCBvZiByZXNvdXJjZSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gcXVldWVzLCBnaXZlbiB0aGUgJiMzNDtxdWV1ZXMmIzM0OyBzdWZmaXguIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24sIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMgb24gYGN0eGAgYW5kIGFueSByZWxhdGVkIHN0cnVjdHVyZXMsIGFuZCB1bmRlcnN0YW5kIHRoZSBhbGdvcml0aG1zIHVzZWQgZm9yIGJhbmR3aWR0aCBhbGxvY2F0aW9uIG9yIHF1ZXVlIG1hbmFnZW1lbnQuIElzIGl0IHVzaW5nIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvZiB0aGUgTWVsbGFub3ggYWRhcHRlcj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgSSBzaG91bGQgYmUgYXdhcmUgb2YsIGxpa2UgbG9jayBjb250ZW50aW9uIG9yIGluZWZmaWNpZW50IGRhdGEgc3RydWN0dXJlcz8gVGhlIGBjdHhgIHBhcmFtZXRlciBpcyB0aGUgbmV4dCBjcnVjaWFsIHBpZWNlLiBJJiMzOTtsbCBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBuYXR1cmUgb2YgdGhlIGNvbnRleHQsIGFuZCB3aGF0IGRhdGEgaXQmIzM5O3MgaG9sZGluZyB0byB0cnVseSB1bmRlcnN0YW5kIGhvdyBpdCBpcyBiZWluZyB1c2VkIGJ5IHRoZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWx4NWh3c19id2NfcXVldWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYz02PXN0YXRpYyB1MTYgaHdzX2J3Y19nZW5fcXVldWVfaWR4KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTgtXHQvKiBhc3NpZ24gcmFuZG9tIHF1ZXVlICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jOjk6XHRyZXR1cm4gZ2V0X3JhbmRvbV91OCgpICUgbWx4NWh3c19id2NfcXVldWVzKGN0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTEwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jPTI1PXN0YXRpYyB2b2lkIGh3c19id2NfbG9ja19hbGxfcXVldWVzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjYte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYzoyNzpcdHUxNiBid2NfcXVldWVzID0gbWx4NWh3c19id2NfcXVldWVzKGN0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTI4LVx0c3RydWN0IG11dGV4ICpxdWV1ZV9sb2NrOyAvKiBQcm90ZWN0IHRoZSBxdWV1ZSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM9Mzc9c3RhdGljIHZvaWQgaHdzX2J3Y191bmxvY2tfYWxsX3F1ZXVlcyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTM4LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM6Mzk6XHR1MTYgYndjX3F1ZXVlcyA9IG1seDVod3NfYndjX3F1ZXVlcyhjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYy00MC1cdHN0cnVjdCBtdXRleCAqcXVldWVfbG9jazsgLyogUHJvdGVjdCB0aGUgcXVldWUgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jPTY5PWh3c19id2NfbWF0Y2hlcl9tb3ZlX2FsbF9zaW1wbGUoc3RydWN0IG1seDVod3NfYndjX21hdGNoZXIgKmJ3Y19tYXRjaGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtNzMtXHRpbnQgZHJhaW5fZXJyb3IgPSAwLCBtb3ZlX2Vycm9yID0gMCwgcG9sbF9lcnJvciA9IDA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jOjc0Olx0dTE2IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtNzUtXHRzdHJ1Y3QgbWx4NWh3c19ydWxlX2F0dHIgcnVsZV9hdHRyO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM9MjI3PWludCBtbHg1aHdzX2J3Y19tYXRjaGVyX2NyZWF0ZV9zaW1wbGUoc3RydWN0IG1seDVod3NfYndjX21hdGNoZXIgKmJ3Y19tYXRjaGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjM1LVx0c3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4ID0gdGFibGUtXHUwMDNlY3R4O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYzoyMzY6XHR1MTYgYndjX3F1ZXVlcyA9IG1seDVod3NfYndjX3F1ZXVlcyhjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYy0yMzctXHRzdHJ1Y3QgbWx4NWh3c19tYXRjaGVyX2F0dHIgYXR0ciA9IHswfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5oPTk3PWludCBtbHg1aHdzX2J3Y19xdWV1ZV9wb2xsKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5oLTEwMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmg6MTAyOnN0YXRpYyBpbmxpbmUgdTE2IG1seDVod3NfYndjX3F1ZXVlcyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5oLTEwMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuaD0xMTI9c3RhdGljIGlubGluZSB1MTYgbWx4NWh3c19id2NfZ2V0X3F1ZXVlX2lkKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCwgdTE2IGlkeClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmgtMTEzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmg6MTE0Olx0cmV0dXJuIGlkeCAmIzQzOyBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmgtMTE1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Y19jb21wbGV4LmM9OTQ4PWh3c19id2NfbWF0Y2hlcl9pbml0X21vdmUoc3RydWN0IG1seDVod3NfYndjX21hdGNoZXIgKmJ3Y19tYXRjaGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYy05NTAtXHRzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHggPSBid2NfbWF0Y2hlci1cdTAwM2VtYXRjaGVyLVx1MDAzZXRibC1cdTAwM2VjdHg7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Y19jb21wbGV4LmM6OTUxOlx0dTE2IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYy05NTItXHRzdHJ1Y3QgbWx4NWh3c19id2NfcnVsZSAqYndjX3J1bGU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2NfY29tcGxleC5jPTk2OT1pbnQgbWx4NWh3c19id2NfbWF0Y2hlcl9jb21wbGV4X21vdmUoc3RydWN0IG1seDVod3NfYndjX21hdGNoZXIgKmJ3Y19tYXRjaGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYy05NzItXHRzdHJ1Y3QgbWx4NWh3c19tYXRjaGVyICptYXRjaGVyID0gYndjX21hdGNoZXItXHUwMDNlbWF0Y2hlcjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYzo5NzM6XHR1MTYgYndjX3F1ZXVlcyA9IG1seDVod3NfYndjX3F1ZXVlcyhjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2NfY29tcGxleC5jLTk3NC1cdHN0cnVjdCBtbHg1aHdzX2J3Y19ydWxlICp0bXBfYndjX3J1bGU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM9MTA5MT1zdGF0aWMgdm9pZCBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3koc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTA5Mi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYzoxMDkzOlx0aW50IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTEwOTQtXHRpbnQgaTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyODAKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIEJhbmR3aWR0aCBDb250cm9sIFF1ZXVlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGJhbmR3aWR0aCBjb250cm9sIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBNZWxsYW5veCBoYXJkd2FyZSBjb250ZXh0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgdG8gYG1seDVod3NfYndjX3F1ZXVlc2AsIGxpa2VseSBkZWZpbmVkIGluIGBid2MuaGAuIFRoaXMgc3VnZ2VzdHMgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJhbCBkZWZpbml0aW9ucywgY29uc3RhbnRzLCBhbmQgcG90ZW50aWFsbHksIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgZ292ZXJuIHF1ZXVlLWxldmVsIGJhbmR3aWR0aCBhbGxvY2F0aW9uIGFuZCBlbmZvcmNlbWVudCB3aXRoaW4gdGhlIE1MWDUgaGFyZHdhcmUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgdXN1YWxseSByZXNpZGVzLCBlbmFibGluZyB0cmFmZmljIHNoYXBpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRvIHNlZSBkZXRhaWxzIHJlbGF0ZWQgdG8gdGhlIHF1ZXVlIGlkZW50aWZpZXJzLCByYXRlIGxpbWl0aW5nIHBhcmFtZXRlcnMgKGUuZy4sIENJUiwgUElSLCBidXJzdCBzaXplcyksIGFuZCB0aGUgbWVjaGFuaXNtcyBmb3IgZW5mb3JjaW5nIHRoZXNlIGxpbWl0cyB3aXRoaW4gdGhlIGhhcmR3YXJlJiMzOTtzIGludGVybmFsIHNjaGVkdWxpbmcuIEdvaW5nIHRvIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoYXQgc3BlY2lmaWMgZWxlbWVudCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAyOlx0c3RhdGljIGlubGluZSB1MTYgbWx4NWh3c19id2NfcXVldWVzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiAxMDM6XHR7XG4gMTA0Olx0XHQvKiBCZXNpZGVzIHRoZSBjb250cm9sIHF1ZXVlLCBoYWxmIG9mIHRoZSBxdWV1ZXMgYXJlXG4gMTA1Olx0XHQgKiByZWd1bGFyIEhXUyBxdWV1ZXMsIGFuZCB0aGUgb3RoZXIgaGFsZiBhcmUgQldDIHF1ZXVlcy5cbiAxMDY6XHRcdCAqL1xuIDEwNzpcdFx0aWYgKG1seDVod3NfY29udGV4dF9id2Nfc3VwcG9ydGVkKGN0eCkpXG4gMTA4Olx0XHRcdHJldHVybiAoY3R4LVx1MDAzZXF1ZXVlcyAtIDEpIC8gMjtcbiAxMDk6XHRcdHJldHVybiAwO1xuIDExMDpcdH1cbiAxMTE6XHRcbiAxMTI6XHRzdGF0aWMgaW5saW5lIHUxNiBtbHg1aHdzX2J3Y19nZXRfcXVldWVfaWQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LCB1MTYgaWR4KVxuIDExMzpcdHtcbiAxMTQ6XHRcdHJldHVybiBpZHggJiM0MzsgbWx4NWh3c19id2NfcXVldWVzKGN0eCk7XG4gMTE1Olx0fVxuIDExNjpcdFxuIDExNzpcdCNlbmRpZiAvKiBIV1NfQldDX0hfICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODUxCgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogNjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWx4NWh3cyBRdWV1ZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IGBtbHg1aHdzX2J3Y19xdWV1ZXNgIGNhbGN1bGF0aW5nIGAoY3R4LSZndDtxdWV1ZXMgLSAxKSAvIDJgLiBUaGVuLCBJIHN0YXJ0ZWQgZGlnZ2luZyBpbnRvIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBzY2VuYXJpb3MsIHNwZWNpZmljYWxseSBpZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscy4gSSBzZWUgdGhhdCBpZiB0aGlzIGZ1bmN0aW9uIGZhaWxzLCBgY3R4LSZndDtxdWV1ZXNgIHdhcyBhbHJlYWR5IGluY3JlbWVudGVkIGJ5IGBid2NfcXVldWVzYCDigJMgd2hpY2ggaXMgZXF1YWwgdG8gdGhlIG9yaWdpbmFsIGBjdHgtJmd0O3F1ZXVlcyAtIDFgLiBTbywgaWYgYGN0eC0mZ3Q7cXVldWVzYCBzdGFydHMgYXQgMywgYGJ3Y19xdWV1ZXNgIGJlY29tZXMgMiwgYW5kIGBjdHgtJmd0O3F1ZXVlc2AgaXMgdXBkYXRlZCB0byA1LgoKTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIElmIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGZhaWxzICphZnRlciogdGhpcyBpbmNyZW1lbnQsIHRoZSByZXR1cm4gdmFsdWUgYGVycmAgaXMgcGFzc2VkIGRpcmVjdGx5IHVwIHRvIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gLiBDcnVjaWFsbHksIGl0IGJ5cGFzc2VzIHRoZSBjbGVhbnVwIHN0ZXBzOiBgZnJlZV9id2NfbG9ja3NgIGFuZCBgY2xvc2Vfc2VuZF9xdWV1ZXNgLiBUaGlzIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgY29uY2VybiwgaS5lLiwgd2hldGhlciB0aGUgbG9ja3Mgd2VyZSBwcm9wZXJseSBmcmVlZC4KCkhvd2V2ZXIsIEkgcmVtZW1iZXJlZCB0aGF0IGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgICpkb2VzKiBwZXJmb3JtIGl0cyBvd24gY2xlYW51cCBvbiBmYWlsdXJlLCBzcGVjaWZpY2FsbHkgZnJlZWluZyBgY3R4LSZndDtid2Nfc2VuZF9xdWV1ZV9sb2Nrc2AuIFNvLCBpdCBmcmVlcyB1cCB0aGF0IG1lbW9yeSB0aGF0IGl0IGFsbG9jYXRlZC4gVGhlIGlzc3VlIGlzIHRoYXQgdGhlIGBjdHgtJmd0O3F1ZXVlc2AgdmFsdWUgcmVtYWlucyBpbmNyZW1lbnRlZCwgZXZlbiB0aG91Z2ggdGhlIGZ1bmN0aW9uIGZhaWxzIQoKQnV0IHRoZW4sIEkgdHJhY2VkIHRoZSBmYWlsdXJlIHBhdGggZnVydGhlci4gVGhlIGVycm9yIGNvZGUsIGxpa2VseSBgLUVOT01FTWAgaW4gdGhpcyBjYXNlLCBidWJibGVzIHVwIGZyb20gYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgdG8gYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgYW5kIHRoZW4gdG8gYGh3c19jb250ZXh0X2luaXRfaHdzYC4gRnJvbSB0aGVyZSwgdGhlIGNvbnRyb2wgZmxvd3MgdGhyb3VnaCBgcG9vbHNfdW5pbml0YCwgY2FsbGluZyBgaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0KGN0eClgLiBGaW5hbGx5LCBgbWx4NWh3c19jb250ZXh0X29wZW5gIGVuZHMgd2l0aCBgdW5pbml0X3Zwb3J0c2AsIHRoZW4gYGZyZWVfY2Fwc2AsIGFuZCBmaW5hbGx5IGBmcmVlX2N0eGAuCgpBaGEhIGBjdHhgIGlzIGZyZWVkIGluIGBmcmVlX2N0eGAhIFNvLCB0aGUgZmFjdCB0aGF0IGBjdHgtJmd0O3F1ZXVlc2AgbWlnaHQgaGF2ZSBhbiBpbmNvcnJlY3QgdmFsdWUgZHVlIHRvIHRoZSBmYWlsZWQgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgZG9lc24mIzM5O3QgYWN0dWFsbHkgbWF0dGVyIGJlY2F1c2UgdGhlIGVudGlyZSBgY3R4YCBpcyBkZWFsbG9jYXRlZC4gSXQmIzM5O3MgYSBiaXQgbWVzc3ksIGJ1dCB1bHRpbWF0ZWx5IHNhZmUgZHVlIHRvIHRoZSBjb21wbGV0ZSB0ZWFyZG93bi4KCkkgbWFkZSBzdXJlIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGlzIG9ubHkgY2FsbGVkIGluIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gLCBhbmQgdGhlIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uY2UuIFRoZSBpbmNyZW1lbnQgaW4gYGN0eC0mZ3Q7cXVldWVzYCBpcyBqdXN0IHRyYW5zaWVudC4gSXQgYmVjb21lcyBpcnJlbGV2YW50IGJlY2F1c2UgdGhlIGNvbnRleHQgaXRzZWxmIGlzIGRlc3Ryb3llZC4gQ2FzZSBjbG9zZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jPTEzND1zdGF0aWMgaW50IGh3c19jb250ZXh0X2luaXRfaHdzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0xNTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYzoxNTc6XHRyZXQgPSBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oY3R4LCBhdHRyLVx1MDAzZXF1ZXVlcywgYXR0ci1cdTAwM2VxdWV1ZV9zaXplKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE1OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM9MTExNT1zdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTE0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjExNTA6aW50IG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbihzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTUxLVx0XHRcdCAgICAgdTE2IHF1ZXVlcyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuaD0xOTM9dm9pZCBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuaC0xOTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuaDoxOTU6aW50IG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbihzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuaC0xOTYtXHRcdFx0ICAgICB1MTYgcXVldWVzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjc2OQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDEzOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBMZWFrIGluIHRoZSBNTFg1IEhXUyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIGZ1bmN0aW9uLiBJdCBzZWVtcyBpdCYjMzk7cyBvbmx5IGNhbGxlZCBmcm9tIGBod3NfY29udGV4dF9pbml0X2h3c2AsIGFuZCBpZiBpdCBmYWlscywgdGhlIGNvbnRleHQgKGBjdHhgKSBpcyBpbW1lZGlhdGVseSBmcmVlZC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCB3aGF0IGlmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSAqYWZ0ZXIqIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIHN1Y2NlZWRzLCBhbmQgdGhlbiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBmYWlscyBsYXRlciBvbj8gRm9yIGV4YW1wbGUsIHdoYXQgaWYgYGt6YWxsb2Nfb2Jqc2AgZmFpbHMgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBgY3R4LSZndDtzZW5kX3F1ZXVlYD8KCkluIHRoaXMgY2FzZSwgaXQganVtcHMgdG8gYGZyZWVfYndjX2xvY2tzYCwgd2hpY2ggY2FsbHMgYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveShjdHgpYC4gSW5zaWRlIHRoYXQsIGBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KWAgaXMgY2FsbGVkLiBUaGlzIGZ1bmN0aW9uIHVzZXMgYGN0eC0mZ3Q7cXVldWVzYCB0byBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBCV0MgcXVldWVzLiBNeSBjb25jZXJuIGlzIHRoYXQgYGN0eC0mZ3Q7cXVldWVzYCBpcyAqaW5jcmVtZW50ZWQqIGluIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgLgoKTGV0JiMzOTtzIHRyYWNlIGl0OiBgY3R4LSZndDtxdWV1ZXNgIGluaXRpYWxseSBnZXRzIHNldCB0byBgcXVldWVzICYjNDM7IDFgICh3aGVyZSBgcXVldWVzYCBpcyB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gKS4gVGhlbiwgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgaXMgY2FsbGVkLCBhbmQgaW5zaWRlIGl0LCBgY3R4LSZndDtxdWV1ZXNgIGJlY29tZXMgYHF1ZXVlcyAmIzQzOyAxICYjNDM7IHF1ZXVlc2AgKG9yIGAyICogcXVldWVzICYjNDM7IDFgKS4gVGhpcyBpcyB0aGVuIHVzZWQgaW4gYG1seDVod3NfYndjX3F1ZXVlc2Agd2hpY2ggY2FsY3VsYXRlcyBgKDIgKiBxdWV1ZXMgJiM0MzsgMSAtIDEpIC8gMiA9IHF1ZXVlc2AuIEl0IG1ha2VzIHNlbnNlLCBhcyB0aGUgbG9ja3MgYXJlIGRlc3Ryb3llZCwgYW5kIG1lbW9yeSBmcmVlZC4gSXQgc2hvdWxkIGJlIGNvcnJlY3QuIFRoZSBgY3R4YCBnZXRzIGZyZWVkLCBidXQgbm8gbWVtb3J5IGxlYWtzIHdlcmUgZm91bmQuCgpTbywgd2hlcmUgd2FzIHRoZSBidWcsIHRoZW4/IEdvaW5nIGJhY2sgdG8gYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAsIEkgc2VlIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGFib3V0IHRoZSBhbGxvY2F0aW9uIG9mIGBjdHgtJmd0O2J3Y19zZW5kX3F1ZXVlX2xvY2tzYC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgbG9va2VkIGxpa2UgdGhpczogYGN0eC0mZ3Q7cXVldWVzICYjNDM7PSBid2NfcXVldWVzO2AgKmJlZm9yZSogYWxsb2NhdGluZyBgY3R4LSZndDtid2Nfc2VuZF9xdWV1ZV9sb2Nrc2AuIElmIGBremFsbG9jX29ianNgIGZhaWxlZCwgdGhlbiBgLUVOT01FTWAgd291bGQgYmUgcmV0dXJuZWQuIENyaXRpY2FsbHksIGBjdHgtJmd0O3F1ZXVlc2Agd291bGQgaGF2ZSBiZWVuICppbmNyZW1lbnRlZCogYmVmb3JlIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gRXZlbiBpZiBgY3R4YCBpcyBmcmVlZCwgdGhlIHZhbHVlIG9mIGBjdHgtJmd0O3F1ZXVlc2Agc2hvdWxkIGhhdmUgYmVlbiBjb3JyZWN0LCBhbmQgdGhlcmUgc2hvdWxkIGJlIG5vIG1lbW9yeSBsZWFrLgoKU28sIGxldCYjMzk7cyB0cmFjayB0aGUgZXJyb3IgcGF0aCBiYWNrIHRvIGBod3NfY29udGV4dF9pbml0X2h3c2AuIElmIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIGZhaWxzLCB0aGUgY29kZSBqdW1wcyB0byBgcG9vbHNfdW5pbml0YCwgY2FsbGluZyBgaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0KGN0eClgLiBUaGUgcXVlc3Rpb24gaXM6IERvZXMgdGhpcyBmdW5jdGlvbiAqdXNlKiBgY3R4LSZndDtxdWV1ZXNgPyBJZiBpdCBkb2VzbiYjMzk7dCwgd2UmIzM5O3JlIHByb2JhYmx5IHNhZmUuIEkgbmVlZCB0byBleGFtaW5lIGBod3NfY29udGV4dF9wb29sc191bmluaXRgIGNhcmVmdWxseSB0byBlbnN1cmUgaXQmIzM5O3Mgbm90IHVzaW5nIHRoZSBwb3RlbnRpYWxseSBpbmNvcnJlY3QgYGN0eC0mZ3Q7cXVldWVzYCB2YWx1ZSBpbiBpdHMgZXJyb3IgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHdzX2NvbnRleHRfcG9vbHNfdW5pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9MjE9c3RhdGljIGludCBod3NfY29udGV4dF9wb29sc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy01Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjU3OnN0YXRpYyB2b2lkIGh3c19jb250ZXh0X3Bvb2xzX3VuaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy01OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9MTM0PXN0YXRpYyBpbnQgaHdzX2NvbnRleHRfaW5pdF9od3Moc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE3MS1wb29sc191bmluaXQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYzoxNzI6XHRod3NfY29udGV4dF9wb29sc191bmluaXQoY3R4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE3My11bmluaXRfcGQ6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9MTc4PXN0YXRpYyB2b2lkIGh3c19jb250ZXh0X3VuaW5pdF9od3Moc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE4NC1cdG1seDVod3Nfc2VuZF9xdWV1ZXNfY2xvc2UoY3R4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjE4NTpcdGh3c19jb250ZXh0X3Bvb2xzX3VuaW5pdChjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMTg2LVx0aHdzX2NvbnRleHRfdW5pbml0X3BkKGN0eCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDU3CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0YCB0aGluZy4gSnVzdCBzZWVpbmcgdGhlIG5hbWUgc3BhcmtzIHNvbWUgaW1tZWRpYXRlIHF1ZXN0aW9ucyBpbiBteSBtaW5kLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZmllbGQuICYjMzQ7VW5pbml0JiMzNDsgc3VnZ2VzdHMgYSBzdGF0ZSBvZiBpbml0aWFsaXphdGlvbiwgb3IgbGFjayB0aGVyZW9mLiBDb25zaWRlcmluZyBteSBleHBlcnRpc2UsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb250ZXh0IHBvb2xzIHdpdGhpbiBzb21lIGhhcmR3YXJlIG9yIHN5c3RlbSBjb250ZXh0LCBhbmQgdGhlaXIgc3RhdHVzIGJlZm9yZSBpbml0aWFsaXphdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nLiBXaGF0IGtpbmQgb2YgcG9vbHMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgaGVyZT8gQXJlIHRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIG9yIG1vcmUgYWJzdHJhY3Q/IEFyZSB0aGV5IHVzZWQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLCB0aHJlYWQgbWFuYWdlbWVudCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBvZiB0aGVzZSBjb250ZXh0IHBvb2xzIGFuZCB3aHkgd2UgYXJlIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSB1bmluaXRpYWxpemVkIHN0YXRlLiBBcmUgd2UgY29uY2VybmVkIGFib3V0IHRoZSBjb25zZXF1ZW5jZXMgb2YgdXNpbmcgdGhlbSBiZWZvcmUgdGhleSBhcmUgcHJvcGVybHkgc2V0IHVwPyBJJiMzOTttIGFudGljaXBhdGluZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZGF0YSBjb3JydXB0aW9uLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHNpbXBseSB1bmV4cGVjdGVkIGJlaGF2aW9yIGlmIHRoaXMgc3RhdGUgaXNuJiMzOTt0IG1hbmFnZWQgY29ycmVjdGx5LiBNeSBicmFpbiBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIGZvcm11bGF0ZSBoeXBvdGhlc2VzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRlc2lnbiBjaG9pY2VzIGFuZCB0aGUgcG90ZW50aWFsIHBpdGZhbGxzIHRoYXQgdGhpcyAmIzM0O3VuaW5pdCYjMzQ7IHN0YXRlIG1pZ2h0IHJlcHJlc2VudC4gTm93LCBsZXQmIzM5O3MgYWN0dWFsbHkgcmVhZCBpdCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTc6XHRzdGF0aWMgdm9pZCBod3NfY29udGV4dF9wb29sc191bmluaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuICA1ODpcdHtcbiAgNTk6XHRcdGlmIChjdHgtXHUwMDNlc3RjX3Bvb2wpXG4gIDYwOlx0XHRcdG1seDVod3NfcG9vbF9kZXN0cm95KGN0eC1cdTAwM2VzdGNfcG9vbCk7XG4gIDYxOlx0XG4gIDYyOlx0XHRtbHg1aHdzX2RlZmluZXJfdW5pbml0X2NhY2hlKGN0eC1cdTAwM2VkZWZpbmVyX2NhY2hlKTtcbiAgNjM6XHRcdG1seDVod3NfcGF0X3VuaW5pdF9wYXR0ZXJuX2NhY2hlKGN0eC1cdTAwM2VwYXR0ZXJuX2NhY2hlKTtcbiAgNjQ6XHR9XG4gIDY1Olx0XG4gIDY2Olx0c3RhdGljIGludCBod3NfY29udGV4dF9pbml0X3BkKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiAgNjc6XHR7XG4gIDY4Olx0XHRpbnQgcmV0ID0gMDtcbiAgNjk6XHRcbiAgNzA6XHRcdHJldCA9IG1seDVfY29yZV9hbGxvY19wZChjdHgtXHUwMDNlbWRldiwgXHUwMDI2Y3R4LVx1MDAzZXBkX251bSk7XG4gIDcxOlx0XHRpZiAocmV0KSB7XG4gIDcyOlx0XHRcdG1seDVod3NfZXJyKGN0eCwgXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFBEXFxuXCYjMzQ7KTtcbiAgNzM6XHRcdFx0cmV0dXJuIHJldDtcbiAgNzQ6XHRcdH1cbiAgNzU6XHRcbiAgNzY6XHRcdGN0eC1cdTAwM2VmbGFncyB8PSBNTFg1SFdTX0NPTlRFWFRfRkxBR19QUklWQVRFX1BEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDEzMAoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqVGhpbmtpbmcgVGhyb3VnaCBDb250ZXh0IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuLi4gYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBubywgaXQgZGVmaW5pdGVseSAqZG9lc24mIzM5O3QqIGxvb2sgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBgY3R4LSZndDtxdWV1ZXNgLiBUaGF0JiMzOTtzIGdvb2QsIGtlZXBzIHRoaW5ncyBjbGVhbmVyLCBJIHN1cHBvc2UuIEhtbSwgd2hlcmUgKmlzKiBpdCBoYW5kbGluZyB0aGUgY2xlYW51cCBvZiByZXNvdXJjZXMsIHRoZW4/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gcmVtZW1iZXIgaG93IHRoZSBjb250ZXh0IHVuaW5pdGlhbGl6YXRpb24gaGFwcGVucy4uLiBBaCwgeWVzLCB3aGF0IGFib3V0IGBod3NfY29udGV4dF91bmluaXRfcGRgPyBUaGF0IHJpbmdzIGEgYmVsbC4gSXQmIzM5O3MgcHJvYmFibHkgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCB0aGUgYXNzb2NpYXRlZCBwcm90ZWN0aW9uIGRvbWFpbi4gTGV0IG1lIGdvIGNoZWNrIHRoYXQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NzpcdFxuICA3ODpcdFx0cmV0dXJuIDA7XG4gIDc5Olx0fVxuICA4MDpcdFxuICA4MTpcdHN0YXRpYyBpbnQgaHdzX2NvbnRleHRfdW5pbml0X3BkKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiAgODI6XHR7XG4gIDgzOlx0XHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBNTFg1SFdTX0NPTlRFWFRfRkxBR19QUklWQVRFX1BEKVxuICA4NDpcdFx0XHRtbHg1X2NvcmVfZGVhbGxvY19wZChjdHgtXHUwMDNlbWRldiwgY3R4LVx1MDAzZXBkX251bSk7XG4gIDg1Olx0XG4gIDg2Olx0XHRyZXR1cm4gMDtcbiAgODc6XHR9XG4gIDg4Olx0XG4gIDg5Olx0c3RhdGljIHZvaWQgaHdzX2NvbnRleHRfY2hlY2tfaHdzX3N1cHAoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuICA5MDpcdHtcbiAgOTE6XHRcdHN0cnVjdCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzICpjYXBzID0gY3R4LVx1MDAzZWNhcHM7XG4gIDkyOlx0XG4gIDkzOlx0XHQvKiBIV1Mgbm90IHN1cHBvcnRlZCBvbiBkZXZpY2UgLyBGVyAqL1xuICA5NDpcdFx0aWYgKCFjYXBzLVx1MDAzZXdxZV9iYXNlZF91cGRhdGUpIHtcbiAgOTU6XHRcdFx0bWx4NWh3c19lcnIoY3R4LCBcJiMzNDtSZXF1aXJlZCBIV1MgV1FFIGJhc2VkIGluc2VydGlvbiBjYXAgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4gIDk2Olx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2NjAKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQSBQb2ludCBvZiBOZWdhdGl2aXR5IEZvbGxvd2VkIGJ5IGEgUXVlc3Rpb24qKgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGEgZmxhdCAmIzM0O05vLiYjMzQ7IFRoaXMgZmVlbHMgbGlrZSBhIHJlZmxleGl2ZSByZXNwb25zZSwgYSBndXQgZmVlbGluZywgcGVyaGFwcyBzdGVtbWluZyBmcm9tIGEgcHJpb3IgbGluZSBvZiB0aG91Z2h0IG9yIGFuIGluc3RpbmN0aXZlIHJlamVjdGlvbiBvZiBzb21ldGhpbmcgaW1wbGllZCBidXQgbm90IGV4cGxpY2l0bHkgc3RhdGVkLiBUaGUgY29udGV4dCBpcyBtaXNzaW5nLCBzbyBJJiMzOTttIGZvcmNlZCB0byBhc3N1bWUgYW4gaW1wbGljaXQgcXVlc3Rpb24uCgpIb3dldmVyLCB0aGUgdGhvdWdodCBwcm9jZXNzIHF1aWNrbHkgcGl2b3RzLiBUaGUgbmVnYXRpdmUgcmVzcG9uc2UgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSB0YXJnZXRlZCBxdWVyeTogJiMzNDtXaGF0IGFib3V0IGBtbHg1aHdzX3Zwb3J0X3VuaW5pdF92cG9ydHNgPyYjMzQ7IFRoaXMgaW5kaWNhdGVzIGEgc2hpZnQgZnJvbSBhIGdlbmVyYWwgZGlzbWlzc2FsIHRvIGEgc3BlY2lmaWMgYXJlYSBvZiBjb25jZXJuLiBJdCByZXZlYWxzIGEgbGV2ZWwgb2YgdGVjaG5pY2FsIGRlcHRoLCB0YXJnZXRpbmcgYSBmdW5jdGlvbiBuYW1lIHRoYXQgaGludHMgYXQgYSBwb3RlbnRpYWwgYXJlYSBvZiBuZXR3b3JrIHZpcnR1YWxpemF0aW9uLiBJJiMzOTttIGhvbWluZyBpbiBvbiB0aGUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGBtbHg1YCBhbmQgaXRzIGhhbmRsaW5nIG9mIHZpcnR1YWwgcG9ydHMsIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaGFyZHdhcmUgb2ZmbG9hZCBvciBhIHNpbWlsYXIgcGVyZm9ybWFuY2UtY3JpdGljYWwgYXNwZWN0LiBUaGUgcXVlc3Rpb24gaXRzZWxmIGltcGxpZXMgYSBzcGVjaWZpYyBjb25jZXJuIHJlZ2FyZGluZyBob3cgdnBvcnRzIGFyZSB1bmluaXRpYWxpemVkLiBJIGFtIHRoaW5raW5nLCBJcyBpdCBhIHBvdGVudGlhbCBidWc/IEFuIG92ZXJzaWdodD8gSXMgaXQgYSBmdW5jdGlvbiB0aGF0IG5lZWRzIHNwZWNpYWwgYXR0ZW50aW9uIGluIHRoZSBjdXJyZW50IHNpdHVhdGlvbj8gV2l0aG91dCBtb3JlIGNvbnRleHQsIHRoZXNlIGFsbCBjb21lIHRvIG1pbmQgYXMgcXVlc3Rpb25zIHRvIHBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jPTE4OT1zdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICptbHg1aHdzX2NvbnRleHRfb3BlbihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0yMjQtdW5pbml0X3Zwb3J0czpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjIyNTpcdG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0cyhjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMjI2LWZyZWVfY2Fwczpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYz0yMzU9aW50IG1seDVod3NfY29udGV4dF9jbG9zZShzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMjM4LVx0aHdzX2NvbnRleHRfdW5pbml0X2h3cyhjdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM6MjM5Olx0bWx4NWh3c192cG9ydF91bmluaXRfdnBvcnRzKGN0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0yNDAtXHRrZnJlZShjdHgtXHUwMDNlY2Fwcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy92cG9ydC5jPTY9aW50IG1seDVod3NfdnBvcnRfaW5pdF92cG9ydHMoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuYy0yNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuYzoyNzp2b2lkIG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3Zwb3J0LmMtMjgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuaD03PWludCBtbHg1aHdzX3Zwb3J0X2luaXRfdnBvcnRzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3Zwb3J0LmgtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuaDo5OnZvaWQgbWx4NWh3c192cG9ydF91bmluaXRfdnBvcnRzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3Zwb3J0LmgtMTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzI1CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzIGBtbHg1aHdzX3Zwb3J0X3VuaW5pdF92cG9ydHNgIGZ1bmN0aW9uLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWNvbnN0cnVjdGluZyBgbWx4NWh3c192cG9ydF91bmluaXRfdnBvcnRzYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0c2AgZnVuY3Rpb24uIEkmIzM5O20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB3aGF0ICYjMzQ7dnBvcnQmIzM0OyBpbXBsaWVzIGluIHRoaXMgY29udGV4dCDigJMgVmlydHVhbCBQb3J0LCBvYnZpb3VzbHksIGJ1dCB3aGF0IGxldmVsIG9mIGFic3RyYWN0aW9uIGFyZSB3ZSBkZWFsaW5nIHdpdGg/IElzIHRoaXMgcmVsYXRlZCB0byB0aGUgcGh5c2ljYWwgcG9ydCwgb3IgbW9yZSBvZiBhIGxvZ2ljYWwgY29uc3RydWN0IHdpdGhpbiB0aGUgTUxYNSBkcml2ZXI/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoaXMgd2lsbCBiZSBhIGNsZWFudXAgcm91dGluZSwgc28gdGhlIGtleSBxdWVzdGlvbnMgYXJlOiB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgcmVsZWFzZWQsIGFuZCB3aGF0IGFyZSB0aGUgZmFpbHVyZSBzY2VuYXJpb3MgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Q/IEkgd2FudCB0byBzZWUgaG93IHJvYnVzdCB0aGUgZXJyb3IgaGFuZGxpbmcgaXMuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkZXBlbmRlbmN5IGNoYWluIGhlcmUuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGNhbGwgdGhpcywgYW5kIHdoYXQgZnVuY3Rpb25zIGRvZXMgKnRoaXMqIGZ1bmN0aW9uIGNhbGw/IEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSB0ZWFyZG93biBwcm9jZXNzIGFuZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbGVha3MuIEFyZSB0aGVyZSBhbnkgbG9ja3MgaW52b2x2ZWQsIGFuZCBpZiBzbywgd2hhdCYjMzk7cyB0aGUgbG9ja2luZyBoaWVyYXJjaHkgdG8gcHJldmVudCBkZWFkbG9ja3M/CgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgb3ZlcmFsbCBjb250ZXh0LiBJcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBkdXJpbmcgbW9kdWxlIHVubG9hZCwgZGV2aWNlIHJlbW92YWwsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdGltaW5nIG9mIHRoaXMgZnVuY3Rpb24gaXMgZXh0cmVtZWx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBndWFyYW50ZWVzIGl0IG1ha2VzLCBhbmQgYWxzbyB0aGUgYXNzdW1wdGlvbnMgaXQgY2FuIGhhdmUuIEFyZSB3ZSBpbiBhIHNhZmUgY29udGV4dCwgb3IgY291bGQgd2UgYmUgaW50ZXJydXB0ZWQ/CgpGaW5hbGx5LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSB0aGUgdmFyaW91cyBlcnJvciBwYXRocy4gSXMgdGhlcmUgcHJvcGVyIHJlc291cmNlIGNsZWFudXAgaW4gY2FzZSBvZiBhIGZhaWx1cmUgZHVyaW5nIHRoZSB1bmluaXRpYWxpemF0aW9uPyBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhleSBlbnN1cmUgdGhhdCB0aGUgcmVzb3VyY2VzIGFyZSBjbGVhbmVkIHVwIHByb3Blcmx5LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBjb25zaXN0ZW5jeSBvZiB0aGUgc3RhdGUgd2lsbCBiZS4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIHNhZmUgZnJvbSB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0aWVzLiBVbHRpbWF0ZWx5LCBteSBnb2FsIGlzIHRvIGFzc2VzcyB0aGUgY29kZSYjMzk7cyByZXNpbGllbmNlIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBsYXJnZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjc6XHR2b2lkIG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4gIDI4Olx0e1xuICAyOTpcdFx0aWYgKGN0eC1cdTAwM2VjYXBzLVx1MDAzZWVzd2l0Y2hfbWFuYWdlcilcbiAgMzA6XHRcdFx0eGFfZGVzdHJveShcdTAwMjZjdHgtXHUwMDNldnBvcnRzLnZwb3J0X2d2bWlfeGEpO1xuICAzMTpcdH1cbiAgMzI6XHRcbiAgMzM6XHRzdGF0aWMgaW50IGh3c192cG9ydF9hZGRfZ3ZtaShzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsIHUxNiB2cG9ydClcbiAgMzQ6XHR7XG4gIDM1Olx0XHR1MTYgdnBvcnRfZ3ZtaTtcbiAgMzY6XHRcdGludCByZXQ7XG4gIDM3Olx0XG4gIDM4Olx0XHRyZXQgPSBtbHg1aHdzX2NtZF9xdWVyeV9ndm1pKGN0eC1cdTAwM2VtZGV2LCB0cnVlLCB2cG9ydCwgXHUwMDI2dnBvcnRfZ3ZtaSk7XG4gIDM5Olx0XHRpZiAocmV0KVxuICA0MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgNDE6XHRcbiAgNDI6XHRcdHJldCA9IHhhX2luc2VydChcdTAwMjZjdHgtXHUwMDNldnBvcnRzLnZwb3J0X2d2bWlfeGEsIHZwb3J0LFxuICA0MzpcdFx0XHRcdHhhX21rX3ZhbHVlKHZwb3J0X2d2bWkpLCBHRlBfS0VSTkVMKTtcbiAgNDQ6XHRcdGlmIChyZXQpXG4gIDQ1Olx0XHRcdG1seDVod3NfZGJnKGN0eCwgXCYjMzQ7Q291bGRuJiMzOTt0IGluc2VydCBuZXcgdnBvcnQgZ3ZtaSBpbnRvIHhhcnJheSAoJWQpXFxuXCYjMzQ7LCByZXQpO1xuICA0NjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU2NAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDIwOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMb2dpYyBvZiBRdWV1ZSBJbml0aWFsaXphdGlvbiBhbmQgQ2xlYW51cCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgY29kZS4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgaW5pdGlhbGl6aW5nIHNlbmQgcXVldWVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIEJXQyAoQmFuZHdpZHRoIENvbnRyb2wpIGxvY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBlcnJvciBwYXRocyBoZXJlLCBhcyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBwcm9ibGVtcyBsdXJrLiBGaXJzdCwgSSYjMzk7bSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYGN0eC0mZ3Q7cXVldWVzYCwgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAsIGFuZCB0aGUgdmFyaW91cyBga2ZyZWVgIGNhbGxzIHRoYXQgY2FuIGhhcHBlbiB3aGVuIHRoaW5ncyBnbyB3cm9uZy4KCkluaXRpYWxseSwgSSBzZWUgdGhhdCBpZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscyBlYXJseSwgdGhlIGNvZGUgcmV0dXJucyBkaXJlY3RseSB3aXRob3V0IGluY3JlbWVudGluZyBgY3R4LSZndDtxdWV1ZXNgIGluIHNvbWUgcGxhY2VzIGFmdGVyIHRoZSBwYXRjaCAod2hlcmUgdGhlIGluY3JlbWVudCBoYXBwZW5zIGF0IHRoZSBlbmQpIGJ1dCBub3QgYmVmb3JlIHRoZSBwYXRjaC4gVGhpcyBzZWVtZWQgc3VzcGljaW91cywgZXNwZWNpYWxseSBzaW5jZSBgY3R4YCBpcyBmcmVlZCByaWdodCBhZnRlciBpbiB0aGUgbWFpbiBmbG93LCBzbyBJIGFtIGFza2luZyBteXNlbGYgd2hhdCB2YWx1ZSBgY3R4LSZndDtxdWV1ZXNgIGhhcyBhdCB0aGUgdGltZSBvZiB0aGUgZXJyb3IuIERvZXMgaXQgbWF0dGVyLCBhY3R1YWxseT8gQWZ0ZXIgdGhpbmtpbmcgYWJvdXQgaXQsIGluIHRoZSBlcnJvciBjYXNlLCBiZWNhdXNlIG9mIHRoZSBjb250cm9sIGZsb3csIGBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3lgIGlzIG5vdCBjYWxsZWQsIHNvIGBjdHgtJmd0O3F1ZXVlc2AgZG9lcyBub3QgbWF0dGVyLCBhbmQgaXQgY2FuJiMzOTt0IGJlIHVzZWQgYXQgdGhhdCB0aW1lLgoKVGhlbiwgdGhlcmUmIzM5O3MgYW5vdGhlciBwb2ludCB0byBjb25zaWRlciwgd2hpY2ggaXMgdGhhdCBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBjYW4gYWxzbyBmYWlsIExBVEVSLCBhZnRlciBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBtYXkgb3IgbWF5IG5vdCBzdWNjZWVkLiBJIHNjcnV0aW5pemVkIHRoZSBsb29wIGFuZCBhc3NvY2lhdGVkIGNsZWFudXAgZnVuY3Rpb25zIChgX19od3Nfc2VuZF9xdWV1ZXNfY2xvc2VgLCBga2ZyZWVgLCBgaHdzX3NlbmRfcXVldWVzX2J3Y19sb2Nrc19kZXN0cm95YCkgdmVyeSBjYXJlZnVsbHkgaW4gdGhlIHZhcmlvdXMgZmFpbHVyZSBwYXRocyBvZiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYC4gU3BlY2lmaWNhbGx5IEkgd2FzIGNvbmNlcm5lZCB0aGF0IHRoZSBpbmNyZW1lbnQgb2YgYGN0eC0mZ3Q7cXVldWVzYCBpbiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBtaWdodCBsZWFkIHRvIHNvbWUgZm9ybSBvZiBjb3JydXB0aW9uIGlmIG5vdCBoYW5kbGVkIHByb3Blcmx5IGluIHRoZSBlcnJvciBwYXRocywgYnV0IEkgY291bGRuJiMzOTt0IGZpbmQgYSBzY2VuYXJpbyB3aGVyZSB0aGlzIHdhcyB0aGUgY2FzZS4KCkkgZHJpbGxlZCBkb3duIGludG8gYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveWAgYW5kIHRoZSBjYWxjdWxhdGlvbiBvZiBgYndjX3F1ZXVlc2AgaW4gdGhlcmUsIHdoaWNoIGRlcGVuZHMgb24gYGN0eC0mZ3Q7cXVldWVzYC4gVGhlIGNydWNpYWwgaW5zaWdodCwgaG93ZXZlciwgaXMgdGhhdCBpZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCAqZmFpbHMqLCB0aGVuIGBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3lgIGlzICpub3QqIGNhbGxlZC4gQW5kIGlmIGl0IHN1Y2NlZWRzLCB0aGVyZSB3aWxsIGJlIG5vIGlzc3Vlcy4KCkhvd2V2ZXIsIEkgc3RhcnRlZCB0byBxdWVzdGlvbiB0aGUgcmF0aW9uYWxlIG9mIHRoZSBwYXRjaCwgc2luY2UgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgZmFpbHMuIFdoeSB3YXMgdGhlIGluY3JlbWVudCBtb3ZlZD8KTm93LCBJIHRoaW5rIEkgc2VlIGl0LiBCZWZvcmUgdGhlIHBhdGNoLCBpZiBga3phbGxvY19vYmpzYCBpbiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscywgYGN0eC0mZ3Q7cXVldWVzYCBpcyBpbmNyZW1lbnRlZCBCRUZPUkUgdGhlIGZ1bmN0aW9uIHJldHVybnMgd2l0aCAtRU5PTUVNLiBUaGVuIGBjdHhgIHdvdWxkIGJlIGZyZWVkLCBzbyB0aGUgaW5jcmVtZW50IHdvdWxkIHJlc3VsdCBpbiBzb21lIGdhcmJhZ2UsIHdoaWNoIGlzIG5vdyBhdm9pZGVkLiBTbyBub3cgdGhlIGluY3JlbWVudCBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgZW5kLCBhZnRlciBhbGwgdGhlIGFsbG9jYXRpb25zLCBhbmQgaXQgaXMgY29ycmVjdCBiZWNhdXNlIGl0IGRvZXNuJiMzOTt0IGNhdXNlIGFueSBwcm9ibGVtcy4KCkl0JiMzOTtzIGxpa2VseSB0aGUgcGF0Y2ggd2FzIGludHJvZHVjZWQgdG8gcHJldmVudCBhIHBvdGVudGlhbCBoZWFwIGNvcnJ1cHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h3c19jb250ZXh0X2luaXRfaHdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9ODk9c3RhdGljIHZvaWQgaHdzX2NvbnRleHRfY2hlY2tfaHdzX3N1cHAoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTEzMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjEzNDpzdGF0aWMgaW50IGh3c19jb250ZXh0X2luaXRfaHdzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTEzNS1cdFx0XHRcdHN0cnVjdCBtbHg1aHdzX2NvbnRleHRfYXR0ciAqYXR0cilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYz0xODk9c3RydWN0IG1seDVod3NfY29udGV4dCAqbWx4NWh3c19jb250ZXh0X29wZW4oc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMjE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM6MjE2Olx0cmV0ID0gaHdzX2NvbnRleHRfaW5pdF9od3MoY3R4LCBhdHRyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTIxNy1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1Nzk1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1seDVod3NfY29udGV4dF9vcGVuYCBDYWxsKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHdoZXJlIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gUmlnaHQgbm93LCBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCYjMzk7cyBleGNsdXNpdmVseSBjYWxsZWQgZnJvbSBgbWx4NWh3c19jb250ZXh0X29wZW5gLiBCdXQgaG9sZCBvbiwgSSBuZWVkIHRvIGNvbnNpZGVyIGEgcG90ZW50aWFsIGRlcGVuZGVuY3kuIFRoZXJlIHdhcyBhIGNoYW5nZSBpbnZvbHZpbmcgYGN0eC0mZ3Q7cXVldWVzICYjNDM7PSBid2NfcXVldWVzO2AuIEkmIzM5O20gd29uZGVyaW5nIGlmIGl0cyBsb2NhdGlvbiB3YXMgc2hpZnRlZCBkdWUgdG8gYGt6YWxsb2Nfb2Jqc2AgcmVseWluZyBvbiB0aGUgdmFsdWUgb2YgYGN0eC0mZ3Q7cXVldWVzYC4gSG93ZXZlciwgdGhlIGRlZmluaXRpb24gb2YgYGt6YWxsb2Nfb2Jqc2AgaXMgYSBtYWNybywgYW5kIG5vdCBhIGZ1bmN0aW9uIGNhbGwgYXMgc3VjaDoKCmBgYGMKI2RlZmluZSBremFsbG9jX29ianMob2JqLCBuKSBremFsbG9jKHNpemVvZihvYmopICogKG4pLCBHRlBfS0VSTkVMKQpgYGAKClRoZXJlZm9yZSwgdGhlIG1hY3JvIGV4cGFuc2lvbiBkb2VzIG5vdCBkaXJlY3RseSB1c2UgYGN0eC0mZ3Q7cXVldWVzYCBpbiBhbnkgY2FsY3VsYXRpb24sIG9yIHVzZSB0aGF0IHZhcmlhYmxlIGluIHRoZSBtYWNybyBpdHNlbGYuIEkgc2hvdWxkIGNvbmZpcm0gdGhpcyBieSBjaGVja2luZyBob3cgYGt6YWxsb2Nfb2Jqc2AgaXMgdXNlZCB0byBtYWtlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgaXQmIzM5O3MgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoYXQgYXNwZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jX29ianMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jPTYxOD1od3NfYWN0aW9uX2NyZWF0ZV9nZW5lcmljX2J1bGsoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmMtNjM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYzo2MzU6XHRhY3Rpb24gPSBremFsbG9jX29ianMoKmFjdGlvbiwgYnVsa19zeik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTYzNi1cdGlmICghYWN0aW9uKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmM9MTM2MT1tbHg1aHdzX2FjdGlvbl9jcmVhdGVfZGVzdF9hcnJheShzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsIHNpemVfdCBudW1fZGVzdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTEzODUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jOjEzODY6XHRkZXN0X2xpc3QgPSBremFsbG9jX29ianMoKmRlc3RfbGlzdCwgbnVtX2Rlc3QpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYy0xMzg3LVx0aWYgKCFkZXN0X2xpc3QpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYz0xNDY1PW1seDVod3NfYWN0aW9uX2NyZWF0ZV9pbnNlcnRfaGVhZGVyKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTE0NzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jOjE0ODA6XHRyZWZvcm1hdF9oZHJzID0ga3phbGxvY19vYmpzKCpyZWZvcm1hdF9oZHJzLCBudW1fb2ZfaGRycyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTE0ODEtXHRpZiAoIXJlZm9ybWF0X2hkcnMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYz0yNjE4PW1seDVod3NfYWN0aW9uX3RlbXBsYXRlX2NyZWF0ZShlbnVtIG1seDVod3NfYWN0aW9uX3R5cGUgYWN0aW9uX3R5cGVbXSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTI2MzEtXHRhdC1cdTAwM2VudW1fYWN0aW9ucyA9IG51bV9hY3Rpb25zIC0gMTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmM6MjYzMjpcdGF0LVx1MDAzZWFjdGlvbl90eXBlX2FyciA9IGt6YWxsb2Nfb2JqcygqYWN0aW9uX3R5cGUsIG51bV9hY3Rpb25zKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmMtMjYzMy1cdGlmICghYXQtXHUwMDNlYWN0aW9uX3R5cGVfYXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uX3N0ZV9wb29sLmM9MzI2PWludCBtbHg1aHdzX2FjdGlvbl9zdGVfcG9vbF9pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbl9zdGVfcG9vbC5jLTMzMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uX3N0ZV9wb29sLmM6MzMyOlx0cG9vbCA9IGt6YWxsb2Nfb2JqcygqcG9vbCwgcXVldWVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uX3N0ZV9wb29sLmMtMzMzLVx0aWYgKCFwb29sKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM9MjI3PWludCBtbHg1aHdzX2J3Y19tYXRjaGVyX2NyZWF0ZV9zaW1wbGUoc3RydWN0IG1seDVod3NfYndjX21hdGNoZXIgKmJ3Y19tYXRjaGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYzoyNDA6XHRid2NfbWF0Y2hlci1cdTAwM2VydWxlcyA9IGt6YWxsb2Nfb2JqcygqYndjX21hdGNoZXItXHUwMDNlcnVsZXMsIGJ3Y19xdWV1ZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYy0yNDEtXHRpZiAoIWJ3Y19tYXRjaGVyLVx1MDAzZXJ1bGVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjU2LVx0YndjX21hdGNoZXItXHUwMDNlc2l6ZV9vZl9hdF9hcnJheSA9IE1MWDVIV1NfQldDX01BVENIRVJfQVRUQUNIX0FUX05VTTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM6MjU3Olx0YndjX21hdGNoZXItXHUwMDNlYXQgPSBremFsbG9jX29ianMoKmJ3Y19tYXRjaGVyLVx1MDAzZWF0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYy0yNTgtXHRcdFx0XHQgICAgICAgYndjX21hdGNoZXItXHUwMDNlc2l6ZV9vZl9hdF9hcnJheSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9kZWZpbmVyLmM9MTY4ND1od3NfZGVmaW5lcl9hbGxvY19jb21wcmVzc2VkX2ZjKHN0cnVjdCBtbHg1aHdzX2RlZmluZXJfZmMgKmZjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZGVmaW5lci5jLTE2OTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2RlZmluZXIuYzoxNjkxOlx0Y29tcHJlc3NlZF9mYyA9IGt6YWxsb2Nfb2JqcygqY29tcHJlc3NlZF9mYywgZGVmaW5lcl9zaXplKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZGVmaW5lci5jLTE2OTItXHRpZiAoIWNvbXByZXNzZWRfZmMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9kZWZpbmVyLmM9MTcyOD1od3NfZGVmaW5lcl9hbGxvY19mYyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9kZWZpbmVyLmMtMTczMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZGVmaW5lci5jOjE3MzQ6XHRmYyA9IGt6YWxsb2Nfb2JqcygqZmMsIGxlbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2RlZmluZXIuYy0xNzM1LVx0aWYgKCFmYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jPTczOT1zdGF0aWMgaW50IG1seDVfZnNfZnRlX2dldF9od3NfYWN0aW9ucyhzdHJ1Y3QgbWx4NV9mbG93X3Jvb3RfbmFtZXNwYWNlICpucyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jLTc2MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmM6NzYyOlx0KnJhY3Rpb25zID0ga3phbGxvY19vYmpzKCoqcmFjdGlvbnMsIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9NQVgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYy03NjMtXHRpZiAoISpyYWN0aW9ucykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmMtNzY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYzo3Njg6XHRmc19hY3Rpb25zID0ga3phbGxvY19vYmpzKCpmc19hY3Rpb25zLCBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTUFYKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmMtNzY5LVx0aWYgKCFmc19hY3Rpb25zKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYy03NzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jOjc3NDpcdGRlc3RfYWN0aW9ucyA9IGt6YWxsb2Nfb2JqcygqZGVzdF9hY3Rpb25zLCBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTUFYKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmMtNzc1LVx0aWYgKCFkZXN0X2FjdGlvbnMpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21hdGNoZXIuYz0xMDcyPWh3c19tYXRjaGVyX3NldF90ZW1wbGF0ZXMoc3RydWN0IG1seDVod3NfbWF0Y2hlciAqbWF0Y2hlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21hdGNoZXIuYy0xMDg2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tYXRjaGVyLmM6MTA4NzpcdG1hdGNoZXItXHUwMDNlbXQgPSBremFsbG9jX29ianMoKm1hdGNoZXItXHUwMDNlbXQsIG51bV9vZl9tdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21hdGNoZXIuYy0xMDg4LVx0aWYgKCFtYXRjaGVyLVx1MDAzZW10KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jPTcxMT1zdGF0aWMgaW50IGh3c19zZW5kX3JpbmdfYWxsb2Nfc3Eoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtNzMzLVx0YnVmX3N6ID0gcXVldWUtXHUwMDNlbnVtX2VudHJpZXMgKiBNQVhfV1FFU19QRVJfUlVMRTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjczNDpcdHNxLVx1MDAzZWRlcF93cWUgPSBremFsbG9jX29ianMoKnNxLVx1MDAzZWRlcF93cWUsIHF1ZXVlLVx1MDAzZW51bV9lbnRyaWVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTczNS1cdGlmICghc3EtXHUwMDNlZGVwX3dxZSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jPTEwNTU9c3RhdGljIGludCBtbHg1aHdzX3NlbmRfcXVldWVfb3BlbihzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTA2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjEwNjY6XHRxdWV1ZS1cdTAwM2Vjb21wbGV0ZWQuZW50cmllcyA9IGt6YWxsb2Nfb2JqcyhxdWV1ZS1cdTAwM2Vjb21wbGV0ZWQuZW50cmllc1swXSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTEwNjctXHRcdFx0XHRcdFx0cXVldWUtXHUwMDNlbnVtX2VudHJpZXMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jPTExMTU9c3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExMjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYzoxMTI0Olx0Y3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzID0ga3phbGxvY19vYmpzKCpjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTI1LVx0XHRcdFx0XHRcdCBid2NfcXVldWVzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM6MTEzMDpcdGN0eC1cdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzID0ga3phbGxvY19vYmpzKCpjdHgtXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExMzEtXHRcdFx0XHRcdFx0YndjX3F1ZXVlcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM9MTE1MD1pbnQgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM6MTE2NTpcdGN0eC1cdTAwM2VzZW5kX3F1ZXVlID0ga3phbGxvY19vYmpzKCpjdHgtXHUwMDNlc2VuZF9xdWV1ZSwgY3R4LVx1MDAzZXF1ZXVlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTY2LVx0aWYgKCFjdHgtXHUwMDNlc2VuZF9xdWV1ZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTM2NgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDU4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBremFsbG9jX29ianMgYW5kIG51bV9oYXNoX2RlZmluZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoYXQgYGt6YWxsb2Nfb2Jqc2AgaXNuJiMzOTt0IHVzaW5nIGBjdHgtJmd0O3F1ZXVlc2AgZGlyZWN0bHksIHdoaWNoIGlzIGdvb2QuIFRoZW4sIGxvb2tpbmcgYXQgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAsIEkgbm90ZSB0aGUgdXNlIG9mIGBremFsbG9jX29ianNgIHRoZXJlIGFuZCBob3cgYGN0eC0mZ3Q7cXVldWVzYCBtaWdodCBiZSBpbmNyZW1lbnRlZCBpZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscy4gQnV0IHRoZW4sIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIHJldHVybnMgYW4gZXJyb3IsIGFuZCB0aGUgY2FsbGVyIGJhaWxzIG91dCBjbGVhbmx5LCBldmVudHVhbGx5IGZyZWVpbmcgYGN0eGAuIFNvLCB0aGF0IGluY3JlbWVudCB0byBgY3R4LSZndDtxdWV1ZXNgIHNlZW1zIGhhcm1sZXNzIGFmdGVyIGFsbCDigJMgaXQmIzM5O3MgY2xlYW5lZCB1cCBpbiB0aGUgZXJyb3IgcGF0aC4KCkhvd2V2ZXIsIEkgcGF1c2VkIGZvciBhIG1vbWVudCB0byBjb25zaWRlciB3aGV0aGVyIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGNvdWxkIGJlIGNhbGxlZCBlbHNld2hlcmUuIEEgcXVpY2sgY2hlY2sgY29uZmlybWVkIGl0JiMzOTtzIG5vdC4gSXQgc2VlbXMgdGhpcyBtaWdodCBqdXN0IGJlIGEgbG9naWNhbCBjbGVhbnVwLCBhIHdheSB0byBhZGhlcmUgdG8gdGhlICYjMzQ7ZG9uJiMzOTt0IG1vZGlmeSBzdGF0ZSB1bnRpbCBhbGxvY2F0aW9ucyBzdWNjZWVkJiMzNDsgcHJpbmNpcGxlLCB3aGljaCBpcyBhIGNvbW1vbiBrZXJuZWwgcHJhY3RpY2UuCgpOb3csIGxldCYjMzk7cyBzaGlmdCBmb2N1cyB0byB0aGUgY2hhbmdlcyBpbiBgY21kLmNgLiBJIG5vdGljZSB0aGUgcmVtb3ZhbCBvZiBzZXR0aW5nIGBudW1faGFzaF9kZWZpbmVyYCBpbiBgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZWAuIEhtbSwgaW50ZXJlc3RpbmcuIFdoeSB3YXMgdGhpcyByZW1vdmVkPyBQZXJoYXBzIHRoaXMgZmllbGQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSwgb3IgbWF5YmUgaXQgd2FzIGludHJvZHVjaW5nIGlzc3Vlcz8gSWYgaXQgKndhcyogYmVpbmcgc2V0LCBhbmQgaW5jb3JyZWN0bHkgY29uZmlndXJlZCBvciB1bnN1cHBvcnRlZCBieSB0aGUgZmlybXdhcmUsIGl0IGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgRlcgZXJyb3JzLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBkaWcgZnVydGhlciBpbnRvIHRoZSBjb250ZXh0IG9mIGBydGNfYXR0ci0mZ3Q7bnVtX2hhc2hfZGVmaW5lcmAgYW5kIHNlZSB3aGF0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgd2FzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudW1faGFzaF9kZWZpbmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYz0xNTg1PWh3c19hY3Rpb25fY3JlYXRlX2Rlc3RfbWF0Y2hfcmFuZ2VfdGFibGUoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmMtMTYyNS1cdHJ0Y19hdHRyLm1pc3NfZnRfaWQgPSBtaXNzX2Z0X2lkO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYzoxNjI2Olx0cnRjX2F0dHIubnVtX2hhc2hfZGVmaW5lciA9IDE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTE2MjctXHRydGNfYXR0ci51cGRhdGVfaW5kZXhfbW9kZSA9IE1MWDVfSUZDX1JUQ19TVEVfVVBEQVRFX01PREVfQllfSEFTSDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jPTM3Mj1pbnQgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jLTQwMy1cdE1MWDVfU0VUKHJ0YywgYXR0ciwgdGFibGVfdHlwZSwgcnRjX2F0dHItXHUwMDNldGFibGVfdHlwZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jOjQwNDpcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbnVtX2hhc2hfZGVmaW5lciwgcnRjX2F0dHItXHUwMDNlbnVtX2hhc2hfZGVmaW5lcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jLTQwNS1cdE1MWDVfU0VUKHJ0YywgYXR0ciwgbWF0Y2hfZGVmaW5lcl8wLCBydGNfYXR0ci1cdTAwM2VtYXRjaF9kZWZpbmVyXzApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmM9OTM4PWludCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMtMTEzNi1cdFx0XHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYzoxMTM3Olx0XHRcdFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnJ0Y19tYXhfbnVtX2hhc2hfZGVmaW5lcl9nZW5fd3FlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMtMTEzOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5oPTcwPXN0cnVjdCBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlX2F0dHIge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmgtNzctXHR1OCBhY2Nlc3NfaW5kZXhfbW9kZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmg6Nzg6XHR1OCBudW1faGFzaF9kZWZpbmVyO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuaC03OS1cdHU4IGxvZ19kZXB0aDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21hdGNoZXIuYz00Njg9c3RhdGljIGludCBod3NfbWF0Y2hlcl9jcmVhdGVfcnRjKHN0cnVjdCBtbHg1aHdzX21hdGNoZXIgKm1hdGNoZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tYXRjaGVyLmMtNDk3LVx0XHRcdE1MWDVfSUZDX1JUQ19TVEVfVVBEQVRFX01PREVfQllfT0ZGU0VUO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tYXRjaGVyLmM6NDk4Olx0XHRydGNfYXR0ci5udW1faGFzaF9kZWZpbmVyID0gMTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWF0Y2hlci5jLTQ5OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3BybS5oPTE0OD1zdHJ1Y3QgbWx4NV9pZmNfcnRjX2JpdHMge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvcHJtLmgtMTU2LVx0dTggYWNjZXNzX2luZGV4X21vZGVbMHgzXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvcHJtLmg6MTU3Olx0dTggbnVtX2hhc2hfZGVmaW5lclsweDRdO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9wcm0uaC0xNTgtXHR1OCB1cGRhdGVfbWV0aG9kWzB4MV07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTU1CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlYCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBudW1faGFzaF9kZWZpbmVyYCByZWFsbHkgYmVpbmcgYXNzaWduZWQgYSB2YWx1ZSB0d2ljZSB3aXRoaW4gdGhlIGBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlYCBmdW5jdGlvbj8gVGhhdCBmZWVscy4uLiB1bnVzdWFsLiBMZXQgbWUgcHVsbCB1cCB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24uIFJpZ2h0LCBpdCYjMzk7cyBpbiBgY21kLmNgLCBzbyBJJiMzOTtsbCBuYXZpZ2F0ZSB0aGVyZSBhbmQgZGlnIGludG8gdGhlIGNvZGUuIEdvdHRhIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHdoeSB0aGV5JiMzOTtyZSBwb3RlbnRpYWxseSBvdmVyd3JpdGluZyB0aGF0IHZhcmlhYmxlLiBJcyB0aGVyZSBhIGNvbmRpdGlvbmFsIGludm9sdmVkIHRoYXQgSSBtaXNzZWQ/IEFyZSB0aGV5IGhhbmRsaW5nIGRpZmZlcmVudCBSVEMgY29uZmlndXJhdGlvbnM/IE9yIGlzIHRoaXMgYSBwb3RlbnRpYWwgYnVnIHRoYXQgbmVlZHMgdG8gYmUgYWRkcmVzc2VkPyBUaW1lIHRvIGRpdmUgaW4gYW5kIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBwcm9ibGVtLCBvciBpZiB0aGUgbG9naWMgaXMganVzdGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MDpcdFx0XHQgTUxYNV9JRkNfUlRDX1NURV9GT1JNQVRfOERXKTtcbiAzOTE6XHRcbiAzOTI6XHRcdGlmIChydGNfYXR0ci1cdTAwM2Vpc19zY25kX3JhbmdlKSB7XG4gMzkzOlx0XHRcdE1MWDVfU0VUKHJ0YywgYXR0ciwgc3RlX2Zvcm1hdF8xLCBNTFg1X0lGQ19SVENfU1RFX0ZPUk1BVF9SQU5HRSk7XG4gMzk0Olx0XHRcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbnVtX21hdGNoX3N0ZSwgMik7XG4gMzk1Olx0XHR9XG4gMzk2Olx0XG4gMzk3Olx0XHRNTFg1X1NFVChydGMsIGF0dHIsIHBkLCBydGNfYXR0ci1cdTAwM2VwZCk7XG4gMzk4Olx0XHRNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9tZXRob2QsIHJ0Y19hdHRyLVx1MDAzZWZ3X2dlbl93cWUpO1xuIDM5OTpcdFx0TUxYNV9TRVQocnRjLCBhdHRyLCB1cGRhdGVfaW5kZXhfbW9kZSwgcnRjX2F0dHItXHUwMDNldXBkYXRlX2luZGV4X21vZGUpO1xuIDQwMDpcdFx0TUxYNV9TRVQocnRjLCBhdHRyLCBhY2Nlc3NfaW5kZXhfbW9kZSwgcnRjX2F0dHItXHUwMDNlYWNjZXNzX2luZGV4X21vZGUpO1xuIDQwMTpcdFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfZGVwdGgsIHJ0Y19hdHRyLVx1MDAzZWxvZ19kZXB0aCk7XG4gNDAyOlx0XHRNTFg1X1NFVChydGMsIGF0dHIsIGxvZ19oYXNoX3NpemUsIHJ0Y19hdHRyLVx1MDAzZWxvZ19zaXplKTtcbiA0MDM6XHRcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdGFibGVfdHlwZSwgcnRjX2F0dHItXHUwMDNldGFibGVfdHlwZSk7XG4gNDA0Olx0XHRNTFg1X1NFVChydGMsIGF0dHIsIG51bV9oYXNoX2RlZmluZXIsIHJ0Y19hdHRyLVx1MDAzZW51bV9oYXNoX2RlZmluZXIpO1xuIDQwNTpcdFx0TUxYNV9TRVQocnRjLCBhdHRyLCBtYXRjaF9kZWZpbmVyXzAsIHJ0Y19hdHRyLVx1MDAzZW1hdGNoX2RlZmluZXJfMCk7XG4gNDA2Olx0XHRNTFg1X1NFVChydGMsIGF0dHIsIG1hdGNoX2RlZmluZXJfMSwgcnRjX2F0dHItXHUwMDNlbWF0Y2hfZGVmaW5lcl8xKTtcbiA0MDc6XHRcdE1MWDVfU0VUKHJ0YywgYXR0ciwgc3RjX2lkLCBydGNfYXR0ci1cdTAwM2VzdGNfYmFzZSk7XG4gNDA4Olx0XHRNTFg1X1NFVChydGMsIGF0dHIsIHN0ZV90YWJsZV9iYXNlX2lkLCBydGNfYXR0ci1cdTAwM2VzdGVfYmFzZSk7XG4gNDA5Olx0XHRNTFg1X1NFVChydGMsIGF0dHIsIG1pc3NfZmxvd190YWJsZV9pZCwgcnRjX2F0dHItXHUwMDNlbWlzc19mdF9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDEwCgkJCQkJCQlvdXRwdXQ6IDEzOAoJCQkJCQkJdGhvdWdodHM6IDMwNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IEEgRGVlcCBEaXZlIGludG8gTWVsbGFub3ggbWx4NSBEcml2ZXIgTW9kaWZpY2F0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBhIGZldyB0aGluZ3M6IGR1cGxpY2F0ZSBsaW5lcywgZXJyb3IgbWVzc2FnZSBlbmhhbmNlbWVudHMsIGFuZCB3aGF0IGxvb2tlZCBsaWtlIGEgcG9zc2libGUgYnVnIGZpeC4gRGlnZ2luZyBkZWVwZXIsIGl0JiMzOTtzIGNsZWFyIHRoZSBmaXJzdCB0aGluZyBpcyBhIHNpbXBsZSByZW1vdmFsIG9mIGEgcmVkdW5kYW50IGBNTFg1X1NFVGAgbWFjcm8gY2FsbCBpbiBgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZWAuIE5vIHJlYWwgZnVuY3Rpb25hbCBjaGFuZ2UgdGhlcmUsIGp1c3QgdGlkeWluZyB1cCB0aGUgY29kZS4gVGhlbiwgdGhlcmUmIzM5O3MgYW4gYWRkaXRpb24gb2YgYSBzeW5kcm9tZSB0byBhbiBlcnJvciBtZXNzYWdlLCBhbmQgYSByZW1vdmFsIG9mIGEgZHVwbGljYXRlIGBtbHg1X2NtZF9leGVjYCBjYWxsIGluIGFub3RoZXIgZnVuY3Rpb24uIE1vcmUgbm9pc2UgcmVkdWN0aW9uIHRoYW4gYW55dGhpbmcuIFRoZXNlIGRvbiYjMzk7dCBzZWVtIGxpa2UgdGhleSYjMzk7cmUgd29ydGggZnV6emluZy4KCk5vdywgdGhvc2UgaGVscGVyIGZ1bmN0aW9ucyBiZWluZyBhZGRlZCB0byBjb252ZXJ0IGVudW0vc3RhdHVzIHRvIHN0cmluZyBmb3IgZXJyb3IgbWVzc2FnZXMgaW4gdGhlIGBzZW5kLmNgIGFyZSBwdXJlbHkgZGVjb3JhdGl2ZS4gU2FtZSB3aXRoIGBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWVgLCBpdCBwcmludHMgbW9yZSBpbmZvIC0gbG9nZ2luZy4gTm90IGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpUaGF0IGxlYXZlcyB0aGUgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgY2hhbmdlLiBJdCBsb29rcyBsaWtlIGBjdHgtJmd0O3F1ZXVlc2Agd2FzIGluY3JlbWVudGVkIGJlZm9yZSBga3phbGxvY19vYmpzYCBhbGxvY2F0aW9ucywgcG9zc2libHkgbGVhZGluZyB0byBhbiBpbmNvcnJlY3QgaW5jcmVtZW50IGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gSSBpbml0aWFsbHkgdGhvdWdodCBpdCB3YXMgYSBwcm9ibGVtLCBidXQgYWZ0ZXIgdHJhY2luZyB0aGUgY2FsbCBzdGFjaywgaXQgdHVybnMgb3V0IHRoYXQgb24gYW4gYWxsb2NhdGlvbiBmYWlsdXJlIHRoZSBjb250ZXh0IGlzIGZyZWVkIGltbWVkaWF0ZWx5LiBTbyB0aGUgaW5jcmVtZW50ZWQgYGN0eC0mZ3Q7cXVldWVzYCB2YXJpYWJsZSBpcyBoYXJtbGVzcy4gQSB0aGVvcmV0aWNhbCBidWcsIGJ1dCBubyBpbXBhY3QuCgpMZXQmIzM5O3MgbG9vayBtb3JlIGNsb3NlbHkgYXQgdGhlIGR1cGxpY2F0ZSBgbWx4NV9jbWRfZXhlY2AgcmVtb3ZhbC4gSXQgd2FzIHF1ZXJ5aW5nIHRoZSBIQ0EgY2Fwcy4gVGhlcmUgd2VyZSB0d28gY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4gUmVtb3ZpbmcgdGhlIHNlY29uZCBjYWxsIGp1c3QgcHJldmVudHMgYSByZWR1bmRhbnQgZXhlY3V0aW9uIG9mIHRoZSBzYW1lIGNvbW1hbmQuIE5vIG5ldyBmdW5jdGlvbmFsaXR5IG9yIGJ1ZyBmaXhlcy4gSnVzdCBhIG1pbm9yIG9wdGltaXphdGlvbi4gQW5kIGluIHRoZSBsYXJnZXIgcGljdHVyZSwgaXQmIzM5O3MgYSBtaW5vciBvcHRpbWl6YXRpb24sIGFuZCBpdCYjMzk7cyBub3Qgd29ydGggZnV6emluZy4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgY29zbWV0aWM6IGVycm9yIG1lc3NhZ2UgaW1wcm92ZW1lbnRzLCByZWR1bmRhbnQgY29kZSByZW1vdmFsLCBhbmQgYSBoYXJtbGVzcyBidWcgZml4LiBQbHVzLCB0aGlzIGlzIGFsbCBoYXBwZW5pbmcgd2l0aGluIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgdGhhdCBpc24mIzM5O3QgcmVhZGlseSBlbXVsYXRlZC4gVGhlcmVmb3JlLCB0aGUgYW5zd2VyIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIG9mIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMgKGVuaGFuY2luZyBlcnJvciBtZXNzYWdlcyB3aXRoIHN0cmluZyByZXByZXNlbnRhdGlvbnMgYW5kIGFkZGl0aW9uYWwgZGV0YWlscyksIHJlbW92YWwgb2YgcmVkdW5kYW50IGNvZGUgKGEgZHVwbGljYXRlIE1MWDVfU0VUIGFuZCBhIGR1cGxpY2F0ZSBtbHg1X2NtZF9leGVjIHRoYXQgaWdub3JlZCBpdHMgb3V0cHV0KSwgYW5kIGEgdGhlb3JldGljYWwgZXJyb3IgcGF0aCBmaXggaW4gaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0IHRoYXQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IGJlY2F1c2UgdGhlIGNvbnRleHQgaXMgZnJlZWQgaW1tZWRpYXRlbHkgb24gZmFpbHVyZS4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgTWVsbGFub3ggbWx4NSBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25zaXN0cyBvZiBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIChlbmhhbmNpbmcgZXJyb3IgbWVzc2FnZXMgd2l0aCBzdHJpbmcgcmVwcmVzZW50YXRpb25zIGFuZCBhZGRpdGlvbmFsIGRldGFpbHMpLCByZW1vdmFsIG9mIHJlZHVuZGFudCBjb2RlIChhIGR1cGxpY2F0ZSBNTFg1X1NFVCBhbmQgYSBkdXBsaWNhdGUgbWx4NV9jbWRfZXhlYyB0aGF0IGlnbm9yZWQgaXRzIG91dHB1dCksIGFuZCBhIHRoZW9yZXRpY2FsIGVycm9yIHBhdGggZml4IGluIGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdCB0aGF0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBiZWNhdXNlIHRoZSBjb250ZXh0IGlzIGZyZWVkIGltbWVkaWF0ZWx5IG9uIGZhaWx1cmUuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyBhcmUgaW4gdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUxOjQ4LjA1MzcxMTE0N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjQyMjI4MDI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgb2YgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyAoZW5oYW5jaW5nIGVycm9yIG1lc3NhZ2VzIHdpdGggc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBhbmQgYWRkaXRpb25hbCBkZXRhaWxzKSwgcmVtb3ZhbCBvZiByZWR1bmRhbnQgY29kZSAoYSBkdXBsaWNhdGUgTUxYNV9TRVQgYW5kIGEgZHVwbGljYXRlIG1seDVfY21kX2V4ZWMgdGhhdCBpZ25vcmVkIGl0cyBvdXRwdXQpLCBhbmQgYSB0aGVvcmV0aWNhbCBlcnJvciBwYXRoIGZpeCBpbiBod3NfYndjX3NlbmRfcXVldWVzX2luaXQgdGhhdCBoYXMgbm8gZnVuY3Rpb25hbCBpbXBhY3QgYmVjYXVzZSB0aGUgY29udGV4dCBpcyBmcmVlZCBpbW1lZGlhdGVseSBvbiBmYWlsdXJlLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgYXJlIGluIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUxOjQ4LjA1MzcxNzQ1N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwODg3NDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzNlMzA4M2M0OTQ3MDQ4ZjdiMTdhODVjN2VkZTE5ZDJhNmQwYjI1MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAyMjo1MTo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1xcbmluZGV4IGU2MjRmNWRhOTZjODFiLi5hZmU1ODE4Mjk0ZDk1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1xcbkBAIC0zOTgsNyArMzk4LDYgQEAgaW50IG1seDVod3NfY21kX3J0Y19jcmVhdGUoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuIFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdXBkYXRlX21ldGhvZCwgcnRjX2F0dHItXFx1MDAzZWZ3X2dlbl93cWUpO1xcbiBcXHRNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9pbmRleF9tb2RlLCBydGNfYXR0ci1cXHUwMDNldXBkYXRlX2luZGV4X21vZGUpO1xcbiBcXHRNTFg1X1NFVChydGMsIGF0dHIsIGFjY2Vzc19pbmRleF9tb2RlLCBydGNfYXR0ci1cXHUwMDNlYWNjZXNzX2luZGV4X21vZGUpO1xcbi1cXHRNTFg1X1NFVChydGMsIGF0dHIsIG51bV9oYXNoX2RlZmluZXIsIHJ0Y19hdHRyLVxcdTAwM2VudW1faGFzaF9kZWZpbmVyKTtcXG4gXFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfZGVwdGgsIHJ0Y19hdHRyLVxcdTAwM2Vsb2dfZGVwdGgpO1xcbiBcXHRNTFg1X1NFVChydGMsIGF0dHIsIGxvZ19oYXNoX3NpemUsIHJ0Y19hdHRyLVxcdTAwM2Vsb2dfc2l6ZSk7XFxuIFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdGFibGVfdHlwZSwgcnRjX2F0dHItXFx1MDAzZXRhYmxlX3R5cGUpO1xcbkBAIC02MTEsOSArNjEwLDExIEBAIGludCBtbHg1aHdzX2NtZF9zdGNfbW9kaWZ5KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbiBcXG4gXFx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBzaXplb2Yob3V0KSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcIkZhaWxlZCB0byBtb2RpZnkgU1RDIEZXIGFjdGlvbl90eXBlICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgICBzdGNfYXR0ci1cXHUwMDNlYWN0aW9uX3R5cGUpO1xcbi1cXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LFxcbitcXHRcXHRcXHQgICAgICBcXFwiRmFpbGVkIHRvIG1vZGlmeSBTVEMgYWN0aW9uX3R5cGUgJWQsIGVyciAlZCwgc3luZHJvbWUgMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgc3RjX2F0dHItXFx1MDAzZWFjdGlvbl90eXBlLCByZXQsXFxuK1xcdFxcdFxcdCAgICAgIE1MWDVfR0VUKGdlbmVyYWxfb2JqX291dF9jbWRfaGRyLFxcbitcXHRcXHRcXHRcXHQgICAgICAgb3V0LCBzeW5kcm9tZSkpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC0xMTgxLDEyICsxMTgyLDYgQEAgaW50IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGNhcGFiaWxpdHkuZXN3X2NhcC5tZXJnZWRfZXN3aXRjaCk7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcIkZhaWxlZCB0byBxdWVyeSBkZXZpY2UgYXR0cmlidXRlc1xcXFxuXFxcIik7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcbiBcXHRzbnByaW50ZihjYXBzLVxcdTAwM2Vmd192ZXIsIHNpemVvZihjYXBzLVxcdTAwM2Vmd192ZXIpLCBcXFwiJWQuJWQuJWRcXFwiLFxcbiBcXHRcXHQgZndfcmV2X21haihtZGV2KSwgZndfcmV2X21pbihtZGV2KSwgZndfcmV2X3N1YihtZGV2KSk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXFxuaW5kZXggYWVkMDA5YWVjNGZlODcuLmYwYzNhMmJkYTBjNzM3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNcXG5AQCAtMzQ0LDYgKzM0NCwzNiBAQCBod3Nfc2VuZF9lbmdpbmVfdXBkYXRlX3J1bGVfcmVzaXplKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgY29uc3QgY2hhciAqaHdzX3J1bGVfc3RhdHVzX3RvX3N0cmluZyhlbnVtIG1seDVod3NfcnVsZV9zdGF0dXMgc3RhdHVzKVxcbit7XFxuK1xcdHN3aXRjaCAoc3RhdHVzKSB7XFxuK1xcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19DUkVBVElORzogcmV0dXJuIFxcXCJDUkVBVElOR1xcXCI7XFxuK1xcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19VUERBVElORzogcmV0dXJuIFxcXCJVUERBVElOR1xcXCI7XFxuK1xcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19ERUxFVElORzogcmV0dXJuIFxcXCJERUxFVElOR1xcXCI7XFxuK1xcdGNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19GQUlMSU5HOiByZXR1cm4gXFxcIkZBSUxJTkdcXFwiO1xcbitcXHRkZWZhdWx0OiByZXR1cm4gXFxcIk5BXFxcIjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZyh1OCBzdGF0ZSlcXG4re1xcbitcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuK1xcdGNhc2UgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9JRExFOiByZXR1cm4gXFxcIklETEVcXFwiO1xcbitcXHRjYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORzogcmV0dXJuIFxcXCJXUklUSU5HXFxcIjtcXG4rXFx0Y2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HOiByZXR1cm4gXFxcIkRFTEVUSU5HXFxcIjtcXG4rXFx0ZGVmYXVsdDogcmV0dXJuIFxcXCJVTktOT1dOXFxcIjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmcodTggc3luZHJvbWUpXFxuK3tcXG4rXFx0c3dpdGNoIChzeW5kcm9tZSkge1xcbitcXHRjYXNlIDE6IHJldHVybiBcXFwiU0VUX0ZMT1dfRkFJTFxcXCI7XFxuK1xcdGNhc2UgMjogcmV0dXJuIFxcXCJESVNBQkxFX0ZMT1dfRkFJTFxcXCI7XFxuK1xcdGRlZmF1bHQ6IHJldHVybiBcXFwiVU5LTk9XTlxcXCI7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1seDVod3Nfc2VuZF9yaW5nX3ByaXYgKnByaXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXFxuQEAgLTM1Miw2ICszODIsNyBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxcbiBcXHRzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHggPSBwcml2LVxcdTAwM2VydWxlLVxcdTAwM2VtYXRjaGVyLVxcdTAwM2V0YmwtXFx1MDAzZWN0eDtcXG4gXFx0dTMyIG9wY29kZSA9IGNxZSA/IGdldF9jcWVfb3Bjb2RlKGNxZSkgOiAwO1xcbiBcXHRzdHJ1Y3QgbWx4NWh3c19ydWxlICpydWxlID0gcHJpdi1cXHUwMDNlcnVsZTtcXG4rXFx0dTggc3luZHJvbWU7XFxuIFxcbiBcXHQvKiBJZiBzb21ldGhpbmcgYmFkIGhhcHBlbnMgYW5kIGxvdHMgb2YgcnVsZXMgYXJlIGZhaWxpbmcsIHdlIGRvbid0XFxuIFxcdCAqIHdhbnQgdG8gcG9sbHV0ZSBkbWVzZy4gUHJpbnQgb25seSB0aGUgZmlyc3QgYmFkIGNxZSBwZXIgZW5naW5lLFxcbkBAIC0zNjQsMjYgKzM5NSwxNyBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxcbiBcXG4gXFx0aWYgKG1seDVod3NfcnVsZV9tb3ZlX2luX3Byb2dyZXNzKHJ1bGUpKVxcbiBcXHRcXHRtbHg1aHdzX2VycihjdHgsXFxuLVxcdFxcdFxcdCAgICBcXFwiLS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gbW92aW5nIHJ1bGU6IHBoYXNlICVzLCB3cWVzIGxlZnQgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBcXFwiLS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gbW92aW5nIHJ1bGU6IHBoYXNlICVzICglZCksIHdxZXMgbGVmdCAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXFxuLVxcdFxcdFxcdCAgICBydWxlLVxcdTAwM2VyZXNpemVfaW5mby1cXHUwMDNlc3RhdGUgPT1cXG4tXFx0XFx0XFx0ICAgIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORyA/IFxcXCJXUklUSU5HXFxcIiA6XFxuLVxcdFxcdFxcdCAgICBydWxlLVxcdTAwM2VyZXNpemVfaW5mby1cXHUwMDNlc3RhdGUgPT1cXG4tXFx0XFx0XFx0ICAgIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfREVMRVRJTkcgPyBcXFwiREVMRVRJTkdcXFwiIDpcXG4tXFx0XFx0XFx0ICAgIFxcXCJVTktOT1dOXFxcIixcXG4rXFx0XFx0XFx0ICAgIGh3c19ydWxlX3Jlc2l6ZV9zdGF0ZV90b19zdHJpbmdcXG4rXFx0XFx0XFx0XFx0KHJ1bGUtXFx1MDAzZXJlc2l6ZV9pbmZvLVxcdTAwM2VzdGF0ZSksXFxuK1xcdFxcdFxcdCAgICBydWxlLVxcdTAwM2VyZXNpemVfaW5mby1cXHUwMDNlc3RhdGUsXFxuIFxcdFxcdFxcdCAgICBydWxlLVxcdTAwM2VwZW5kaW5nX3dxZXMpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdG1seDVod3NfZXJyKGN0eCxcXG4gXFx0XFx0XFx0ICAgIFxcXCItLS0gcnVsZSAweCUwOGxseDogZXJyb3IgY29tcGxldGlvbiAlcyAoJWQpLCB3cWVzIGxlZnQgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxcbi1cXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlc3RhdHVzID09XFxuLVxcdFxcdFxcdCAgICBNTFg1SFdTX1JVTEVfU1RBVFVTX0NSRUFUSU5HID8gXFxcIkNSRUFUSU5HXFxcIiA6XFxuLVxcdFxcdFxcdCAgICBydWxlLVxcdTAwM2VzdGF0dXMgPT1cXG4tXFx0XFx0XFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfREVMRVRJTkcgPyBcXFwiREVMRVRJTkdcXFwiIDpcXG4tXFx0XFx0XFx0ICAgIHJ1bGUtXFx1MDAzZXN0YXR1cyA9PVxcbi1cXHRcXHRcXHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19GQUlMSU5HID8gXFxcIkZBSUxJTkdcXFwiIDpcXG4tXFx0XFx0XFx0ICAgIHJ1bGUtXFx1MDAzZXN0YXR1cyA9PVxcbi1cXHRcXHRcXHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19VUERBVElORyA/IFxcXCJVUERBVElOR1xcXCIgOiBcXFwiTkFcXFwiLFxcbitcXHRcXHRcXHQgICAgaHdzX3J1bGVfc3RhdHVzX3RvX3N0cmluZyhydWxlLVxcdTAwM2VzdGF0dXMpLFxcbiBcXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlc3RhdHVzLFxcbiBcXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlcGVuZGluZ193cWVzKTtcXG4gXFxuQEAgLTQyMyw2ICs0NDUsMTUgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcXG4gXFx0XFx0XFx0ICAgIFxcXCIgICAgcnVsZSAweCUwOGxseDogIHwtLS0gc3luZHJvbWUgPSAweCV4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcXG4gXFx0XFx0XFx0ICAgIGVycl9jcWUtXFx1MDAzZXN5bmRyb21lKTtcXG4rXFx0XFx0bWx4NWh3c19lcnIoY3R4LFxcbitcXHRcXHRcXHQgICAgXFxcIiAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBRUE4gPSAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcXG4rXFx0XFx0XFx0ICAgIGJlMzJfdG9fY3B1KGVycl9jcWUtXFx1MDAzZXNfd3FlX29wY29kZV9xcG4pIFxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0XFx0MHhmZmZmZmYpO1xcbitcXHRcXHRtbHg1aHdzX2VycihjdHgsXFxuK1xcdFxcdFxcdCAgICBcXFwiICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tIFdRRV9DTlQgPSAweCUwNHhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxcbitcXHRcXHRcXHQgICAgKHUzMiliZTE2X3RvX2NwdShlcnJfY3FlLVxcdTAwM2V3cWVfY291bnRlcikpO1xcbiBcXHR9XFxuIFxcbiBcXHRtbHg1aHdzX2VycihjdHgsXFxuQEAgLTQzMywxMyArNDY0LDEyIEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXFxuIFxcdFxcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxcbiBcXHRcXHQgICAgKGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlYnl0ZV9jbnQpIFxcdTAwMjYgMHg4MDAwMDAwMCkgP1xcbiBcXHRcXHQgICAgXFxcIkZBSUxVUkVcXFwiIDogXFxcIlNVQ0NFU1NcXFwiKTtcXG4rXFx0Lyogc3luZHJvbWUgaXMgaW4gdGhlIGxvd2VyIDIgYml0cyBvZiBieXRlX2NudCAqL1xcbitcXHRzeW5kcm9tZSA9IGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlYnl0ZV9jbnQpIFxcdTAwMjYgMztcXG4gXFx0bWx4NWh3c19lcnIoY3R4LFxcbi1cXHRcXHQgICAgXFxcIiAgICBydWxlIDB4JTA4bGx4OiAgfC0tLS0tLS0gU1lORFJPTUUgPSAlc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgIFxcXCIgICAgcnVsZSAweCUwOGxseDogIHwtLS0tLS0tIFNZTkRST01FID0gJXMgKCV1KVxcXFxuXFxcIixcXG4gXFx0XFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXFxuLVxcdFxcdCAgICAoKGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlYnl0ZV9jbnQpIFxcdTAwMjYgMHgwMDAwMDAwMykgPT0gMSkgP1xcbi1cXHRcXHQgICAgXFxcIlNFVF9GTE9XX0ZBSUxcXFwiIDpcXG4tXFx0XFx0ICAgICgoYmUzMl90b19jcHUoY3FlLVxcdTAwM2VieXRlX2NudCkgXFx1MDAyNiAweDAwMDAwMDAzKSA9PSAyKSA/XFxuLVxcdFxcdCAgICBcXFwiRElTQUJMRV9GTE9XX0ZBSUxcXFwiIDogXFxcIlVOS05PV05cXFwiKTtcXG4rXFx0XFx0ICAgIGh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nKHN5bmRyb21lKSwgc3luZHJvbWUpO1xcbiBcXHRtbHg1aHdzX2VycihjdHgsXFxuIFxcdFxcdCAgICBcXFwiICAgIHJ1bGUgMHglMDhsbHg6IGNxZS1cXHUwMDNlc29wX2Ryb3BfcXBuICA9IDB4JTA4eFxcXFxuXFxcIixcXG4gXFx0XFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksIGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlc29wX2Ryb3BfcXBuKSk7XFxuQEAgLTEwOTEsOCArMTEyMSw2IEBAIHN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4gXFx0aWYgKCFtbHg1aHdzX2NvbnRleHRfYndjX3N1cHBvcnRlZChjdHgpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGN0eC1cXHUwMDNlcXVldWVzICs9IGJ3Y19xdWV1ZXM7XFxuLVxcbiBcXHRjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzID0ga3phbGxvY19vYmpzKCpjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgYndjX3F1ZXVlcyk7XFxuIFxcbkBAIC0xMTA0LDYgKzExMzIsOCBAQCBzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuIFxcdGlmICghY3R4LVxcdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzKVxcbiBcXHRcXHRnb3RvIGVycl9sb2NrX2NsYXNzX2tleXM7XFxuIFxcbitcXHRjdHgtXFx1MDAzZXF1ZXVlcyArPSBid2NfcXVldWVzO1xcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJ3Y19xdWV1ZXM7IGkrKykge1xcbiBcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzW2ldKTtcXG4gXFx0XFx0bG9ja2RlcF9yZWdpc3Rlcl9rZXkoY3R4LVxcdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzICsgaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUxOjQ4LjU5NTQ0Mjk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTU1ODgwNTQyMDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBvZiBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIChlbmhhbmNpbmcgZXJyb3IgbWVzc2FnZXMgd2l0aCBzdHJpbmcgcmVwcmVzZW50YXRpb25zIGFuZCBhZGRpdGlvbmFsIGRldGFpbHMpLCByZW1vdmFsIG9mIHJlZHVuZGFudCBjb2RlIChhIGR1cGxpY2F0ZSBNTFg1X1NFVCBhbmQgYSBkdXBsaWNhdGUgbWx4NV9jbWRfZXhlYyB0aGF0IGlnbm9yZWQgaXRzIG91dHB1dCksIGFuZCBhIHRoZW9yZXRpY2FsIGVycm9yIHBhdGggZml4IGluIGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdCB0aGF0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBiZWNhdXNlIHRoZSBjb250ZXh0IGlzIGZyZWVkIGltbWVkaWF0ZWx5IG9uIGZhaWx1cmUuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyBhcmUgaW4gdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzNlMzA4M2M0OTQ3MDQ4ZjdiMTdhODVjN2VkZTE5ZDJhNmQwYjI1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDIyOjUxOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNcbmluZGV4IGU2MjRmNWRhOTZjODFiLi5hZmU1ODE4Mjk0ZDk1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNcbkBAIC0zOTgsNyArMzk4LDYgQEAgaW50IG1seDVod3NfY21kX3J0Y19jcmVhdGUoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9tZXRob2QsIHJ0Y19hdHRyLVx1MDAzZWZ3X2dlbl93cWUpO1xuIFx0TUxYNV9TRVQocnRjLCBhdHRyLCB1cGRhdGVfaW5kZXhfbW9kZSwgcnRjX2F0dHItXHUwMDNldXBkYXRlX2luZGV4X21vZGUpO1xuIFx0TUxYNV9TRVQocnRjLCBhdHRyLCBhY2Nlc3NfaW5kZXhfbW9kZSwgcnRjX2F0dHItXHUwMDNlYWNjZXNzX2luZGV4X21vZGUpO1xuLVx0TUxYNV9TRVQocnRjLCBhdHRyLCBudW1faGFzaF9kZWZpbmVyLCBydGNfYXR0ci1cdTAwM2VudW1faGFzaF9kZWZpbmVyKTtcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbG9nX2RlcHRoLCBydGNfYXR0ci1cdTAwM2Vsb2dfZGVwdGgpO1xuIFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfaGFzaF9zaXplLCBydGNfYXR0ci1cdTAwM2Vsb2dfc2l6ZSk7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIHRhYmxlX3R5cGUsIHJ0Y19hdHRyLVx1MDAzZXRhYmxlX3R5cGUpO1xuQEAgLTYxMSw5ICs2MTAsMTEgQEAgaW50IG1seDVod3NfY21kX3N0Y19tb2RpZnkoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gXG4gXHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIHNpemVvZihvdXQpKTtcbiBcdGlmIChyZXQpXG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCJGYWlsZWQgdG8gbW9kaWZ5IFNUQyBGVyBhY3Rpb25fdHlwZSAlZFxcblwiLFxuLVx0XHRcdCAgICAgIHN0Y19hdHRyLVx1MDAzZWFjdGlvbl90eXBlKTtcbi1cbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuK1x0XHRcdCAgICAgIFwiRmFpbGVkIHRvIG1vZGlmeSBTVEMgYWN0aW9uX3R5cGUgJWQsIGVyciAlZCwgc3luZHJvbWUgMHgleFxcblwiLFxuK1x0XHRcdCAgICAgIHN0Y19hdHRyLVx1MDAzZWFjdGlvbl90eXBlLCByZXQsXG4rXHRcdFx0ICAgICAgTUxYNV9HRVQoZ2VuZXJhbF9vYmpfb3V0X2NtZF9oZHIsXG4rXHRcdFx0XHQgICAgICAgb3V0LCBzeW5kcm9tZSkpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTE4MSwxMiArMTE4Miw2IEBAIGludCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxuIFx0XHRcdFx0XHRcdGNhcGFiaWxpdHkuZXN3X2NhcC5tZXJnZWRfZXN3aXRjaCk7XG4gXHR9XG4gXG4tXHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dF9zaXplKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcIkZhaWxlZCB0byBxdWVyeSBkZXZpY2UgYXR0cmlidXRlc1xcblwiKTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4gXHRzbnByaW50ZihjYXBzLVx1MDAzZWZ3X3Zlciwgc2l6ZW9mKGNhcHMtXHUwMDNlZndfdmVyKSwgXCIlZC4lZC4lZFwiLFxuIFx0XHQgZndfcmV2X21haihtZGV2KSwgZndfcmV2X21pbihtZGV2KSwgZndfcmV2X3N1YihtZGV2KSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1xuaW5kZXggYWVkMDA5YWVjNGZlODcuLmYwYzNhMmJkYTBjNzM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXG5AQCAtMzQ0LDYgKzM0NCwzNiBAQCBod3Nfc2VuZF9lbmdpbmVfdXBkYXRlX3J1bGVfcmVzaXplKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGNvbnN0IGNoYXIgKmh3c19ydWxlX3N0YXR1c190b19zdHJpbmcoZW51bSBtbHg1aHdzX3J1bGVfc3RhdHVzIHN0YXR1cylcbit7XG4rXHRzd2l0Y2ggKHN0YXR1cykge1xuK1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0NSRUFUSU5HOiByZXR1cm4gXCJDUkVBVElOR1wiO1xuK1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX1VQREFUSU5HOiByZXR1cm4gXCJVUERBVElOR1wiO1xuK1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0RFTEVUSU5HOiByZXR1cm4gXCJERUxFVElOR1wiO1xuK1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0ZBSUxJTkc6IHJldHVybiBcIkZBSUxJTkdcIjtcbitcdGRlZmF1bHQ6IHJldHVybiBcIk5BXCI7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpod3NfcnVsZV9yZXNpemVfc3RhdGVfdG9fc3RyaW5nKHU4IHN0YXRlKVxuK3tcbitcdHN3aXRjaCAoc3RhdGUpIHtcbitcdGNhc2UgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9JRExFOiByZXR1cm4gXCJJRExFXCI7XG4rXHRjYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORzogcmV0dXJuIFwiV1JJVElOR1wiO1xuK1x0Y2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HOiByZXR1cm4gXCJERUxFVElOR1wiO1xuK1x0ZGVmYXVsdDogcmV0dXJuIFwiVU5LTk9XTlwiO1xuK1x0fVxuK31cbitcbitzdGF0aWMgY29uc3QgY2hhciAqaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmcodTggc3luZHJvbWUpXG4re1xuK1x0c3dpdGNoIChzeW5kcm9tZSkge1xuK1x0Y2FzZSAxOiByZXR1cm4gXCJTRVRfRkxPV19GQUlMXCI7XG4rXHRjYXNlIDI6IHJldHVybiBcIkRJU0FCTEVfRkxPV19GQUlMXCI7XG4rXHRkZWZhdWx0OiByZXR1cm4gXCJVTktOT1dOXCI7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBtbHg1aHdzX3NlbmRfcmluZ19wcml2ICpwcml2LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxuQEAgLTM1Miw2ICszODIsNyBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFx0c3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4ID0gcHJpdi1cdTAwM2VydWxlLVx1MDAzZW1hdGNoZXItXHUwMDNldGJsLVx1MDAzZWN0eDtcbiBcdHUzMiBvcGNvZGUgPSBjcWUgPyBnZXRfY3FlX29wY29kZShjcWUpIDogMDtcbiBcdHN0cnVjdCBtbHg1aHdzX3J1bGUgKnJ1bGUgPSBwcml2LVx1MDAzZXJ1bGU7XG4rXHR1OCBzeW5kcm9tZTtcbiBcbiBcdC8qIElmIHNvbWV0aGluZyBiYWQgaGFwcGVucyBhbmQgbG90cyBvZiBydWxlcyBhcmUgZmFpbGluZywgd2UgZG9uJ3RcbiBcdCAqIHdhbnQgdG8gcG9sbHV0ZSBkbWVzZy4gUHJpbnQgb25seSB0aGUgZmlyc3QgYmFkIGNxZSBwZXIgZW5naW5lLFxuQEAgLTM2NCwyNiArMzk1LDE3IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXG4gXHRpZiAobWx4NWh3c19ydWxlX21vdmVfaW5fcHJvZ3Jlc3MocnVsZSkpXG4gXHRcdG1seDVod3NfZXJyKGN0eCxcbi1cdFx0XHQgICAgXCItLS0gcnVsZSAweCUwOGxseDogZXJyb3IgY29tcGxldGlvbiBtb3ZpbmcgcnVsZTogcGhhc2UgJXMsIHdxZXMgbGVmdCAlZFxcblwiLFxuK1x0XHRcdCAgICBcIi0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uIG1vdmluZyBydWxlOiBwaGFzZSAlcyAoJWQpLCB3cWVzIGxlZnQgJWRcXG5cIixcbiBcdFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VyZXNpemVfaW5mby1cdTAwM2VzdGF0ZSA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX1dSSVRJTkcgPyBcIldSSVRJTkdcIiA6XG4tXHRcdFx0ICAgIHJ1bGUtXHUwMDNlcmVzaXplX2luZm8tXHUwMDNlc3RhdGUgPT1cbi1cdFx0XHQgICAgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9ERUxFVElORyA/IFwiREVMRVRJTkdcIiA6XG4tXHRcdFx0ICAgIFwiVU5LTk9XTlwiLFxuK1x0XHRcdCAgICBod3NfcnVsZV9yZXNpemVfc3RhdGVfdG9fc3RyaW5nXG4rXHRcdFx0XHQocnVsZS1cdTAwM2VyZXNpemVfaW5mby1cdTAwM2VzdGF0ZSksXG4rXHRcdFx0ICAgIHJ1bGUtXHUwMDNlcmVzaXplX2luZm8tXHUwMDNlc3RhdGUsXG4gXHRcdFx0ICAgIHJ1bGUtXHUwMDNlcGVuZGluZ193cWVzKTtcbiBcdGVsc2VcbiBcdFx0bWx4NWh3c19lcnIoY3R4LFxuIFx0XHRcdCAgICBcIi0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uICVzICglZCksIHdxZXMgbGVmdCAlZFxcblwiLFxuIFx0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuLVx0XHRcdCAgICBydWxlLVx1MDAzZXN0YXR1cyA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfU1RBVFVTX0NSRUFUSU5HID8gXCJDUkVBVElOR1wiIDpcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VzdGF0dXMgPT1cbi1cdFx0XHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19ERUxFVElORyA/IFwiREVMRVRJTkdcIiA6XG4tXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfRkFJTElORyA/IFwiRkFJTElOR1wiIDpcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VzdGF0dXMgPT1cbi1cdFx0XHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19VUERBVElORyA/IFwiVVBEQVRJTkdcIiA6IFwiTkFcIixcbitcdFx0XHQgICAgaHdzX3J1bGVfc3RhdHVzX3RvX3N0cmluZyhydWxlLVx1MDAzZXN0YXR1cyksXG4gXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzLFxuIFx0XHRcdCAgICBydWxlLVx1MDAzZXBlbmRpbmdfd3Flcyk7XG4gXG5AQCAtNDIzLDYgKzQ0NSwxNSBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFx0XHRcdCAgICBcIiAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBzeW5kcm9tZSA9IDB4JXhcXG5cIixcbiBcdFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbiBcdFx0XHQgICAgZXJyX2NxZS1cdTAwM2VzeW5kcm9tZSk7XG4rXHRcdG1seDVod3NfZXJyKGN0eCxcbitcdFx0XHQgICAgXCIgICAgcnVsZSAweCUwOGxseDogIHwtLS0gUVBOID0gMHgleFxcblwiLFxuK1x0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuK1x0XHRcdCAgICBiZTMyX3RvX2NwdShlcnJfY3FlLVx1MDAzZXNfd3FlX29wY29kZV9xcG4pIFx1MDAyNlxuK1x0XHRcdFx0XHQweGZmZmZmZik7XG4rXHRcdG1seDVod3NfZXJyKGN0eCxcbitcdFx0XHQgICAgXCIgICAgcnVsZSAweCUwOGxseDogIHwtLS0gV1FFX0NOVCA9IDB4JTA0eFxcblwiLFxuK1x0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuK1x0XHRcdCAgICAodTMyKWJlMTZfdG9fY3B1KGVycl9jcWUtXHUwMDNld3FlX2NvdW50ZXIpKTtcbiBcdH1cbiBcbiBcdG1seDVod3NfZXJyKGN0eCxcbkBAIC00MzMsMTMgKzQ2NCwxMiBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbiBcdFx0ICAgIChiZTMyX3RvX2NwdShjcWUtXHUwMDNlYnl0ZV9jbnQpIFx1MDAyNiAweDgwMDAwMDAwKSA/XG4gXHRcdCAgICBcIkZBSUxVUkVcIiA6IFwiU1VDQ0VTU1wiKTtcbitcdC8qIHN5bmRyb21lIGlzIGluIHRoZSBsb3dlciAyIGJpdHMgb2YgYnl0ZV9jbnQgKi9cbitcdHN5bmRyb21lID0gYmUzMl90b19jcHUoY3FlLVx1MDAzZWJ5dGVfY250KSBcdTAwMjYgMztcbiBcdG1seDVod3NfZXJyKGN0eCxcbi1cdFx0ICAgIFwiICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tLS0tLSBTWU5EUk9NRSA9ICVzXFxuXCIsXG4rXHRcdCAgICBcIiAgICBydWxlIDB4JTA4bGx4OiAgfC0tLS0tLS0gU1lORFJPTUUgPSAlcyAoJXUpXFxuXCIsXG4gXHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuLVx0XHQgICAgKChiZTMyX3RvX2NwdShjcWUtXHUwMDNlYnl0ZV9jbnQpIFx1MDAyNiAweDAwMDAwMDAzKSA9PSAxKSA/XG4tXHRcdCAgICBcIlNFVF9GTE9XX0ZBSUxcIiA6XG4tXHRcdCAgICAoKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VieXRlX2NudCkgXHUwMDI2IDB4MDAwMDAwMDMpID09IDIpID9cbi1cdFx0ICAgIFwiRElTQUJMRV9GTE9XX0ZBSUxcIiA6IFwiVU5LTk9XTlwiKTtcbitcdFx0ICAgIGh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nKHN5bmRyb21lKSwgc3luZHJvbWUpO1xuIFx0bWx4NWh3c19lcnIoY3R4LFxuIFx0XHQgICAgXCIgICAgcnVsZSAweCUwOGxseDogY3FlLVx1MDAzZXNvcF9kcm9wX3FwbiAgPSAweCUwOHhcXG5cIixcbiBcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksIGJlMzJfdG9fY3B1KGNxZS1cdTAwM2Vzb3BfZHJvcF9xcG4pKTtcbkBAIC0xMDkxLDggKzExMjEsNiBAQCBzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4gXHRpZiAoIW1seDVod3NfY29udGV4dF9id2Nfc3VwcG9ydGVkKGN0eCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0Y3R4LVx1MDAzZXF1ZXVlcyArPSBid2NfcXVldWVzO1xuLVxuIFx0Y3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzID0ga3phbGxvY19vYmpzKCpjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MsXG4gXHRcdFx0XHRcdFx0IGJ3Y19xdWV1ZXMpO1xuIFxuQEAgLTExMDQsNiArMTEzMiw4IEBAIHN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiBcdGlmICghY3R4LVx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMpXG4gXHRcdGdvdG8gZXJyX2xvY2tfY2xhc3Nfa2V5cztcbiBcbitcdGN0eC1cdTAwM2VxdWV1ZXMgKz0gYndjX3F1ZXVlcztcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJ3Y19xdWV1ZXM7IGkrKykge1xuIFx0XHRtdXRleF9pbml0KFx1MDAyNmN0eC1cdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2Nrc1tpXSk7XG4gXHRcdGxvY2tkZXBfcmVnaXN0ZXJfa2V5KGN0eC1cdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzICsgaSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MTo0OC41OTU0NDQ2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNDgyNzc3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbGxhbm94IEhXUyBDb21tYW5kIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY2AgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY2AuIExldCdzIGRpdmUgaW4uXG5cbkZpcnN0LCBgY21kLmNgOiBJIHNlZSBhIGNoYW5nZSBpbiBgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZWAsIHdoZXJlIHRoZXkndmUgcmVtb3ZlZCBgTUxYNV9TRVQocnRjLCBhdHRyLCBudW1faGFzaF9kZWZpbmVyLCBydGNfYXR0ci1cdTAwM2VudW1faGFzaF9kZWZpbmVyKTtgLiBDdXJpb3VzLCBtdXN0IGJlIGEgc2ltcGxpZmljYXRpb24gb3IgYSBkaWZmZXJlbnQgd2F5IG9mIGhhbmRsaW5nIGhhc2ggZGVmaW5lcnMgbm93LiBUaGVuLCBpbiBgbWx4NWh3c19jbWRfc3RjX21vZGlmeWAsIHRoZXkndmUgYWRkZWQgYSBzeW5kcm9tZSB0byB0aGUgZXJyb3IgbWVzc2FnZSwgdGhhdCdzIGdvb2QgZm9yIGRlYnVnZ2luZy4gQnV0IHRoaXMgYG1seDVod3NfY21kX3F1ZXJ5X2NhcHNgIGNoYW5nZSBpcyB3aGF0J3MgZ3JhYmJlZCBteSBhdHRlbnRpb24uIFRoZXkndmUgcmVtb3ZlZCBhIGNhbGwgdG8gYG1seDVfY21kX2V4ZWNgIGFuZCBpdHMgYXNzb2NpYXRlZCBlcnJvciBoYW5kbGluZy4gV2FpdCwgKnJlbW92ZWQqPyBJcyBgbWx4NV9jbWRfZXhlY2AgZ29uZSBlbnRpcmVseT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkaWZmIG1vcmUgY2xvc2VseS5cblxuYGBgY1xuQEAgLTExODEsMTIgKzExODIsNiBAQCBpbnQgbWx4NWh3c19jbWRfcXVlcnlfY2FwcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiBcdFx0XHRcdFx0XHRjYXBhYmlsaXR5LmVzd19jYXAubWVyZ2VkX2Vzd2l0Y2gpO1xuIFx0fVxuIFxuLVx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCJGYWlsZWQgdG8gcXVlcnkgZGV2aWNlIGF0dHJpYnV0ZXNcXG5cIik7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0c25wcmludGYoY2Fwcy1cdTAwM2Vmd192ZXIsIHNpemVvZihjYXBzLVx1MDAzZWZ3X3ZlciksIFwiJWQuJWQuJWRcIixcbiBcdFx0IGZ3X3Jldl9tYWoobWRldiksIGZ3X3Jldl9taW4obWRldiksIGZ3X3Jldl9zdWIobWRldikpO1xuIGBgYFxuXG5ZZXAsIGl0J3MgZGVmaW5pdGVseSBnb25lLiBTbyB0aGUgY29tbWFuZCBpcyAqbm8gbG9uZ2VyIGV4ZWN1dGVkKj8gT3IsIHdhcyBpdCBhIHJlZHVuZGFudCBjYWxsIHRoYXQncyBiZWVuIGVsaW1pbmF0ZWQ/IFRoaXMgcmVxdWlyZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCBgbWx4NWh3c19jbWRfcXVlcnlfY2Fwc2AgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTY1LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTE6NTQuODQzNzI1NTAxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMjA3MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1seDVod3NfY21kX3F1ZXJ5X2NhcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jPTg5Mz1pbnQgbWx4NWh3c19jbWRfZ2VuZXJhdGVfd3FlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYy05MzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYzo5Mzg6aW50IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYzo5Mzk6XFx0XFx0XFx0ICAgc3RydWN0IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMgKmNhcHMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYy05NDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MTo1NC45MDY5NTU2NzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY1OTM0NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzYCoqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgdGhlIGNvZGUgZm9yIGBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbidzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIE1lbGxhbm94IGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBzcGVjaWZpYyBjYXBhYmlsaXRpZXMgaXMgdGhpcyByb3V0aW5lIHF1ZXJ5aW5nPyBBcmUgd2UgdGFsa2luZyBhYm91dCBiYXNpYyBkZXZpY2UgaW5mb3JtYXRpb24sIGZlYXR1cmUgc2V0cywgcGVyaGFwcyBzdXBwb3J0ZWQgb2ZmbG9hZHM/IFRoZSBmdW5jdGlvbidzIG5hbWUgc3VnZ2VzdHMgaXQncyBjZW50cmFsIHRvIGRpc2NvdmVyaW5nIHRoZSBoYXJkd2FyZSdzIGNhcGFiaWxpdGllcywgYnV0IEkgd2FudCB0byBzZWUgdGhlIGdyYW51bGFyaXR5LlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBNTFg1IGRldmljZSwgdGhlIGNvbW1hbmQgc3RydWN0dXJlcyBpdCBjb25zdHJ1Y3RzIGFuZCBzZW5kcywgYW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpdCBpbnRlcnByZXRzIHRoZSByZXNwb25zZXMuIEknbSBrZWVuIHRvIHNlZSBpZiBpdCBoYW5kbGVzIGRpZmZlcmVudCBmaXJtd2FyZSB2ZXJzaW9ucyBvciBoYXJkd2FyZSBnZW5lcmF0aW9ucyBncmFjZWZ1bGx5LiBFcnJvciBoYW5kbGluZyBpcyBhbm90aGVyIGtleSBhc3BlY3QuIEkgZXhwZWN0IHJvYnVzdCB2YWxpZGF0aW9uIGFuZCBpbmZvcm1hdGl2ZSBlcnJvciBjb2RlcywgZXNwZWNpYWxseSBzaW5jZSBjYXBhYmlsaXR5IHF1ZXJpZXMgYXJlIGZvdW5kYXRpb25hbCBmb3IgZHJpdmVyIG9wZXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgcmV0dXJuIHZhbHVlcyBhbmQgYW55IGFzc29jaWF0ZWQgc2lkZSBlZmZlY3RzIGFyZSBjcml0aWNhbC4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIHBhaW50cyBhIHBpY3R1cmUgb2YgdGhlIGF2YWlsYWJsZSBoYXJkd2FyZSByZXNvdXJjZXMgZm9yIHRoZSB1cHBlciBsYXllcnMgb2YgdGhlIGRyaXZlci4gTGV0J3Mgc2VlIGhvdyBpdCBnb2VzIGFib3V0IGRvaW5nIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNDEsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MTo1OC4zNzI4OTI2MjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MzgsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTM4OlxcdGludCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbiA5Mzk6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMgKmNhcHMpXFxuIDk0MDpcXHR7XFxuIDk0MTpcXHRcXHR1MzIgaW5bTUxYNV9TVF9TWl9EVyhxdWVyeV9oY2FfY2FwX2luKV0gPSB7MH07XFxuIDk0MjpcXHRcXHR1MzIgb3V0X3NpemU7XFxuIDk0MzpcXHRcXHR1MzIgKm91dDtcXG4gOTQ0OlxcdFxcdGludCByZXQ7XFxuIDk0NTpcXHRcXG4gOTQ2OlxcdFxcdG91dF9zaXplID0gTUxYNV9TVF9TWl9CWVRFUyhxdWVyeV9oY2FfY2FwX291dCk7XFxuIDk0NzpcXHRcXHRvdXQgPSBremFsbG9jKG91dF9zaXplLCBHRlBfS0VSTkVMKTtcXG4gOTQ4OlxcdFxcdGlmICghb3V0KVxcbiA5NDk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDk1MDpcXHRcXG4gOTUxOlxcdFxcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcGNvZGUsIE1MWDVfQ01EX09QX1FVRVJZX0hDQV9DQVApO1xcbiA5NTI6XFx0XFx0TUxYNV9TRVQocXVlcnlfaGNhX2NhcF9pbiwgaW4sIG9wX21vZCxcXG4gOTUzOlxcdFxcdFxcdCBNTFg1X1NFVF9IQ0FfQ0FQX09QX01PRF9HRU5FUkFMX0RFVklDRSB8IEhDQV9DQVBfT1BNT0RfR0VUX0NVUik7XFxuIDk1NDpcXHRcXG4gOTU1OlxcdFxcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xcbiA5NTY6XFx0XFx0aWYgKHJldCkge1xcbiA5NTc6XFx0XFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiRmFpbGVkIHRvIHF1ZXJ5IGRldmljZSBjYXBzXFxcXG5cXFwiKTtcXG4gOTU4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA5NTk6XFx0XFx0fVxcbiA5NjA6XFx0XFxuIDk2MTpcXHRcXHRjYXBzLVxcdTAwM2V3cWVfYmFzZWRfdXBkYXRlID1cXG4gOTYyOlxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuIDk2MzpcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC53cWVfYmFzZWRfZmxvd190YWJsZV91cGRhdGVfY2FwKTtcXG4gOTY0OlxcdFxcbiA5NjU6XFx0XFx0Y2Fwcy1cXHUwMDNlZXN3aXRjaF9tYW5hZ2VyID0gTUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4gOTY2OlxcdFxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLmVzd2l0Y2hfbWFuYWdlcik7XFxuIDk2NzpcXHRcXG4gOTY4OlxcdFxcdGNhcHMtXFx1MDAzZWZsZXhfcHJvdG9jb2xzID0gTUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4gOTY5OlxcdFxcdFxcdFxcdFxcdFxcdGNhcGFiaWxpdHkuY21kX2hjYV9jYXAuZmxleF9wYXJzZXJfcHJvdG9jb2xzKTtcXG4gOTcwOlxcdFxcbiA5NzE6XFx0XFx0aWYgKGNhcHMtXFx1MDAzZWZsZXhfcHJvdG9jb2xzIFxcdTAwMjYgTUxYNV9GTEVYX1BBUlNFUl9HRU5FVkVfVExWX09QVElPTl8wX0VOQUJMRUQpXFxuIDk3MjpcXHRcXHRcXHRjYXBzLVxcdTAwM2VmbGV4X3BhcnNlcl9pZF9nZW5ldmVfdGx2X29wdGlvbl8wID1cXG4gOTczOlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuIDk3NDpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5mbGV4X3BhcnNlcl9pZF9nZW5ldmVfdGx2X29wdGlvbl8wKTtcXG4gOTc1OlxcdFxcbiA5NzY6XFx0XFx0aWYgKGNhcHMtXFx1MDAzZWZsZXhfcHJvdG9jb2xzIFxcdTAwMjYgTUxYNV9GTEVYX1BBUlNFUl9NUExTX09WRVJfR1JFX0VOQUJMRUQpXFxuIDk3NzpcXHRcXHRcXHRjYXBzLVxcdTAwM2VmbGV4X3BhcnNlcl9pZF9tcGxzX292ZXJfZ3JlID1cXG4gOTc4OlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuIDk3OTpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5mbGV4X3BhcnNlcl9pZF9vdXRlcl9maXJzdF9tcGxzX292ZXJfZ3JlKTtcXG4gOTgwOlxcdFxcbiA5ODE6XFx0XFx0aWYgKGNhcHMtXFx1MDAzZWZsZXhfcHJvdG9jb2xzIFxcdTAwMjYgTUxYNV9GTEVYX1BBUlNFUl9NUExTX09WRVJfVURQX0VOQUJMRUQpXFxuIDk4MjpcXHRcXHRcXHRjYXBzLVxcdTAwM2VmbGV4X3BhcnNlcl9pZF9tcGxzX292ZXJfdWRwID1cXG4gOTgzOlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuIDk4NDpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5mbGV4X3BhcnNlcl9pZF9vdXRlcl9maXJzdF9tcGxzX292ZXJfdWRwX2xhYmVsKTtcXG4gOTg1OlxcdFxcbiA5ODY6XFx0XFx0Y2Fwcy1cXHUwMDNlbG9nX2hlYWRlcl9tb2RpZnlfYXJndW1lbnRfZ3JhbnVsYXJpdHkgPVxcbiA5ODc6XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4gOTg4OlxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLmxvZ19oZWFkZXJfbW9kaWZ5X2FyZ3VtZW50X2dyYW51bGFyaXR5KTtcXG4gOTg5OlxcdFxcbiA5OTA6XFx0XFx0Y2Fwcy1cXHUwMDNlbG9nX2hlYWRlcl9tb2RpZnlfYXJndW1lbnRfZ3JhbnVsYXJpdHkgLT1cXG4gOTkxOlxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuIDk5MjpcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcC5sb2dfaGVhZGVyX21vZGlmeV9hcmd1bWVudF9ncmFudWxhcml0eV9vZmZzZXQpO1xcbiA5OTM6XFx0XFxuIDk5NDpcXHRcXHRjYXBzLVxcdTAwM2Vsb2dfaGVhZGVyX21vZGlmeV9hcmd1bWVudF9tYXhfYWxsb2MgPVxcbiA5OTU6XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4gOTk2OlxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLmxvZ19oZWFkZXJfbW9kaWZ5X2FyZ3VtZW50X21heF9hbGxvYyk7XFxuIDk5NzpcXHRcXG4gOTk4OlxcdFxcdGNhcHMtXFx1MDAzZWRlZmluZXJfZm9ybWF0X3N1cCA9XFxuIDk5OTpcXHRcXHRcXHRNTFg1X0dFVDY0KHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTAwMDpcXHRcXHRcXHRcXHQgICBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLm1hdGNoX2RlZmluZXJfZm9ybWF0X3N1cHBvcnRlZCk7XFxuMTAwMTpcXHRcXG4xMDAyOlxcdFxcdGNhcHMtXFx1MDAzZXZoY2FfaWQgPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwMDM6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXAudmhjYV9pZCk7XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdGNhcHMtXFx1MDAzZXNxX3RzX2Zvcm1hdCA9IE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTAwNjpcXHRcXHRcXHRcXHRcXHQgICAgICBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwLnNxX3RzX2Zvcm1hdCk7XFxuMTAwNzpcXHRcXG4xMDA4OlxcdFxcdGNhcHMtXFx1MDAzZWlwc2VjX29mZmxvYWQgPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwMDk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNhcGFiaWxpdHkuY21kX2hjYV9jYXAuaXBzZWNfb2ZmbG9hZCk7XFxuMTAxMDpcXHRcXG4xMDExOlxcdFxcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcF9tb2QsXFxuMTAxMjpcXHRcXHRcXHQgTUxYNV9HRVRfSENBX0NBUF9PUF9NT0RfR0VORVJBTF9ERVZJQ0VfMiB8IEhDQV9DQVBfT1BNT0RfR0VUX0NVUik7XFxuMTAxMzpcXHRcXG4xMDE0OlxcdFxcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xcbjEwMTU6XFx0XFx0aWYgKHJldCkge1xcbjEwMTY6XFx0XFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiRmFpbGVkIHRvIHF1ZXJ5IGRldmljZSBjYXBzIDJcXFxcblxcXCIpO1xcbjEwMTc6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTAxODpcXHRcXHR9XFxuMTAxOTpcXHRcXG4xMDIwOlxcdFxcdGNhcHMtXFx1MDAzZWZ1bGxfZHdfanVtYm9fc3VwcG9ydCA9XFxuMTAyMTpcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwMjI6XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXBfMi5mb3JtYXRfc2VsZWN0X2R3XzhfNl9leHQpO1xcbjEwMjM6XFx0XFxuMTAyNDpcXHRcXHRjYXBzLVxcdTAwM2Vmb3JtYXRfc2VsZWN0X2d0cHVfZHdfMCA9XFxuMTAyNTpcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwMjY6XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXBfMi5mb3JtYXRfc2VsZWN0X2R3X2d0cHVfZHdfMCk7XFxuMTAyNzpcXHRcXG4xMDI4OlxcdFxcdGNhcHMtXFx1MDAzZWZvcm1hdF9zZWxlY3RfZ3RwdV9kd18xID1cXG4xMDI5OlxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTAzMDpcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcF8yLmZvcm1hdF9zZWxlY3RfZHdfZ3RwdV9kd18xKTtcXG4xMDMxOlxcdFxcbjEwMzI6XFx0XFx0Y2Fwcy1cXHUwMDNlZm9ybWF0X3NlbGVjdF9ndHB1X2R3XzIgPVxcbjEwMzM6XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMDM0OlxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmNtZF9oY2FfY2FwXzIuZm9ybWF0X3NlbGVjdF9kd19ndHB1X2R3XzIpO1xcbjEwMzU6XFx0XFxuMTAzNjpcXHRcXHRjYXBzLVxcdTAwM2Vmb3JtYXRfc2VsZWN0X2d0cHVfZXh0X2R3XzAgPVxcbjEwMzc6XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTE6NTguMzczMDM3MTgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY0Njk4ODE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydC5cblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIC0gTmV4dCBTdGVwcyoqXG5cbkFscmlnaHQsIEkndmUgZ290IHRoZSBpbml0aWFsIHN0cnVjdHVyZSBvZiB0aGUgZnVuY3Rpb24gaW4gbXkgaGVhZC4gSSd2ZSBjb25zaWRlcmVkIGl0cyBiYXNpYyBpbnB1dHMgYW5kIG91dHB1dHMuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBsb2dpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIGZ1bmN0aW9uIHByb2Nlc3NlcyBkYXRhLiBMZXQncyBzZWUgaG93IHRoaXMgdW5mb2xkcy4uLiBMZXQncyByZWFkIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6ODYxMSwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MDEuMDIwMDI3Nzk5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAzOCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzg6XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXBfMi5mb3JtYXRfc2VsZWN0X2R3X2d0cHVfZmlyc3RfZXh0X2R3XzApO1xcbjEwMzk6XFx0XFxuMTA0MDpcXHRcXHRjYXBzLVxcdTAwM2VzdXBwX3R5cGVfZ2VuX3dxZSA9XFxuMTA0MTpcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwNDI6XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuY21kX2hjYV9jYXBfMi5nZW5lcmF0ZV93cWVfdHlwZSk7XFxuMTA0MzpcXHRcXG4xMDQ0OlxcdFxcdGNhcHMtXFx1MDAzZWZsb3dfdGFibGVfaGFzaF90eXBlID1cXG4xMDQ1OlxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTA0NjpcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5jbWRfaGNhX2NhcF8yLmZsb3dfdGFibGVfaGFzaF90eXBlKTtcXG4xMDQ3OlxcdFxcbjEwNDg6XFx0XFx0TUxYNV9TRVQocXVlcnlfaGNhX2NhcF9pbiwgaW4sIG9wX21vZCxcXG4xMDQ5OlxcdFxcdFxcdCBNTFg1X0dFVF9IQ0FfQ0FQX09QX01PRF9OSUNfRkxPV19UQUJMRSB8IEhDQV9DQVBfT1BNT0RfR0VUX0NVUik7XFxuMTA1MDpcXHRcXG4xMDUxOlxcdFxcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xcbjEwNTI6XFx0XFx0aWYgKHJldCkge1xcbjEwNTM6XFx0XFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiRmFpbGVkIHRvIHF1ZXJ5IGZsb3cgdGFibGUgY2Fwc1xcXFxuXFxcIik7XFxuMTA1NDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDU1OlxcdFxcdH1cXG4xMDU2OlxcdFxcbjEwNTc6XFx0XFx0Y2Fwcy1cXHUwMDNlbmljX2Z0Lm1heF9sZXZlbCA9XFxuMTA1ODpcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwNTk6XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuZmxvd190YWJsZV9uaWNfY2FwLmZsb3dfdGFibGVfcHJvcGVydGllc19uaWNfcmVjZWl2ZS5tYXhfZnRfbGV2ZWwpO1xcbjEwNjA6XFx0XFxuMTA2MTpcXHRcXHRjYXBzLVxcdTAwM2VuaWNfZnQucmVwYXJzZSA9XFxuMTA2MjpcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwNjM6XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuZmxvd190YWJsZV9uaWNfY2FwLmZsb3dfdGFibGVfcHJvcGVydGllc19uaWNfcmVjZWl2ZS5yZXBhcnNlKTtcXG4xMDY0OlxcdFxcbjEwNjU6XFx0XFx0Y2Fwcy1cXHUwMDNlbmljX2Z0Lmlnbm9yZV9mbG93X2xldmVsX3J0Y192YWxpZCA9XFxuMTA2NjpcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwNjc6XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuZmxvd190YWJsZV9uaWNfY2FwLmZsb3dfdGFibGVfcHJvcGVydGllc19uaWNfcmVjZWl2ZS5pZ25vcmVfZmxvd19sZXZlbF9ydGNfdmFsaWQpO1xcbjEwNjg6XFx0XFxuMTA2OTpcXHRcXHRjYXBzLVxcdTAwM2VmbGV4X3BhcnNlcl9va19iaXRzX3N1cHAgPVxcbjEwNzA6XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMDcxOlxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUuZnRfZmllbGRfc3VwcG9ydC5nZW5ldmVfdGx2X29wdGlvbl8wX2V4aXN0KTtcXG4xMDcyOlxcdFxcbjEwNzM6XFx0XFx0aWYgKGNhcHMtXFx1MDAzZXdxZV9iYXNlZF91cGRhdGUpIHtcXG4xMDc0OlxcdFxcdFxcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcF9tb2QsXFxuMTA3NTpcXHRcXHRcXHRcXHQgTUxYNV9HRVRfSENBX0NBUF9PUF9NT0RfV1FFX0JBU0VEX0ZMT1dfVEFCTEUgfCBIQ0FfQ0FQX09QTU9EX0dFVF9DVVIpO1xcbjEwNzY6XFx0XFxuMTA3NzpcXHRcXHRcXHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dF9zaXplKTtcXG4xMDc4OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4xMDc5OlxcdFxcdFxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcIkZhaWxlZCB0byBxdWVyeSBXUUUgYmFzZWQgRlQgY2Fwc1xcXFxuXFxcIik7XFxuMTA4MDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMDgxOlxcdFxcdFxcdH1cXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlcnRjX3JlcGFyc2VfbW9kZSA9XFxuMTA4NDpcXHRcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwODU6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnJ0Y19yZXBhcnNlX21vZGUpO1xcbjEwODY6XFx0XFxuMTA4NzpcXHRcXHRcXHRjYXBzLVxcdTAwM2VzdGVfZm9ybWF0ID1cXG4xMDg4OlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTA4OTpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAuc3RlX2Zvcm1hdCk7XFxuMTA5MDpcXHRcXG4xMDkxOlxcdFxcdFxcdGNhcHMtXFx1MDAzZXJ0Y19pbmRleF9tb2RlID1cXG4xMDkyOlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTA5MzpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAucnRjX2luZGV4X21vZGUpO1xcbjEwOTQ6XFx0XFxuMTA5NTpcXHRcXHRcXHRjYXBzLVxcdTAwM2VydGNfbG9nX2RlcHRoX21heCA9XFxuMTA5NjpcXHRcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjEwOTc6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnJ0Y19sb2dfZGVwdGhfbWF4KTtcXG4xMDk4OlxcdFxcbjEwOTk6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlc3RlX2FsbG9jX2xvZ19tYXggPVxcbjExMDA6XFx0XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMTAxOlxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC5zdGVfYWxsb2NfbG9nX21heCk7XFxuMTEwMjpcXHRcXG4xMTAzOlxcdFxcdFxcdGNhcHMtXFx1MDAzZXN0ZV9hbGxvY19sb2dfZ3JhbiA9XFxuMTEwNDpcXHRcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExMDU6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnN0ZV9hbGxvY19sb2dfZ3JhbnVsYXJpdHkpO1xcbjExMDY6XFx0XFxuMTEwNzpcXHRcXHRcXHRjYXBzLVxcdTAwM2V0cml2aWFsX21hdGNoX2RlZmluZXIgPVxcbjExMDg6XFx0XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMTA5OlxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC50cml2aWFsX21hdGNoX2RlZmluZXIpO1xcbjExMTA6XFx0XFxuMTExMTpcXHRcXHRcXHRjYXBzLVxcdTAwM2VzdGNfYWxsb2NfbG9nX21heCA9XFxuMTExMjpcXHRcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExMTM6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnN0Y19hbGxvY19sb2dfbWF4KTtcXG4xMTE0OlxcdFxcbjExMTU6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlc3RjX2FsbG9jX2xvZ19ncmFuID1cXG4xMTE2OlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTExNzpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAuc3RjX2FsbG9jX2xvZ19ncmFudWxhcml0eSk7XFxuMTExODpcXHRcXG4xMTE5OlxcdFxcdFxcdGNhcHMtXFx1MDAzZXJ0Y19oYXNoX3NwbGl0X3RhYmxlID1cXG4xMTIwOlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTEyMTpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAucnRjX2hhc2hfc3BsaXRfdGFibGUpO1xcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHRcXHRjYXBzLVxcdTAwM2VydGNfbGluZWFyX2xvb2t1cF90YWJsZSA9XFxuMTEyNDpcXHRcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExMjU6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkud3FlX2Jhc2VkX2Zsb3dfdGFibGVfY2FwLnJ0Y19saW5lYXJfbG9va3VwX3RhYmxlKTtcXG4xMTI2OlxcdFxcbjExMjc6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlYWNjZXNzX2luZGV4X21vZGUgPVxcbjExMjg6XFx0XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMTI5OlxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC5hY2Nlc3NfaW5kZXhfbW9kZSk7XFxuMTEzMDpcXHRcXG4xMTMxOlxcdFxcdFxcdGNhcHMtXFx1MDAzZWxpbmVhcl9tYXRjaF9kZWZpbmVyID1cXG4xMTMyOlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTEzMzpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAubGluZWFyX21hdGNoX2RlZmluZXJfcmVnX2MzKTtcXG4xMTM0OlxcdFxcbjExMzU6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlcnRjX21heF9oYXNoX2RlZl9nZW5fd3FlID1cXG4xMTM2OlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTEzNzpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAucnRjX21heF9udW1faGFzaF9kZWZpbmVyX2dlbl93cWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MjowMS4wMjAxNDk3NjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYzNDYzMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbidzIENvbnRleHQqKlxuXG5SaWdodCwgc28gSSd2ZSBqdXN0IGJlZW4gcHJvbXB0ZWQgdG8gYXNzZXNzIHNvbWUgY29kZSBvciBhIGRlc2NyaXB0aW9uIG9mIGEgZnVuY3Rpb24uIFRoZSBpbW1lZGlhdGUgdGhvdWdodCBpcywgKkkgbmVlZCBtb3JlIGluZm9ybWF0aW9uKi4gSSdtIG5vdCBnb2luZyB0byBqdW1wIHRvIGFueSBjb25jbHVzaW9ucyBiYXNlZCBvbiBqdXN0IGEgc25pcHBldC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaW5uZXIgd29ya2luZ3MgaXMgdG8gc2VlIHRoZSB3aG9sZSB0aGluZywgb3IgYXQgbGVhc3QgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIGl0LiBJIHdhbnQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGRhdGEgaXQgb3BlcmF0ZXMgb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZW50cnkgcG9pbnRzLCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gVGhpcyBcIkxldCdzIHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uXCIgaXMgY3J1Y2lhbDsgSSB1bmRlcnN0YW5kIHRoZSBpbXBvcnRhbmNlIG9mIGNvbXBsZXRlIGNvbnRleHQgdG8gbWFrZSBhIHNvdW5kIGV2YWx1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzU0LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MjowNC4wODM2MTYwOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTM4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEzODpcXHRcXG4xMTM5OlxcdFxcdFxcdGNhcHMtXFx1MDAzZXN1cHBfc3RlX2Zvcm1hdF9nZW5fd3FlID1cXG4xMTQwOlxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTE0MTpcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAuc3RlX2Zvcm1hdF9nZW5fd3FlKTtcXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlZmRiX3Rpcl9zdGMgPVxcbjExNDQ6XFx0XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMTQ1OlxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LndxZV9iYXNlZF9mbG93X3RhYmxlX2NhcC5mZGJfanVtcF90b190aXJfc3RjKTtcXG4xMTQ2OlxcdFxcdH1cXG4xMTQ3OlxcdFxcbjExNDg6XFx0XFx0aWYgKGNhcHMtXFx1MDAzZWVzd2l0Y2hfbWFuYWdlcikge1xcbjExNDk6XFx0XFx0XFx0TUxYNV9TRVQocXVlcnlfaGNhX2NhcF9pbiwgaW4sIG9wX21vZCxcXG4xMTUwOlxcdFxcdFxcdFxcdCBNTFg1X0dFVF9IQ0FfQ0FQX09QX01PRF9FU1dfRkxPV19UQUJMRSB8IEhDQV9DQVBfT1BNT0RfR0VUX0NVUik7XFxuMTE1MTpcXHRcXG4xMTUyOlxcdFxcdFxcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xcbjExNTM6XFx0XFx0XFx0aWYgKHJldCkge1xcbjExNTQ6XFx0XFx0XFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiRmFpbGVkIHRvIHF1ZXJ5IGZsb3cgdGFibGUgZXN3IGNhcHNcXFxcblxcXCIpO1xcbjExNTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE1NjpcXHRcXHRcXHR9XFxuMTE1NzpcXHRcXG4xMTU4OlxcdFxcdFxcdGNhcHMtXFx1MDAzZWZkYl9mdC5tYXhfbGV2ZWwgPVxcbjExNTk6XFx0XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMTYwOlxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUubWF4X2Z0X2xldmVsKTtcXG4xMTYxOlxcdFxcbjExNjI6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlZmRiX2Z0LnJlcGFyc2UgPVxcbjExNjM6XFx0XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMTY0OlxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUucmVwYXJzZSk7XFxuMTE2NTpcXHRcXG4xMTY2OlxcdFxcdFxcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcF9tb2QsXFxuMTE2NzpcXHRcXHRcXHRcXHQgTUxYNV9TRVRfSENBX0NBUF9PUF9NT0RfRVNXIHwgSENBX0NBUF9PUE1PRF9HRVRfQ1VSKTtcXG4xMTY4OlxcdFxcbjExNjk6XFx0XFx0XFx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XFxuMTE3MDpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMTE3MTpcXHRcXHRcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJGYWlsZWQgdG8gcXVlcnkgZXN3aXRjaCBjYXBhYmlsaXRpZXNcXFxcblxcXCIpO1xcbjExNzI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE3MzpcXHRcXHRcXHR9XFxuMTE3NDpcXHRcXG4xMTc1OlxcdFxcdFxcdGlmIChNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExNzY6XFx0XFx0XFx0XFx0ICAgICBjYXBhYmlsaXR5LmVzd19jYXAuZXN3X21hbmFnZXJfdnBvcnRfbnVtYmVyX3ZhbGlkKSlcXG4xMTc3OlxcdFxcdFxcdFxcdGNhcHMtXFx1MDAzZWVzd2l0Y2hfbWFuYWdlcl92cG9ydF9udW1iZXIgPVxcbjExNzg6XFx0XFx0XFx0XFx0XFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcXG4xMTc5OlxcdFxcdFxcdFxcdFxcdFxcdCBjYXBhYmlsaXR5LmVzd19jYXAuZXN3X21hbmFnZXJfdnBvcnRfbnVtYmVyKTtcXG4xMTgwOlxcdFxcbjExODE6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlbWVyZ2VkX2Vzd2l0Y2ggPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2FwYWJpbGl0eS5lc3dfY2FwLm1lcmdlZF9lc3dpdGNoKTtcXG4xMTgzOlxcdFxcdH1cXG4xMTg0OlxcdFxcbjExODU6XFx0XFx0c25wcmludGYoY2Fwcy1cXHUwMDNlZndfdmVyLCBzaXplb2YoY2Fwcy1cXHUwMDNlZndfdmVyKSwgXFxcIiVkLiVkLiVkXFxcIixcXG4xMTg2OlxcdFxcdFxcdCBmd19yZXZfbWFqKG1kZXYpLCBmd19yZXZfbWluKG1kZXYpLCBmd19yZXZfc3ViKG1kZXYpKTtcXG4xMTg3OlxcdFxcbjExODg6XFx0XFx0Y2Fwcy1cXHUwMDNlaXNfZWNwZiA9IG1seDVfY29yZV9pc19lY3BmX2Vzd19tYW5hZ2VyKG1kZXYpO1xcbjExODk6XFx0XFxuMTE5MDpcXHRvdXQ6XFxuMTE5MTpcXHRcXHRrZnJlZShvdXQpO1xcbjExOTI6XFx0XFx0cmV0dXJuIHJldDtcXG4xMTkzOlxcdH1cXG4xMTk0OlxcdFxcbjExOTU6XFx0aW50IG1seDVod3NfY21kX3F1ZXJ5X2d2bWkoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIGJvb2wgb3RoZXJfZnVuY3Rpb24sXFxuMTE5NjpcXHRcXHRcXHRcXHQgICB1MTYgdnBvcnRfbnVtYmVyLCB1MTYgKmd2bWkpXFxuMTE5NzpcXHR7XFxuMTE5ODpcXHRcXHRpbnQgZXJyO1xcbjExOTk6XFx0XFxuMTIwMDpcXHRcXHRpZiAoIW90aGVyX2Z1bmN0aW9uKSB7XFxuMTIwMTpcXHRcXHRcXHQvKiBzZWxmIHZoY2FfaWQgKi9cXG4xMjAyOlxcdFxcdFxcdCpndm1pID0gTUxYNV9DQVBfR0VOKG1kZXYsIHZoY2FfaWQpO1xcbjEyMDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTIwNDpcXHRcXHR9XFxuMTIwNTpcXHRcXG4xMjA2OlxcdFxcdGVyciA9IG1seDVfdnBvcnRfZ2V0X3ZoY2FfaWQobWRldiwgdnBvcnRfbnVtYmVyLCBndm1pKTtcXG4xMjA3OlxcdFxcdGlmIChlcnIpIHtcXG4xMjA4OlxcdFxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcIkZhaWxlZCB0byBnZXQgdnBvcnQgdmhjYSBpZCBmb3IgdnBvcnQgJWRcXFxcblxcXCIsXFxuMTIwOTpcXHRcXHRcXHRcXHQgICAgICB2cG9ydF9udW1iZXIpO1xcbjEyMTA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMjExOlxcdFxcdH1cXG4xMjEyOlxcdFxcbjEyMTM6XFx0XFx0cmV0dXJuIDA7XFxuMTIxNDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUyOjA0LjA4MzczNjY3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MzIwODYzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWNlbnQgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgb3ZlciB0aGlzIGRpZmYuIEZpcnN0LCB0aGUgcmVtb3ZhbCBvZiBgbWx4NV9jbWRfZXhlY2AgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCB3YXMgYSBkdXBsaWNhdGUgY2FsbCwgZXhlY3V0aW5nIHRoZSBzYW1lIGNvbW1hbmQgcmVkdW5kYW50bHksIGFzIEkgc3VzcGVjdGVkLiBJdCB3YXNuJ3QgcHVsbGluZyBhbnkgb3V0cHV0IGZyb20gdGhlIGNvbW1hbmQsIHNvIGl0IHdhcyBjbGVhcmx5IGFuIG92ZXJzaWdodC4gVGhhdCdzIGEgY2xlYW4tdXAsIG5vdGhpbmcgY29tcGxleCB0aGVyZS5cblxuTm93LCB0aGUgY2hhbmdlcyBpbiBgc2VuZC5jYCBhcmUgbW9yZSBpbnRlcmVzdGluZy4gQWRkaW5nIHRoZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBlbnVtL3N0YXR1cyBjb252ZXJzaW9ucyBpcyBhIGdvb2QgbW92ZTogYGh3c19ydWxlX3N0YXR1c190b19zdHJpbmdgLCBgaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZ2AsIGFuZCBgaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmdgLiBUaGlzIHdpbGwgZGVmaW5pdGVseSBpbXByb3ZlIGRlYnVnZ2luZyBhbmQgbG9nZ2luZywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0aG9zZSBlcnJvciBkdW1wcyBpbiBgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlYC4gR2V0dGluZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiAoc3luZHJvbWUsIFFQTiwgV1FFX0NOVCkgbWFrZXMgYSBiaWcgZGlmZmVyZW5jZSBpbiBwaW5wb2ludGluZyBpc3N1ZXMsIGFuZCB1c2luZyBzdHJpbmdzIGluc3RlYWQgb2YganVzdCBjcnlwdGljIGludGVnZXIgdmFsdWVzIG1ha2VzIHRoZSBvdXRwdXQgbXVjaCBtb3JlIHJlYWRhYmxlLiBHb29kIHN0dWZmLlxuXG5UaGUgY3JpdGljYWwgcGFydCBpcyB0aGUgb3JkZXIgY2hhbmdlIGluIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgLiBTd2FwcGluZyB0aGUgaW5jcmVtZW50IG9mIGBjdHgtXHUwMDNlcXVldWVzYCB3aXRoIHRoZSBhbGxvY2F0aW9uIG9mIGBjdHgtXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5c2AgaW1tZWRpYXRlbHkgcmFpc2VkIGEgZmxhZyBmb3IgbWUuIEl0J3MgYSBjbGFzc2ljIGVycm9yLWhhbmRsaW5nIGltcHJvdmVtZW50LiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGNsZWFudXAgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiBJbmNyZW1lbnRpbmcgdGhlIGBjdHgtXHUwMDNlcXVldWVzYCBiZWZvcmUgYWxsb2NhdGlvbiBjb3VsZCBtZWFuIGFuIGVycm9yIGxlYXZlcyB0aGUgYGN0eC1cdTAwM2VxdWV1ZXNgIGluY3JlbWVudGVkLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCBtZSByZXZpZXcgdGhlIGNvZGUgYW5kIHRoZSBlcnJvciBwYXRocyBtb3JlIGNsb3NlbHkgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gSSdtIGZvY3VzaW5nIG9uIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGFuZCBpdHMgYXNzb2NpYXRlZCBlcnJvciBoYW5kbGluZyBmb3IgY2xlYW51cCwgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIG1lbW9yeSBsZWFrcyBvciBpbmNvcnJlY3QgY291bnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2MiwiT3V0cHV0VG9rZW5zIjo1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUyOjEyLjUxNTgyNTg3OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNTI1NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYz0xMTA4PXZvaWQgbWx4NWh3c19zZW5kX3F1ZXVlc19jbG9zZShzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjExMTU6c3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExMTYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM9MTE1MD1pbnQgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExNjAtXFx0Lyogb3BlbiBhIHNlcGFyYXRlIHNldCBvZiBxdWV1ZXMgYW5kIGxvY2tzIGZvciBid2MgQVBJICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM6MTE2MTpcXHRlcnIgPSBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTYyLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUyOjEyLjk1ODM1NzA0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzE2MTIyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZSBpcyBkb2luZy4gSXQncyBvYnZpb3VzbHkgc2V0dGluZyB1cCBzZW5kIHF1ZXVlcywgYnV0IHRoZSBcImJ3Y1wiIHBhcnQgbWFrZXMgbWUgdGhpbmsgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBiYW5kd2lkdGggY29udHJvbCBvciBzb21lIGtpbmQgb2YgZmxvdyBtYW5hZ2VtZW50LiBUaGF0J3MgbXkgaW5pdGlhbCBodW5jaC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsIGFyZWFzIHRvIGxvb2sgZm9yOiBsb2NrIGNvbnRlbnRpb24sIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgZm9yIHRoZSBxdWV1ZXMgdGhlbXNlbHZlcywgYW5kIGhvdyB0aGlzIGluaXRpYWxpemF0aW9uIGludGVyYWN0cyB3aXRoIGludGVycnVwdCBoYW5kbGluZywgaWYgYXQgYWxsLiBJdCdzIGFsc28gaW1wb3J0YW50IHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0OyB3aGVyZSBpcyB0aGlzIGNvZGUgc2l0dWF0ZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbT8gSXMgaXQgcGFydCBvZiB0aGUgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIsIGEgc3BlY2lmaWMgbmV0d29yayBzdGFjaywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBkb2N1bWVudGF0aW9uIHNob3VsZCBoZWxwIG1lIGFuc3dlciB0aGlzLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIG5vdGUgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkIGhlcmUuIE9rYXksIGxldOKAmXMgcmVhZCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5OTIsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MjoxNi4xODk5NzE4MzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMTU6XFx0c3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbjExMTY6XFx0e1xcbjExMTc6XFx0XFx0LyogTnVtYmVyIG9mIEJXQyBxdWV1ZXMgaXMgZXF1YWwgdG8gbnVtYmVyIG9mIHRoZSB1c3VhbCBIV1MgcXVldWVzICovXFxuMTExODpcXHRcXHRpbnQgYndjX3F1ZXVlcyA9IGN0eC1cXHUwMDNlcXVldWVzIC0gMTtcXG4xMTE5OlxcdFxcdGludCBpO1xcbjExMjA6XFx0XFxuMTEyMTpcXHRcXHRpZiAoIW1seDVod3NfY29udGV4dF9id2Nfc3VwcG9ydGVkKGN0eCkpXFxuMTEyMjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTIzOlxcdFxcbjExMjQ6XFx0XFx0Y3R4LVxcdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2NrcyA9IGt6YWxsb2Nfb2JqcygqY3R4LVxcdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2NrcyxcXG4xMTI1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBid2NfcXVldWVzKTtcXG4xMTI2OlxcdFxcbjExMjc6XFx0XFx0aWYgKCFjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzKVxcbjExMjg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTEyOTpcXHRcXG4xMTMwOlxcdFxcdGN0eC1cXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyA9IGt6YWxsb2Nfb2JqcygqY3R4LVxcdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzLFxcbjExMzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0YndjX3F1ZXVlcyk7XFxuMTEzMjpcXHRcXHRpZiAoIWN0eC1cXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cylcXG4xMTMzOlxcdFxcdFxcdGdvdG8gZXJyX2xvY2tfY2xhc3Nfa2V5cztcXG4xMTM0OlxcdFxcbjExMzU6XFx0XFx0Y3R4LVxcdTAwM2VxdWV1ZXMgKz0gYndjX3F1ZXVlcztcXG4xMTM2OlxcdFxcbjExMzc6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJ3Y19xdWV1ZXM7IGkrKykge1xcbjExMzg6XFx0XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2Nrc1tpXSk7XFxuMTEzOTpcXHRcXHRcXHRsb2NrZGVwX3JlZ2lzdGVyX2tleShjdHgtXFx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMgKyBpKTtcXG4xMTQwOlxcdFxcdFxcdGxvY2tkZXBfc2V0X2NsYXNzKGN0eC1cXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MgKyBpLCBjdHgtXFx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMgKyBpKTtcXG4xMTQxOlxcdFxcdH1cXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0cmV0dXJuIDA7XFxuMTE0NDpcXHRcXG4xMTQ1OlxcdGVycl9sb2NrX2NsYXNzX2tleXM6XFxuMTE0NjpcXHRcXHRrZnJlZShjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzKTtcXG4xMTQ3OlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjExNDg6XFx0fVxcbjExNDk6XFx0XFxuMTE1MDpcXHRpbnQgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG4xMTUxOlxcdFxcdFxcdFxcdCAgICAgdTE2IHF1ZXVlcyxcXG4xMTUyOlxcdFxcdFxcdFxcdCAgICAgdTE2IHF1ZXVlX3NpemUpXFxuMTE1MzpcXHR7XFxuMTE1NDpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMTU1OlxcdFxcdGludCBpID0gMDtcXG4xMTU2OlxcdFxcbjExNTc6XFx0XFx0LyogT3BlbiBvbmUgZXh0cmEgcXVldWUgZm9yIGNvbnRyb2wgcGF0aCAqL1xcbjExNTg6XFx0XFx0Y3R4LVxcdTAwM2VxdWV1ZXMgPSBxdWV1ZXMgKyAxO1xcbjExNTk6XFx0XFxuMTE2MDpcXHRcXHQvKiBvcGVuIGEgc2VwYXJhdGUgc2V0IG9mIHF1ZXVlcyBhbmQgbG9ja3MgZm9yIGJ3YyBBUEkgKi9cXG4xMTYxOlxcdFxcdGVyciA9IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChjdHgpO1xcbjExNjI6XFx0XFx0aWYgKGVycilcXG4xMTYzOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTE2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MTYuMTkwMDk0MjY2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODY3NzA0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgUXVldWUgTWFuYWdlbWVudCBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZydzIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lLiBJdCBzZWVtcyBsaWtlIGBjdHgtXHUwMDNlcXVldWVzYCBnZXRzIGluY3JlbWVudGVkICpiZWZvcmUqIHRoZSBjYWxscyB0byBga3phbGxvY19vYmpzYC4gVGhlIHBvdGVudGlhbCBwcm9ibGVtIGhlcmUgaXMgdGhpczogaWYgdGhvc2UgYGt6YWxsb2Nfb2Jqc2AgY2FsbHMgZmFpbCwgYGN0eC1cdTAwM2VxdWV1ZXNgIGlzIHN0aWxsIGluY3JlbWVudGVkLCB3aGljaCBmZWVscyBsaWtlIGl0IGNvdWxkIGxlYWQgdG8gdHJvdWJsZSBkb3duIHRoZSBsaW5lLCBwb3RlbnRpYWxseSB3aGVuIGBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlYCBpcyBjYWxsZWQsIG9yIG1heWJlIHNvbWV3aGVyZSBlbHNlIGluIHRoZSBjb2RlIGJhc2UuIEEgZGFuZ2xpbmcgcG9pbnRlciwgcGVyaGFwcz8gT3IgaW5jb3JyZWN0IHF1ZXVlIGFjY291bnRpbmc/XG5cbldhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciBub3csIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIHJldHVybnMgYGVycmAgaWYgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgZmFpbHMuIFRoYXQncyBhIGdvb2QgZmFpbC1zYWZlLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBpbXBsaWNhdGlvbnMgb2YgdGhhdCBlcnJvciBwYXRoLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBoYW5kbGVzIGVycm9ycyBpbiB0aGlzIGNvbnRleHQuIExldCdzIHNlZSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgaW4gYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgd2hlbiB0aGF0IGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDQzLCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MjAuMDc2ODY3ODM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTUwOlxcdGludCBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxcbjExNTE6XFx0XFx0XFx0XFx0ICAgICB1MTYgcXVldWVzLFxcbjExNTI6XFx0XFx0XFx0XFx0ICAgICB1MTYgcXVldWVfc2l6ZSlcXG4xMTUzOlxcdHtcXG4xMTU0OlxcdFxcdGludCBlcnIgPSAwO1xcbjExNTU6XFx0XFx0aW50IGkgPSAwO1xcbjExNTY6XFx0XFxuMTE1NzpcXHRcXHQvKiBPcGVuIG9uZSBleHRyYSBxdWV1ZSBmb3IgY29udHJvbCBwYXRoICovXFxuMTE1ODpcXHRcXHRjdHgtXFx1MDAzZXF1ZXVlcyA9IHF1ZXVlcyArIDE7XFxuMTE1OTpcXHRcXG4xMTYwOlxcdFxcdC8qIG9wZW4gYSBzZXBhcmF0ZSBzZXQgb2YgcXVldWVzIGFuZCBsb2NrcyBmb3IgYndjIEFQSSAqL1xcbjExNjE6XFx0XFx0ZXJyID0gaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KGN0eCk7XFxuMTE2MjpcXHRcXHRpZiAoZXJyKVxcbjExNjM6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMTY0OlxcdFxcbjExNjU6XFx0XFx0Y3R4LVxcdTAwM2VzZW5kX3F1ZXVlID0ga3phbGxvY19vYmpzKCpjdHgtXFx1MDAzZXNlbmRfcXVldWUsIGN0eC1cXHUwMDNlcXVldWVzKTtcXG4xMTY2OlxcdFxcdGlmICghY3R4LVxcdTAwM2VzZW5kX3F1ZXVlKSB7XFxuMTE2NzpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjExNjg6XFx0XFx0XFx0Z290byBmcmVlX2J3Y19sb2NrcztcXG4xMTY5OlxcdFxcdH1cXG4xMTcwOlxcdFxcbjExNzE6XFx0XFx0LyogSWYgbmF0aXZlIEFQSSBpc24ndCBzdXBwb3J0ZWQsIHNraXAgdGhlIHVudXNlZCBuYXRpdmUgcXVldWVzOlxcbjExNzI6XFx0XFx0ICogaW5pdGlhbGl6ZSBCV0MgcXVldWVzIGFuZCBjb250cm9sIHF1ZXVlIG9ubHkuXFxuMTE3MzpcXHRcXHQgKi9cXG4xMTc0OlxcdFxcdGlmICghbWx4NWh3c19jb250ZXh0X25hdGl2ZV9zdXBwb3J0ZWQoY3R4KSlcXG4xMTc1OlxcdFxcdFxcdGkgPSBtbHg1aHdzX2J3Y19nZXRfcXVldWVfaWQoY3R4LCAwKTtcXG4xMTc2OlxcdFxcbjExNzc6XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBjdHgtXFx1MDAzZXF1ZXVlczsgaSsrKSB7XFxuMTE3ODpcXHRcXHRcXHRlcnIgPSBtbHg1aHdzX3NlbmRfcXVldWVfb3BlbihjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXNlbmRfcXVldWVbaV0sIHF1ZXVlX3NpemUpO1xcbjExNzk6XFx0XFx0XFx0aWYgKGVycilcXG4xMTgwOlxcdFxcdFxcdFxcdGdvdG8gY2xvc2Vfc2VuZF9xdWV1ZXM7XFxuMTE4MTpcXHRcXHR9XFxuMTE4MjpcXHRcXG4xMTgzOlxcdFxcdHJldHVybiAwO1xcbjExODQ6XFx0XFxuMTE4NTpcXHRjbG9zZV9zZW5kX3F1ZXVlczpcXG4xMTg2OlxcdFxcdCBfX2h3c19zZW5kX3F1ZXVlc19jbG9zZShjdHgsIGkpO1xcbjExODc6XFx0XFxuMTE4ODpcXHRcXHRrZnJlZShjdHgtXFx1MDAzZXNlbmRfcXVldWUpO1xcbjExODk6XFx0XFxuMTE5MDpcXHRmcmVlX2J3Y19sb2NrczpcXG4xMTkxOlxcdFxcdGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveShjdHgpO1xcbjExOTI6XFx0XFxuMTE5MzpcXHRcXHRyZXR1cm4gZXJyO1xcbjExOTQ6XFx0fVxcbjExOTU6XFx0XFxuMTE5NjpcXHRpbnQgbWx4NWh3c19zZW5kX3F1ZXVlX2FjdGlvbihzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXFxuMTE5NzpcXHRcXHRcXHRcXHQgICAgICB1MTYgcXVldWVfaWQsXFxuMTE5ODpcXHRcXHRcXHRcXHQgICAgICB1MzIgYWN0aW9ucylcXG4xMTk5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MjAuMDc3MDE5MzU1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNDUwMzIxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBSZXNvdXJjZSBMZWFrcyoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgYSBzcGVjaWZpYyBzY2VuYXJpbyBjYXVnaHQgbXkgZXllLiBJZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBlcnJvcnMgb3V0LCBpdCBqdXN0IHBhc3NlcyB0aGF0IGBlcnJgIHZhbHVlIHN0cmFpZ2h0IHVwIHRvIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gLCBhbmQgdGhlbiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCByZXR1cm5zLiBCdXQgSSdtIGNvbmNlcm5lZCBhYm91dCB3aGF0IGhhcHBlbnMgdG8gYGN0eC1cdTAwM2VxdWV1ZXNgIGluIHRoZSBtZWFudGltZS4gSXQgc2VlbXMgbGlrZSBgY3R4LVx1MDAzZXF1ZXVlc2AgbWlnaHQgZ2V0IG1vZGlmaWVkICpiZWZvcmUqIHRoZSBlcnJvciwgYnV0IHRoZSBjbGVhbnVwIG1pZ2h0IGJlIGluY29tcGxldGUgaWYgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgZmFpbHMgcmlnaHQgYWZ0ZXIuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgY2xlYW5zIHVwIGBjdHhgIHdoZW4gaXQgZXJyb3JzIG91dCwgYmVjYXVzZSBpZiBpdCBkb2Vzbid0LCB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgcmVzb3VyY2UgbGVhayBvbiBvdXIgaGFuZHMuXG5cblRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIG9mIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBldmVyeXdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcuIFRoYXQncyB0aGUgbmV4dCBzdGVwLCBJIHN1cHBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjA5LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MjQuMTIyMDU0MzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MTk3MjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYz0xMzQ9c3RhdGljIGludCBod3NfY29udGV4dF9pbml0X2h3cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0xNTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM6MTU3OlxcdHJldCA9IG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbihjdHgsIGF0dHItXFx1MDAzZXF1ZXVlcywgYXR0ci1cXHUwMDNlcXVldWVfc2l6ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMTU4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYz0xMTE1PXN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM6MTE1MDppbnQgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTUxLVxcdFxcdFxcdCAgICAgdTE2IHF1ZXVlcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5oPTE5Mz12b2lkIG1seDVod3Nfc2VuZF9xdWV1ZXNfY2xvc2Uoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuaC0xOTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmg6MTk1OmludCBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5oLTE5Ni1cXHRcXHRcXHQgICAgIHUxNiBxdWV1ZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUyOjI0LjE4ODI1NzMyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk3NzI2NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkNvbnRleHQgSW5pdGlhbGl6YXRpb24gRGl2aW5nIERlZXAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgY29udGV4dC5jYCBmaWxlIGFnYWluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIGhhcmR3YXJlIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQsIGFuZCB0aGF0IHN0YXJ0cyB3aXRoIHVuZGVyc3RhbmRpbmcgYGh3c19jb250ZXh0X2luaXRfaHdzYC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBoZXJlLCBrbm93aW5nIGhvdyB0aGlzIHN5c3RlbSBpcyBhcmNoaXRlY3RlZC4gTGV0J3Mgc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBzZXR1cC4gSSBleHBlY3QgdGhlcmUgd2lsbCBiZSBwbGVudHkgb2YgcG9pbnRlciBtYW5pcHVsYXRpb24gYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdG8gY29uc2lkZXIgaW4gdGhpcyBzZWN0aW9uLCB0b28sIHNvIEknbGwgYmUga2VlcGluZyBhIGtlZW4gZXllIG91dCBmb3IgdGhvc2UgdGhpbmdzLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb3JuZXJzdG9uZSwgc28gdW5kZXJzdGFuZGluZyBpdCBpcyBnb2luZyB0byBiZSBrZXkgdG8gZGVidWdnaW5nIGFueSBpc3N1ZXMgZG93biB0aGUgbGluZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHJlZ2lzdGVyIGFzc2lnbm1lbnRzLCBhbnkgbWVtb3J5IG1hcHBpbmcsIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZC4gTm93LCBsZXQncyBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTc4LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MjcuMzg1OTg2NzQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzQ6XFx0c3RhdGljIGludCBod3NfY29udGV4dF9pbml0X2h3cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXFxuIDEzNTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWx4NWh3c19jb250ZXh0X2F0dHIgKmF0dHIpXFxuIDEzNjpcXHR7XFxuIDEzNzpcXHRcXHRpbnQgcmV0O1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHRod3NfY29udGV4dF9jaGVja19od3Nfc3VwcChjdHgpO1xcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHRpZiAoIShjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUxYNUhXU19DT05URVhUX0ZMQUdfSFdTX1NVUFBPUlQpKVxcbiAxNDI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdHJldCA9IGh3c19jb250ZXh0X2luaXRfcGQoY3R4KTtcXG4gMTQ1OlxcdFxcdGlmIChyZXQpXFxuIDE0NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHRyZXQgPSBod3NfY29udGV4dF9wb29sc19pbml0KGN0eCk7XFxuIDE0OTpcXHRcXHRpZiAocmV0KVxcbiAxNTA6XFx0XFx0XFx0Z290byB1bmluaXRfcGQ7XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcdC8qIENvbnRleHQgaGFzIHN1cHBvcnQgZm9yIGJhY2t3YXJkIGNvbXBhdGlibGUgQVBJLFxcbiAxNTM6XFx0XFx0ICogYW5kIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgbmF0aXZlIEhXUyBBUEkuXFxuIDE1NDpcXHRcXHQgKi9cXG4gMTU1OlxcdFxcdGN0eC1cXHUwMDNlZmxhZ3MgfD0gTUxYNUhXU19DT05URVhUX0ZMQUdfQldDX1NVUFBPUlQ7XFxuIDE1NjpcXHRcXG4gMTU3OlxcdFxcdHJldCA9IG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbihjdHgsIGF0dHItXFx1MDAzZXF1ZXVlcywgYXR0ci1cXHUwMDNlcXVldWVfc2l6ZSk7XFxuIDE1ODpcXHRcXHRpZiAocmV0KVxcbiAxNTk6XFx0XFx0XFx0Z290byBwb29sc191bmluaXQ7XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdHJldCA9IG1seDVod3NfYWN0aW9uX3N0ZV9wb29sX2luaXQoY3R4KTtcXG4gMTYyOlxcdFxcdGlmIChyZXQpXFxuIDE2MzpcXHRcXHRcXHRnb3RvIGNsb3NlX3F1ZXVlcztcXG4gMTY0OlxcdFxcbiAxNjU6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmN0eC1cXHUwMDNldGJsX2xpc3QpO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRyZXR1cm4gMDtcXG4gMTY4OlxcdFxcbiAxNjk6XFx0Y2xvc2VfcXVldWVzOlxcbiAxNzA6XFx0XFx0bWx4NWh3c19zZW5kX3F1ZXVlc19jbG9zZShjdHgpO1xcbiAxNzE6XFx0cG9vbHNfdW5pbml0OlxcbiAxNzI6XFx0XFx0aHdzX2NvbnRleHRfcG9vbHNfdW5pbml0KGN0eCk7XFxuIDE3MzpcXHR1bmluaXRfcGQ6XFxuIDE3NDpcXHRcXHRod3NfY29udGV4dF91bmluaXRfcGQoY3R4KTtcXG4gMTc1OlxcdFxcdHJldHVybiByZXQ7XFxuIDE3NjpcXHR9XFxuIDE3NzpcXHRcXG4gMTc4OlxcdHN0YXRpYyB2b2lkIGh3c19jb250ZXh0X3VuaW5pdF9od3Moc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbiAxNzk6XFx0e1xcbiAxODA6XFx0XFx0aWYgKCEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IE1MWDVIV1NfQ09OVEVYVF9GTEFHX0hXU19TVVBQT1JUKSlcXG4gMTgxOlxcdFxcdFxcdHJldHVybjtcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0bWx4NWh3c19hY3Rpb25fc3RlX3Bvb2xfdW5pbml0KGN0eCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUyOjI3LjM4NjEzMTQ2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU3OTExNzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgUmVzb3VyY2UgTGVha3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgc29tZXRoaW5nJ3MgYnVnZ2luZyBtZS4gU3BlY2lmaWNhbGx5LCBJJ20gY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcywgcmlnaHQ/IE15IHRoaW5raW5nIGlzIHRoaXM6IGlmIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIGZhaWxzLCB0aGUgZXhlY3V0aW9uIGp1bXBzIHRvIGBwb29sc191bmluaXRgLiBUaGUgaXNzdWUgaXMsIGBwb29sc191bmluaXRgIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgY29ycmVzcG9uZGluZyBjYWxsIHRvIGBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlYC4gVGhhdCByYWlzZXMgYSByZWQgZmxhZzsgd2UgY291bGQgYmUgbGVha2luZyByZXNvdXJjZXMgaWYgdGhhdCBgb3BlbmAgY2FsbCBmYWlscyBidXQgdGhlIHJlc291cmNlcyBhcmVuJ3QgcHJvcGVybHkgY2xvc2VkLlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0LiBgbWx4NWh3c19jb250ZXh0X29wZW5gIGFsc28gbG9va3Mgc2lnbmlmaWNhbnQgaGVyZS4gSSBzZWUgdGhhdCBpdCBjYWxscyBgaHdzX2NvbnRleHRfaW5pdF9od3NgLiBJZiBgaHdzX2NvbnRleHRfaW5pdF9od3NgIGZhaWxzICpkdXJpbmcqIHRoYXQgcHJvY2VzcywgdGhlIGNvZGUgZG9lcyBwZXJmb3JtIHNvbWUgY2xlYW51cCBhbmQgcmV0dXJucy4gSW50ZXJlc3RpbmdseSwgdGhlIGNvbnRleHQgKGBjdHhgKSBpdHNlbGYgYXBwZWFycyB0byBiZSBmcmVlZCB3aXRoaW4gYG1seDVod3NfY29udGV4dF9vcGVuYCBpZiBhbiBlcnJvciBvY2N1cnMuIFRoYXQncyBnb29kLCBidXQgSSBzdGlsbCBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhlIHF1ZXVlIG1hbmFnZW1lbnQuXG5cblJpZ2h0LCBzbyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMsIEkgbmVlZCB0byBjaGVjayBgbWx4NWh3c19jb250ZXh0X29wZW5gJ3MgbG9naWMgbW9yZSBjbG9zZWx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBlcnJvciBoYW5kbGluZywgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoYXQgZnVuY3Rpb24gdG8gY29uZmlybSB0aGUgbGVhayBpcyBwb3NzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxNzMsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MjozMS41NDQwNDY1OThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMDc5OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1seDVod3NfY29udGV4dF9vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jPTE3OD1zdGF0aWMgdm9pZCBod3NfY29udGV4dF91bmluaXRfaHdzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE4OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYzoxODk6c3RydWN0IG1seDVod3NfY29udGV4dCAqbWx4NWh3c19jb250ZXh0X29wZW4oc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMTkwLVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1seDVod3NfY29udGV4dF9hdHRyICphdHRyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYz0xMzA9c3RhdGljIGludCBtbHg1X2NtZF9od3NfY3JlYXRlX25zKHN0cnVjdCBtbHg1X2Zsb3dfcm9vdF9uYW1lc3BhY2UgKm5zKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYy0xMzktXFx0bnMtXFx1MDAzZWZzX2h3c19jb250ZXh0Lmh3c19jdHggPVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmM6MTQwOlxcdFxcdG1seDVod3NfY29udGV4dF9vcGVuKG5zLVxcdTAwM2VkZXYsIFxcdTAwMjZod3NfY3R4X2F0dHIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmMtMTQxLVxcdGlmICghbnMtXFx1MDAzZWZzX2h3c19jb250ZXh0Lmh3c19jdHgpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWx4NWh3cy5oPTIzNT1zdGF0aWMgaW5saW5lIGJvb2wgbWx4NWh3c19pc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21seDVod3MuaC0yNDktLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tbHg1aHdzLmg6MjUwOiAqIG1seDVod3NfY29udGV4dF9vcGVuIC0gT3BlbiBhIGNvbnRleHQgdXNlZCBmb3IgZGlyZWN0IHJ1bGUgaW5zZXJ0aW9uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tbHg1aHdzLmgtMjUxLSAqIHVzaW5nIGhhcmR3YXJlIHN0ZWVyaW5nLlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tbHg1aHdzLmg9MjU4PXN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWx4NWh3cy5oOjI1OTptbHg1aHdzX2NvbnRleHRfb3BlbihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21seDVod3MuaC0yNjAtXFx0XFx0ICAgICBzdHJ1Y3QgbWx4NWh3c19jb250ZXh0X2F0dHIgKmF0dHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MjozMS42MTUxMzE4OTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5Njc0MTY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG1seDVod3NfY29udGV4dF9vcGVuYCBmdW5jdGlvbi4gQXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGtleSBhcmVhcyB0byBzY3J1dGluaXplLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGhhcmR3YXJlIGNvbnRleHQg4oCTIHdoYXQncyBiZWluZyBpbml0aWFsaXplZD8gV2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGFsbG9jYXRlZD8gSSBleHBlY3QgdG8gc2VlIHRoZSBzZXR1cCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBNZWxsYW5veCBoYXJkd2FyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVycm9yIGhhbmRsaW5nLCBvZiBjb3Vyc2U7IGhvdyByb2J1c3QgaXMgaXQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgYW5kIGhvdyBhcmUgdGhleSBtYW5hZ2VkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBlc3BlY2lhbGx5IGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQ/IEknbGwgYmUgbG9va2luZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcGF0dGVybnMgYW5kIHBvdGVudGlhbCBsZWFrcyBhcyB3ZWxsLCBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGNvbnRleHQgaW50ZWdyYXRlcyB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUuIEkgd2FudCB0byBzZWUgYSBjbGVhciBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLCBhbmQgYW4gb2J2aW91cyBhdHRlbXB0IGF0IGNvZGUgbW9kdWxhcml0eSAtIGNhbiB0aGUgZnVuY3Rpb24gYmUgZWFzaWx5IGV4dGVuZGVkLCBtb2RpZmllZCBvciByZWZhY3RvcmVkIGluIHRoZSBmdXR1cmU/IFVsdGltYXRlbHksIEknbSBrZWVuIHRvIGdyYXNwIHRoZSBjb3JlIG1lY2hhbmljcyBvZiBob3cgdGhlIGhhcmR3YXJlIGlzIGJyb3VnaHQgb25saW5lIGFuZCBtYWRlIHJlYWR5IGZvciBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDAxLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MzQuOTExODc3MDAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODk6XFx0c3RydWN0IG1seDVod3NfY29udGV4dCAqbWx4NWh3c19jb250ZXh0X29wZW4oc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuIDE5MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtbHg1aHdzX2NvbnRleHRfYXR0ciAqYXR0cilcXG4gMTkxOlxcdHtcXG4gMTkyOlxcdFxcdHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eDtcXG4gMTkzOlxcdFxcdGludCByZXQ7XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xcbiAxOTY6XFx0XFx0aWYgKCFjdHgpXFxuIDE5NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTk4OlxcdFxcbiAxOTk6XFx0XFx0Y3R4LVxcdTAwM2VtZGV2ID0gbWRldjtcXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2VjdHJsX2xvY2spO1xcbiAyMDI6XFx0XFx0eGFfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2VwZWVyX2N0eF94YSk7XFxuIDIwMzpcXHRcXG4gMjA0OlxcdFxcdGN0eC1cXHUwMDNlY2FwcyA9IGt6YWxsb2Nfb2JqKCpjdHgtXFx1MDAzZWNhcHMpO1xcbiAyMDU6XFx0XFx0aWYgKCFjdHgtXFx1MDAzZWNhcHMpXFxuIDIwNjpcXHRcXHRcXHRnb3RvIGZyZWVfY3R4O1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRyZXQgPSBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzKG1kZXYsIGN0eC1cXHUwMDNlY2Fwcyk7XFxuIDIwOTpcXHRcXHRpZiAocmV0KVxcbiAyMTA6XFx0XFx0XFx0Z290byBmcmVlX2NhcHM7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdHJldCA9IG1seDVod3NfdnBvcnRfaW5pdF92cG9ydHMoY3R4KTtcXG4gMjEzOlxcdFxcdGlmIChyZXQpXFxuIDIxNDpcXHRcXHRcXHRnb3RvIGZyZWVfY2FwcztcXG4gMjE1OlxcdFxcbiAyMTY6XFx0XFx0cmV0ID0gaHdzX2NvbnRleHRfaW5pdF9od3MoY3R4LCBhdHRyKTtcXG4gMjE3OlxcdFxcdGlmIChyZXQpXFxuIDIxODpcXHRcXHRcXHRnb3RvIHVuaW5pdF92cG9ydHM7XFxuIDIxOTpcXHRcXG4gMjIwOlxcdFxcdG1seDVod3NfZGVidWdfaW5pdF9kdW1wKGN0eCk7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdHJldHVybiBjdHg7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdHVuaW5pdF92cG9ydHM6XFxuIDIyNTpcXHRcXHRtbHg1aHdzX3Zwb3J0X3VuaW5pdF92cG9ydHMoY3R4KTtcXG4gMjI2OlxcdGZyZWVfY2FwczpcXG4gMjI3OlxcdFxcdGtmcmVlKGN0eC1cXHUwMDNlY2Fwcyk7XFxuIDIyODpcXHRmcmVlX2N0eDpcXG4gMjI5OlxcdFxcdHhhX2Rlc3Ryb3koXFx1MDAyNmN0eC1cXHUwMDNlcGVlcl9jdHhfeGEpO1xcbiAyMzA6XFx0XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2Y3R4LVxcdTAwM2VjdHJsX2xvY2spO1xcbiAyMzE6XFx0XFx0a2ZyZWUoY3R4KTtcXG4gMjMyOlxcdFxcdHJldHVybiBOVUxMO1xcbiAyMzM6XFx0fVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRpbnQgbWx4NWh3c19jb250ZXh0X2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4gMjM2OlxcdHtcXG4gMjM3OlxcdFxcdG1seDVod3NfZGVidWdfdW5pbml0X2R1bXAoY3R4KTtcXG4gMjM4OlxcdFxcdGh3c19jb250ZXh0X3VuaW5pdF9od3MoY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6MzQuOTExOTgzNTUzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDk3MTUyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBMZWFrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCBhIHBvdGVudGlhbCBpc3N1ZS4gSXQgc2VlbXMgbGlrZSBpZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscywgdGhlIGBjdHhgIHN0cnVjdCBpcyBpbW1lZGlhdGVseSBmcmVlZC4gVGhlIGJ1ZyBoZXJlIGlzIHRoYXQgYGN0eC1cdTAwM2VxdWV1ZXNgIGdldHMgaW5jcmVtZW50ZWQgKmJlZm9yZSogdGhlIGNoZWNrIGFuZCBwb3RlbnRpYWwgZnJlZS4gSG93ZXZlciwgaW4gdGhpcyBzcGVjaWZpYyBjYXNlIGl0IGRvZXNuJ3QgbWF0dGVyIGZvciBgY3R4YCBpdHNlbGYgYmVjYXVzZSBpdCBnZXRzIGZyZWVkIGltbWVkaWF0ZWx5LlxuXG5CdXQsIGEgcmVkIGZsYWcgcG9wcGVkIHVwLiBXaGF0IGhhcHBlbnMgaWYgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgZmFpbHMgbGF0ZXIgb24/IFNwZWNpZmljYWxseSwgbGV0J3Mgc2F5IGl0IGZhaWxzIHdpdGhpbiBgbWx4NWh3c19zZW5kX3F1ZXVlX29wZW5gLiBJZiB0aGF0IGhhcHBlbnMsIHRoZSBjb2RlIGZsb3cgbGVhZHMgdG8gYGNsb3NlX3NlbmRfcXVldWVzYC4gV2l0aGluIGBjbG9zZV9zZW5kX3F1ZXVlc2AsIHdlJ3JlIGNhbGxpbmcgYF9faHdzX3NlbmRfcXVldWVzX2Nsb3NlKGN0eCwgaSk7YCwgYW5kICp0aGVuKiB3ZSBjYWxsIGBmcmVlX2J3Y19sb2Nrc2AsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveShjdHgpYC4gSSBuZWVkIHRvIGRpZyBpbnRvIGBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3lgIG5vdyBiZWNhdXNlIGl0J3MgcG9zc2libGUgdGhhdCBgY3R4YCBpcyBub3QgdmFsaWQgYXQgdGhpcyBwb2ludCEgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBiZWVuIGluaXRpYWxpemVkIGNvcnJlY3RseSBhbmQgaGFzbid0IGJlZW4gY29ycnVwdGVkLiBJIG5lZWQgdG8ga25vdyB3aGF0IGhhcHBlbnMgaWYgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgZmFpbHMgKmFmdGVyKiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBoYXMgc3VjY2VlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM5MywiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUyOjM5LjUyMTcwMjM4OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5OSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA5OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYndjX3F1ZXVlczsgaSsrKSB7XFxuMTEwMDpcXHRcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzW2ldKTtcXG4xMTAxOlxcdFxcdFxcdGxvY2tkZXBfdW5yZWdpc3Rlcl9rZXkoY3R4LVxcdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzICsgaSk7XFxuMTEwMjpcXHRcXHR9XFxuMTEwMzpcXHRcXG4xMTA0OlxcdFxcdGtmcmVlKGN0eC1cXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyk7XFxuMTEwNTpcXHRcXHRrZnJlZShjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzKTtcXG4xMTA2OlxcdH1cXG4xMTA3OlxcdFxcbjExMDg6XFx0dm9pZCBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4xMTA5OlxcdHtcXG4xMTEwOlxcdFxcdGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveShjdHgpO1xcbjExMTE6XFx0XFx0X19od3Nfc2VuZF9xdWV1ZXNfY2xvc2UoY3R4LCBjdHgtXFx1MDAzZXF1ZXVlcyk7XFxuMTExMjpcXHRcXHRrZnJlZShjdHgtXFx1MDAzZXNlbmRfcXVldWUpO1xcbjExMTM6XFx0fVxcbjExMTQ6XFx0XFxuMTExNTpcXHRzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuMTExNjpcXHR7XFxuMTExNzpcXHRcXHQvKiBOdW1iZXIgb2YgQldDIHF1ZXVlcyBpcyBlcXVhbCB0byBudW1iZXIgb2YgdGhlIHVzdWFsIEhXUyBxdWV1ZXMgKi9cXG4xMTE4OlxcdFxcdGludCBid2NfcXVldWVzID0gY3R4LVxcdTAwM2VxdWV1ZXMgLSAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1MjozOS41MjE4MTYzNDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwNDE4MzQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3lgIGFuZCBpbW1lZGlhdGVseSBhIHJlZCBmbGFnIHBvcHMgdXAuIEl0IHNlZW1zIHRvIGJlIGRlY3JlbWVudGluZyBgY3R4LVx1MDAzZXF1ZXVlc2Agd2l0aCBgYndjX3F1ZXVlcyA9IGN0eC1cdTAwM2VxdWV1ZXMgLSAxO2AgLiAqVGhhdCogd2FycmFudHMgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkncmUgc3VidHJhY3Rpbmcgb25lIGhlcmUuIElzIGl0IGEgcG90ZW50aWFsIG9mZi1ieS1vbmUgZXJyb3I/IEFtIEkgbWlzdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dD8gSXMgdGhpcyBpbnRlbmRlZCBiZWhhdmlvciBmb3Igc29tZSBzdWJ0bGUgcmVhc29uIHJlbGF0ZWQgdG8gdGhlIHF1ZXVpbmcgbWVjaGFuaXNtIG9yIGJhbmR3aWR0aCBjb250cm9sIHRoYXQgSSBuZWVkIHRvIHJlY2FsbD8gSSdtIGdvaW5nIHRvIGhhdmUgdG8gdmVyaWZ5IHRoaXMgbG9naWMgY2FyZWZ1bGx5IHRvIG1ha2Ugc3VyZSBpdCBpcyBjb3JyZWN0LCBzYWZlLCBhbmQgZWZmaWNpZW50LiBMZXQncyBkZWx2ZSBpbiBhbmQgc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMyOCwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6NDIuODI2MDAyMzU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDkwOlxcdFxcbjEwOTE6XFx0c3RhdGljIHZvaWQgaHdzX3NlbmRfcXVldWVzX2J3Y19sb2Nrc19kZXN0cm95KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4xMDkyOlxcdHtcXG4xMDkzOlxcdFxcdGludCBid2NfcXVldWVzID0gbWx4NWh3c19id2NfcXVldWVzKGN0eCk7XFxuMTA5NDpcXHRcXHRpbnQgaTtcXG4xMDk1OlxcdFxcbjEwOTY6XFx0XFx0aWYgKCFtbHg1aHdzX2NvbnRleHRfYndjX3N1cHBvcnRlZChjdHgpKVxcbjEwOTc6XFx0XFx0XFx0cmV0dXJuO1xcbjEwOTg6XFx0XFxuMTA5OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYndjX3F1ZXVlczsgaSsrKSB7XFxuMTEwMDpcXHRcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzW2ldKTtcXG4xMTAxOlxcdFxcdFxcdGxvY2tkZXBfdW5yZWdpc3Rlcl9rZXkoY3R4LVxcdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzICsgaSk7XFxuMTEwMjpcXHRcXHR9XFxuMTEwMzpcXHRcXG4xMTA0OlxcdFxcdGtmcmVlKGN0eC1cXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyk7XFxuMTEwNTpcXHRcXHRrZnJlZShjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzKTtcXG4xMTA2OlxcdH1cXG4xMTA3OlxcdFxcbjExMDg6XFx0dm9pZCBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4xMTA5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6NDIuODI2MTEwOTU4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjkxODQwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIG1seDVod3NfYndjX3F1ZXVlcyhjdHgpIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyBgbWx4NWh3c19id2NfcXVldWVzKGN0eClgIGlzIGJlaW5nIGludm9rZWQgaGVyZS4gSW50ZXJlc3RpbmcuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gaW1tZWRpYXRlbHkgZGlzc2VjdCB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgY29udGV4dCwgc3BlY2lmaWNhbGx5IHdoYXQgaXQncyBjb250cmlidXRpbmcgdG8gdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBUaGUgbmFtZSBpdHNlbGYsIFwiYndjLFwiIGxpa2VseSBoaW50cyBhdCBiYW5kd2lkdGggY29udHJvbCBvciBzb21lIGtpbmQgb2YgcmVzb3VyY2UgbWFuYWdlbWVudCByZWxhdGVkIHRvIHF1ZXVlcywgZ2l2ZW4gdGhlIFwicXVldWVzXCIgc3VmZml4LiBNeSBtZW50YWwgY2hlY2tsaXN0IGtpY2tzIGluOiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24sIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMgb24gYGN0eGAgYW5kIGFueSByZWxhdGVkIHN0cnVjdHVyZXMsIGFuZCB1bmRlcnN0YW5kIHRoZSBhbGdvcml0aG1zIHVzZWQgZm9yIGJhbmR3aWR0aCBhbGxvY2F0aW9uIG9yIHF1ZXVlIG1hbmFnZW1lbnQuIElzIGl0IHVzaW5nIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvZiB0aGUgTWVsbGFub3ggYWRhcHRlcj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgSSBzaG91bGQgYmUgYXdhcmUgb2YsIGxpa2UgbG9jayBjb250ZW50aW9uIG9yIGluZWZmaWNpZW50IGRhdGEgc3RydWN0dXJlcz8gVGhlIGBjdHhgIHBhcmFtZXRlciBpcyB0aGUgbmV4dCBjcnVjaWFsIHBpZWNlLiBJJ2xsIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIG5hdHVyZSBvZiB0aGUgY29udGV4dCwgYW5kIHdoYXQgZGF0YSBpdCdzIGhvbGRpbmcgdG8gdHJ1bHkgdW5kZXJzdGFuZCBob3cgaXQgaXMgYmVpbmcgdXNlZCBieSB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTUxLCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1Mjo0Ni40OTUyOTgwODVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTYyNzkyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbHg1aHdzX2J3Y19xdWV1ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYz02PXN0YXRpYyB1MTYgaHdzX2J3Y19nZW5fcXVldWVfaWR4KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtOC1cXHQvKiBhc3NpZ24gcmFuZG9tIHF1ZXVlICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYzo5OlxcdHJldHVybiBnZXRfcmFuZG9tX3U4KCkgJSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTEwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM9MjU9c3RhdGljIHZvaWQgaHdzX2J3Y19sb2NrX2FsbF9xdWV1ZXMoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM6Mjc6XFx0dTE2IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTI4LVxcdHN0cnVjdCBtdXRleCAqcXVldWVfbG9jazsgLyogUHJvdGVjdCB0aGUgcXVldWUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM9Mzc9c3RhdGljIHZvaWQgaHdzX2J3Y191bmxvY2tfYWxsX3F1ZXVlcyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYy0zOC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYzozOTpcXHR1MTYgYndjX3F1ZXVlcyA9IG1seDVod3NfYndjX3F1ZXVlcyhjdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtNDAtXFx0c3RydWN0IG11dGV4ICpxdWV1ZV9sb2NrOyAvKiBQcm90ZWN0IHRoZSBxdWV1ZSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYz02OT1od3NfYndjX21hdGNoZXJfbW92ZV9hbGxfc2ltcGxlKHN0cnVjdCBtbHg1aHdzX2J3Y19tYXRjaGVyICpid2NfbWF0Y2hlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtNzMtXFx0aW50IGRyYWluX2Vycm9yID0gMCwgbW92ZV9lcnJvciA9IDAsIHBvbGxfZXJyb3IgPSAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM6NzQ6XFx0dTE2IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTc1LVxcdHN0cnVjdCBtbHg1aHdzX3J1bGVfYXR0ciBydWxlX2F0dHI7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jPTIyNz1pbnQgbWx4NWh3c19id2NfbWF0Y2hlcl9jcmVhdGVfc2ltcGxlKHN0cnVjdCBtbHg1aHdzX2J3Y19tYXRjaGVyICpid2NfbWF0Y2hlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjM1LVxcdHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCA9IHRhYmxlLVxcdTAwM2VjdHg7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuYzoyMzY6XFx0dTE2IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTIzNy1cXHRzdHJ1Y3QgbWx4NWh3c19tYXRjaGVyX2F0dHIgYXR0ciA9IHswfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmg9OTc9aW50IG1seDVod3NfYndjX3F1ZXVlX3BvbGwoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuaC0xMDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuaDoxMDI6c3RhdGljIGlubGluZSB1MTYgbWx4NWh3c19id2NfcXVldWVzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5oLTEwMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5oPTExMj1zdGF0aWMgaW5saW5lIHUxNiBtbHg1aHdzX2J3Y19nZXRfcXVldWVfaWQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LCB1MTYgaWR4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmgtMTEzLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5oOjExNDpcXHRyZXR1cm4gaWR4ICsgbWx4NWh3c19id2NfcXVldWVzKGN0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2MuaC0xMTUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9id2NfY29tcGxleC5jPTk0OD1od3NfYndjX21hdGNoZXJfaW5pdF9tb3ZlKHN0cnVjdCBtbHg1aHdzX2J3Y19tYXRjaGVyICpid2NfbWF0Y2hlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYy05NTAtXFx0c3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4ID0gYndjX21hdGNoZXItXFx1MDAzZW1hdGNoZXItXFx1MDAzZXRibC1cXHUwMDNlY3R4O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYzo5NTE6XFx0dTE2IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Y19jb21wbGV4LmMtOTUyLVxcdHN0cnVjdCBtbHg1aHdzX2J3Y19ydWxlICpid2NfcnVsZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYz05Njk9aW50IG1seDVod3NfYndjX21hdGNoZXJfY29tcGxleF9tb3ZlKHN0cnVjdCBtbHg1aHdzX2J3Y19tYXRjaGVyICpid2NfbWF0Y2hlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYy05NzItXFx0c3RydWN0IG1seDVod3NfbWF0Y2hlciAqbWF0Y2hlciA9IGJ3Y19tYXRjaGVyLVxcdTAwM2VtYXRjaGVyO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjX2NvbXBsZXguYzo5NzM6XFx0dTE2IGJ3Y19xdWV1ZXMgPSBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Y19jb21wbGV4LmMtOTc0LVxcdHN0cnVjdCBtbHg1aHdzX2J3Y19ydWxlICp0bXBfYndjX3J1bGU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYz0xMDkxPXN0YXRpYyB2b2lkIGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveShzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTA5Mi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM6MTA5MzpcXHRpbnQgYndjX3F1ZXVlcyA9IG1seDVod3NfYndjX3F1ZXVlcyhjdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTEwOTQtXFx0aW50IGk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUyOjQ2Ljg2NDkzMDg2M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk4ODcyMzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIEJhbmR3aWR0aCBDb250cm9sIFF1ZXVlcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGJhbmR3aWR0aCBjb250cm9sIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBNZWxsYW5veCBoYXJkd2FyZSBjb250ZXh0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgdG8gYG1seDVod3NfYndjX3F1ZXVlc2AsIGxpa2VseSBkZWZpbmVkIGluIGBid2MuaGAuIFRoaXMgc3VnZ2VzdHMgSSdtIGxvb2tpbmcgZm9yIHRoZSBzdHJ1Y3R1cmFsIGRlZmluaXRpb25zLCBjb25zdGFudHMsIGFuZCBwb3RlbnRpYWxseSwgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBnb3Zlcm4gcXVldWUtbGV2ZWwgYmFuZHdpZHRoIGFsbG9jYXRpb24gYW5kIGVuZm9yY2VtZW50IHdpdGhpbiB0aGUgTUxYNSBoYXJkd2FyZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB1c3VhbGx5IHJlc2lkZXMsIGVuYWJsaW5nIHRyYWZmaWMgc2hhcGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC4gSSdtIGFudGljaXBhdGluZyB0byBzZWUgZGV0YWlscyByZWxhdGVkIHRvIHRoZSBxdWV1ZSBpZGVudGlmaWVycywgcmF0ZSBsaW1pdGluZyBwYXJhbWV0ZXJzIChlLmcuLCBDSVIsIFBJUiwgYnVyc3Qgc2l6ZXMpLCBhbmQgdGhlIG1lY2hhbmlzbXMgZm9yIGVuZm9yY2luZyB0aGVzZSBsaW1pdHMgd2l0aGluIHRoZSBoYXJkd2FyZSdzIGludGVybmFsIHNjaGVkdWxpbmcuIEdvaW5nIHRvIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoYXQgc3BlY2lmaWMgZWxlbWVudCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjgwLCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6NTAuMjYzODA2MTg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMjpcXHRzdGF0aWMgaW5saW5lIHUxNiBtbHg1aHdzX2J3Y19xdWV1ZXMoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbiAxMDM6XFx0e1xcbiAxMDQ6XFx0XFx0LyogQmVzaWRlcyB0aGUgY29udHJvbCBxdWV1ZSwgaGFsZiBvZiB0aGUgcXVldWVzIGFyZVxcbiAxMDU6XFx0XFx0ICogcmVndWxhciBIV1MgcXVldWVzLCBhbmQgdGhlIG90aGVyIGhhbGYgYXJlIEJXQyBxdWV1ZXMuXFxuIDEwNjpcXHRcXHQgKi9cXG4gMTA3OlxcdFxcdGlmIChtbHg1aHdzX2NvbnRleHRfYndjX3N1cHBvcnRlZChjdHgpKVxcbiAxMDg6XFx0XFx0XFx0cmV0dXJuIChjdHgtXFx1MDAzZXF1ZXVlcyAtIDEpIC8gMjtcXG4gMTA5OlxcdFxcdHJldHVybiAwO1xcbiAxMTA6XFx0fVxcbiAxMTE6XFx0XFxuIDExMjpcXHRzdGF0aWMgaW5saW5lIHUxNiBtbHg1aHdzX2J3Y19nZXRfcXVldWVfaWQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LCB1MTYgaWR4KVxcbiAxMTM6XFx0e1xcbiAxMTQ6XFx0XFx0cmV0dXJuIGlkeCArIG1seDVod3NfYndjX3F1ZXVlcyhjdHgpO1xcbiAxMTU6XFx0fVxcbiAxMTY6XFx0XFxuIDExNzpcXHQjZW5kaWYgLyogSFdTX0JXQ19IXyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1Mjo1MC4yNjM5MzgyMTVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkwMTAyNjY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG1seDVod3MgUXVldWUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgYG1seDVod3NfYndjX3F1ZXVlc2AgY2FsY3VsYXRpbmcgYChjdHgtXHUwMDNlcXVldWVzIC0gMSkgLyAyYC4gVGhlbiwgSSBzdGFydGVkIGRpZ2dpbmcgaW50byB0aGUgcG90ZW50aWFsIGZhaWx1cmUgc2NlbmFyaW9zLCBzcGVjaWZpY2FsbHkgaWYgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgZmFpbHMuIEkgc2VlIHRoYXQgaWYgdGhpcyBmdW5jdGlvbiBmYWlscywgYGN0eC1cdTAwM2VxdWV1ZXNgIHdhcyBhbHJlYWR5IGluY3JlbWVudGVkIGJ5IGBid2NfcXVldWVzYCDigJMgd2hpY2ggaXMgZXF1YWwgdG8gdGhlIG9yaWdpbmFsIGBjdHgtXHUwMDNlcXVldWVzIC0gMWAuIFNvLCBpZiBgY3R4LVx1MDAzZXF1ZXVlc2Agc3RhcnRzIGF0IDMsIGBid2NfcXVldWVzYCBiZWNvbWVzIDIsIGFuZCBgY3R4LVx1MDAzZXF1ZXVlc2AgaXMgdXBkYXRlZCB0byA1LlxuXG5Ob3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscyAqYWZ0ZXIqIHRoaXMgaW5jcmVtZW50LCB0aGUgcmV0dXJuIHZhbHVlIGBlcnJgIGlzIHBhc3NlZCBkaXJlY3RseSB1cCB0byBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYC4gQ3J1Y2lhbGx5LCBpdCBieXBhc3NlcyB0aGUgY2xlYW51cCBzdGVwczogYGZyZWVfYndjX2xvY2tzYCBhbmQgYGNsb3NlX3NlbmRfcXVldWVzYC4gVGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIGNvbmNlcm4sIGkuZS4sIHdoZXRoZXIgdGhlIGxvY2tzIHdlcmUgcHJvcGVybHkgZnJlZWQuXG5cbkhvd2V2ZXIsIEkgcmVtZW1iZXJlZCB0aGF0IGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgICpkb2VzKiBwZXJmb3JtIGl0cyBvd24gY2xlYW51cCBvbiBmYWlsdXJlLCBzcGVjaWZpY2FsbHkgZnJlZWluZyBgY3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzYC4gU28sIGl0IGZyZWVzIHVwIHRoYXQgbWVtb3J5IHRoYXQgaXQgYWxsb2NhdGVkLiBUaGUgaXNzdWUgaXMgdGhhdCB0aGUgYGN0eC1cdTAwM2VxdWV1ZXNgIHZhbHVlIHJlbWFpbnMgaW5jcmVtZW50ZWQsIGV2ZW4gdGhvdWdoIHRoZSBmdW5jdGlvbiBmYWlscyFcblxuQnV0IHRoZW4sIEkgdHJhY2VkIHRoZSBmYWlsdXJlIHBhdGggZnVydGhlci4gVGhlIGVycm9yIGNvZGUsIGxpa2VseSBgLUVOT01FTWAgaW4gdGhpcyBjYXNlLCBidWJibGVzIHVwIGZyb20gYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgdG8gYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgYW5kIHRoZW4gdG8gYGh3c19jb250ZXh0X2luaXRfaHdzYC4gRnJvbSB0aGVyZSwgdGhlIGNvbnRyb2wgZmxvd3MgdGhyb3VnaCBgcG9vbHNfdW5pbml0YCwgY2FsbGluZyBgaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0KGN0eClgLiBGaW5hbGx5LCBgbWx4NWh3c19jb250ZXh0X29wZW5gIGVuZHMgd2l0aCBgdW5pbml0X3Zwb3J0c2AsIHRoZW4gYGZyZWVfY2Fwc2AsIGFuZCBmaW5hbGx5IGBmcmVlX2N0eGAuXG5cbkFoYSEgYGN0eGAgaXMgZnJlZWQgaW4gYGZyZWVfY3R4YCEgU28sIHRoZSBmYWN0IHRoYXQgYGN0eC1cdTAwM2VxdWV1ZXNgIG1pZ2h0IGhhdmUgYW4gaW5jb3JyZWN0IHZhbHVlIGR1ZSB0byB0aGUgZmFpbGVkIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgIGRvZXNuJ3QgYWN0dWFsbHkgbWF0dGVyIGJlY2F1c2UgdGhlIGVudGlyZSBgY3R4YCBpcyBkZWFsbG9jYXRlZC4gSXQncyBhIGJpdCBtZXNzeSwgYnV0IHVsdGltYXRlbHkgc2FmZSBkdWUgdG8gdGhlIGNvbXBsZXRlIHRlYXJkb3duLlxuXG5JIG1hZGUgc3VyZSBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBpcyBvbmx5IGNhbGxlZCBpbiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCwgYW5kIHRoZSBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBvbmNlLiBUaGUgaW5jcmVtZW50IGluIGBjdHgtXHUwMDNlcXVldWVzYCBpcyBqdXN0IHRyYW5zaWVudC4gSXQgYmVjb21lcyBpcnJlbGV2YW50IGJlY2F1c2UgdGhlIGNvbnRleHQgaXRzZWxmIGlzIGRlc3Ryb3llZC4gQ2FzZSBjbG9zZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODUxLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTI6NTkuMTY0OTY4MjQzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTIwMzMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9MTM0PXN0YXRpYyBpbnQgaHdzX2NvbnRleHRfaW5pdF9od3Moc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMTU2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjE1NzpcXHRyZXQgPSBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oY3R4LCBhdHRyLVxcdTAwM2VxdWV1ZXMsIGF0dHItXFx1MDAzZXF1ZXVlX3NpemUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE1OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM9MTExNT1zdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMTQ5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjExNTA6aW50IG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbihzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTE1MS1cXHRcXHRcXHQgICAgIHUxNiBxdWV1ZXMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuaD0xOTM9dm9pZCBtbHg1aHdzX3NlbmRfcXVldWVzX2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmgtMTk0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5oOjE5NTppbnQgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuaC0xOTYtXFx0XFx0XFx0ICAgICB1MTYgcXVldWVzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1Mjo1OS4yMzQxODEwMjdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2ODUwNzAyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBMZWFrIGluIHRoZSBNTFg1IEhXUyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBmdW5jdGlvbi4gSXQgc2VlbXMgaXQncyBvbmx5IGNhbGxlZCBmcm9tIGBod3NfY29udGV4dF9pbml0X2h3c2AsIGFuZCBpZiBpdCBmYWlscywgdGhlIGNvbnRleHQgKGBjdHhgKSBpcyBpbW1lZGlhdGVseSBmcmVlZC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEJ1dCB3aGF0IGlmIHRoZXJlJ3MgYSBwcm9ibGVtICphZnRlciogYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgc3VjY2VlZHMsIGFuZCB0aGVuIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gIGZhaWxzIGxhdGVyIG9uPyBGb3IgZXhhbXBsZSwgd2hhdCBpZiBga3phbGxvY19vYmpzYCBmYWlscyB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGBjdHgtXHUwMDNlc2VuZF9xdWV1ZWA/XG5cbkluIHRoaXMgY2FzZSwgaXQganVtcHMgdG8gYGZyZWVfYndjX2xvY2tzYCwgd2hpY2ggY2FsbHMgYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveShjdHgpYC4gSW5zaWRlIHRoYXQsIGBtbHg1aHdzX2J3Y19xdWV1ZXMoY3R4KWAgaXMgY2FsbGVkLiBUaGlzIGZ1bmN0aW9uIHVzZXMgYGN0eC1cdTAwM2VxdWV1ZXNgIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIEJXQyBxdWV1ZXMuIE15IGNvbmNlcm4gaXMgdGhhdCBgY3R4LVx1MDAzZXF1ZXVlc2AgaXMgKmluY3JlbWVudGVkKiBpbiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YC5cblxuTGV0J3MgdHJhY2UgaXQ6IGBjdHgtXHUwMDNlcXVldWVzYCBpbml0aWFsbHkgZ2V0cyBzZXQgdG8gYHF1ZXVlcyArIDFgICh3aGVyZSBgcXVldWVzYCBpcyB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIGBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW5gKS4gVGhlbiwgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgaXMgY2FsbGVkLCBhbmQgaW5zaWRlIGl0LCBgY3R4LVx1MDAzZXF1ZXVlc2AgYmVjb21lcyBgcXVldWVzICsgMSArIHF1ZXVlc2AgKG9yIGAyICogcXVldWVzICsgMWApLiBUaGlzIGlzIHRoZW4gdXNlZCBpbiBgbWx4NWh3c19id2NfcXVldWVzYCB3aGljaCBjYWxjdWxhdGVzIGAoMiAqIHF1ZXVlcyArIDEgLSAxKSAvIDIgPSBxdWV1ZXNgLiBJdCBtYWtlcyBzZW5zZSwgYXMgdGhlIGxvY2tzIGFyZSBkZXN0cm95ZWQsIGFuZCBtZW1vcnkgZnJlZWQuIEl0IHNob3VsZCBiZSBjb3JyZWN0LiBUaGUgYGN0eGAgZ2V0cyBmcmVlZCwgYnV0IG5vIG1lbW9yeSBsZWFrcyB3ZXJlIGZvdW5kLlxuXG5Tbywgd2hlcmUgd2FzIHRoZSBidWcsIHRoZW4/IEdvaW5nIGJhY2sgdG8gYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAsIEkgc2VlIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGFib3V0IHRoZSBhbGxvY2F0aW9uIG9mIGBjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3NgLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSBsb29rZWQgbGlrZSB0aGlzOiBgY3R4LVx1MDAzZXF1ZXVlcyArPSBid2NfcXVldWVzO2AgKmJlZm9yZSogYWxsb2NhdGluZyBgY3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzYC4gSWYgYGt6YWxsb2Nfb2Jqc2AgZmFpbGVkLCB0aGVuIGAtRU5PTUVNYCB3b3VsZCBiZSByZXR1cm5lZC4gQ3JpdGljYWxseSwgYGN0eC1cdTAwM2VxdWV1ZXNgIHdvdWxkIGhhdmUgYmVlbiAqaW5jcmVtZW50ZWQqIGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuIEV2ZW4gaWYgYGN0eGAgaXMgZnJlZWQsIHRoZSB2YWx1ZSBvZiBgY3R4LVx1MDAzZXF1ZXVlc2Agc2hvdWxkIGhhdmUgYmVlbiBjb3JyZWN0LCBhbmQgdGhlcmUgc2hvdWxkIGJlIG5vIG1lbW9yeSBsZWFrLlxuXG5TbywgbGV0J3MgdHJhY2sgdGhlIGVycm9yIHBhdGggYmFjayB0byBgaHdzX2NvbnRleHRfaW5pdF9od3NgLiBJZiBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCBmYWlscywgdGhlIGNvZGUganVtcHMgdG8gYHBvb2xzX3VuaW5pdGAsIGNhbGxpbmcgYGh3c19jb250ZXh0X3Bvb2xzX3VuaW5pdChjdHgpYC4gVGhlIHF1ZXN0aW9uIGlzOiBEb2VzIHRoaXMgZnVuY3Rpb24gKnVzZSogYGN0eC1cdTAwM2VxdWV1ZXNgPyBJZiBpdCBkb2Vzbid0LCB3ZSdyZSBwcm9iYWJseSBzYWZlLiBJIG5lZWQgdG8gZXhhbWluZSBgaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0YCBjYXJlZnVsbHkgdG8gZW5zdXJlIGl0J3Mgbm90IHVzaW5nIHRoZSBwb3RlbnRpYWxseSBpbmNvcnJlY3QgYGN0eC1cdTAwM2VxdWV1ZXNgIHZhbHVlIGluIGl0cyBlcnJvciBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjc2OSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6MTEuOTE5MjU0MDAzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMyMTM4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jPTIxPXN0YXRpYyBpbnQgaHdzX2NvbnRleHRfcG9vbHNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy01Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYzo1NzpzdGF0aWMgdm9pZCBod3NfY29udGV4dF9wb29sc191bmluaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTU4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jPTEzND1zdGF0aWMgaW50IGh3c19jb250ZXh0X2luaXRfaHdzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE3MS1wb29sc191bmluaXQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM6MTcyOlxcdGh3c19jb250ZXh0X3Bvb2xzX3VuaW5pdChjdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTE3My11bmluaXRfcGQ6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYz0xNzg9c3RhdGljIHZvaWQgaHdzX2NvbnRleHRfdW5pbml0X2h3cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0xODQtXFx0bWx4NWh3c19zZW5kX3F1ZXVlc19jbG9zZShjdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjE4NTpcXHRod3NfY29udGV4dF9wb29sc191bmluaXQoY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0xODYtXFx0aHdzX2NvbnRleHRfdW5pbml0X3BkKGN0eCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUzOjEyLjA0MjQ3Mjk4MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjcyNTg1NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgaHdzX2NvbnRleHRfcG9vbHNfdW5pbml0YCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMgYGh3c19jb250ZXh0X3Bvb2xzX3VuaW5pdGAgdGhpbmcuIEp1c3Qgc2VlaW5nIHRoZSBuYW1lIHNwYXJrcyBzb21lIGltbWVkaWF0ZSBxdWVzdGlvbnMgaW4gbXkgbWluZCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZpZWxkLiBcIlVuaW5pdFwiIHN1Z2dlc3RzIGEgc3RhdGUgb2YgaW5pdGlhbGl6YXRpb24sIG9yIGxhY2sgdGhlcmVvZi4gQ29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2UncmUgZGVhbGluZyB3aXRoIGNvbnRleHQgcG9vbHMgd2l0aGluIHNvbWUgaGFyZHdhcmUgb3Igc3lzdGVtIGNvbnRleHQsIGFuZCB0aGVpciBzdGF0dXMgYmVmb3JlIGluaXRpYWxpemF0aW9uLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCwgY29uY3VycmVuY3ksIGFuZCBlcnJvciBoYW5kbGluZy4gV2hhdCBraW5kIG9mIHBvb2xzIGFyZSB3ZSB0YWxraW5nIGFib3V0IGhlcmU/IEFyZSB0aGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBvciBtb3JlIGFic3RyYWN0PyBBcmUgdGhleSB1c2VkIGZvciBtZW1vcnkgYWxsb2NhdGlvbiwgdGhyZWFkIG1hbmFnZW1lbnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gb2YgdGhlc2UgY29udGV4dCBwb29scyBhbmQgd2h5IHdlIGFyZSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZS4gQXJlIHdlIGNvbmNlcm5lZCBhYm91dCB0aGUgY29uc2VxdWVuY2VzIG9mIHVzaW5nIHRoZW0gYmVmb3JlIHRoZXkgYXJlIHByb3Blcmx5IHNldCB1cD8gSSdtIGFudGljaXBhdGluZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZGF0YSBjb3JydXB0aW9uLCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHNpbXBseSB1bmV4cGVjdGVkIGJlaGF2aW9yIGlmIHRoaXMgc3RhdGUgaXNuJ3QgbWFuYWdlZCBjb3JyZWN0bHkuIE15IGJyYWluIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gZm9ybXVsYXRlIGh5cG90aGVzZXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGVzaWduIGNob2ljZXMgYW5kIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHMgdGhhdCB0aGlzIFwidW5pbml0XCIgc3RhdGUgbWlnaHQgcmVwcmVzZW50LiBOb3csIGxldCdzIGFjdHVhbGx5IHJlYWQgaXQgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDU3LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6MTUuNzE1MDYwOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1NzpcXHRzdGF0aWMgdm9pZCBod3NfY29udGV4dF9wb29sc191bmluaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbiAgNTg6XFx0e1xcbiAgNTk6XFx0XFx0aWYgKGN0eC1cXHUwMDNlc3RjX3Bvb2wpXFxuICA2MDpcXHRcXHRcXHRtbHg1aHdzX3Bvb2xfZGVzdHJveShjdHgtXFx1MDAzZXN0Y19wb29sKTtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0bWx4NWh3c19kZWZpbmVyX3VuaW5pdF9jYWNoZShjdHgtXFx1MDAzZWRlZmluZXJfY2FjaGUpO1xcbiAgNjM6XFx0XFx0bWx4NWh3c19wYXRfdW5pbml0X3BhdHRlcm5fY2FjaGUoY3R4LVxcdTAwM2VwYXR0ZXJuX2NhY2hlKTtcXG4gIDY0OlxcdH1cXG4gIDY1OlxcdFxcbiAgNjY6XFx0c3RhdGljIGludCBod3NfY29udGV4dF9pbml0X3BkKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4gIDY3OlxcdHtcXG4gIDY4OlxcdFxcdGludCByZXQgPSAwO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRyZXQgPSBtbHg1X2NvcmVfYWxsb2NfcGQoY3R4LVxcdTAwM2VtZGV2LCBcXHUwMDI2Y3R4LVxcdTAwM2VwZF9udW0pO1xcbiAgNzE6XFx0XFx0aWYgKHJldCkge1xcbiAgNzI6XFx0XFx0XFx0bWx4NWh3c19lcnIoY3R4LCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIFBEXFxcXG5cXFwiKTtcXG4gIDczOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA3NDpcXHRcXHR9XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdGN0eC1cXHUwMDNlZmxhZ3MgfD0gTUxYNUhXU19DT05URVhUX0ZMQUdfUFJJVkFURV9QRDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6MTUuNzE1MTQ1NTFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyOTQ5NTI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZTpcblxuKipUaGlua2luZyBUaHJvdWdoIENvbnRleHQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuLi4gYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBubywgaXQgZGVmaW5pdGVseSAqZG9lc24ndCogbG9vayBsaWtlIGl0J3MgdG91Y2hpbmcgYGN0eC1cdTAwM2VxdWV1ZXNgLiBUaGF0J3MgZ29vZCwga2VlcHMgdGhpbmdzIGNsZWFuZXIsIEkgc3VwcG9zZS4gSG1tLCB3aGVyZSAqaXMqIGl0IGhhbmRsaW5nIHRoZSBjbGVhbnVwIG9mIHJlc291cmNlcywgdGhlbj8gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIHJlbWVtYmVyIGhvdyB0aGUgY29udGV4dCB1bmluaXRpYWxpemF0aW9uIGhhcHBlbnMuLi4gQWgsIHllcywgd2hhdCBhYm91dCBgaHdzX2NvbnRleHRfdW5pbml0X3BkYD8gVGhhdCByaW5ncyBhIGJlbGwuIEl0J3MgcHJvYmFibHkgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCB0aGUgYXNzb2NpYXRlZCBwcm90ZWN0aW9uIGRvbWFpbi4gTGV0IG1lIGdvIGNoZWNrIHRoYXQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDEzMCwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6MTguOTQ0NjQ0MDY3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc3OlxcdFxcbiAgNzg6XFx0XFx0cmV0dXJuIDA7XFxuICA3OTpcXHR9XFxuICA4MDpcXHRcXG4gIDgxOlxcdHN0YXRpYyBpbnQgaHdzX2NvbnRleHRfdW5pbml0X3BkKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4gIDgyOlxcdHtcXG4gIDgzOlxcdFxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUxYNUhXU19DT05URVhUX0ZMQUdfUFJJVkFURV9QRClcXG4gIDg0OlxcdFxcdFxcdG1seDVfY29yZV9kZWFsbG9jX3BkKGN0eC1cXHUwMDNlbWRldiwgY3R4LVxcdTAwM2VwZF9udW0pO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRyZXR1cm4gMDtcXG4gIDg3OlxcdH1cXG4gIDg4OlxcdFxcbiAgODk6XFx0c3RhdGljIHZvaWQgaHdzX2NvbnRleHRfY2hlY2tfaHdzX3N1cHAoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbiAgOTA6XFx0e1xcbiAgOTE6XFx0XFx0c3RydWN0IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMgKmNhcHMgPSBjdHgtXFx1MDAzZWNhcHM7XFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdC8qIEhXUyBub3Qgc3VwcG9ydGVkIG9uIGRldmljZSAvIEZXICovXFxuICA5NDpcXHRcXHRpZiAoIWNhcHMtXFx1MDAzZXdxZV9iYXNlZF91cGRhdGUpIHtcXG4gIDk1OlxcdFxcdFxcdG1seDVod3NfZXJyKGN0eCwgXFxcIlJlcXVpcmVkIEhXUyBXUUUgYmFzZWQgaW5zZXJ0aW9uIGNhcCBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4gIDk2OlxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6MTguOTQ0NzM1Nzg3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDc1MzEzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBBIFBvaW50IG9mIE5lZ2F0aXZpdHkgRm9sbG93ZWQgYnkgYSBRdWVzdGlvbioqXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyBhIGZsYXQgXCJOby5cIiBUaGlzIGZlZWxzIGxpa2UgYSByZWZsZXhpdmUgcmVzcG9uc2UsIGEgZ3V0IGZlZWxpbmcsIHBlcmhhcHMgc3RlbW1pbmcgZnJvbSBhIHByaW9yIGxpbmUgb2YgdGhvdWdodCBvciBhbiBpbnN0aW5jdGl2ZSByZWplY3Rpb24gb2Ygc29tZXRoaW5nIGltcGxpZWQgYnV0IG5vdCBleHBsaWNpdGx5IHN0YXRlZC4gVGhlIGNvbnRleHQgaXMgbWlzc2luZywgc28gSSdtIGZvcmNlZCB0byBhc3N1bWUgYW4gaW1wbGljaXQgcXVlc3Rpb24uXG5cbkhvd2V2ZXIsIHRoZSB0aG91Z2h0IHByb2Nlc3MgcXVpY2tseSBwaXZvdHMuIFRoZSBuZWdhdGl2ZSByZXNwb25zZSBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHRhcmdldGVkIHF1ZXJ5OiBcIldoYXQgYWJvdXQgYG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0c2A/XCIgVGhpcyBpbmRpY2F0ZXMgYSBzaGlmdCBmcm9tIGEgZ2VuZXJhbCBkaXNtaXNzYWwgdG8gYSBzcGVjaWZpYyBhcmVhIG9mIGNvbmNlcm4uIEl0IHJldmVhbHMgYSBsZXZlbCBvZiB0ZWNobmljYWwgZGVwdGgsIHRhcmdldGluZyBhIGZ1bmN0aW9uIG5hbWUgdGhhdCBoaW50cyBhdCBhIHBvdGVudGlhbCBhcmVhIG9mIG5ldHdvcmsgdmlydHVhbGl6YXRpb24uIEknbSBob21pbmcgaW4gb24gdGhlIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBgbWx4NWAgYW5kIGl0cyBoYW5kbGluZyBvZiB2aXJ0dWFsIHBvcnRzLCBsaWtlbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGhhcmR3YXJlIG9mZmxvYWQgb3IgYSBzaW1pbGFyIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFzcGVjdC4gVGhlIHF1ZXN0aW9uIGl0c2VsZiBpbXBsaWVzIGEgc3BlY2lmaWMgY29uY2VybiByZWdhcmRpbmcgaG93IHZwb3J0cyBhcmUgdW5pbml0aWFsaXplZC4gSSBhbSB0aGlua2luZywgSXMgaXQgYSBwb3RlbnRpYWwgYnVnPyBBbiBvdmVyc2lnaHQ/IElzIGl0IGEgZnVuY3Rpb24gdGhhdCBuZWVkcyBzcGVjaWFsIGF0dGVudGlvbiBpbiB0aGUgY3VycmVudCBzaXR1YXRpb24/IFdpdGhvdXQgbW9yZSBjb250ZXh0LCB0aGVzZSBhbGwgY29tZSB0byBtaW5kIGFzIHF1ZXN0aW9ucyB0byBwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY2MCwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6MjIuNTUyMjcwMDZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDA2OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYz0xODk9c3RydWN0IG1seDVod3NfY29udGV4dCAqbWx4NWh3c19jb250ZXh0X29wZW4oc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0yMjQtdW5pbml0X3Zwb3J0czpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYzoyMjU6XFx0bWx4NWh3c192cG9ydF91bmluaXRfdnBvcnRzKGN0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMjI2LWZyZWVfY2FwczpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jPTIzNT1pbnQgbWx4NWh3c19jb250ZXh0X2Nsb3NlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTIzOC1cXHRod3NfY29udGV4dF91bmluaXRfaHdzKGN0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM6MjM5OlxcdG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0cyhjdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTI0MC1cXHRrZnJlZShjdHgtXFx1MDAzZWNhcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy92cG9ydC5jPTY9aW50IG1seDVod3NfdnBvcnRfaW5pdF92cG9ydHMoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy92cG9ydC5jLTI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuYzoyNzp2b2lkIG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy92cG9ydC5jLTI4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuaD03PWludCBtbHg1aHdzX3Zwb3J0X2luaXRfdnBvcnRzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy92cG9ydC5oLTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy92cG9ydC5oOjk6dm9pZCBtbHg1aHdzX3Zwb3J0X3VuaW5pdF92cG9ydHMoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3Zwb3J0LmgtMTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUzOjIyLjYzNDI4Mzk2M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYzOTIxNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgYG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0c2AgZnVuY3Rpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWNvbnN0cnVjdGluZyBgbWx4NWh3c192cG9ydF91bmluaXRfdnBvcnRzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBtbHg1aHdzX3Zwb3J0X3VuaW5pdF92cG9ydHNgIGZ1bmN0aW9uLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB3aGF0IFwidnBvcnRcIiBpbXBsaWVzIGluIHRoaXMgY29udGV4dCDigJMgVmlydHVhbCBQb3J0LCBvYnZpb3VzbHksIGJ1dCB3aGF0IGxldmVsIG9mIGFic3RyYWN0aW9uIGFyZSB3ZSBkZWFsaW5nIHdpdGg/IElzIHRoaXMgcmVsYXRlZCB0byB0aGUgcGh5c2ljYWwgcG9ydCwgb3IgbW9yZSBvZiBhIGxvZ2ljYWwgY29uc3RydWN0IHdpdGhpbiB0aGUgTUxYNSBkcml2ZXI/IEknbSBhbnRpY2lwYXRpbmcgdGhpcyB3aWxsIGJlIGEgY2xlYW51cCByb3V0aW5lLCBzbyB0aGUga2V5IHF1ZXN0aW9ucyBhcmU6IHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyByZWxlYXNlZCwgYW5kIHdoYXQgYXJlIHRoZSBmYWlsdXJlIHNjZW5hcmlvcyBhbmQgdGhlaXIgcG90ZW50aWFsIGltcGFjdD8gSSB3YW50IHRvIHNlZSBob3cgcm9idXN0IHRoZSBlcnJvciBoYW5kbGluZyBpcy5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkZXBlbmRlbmN5IGNoYWluIGhlcmUuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGNhbGwgdGhpcywgYW5kIHdoYXQgZnVuY3Rpb25zIGRvZXMgKnRoaXMqIGZ1bmN0aW9uIGNhbGw/IEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSB0ZWFyZG93biBwcm9jZXNzIGFuZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbGVha3MuIEFyZSB0aGVyZSBhbnkgbG9ja3MgaW52b2x2ZWQsIGFuZCBpZiBzbywgd2hhdCdzIHRoZSBsb2NraW5nIGhpZXJhcmNoeSB0byBwcmV2ZW50IGRlYWRsb2Nrcz9cblxuSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgb3ZlcmFsbCBjb250ZXh0LiBJcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBkdXJpbmcgbW9kdWxlIHVubG9hZCwgZGV2aWNlIHJlbW92YWwsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdGltaW5nIG9mIHRoaXMgZnVuY3Rpb24gaXMgZXh0cmVtZWx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBndWFyYW50ZWVzIGl0IG1ha2VzLCBhbmQgYWxzbyB0aGUgYXNzdW1wdGlvbnMgaXQgY2FuIGhhdmUuIEFyZSB3ZSBpbiBhIHNhZmUgY29udGV4dCwgb3IgY291bGQgd2UgYmUgaW50ZXJydXB0ZWQ/XG5cbkZpbmFsbHksIGxldCdzIHNlZSBob3cgdGhleSBoYW5kbGUgdGhlIHZhcmlvdXMgZXJyb3IgcGF0aHMuIElzIHRoZXJlIHByb3BlciByZXNvdXJjZSBjbGVhbnVwIGluIGNhc2Ugb2YgYSBmYWlsdXJlIGR1cmluZyB0aGUgdW5pbml0aWFsaXphdGlvbj8gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhleSBlbnN1cmUgdGhhdCB0aGUgcmVzb3VyY2VzIGFyZSBjbGVhbmVkIHVwIHByb3Blcmx5LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBjb25zaXN0ZW5jeSBvZiB0aGUgc3RhdGUgd2lsbCBiZS4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIHNhZmUgZnJvbSB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0aWVzLiBVbHRpbWF0ZWx5LCBteSBnb2FsIGlzIHRvIGFzc2VzcyB0aGUgY29kZSdzIHJlc2lsaWVuY2UgYW5kIGl0cyBpbXBhY3Qgb24gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzI1LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6MjYuODk4MjA5MjU4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvdnBvcnQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNzpcXHR2b2lkIG1seDVod3NfdnBvcnRfdW5pbml0X3Zwb3J0cyhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHRpZiAoY3R4LVxcdTAwM2VjYXBzLVxcdTAwM2Vlc3dpdGNoX21hbmFnZXIpXFxuICAzMDpcXHRcXHRcXHR4YV9kZXN0cm95KFxcdTAwMjZjdHgtXFx1MDAzZXZwb3J0cy52cG9ydF9ndm1pX3hhKTtcXG4gIDMxOlxcdH1cXG4gIDMyOlxcdFxcbiAgMzM6XFx0c3RhdGljIGludCBod3NfdnBvcnRfYWRkX2d2bWkoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LCB1MTYgdnBvcnQpXFxuICAzNDpcXHR7XFxuICAzNTpcXHRcXHR1MTYgdnBvcnRfZ3ZtaTtcXG4gIDM2OlxcdFxcdGludCByZXQ7XFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdHJldCA9IG1seDVod3NfY21kX3F1ZXJ5X2d2bWkoY3R4LVxcdTAwM2VtZGV2LCB0cnVlLCB2cG9ydCwgXFx1MDAyNnZwb3J0X2d2bWkpO1xcbiAgMzk6XFx0XFx0aWYgKHJldClcXG4gIDQwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHRyZXQgPSB4YV9pbnNlcnQoXFx1MDAyNmN0eC1cXHUwMDNldnBvcnRzLnZwb3J0X2d2bWlfeGEsIHZwb3J0LFxcbiAgNDM6XFx0XFx0XFx0XFx0eGFfbWtfdmFsdWUodnBvcnRfZ3ZtaSksIEdGUF9LRVJORUwpO1xcbiAgNDQ6XFx0XFx0aWYgKHJldClcXG4gIDQ1OlxcdFxcdFxcdG1seDVod3NfZGJnKGN0eCwgXFxcIkNvdWxkbid0IGluc2VydCBuZXcgdnBvcnQgZ3ZtaSBpbnRvIHhhcnJheSAoJWQpXFxcXG5cXFwiLCByZXQpO1xcbiAgNDY6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUzOjI2Ljg5ODI4NzY4OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzU5MzA5MTgyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvZ2ljIG9mIFF1ZXVlIEluaXRpYWxpemF0aW9uIGFuZCBDbGVhbnVwKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZS4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgaW5pdGlhbGl6aW5nIHNlbmQgcXVldWVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIEJXQyAoQmFuZHdpZHRoIENvbnRyb2wpIGxvY2tzLiBJJ20gZm9jdXNpbmcgb24gdGhlIGVycm9yIHBhdGhzIGhlcmUsIGFzIHRoYXQncyBvZnRlbiB3aGVyZSB0aGUgcHJvYmxlbXMgbHVyay4gRmlyc3QsIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYGN0eC1cdTAwM2VxdWV1ZXNgLCBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCwgYW5kIHRoZSB2YXJpb3VzIGBrZnJlZWAgY2FsbHMgdGhhdCBjYW4gaGFwcGVuIHdoZW4gdGhpbmdzIGdvIHdyb25nLlxuXG5Jbml0aWFsbHksIEkgc2VlIHRoYXQgaWYgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgZmFpbHMgZWFybHksIHRoZSBjb2RlIHJldHVybnMgZGlyZWN0bHkgd2l0aG91dCBpbmNyZW1lbnRpbmcgYGN0eC1cdTAwM2VxdWV1ZXNgIGluIHNvbWUgcGxhY2VzIGFmdGVyIHRoZSBwYXRjaCAod2hlcmUgdGhlIGluY3JlbWVudCBoYXBwZW5zIGF0IHRoZSBlbmQpIGJ1dCBub3QgYmVmb3JlIHRoZSBwYXRjaC4gVGhpcyBzZWVtZWQgc3VzcGljaW91cywgZXNwZWNpYWxseSBzaW5jZSBgY3R4YCBpcyBmcmVlZCByaWdodCBhZnRlciBpbiB0aGUgbWFpbiBmbG93LCBzbyBJIGFtIGFza2luZyBteXNlbGYgd2hhdCB2YWx1ZSBgY3R4LVx1MDAzZXF1ZXVlc2AgaGFzIGF0IHRoZSB0aW1lIG9mIHRoZSBlcnJvci4gRG9lcyBpdCBtYXR0ZXIsIGFjdHVhbGx5PyBBZnRlciB0aGlua2luZyBhYm91dCBpdCwgaW4gdGhlIGVycm9yIGNhc2UsIGJlY2F1c2Ugb2YgdGhlIGNvbnRyb2wgZmxvdywgYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveWAgaXMgbm90IGNhbGxlZCwgc28gYGN0eC1cdTAwM2VxdWV1ZXNgIGRvZXMgbm90IG1hdHRlciwgYW5kIGl0IGNhbid0IGJlIHVzZWQgYXQgdGhhdCB0aW1lLlxuXG5UaGVuLCB0aGVyZSdzIGFub3RoZXIgcG9pbnQgdG8gY29uc2lkZXIsIHdoaWNoIGlzIHRoYXQgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAgY2FuIGFsc28gZmFpbCBMQVRFUiwgYWZ0ZXIgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgbWF5IG9yIG1heSBub3Qgc3VjY2VlZC4gSSBzY3J1dGluaXplZCB0aGUgbG9vcCBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwIGZ1bmN0aW9ucyAoYF9faHdzX3NlbmRfcXVldWVzX2Nsb3NlYCwgYGtmcmVlYCwgYGh3c19zZW5kX3F1ZXVlc19id2NfbG9ja3NfZGVzdHJveWApIHZlcnkgY2FyZWZ1bGx5IGluIHRoZSB2YXJpb3VzIGZhaWx1cmUgcGF0aHMgb2YgYG1seDVod3Nfc2VuZF9xdWV1ZXNfb3BlbmAuIFNwZWNpZmljYWxseSBJIHdhcyBjb25jZXJuZWQgdGhhdCB0aGUgaW5jcmVtZW50IG9mIGBjdHgtXHUwMDNlcXVldWVzYCBpbiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBtaWdodCBsZWFkIHRvIHNvbWUgZm9ybSBvZiBjb3JydXB0aW9uIGlmIG5vdCBoYW5kbGVkIHByb3Blcmx5IGluIHRoZSBlcnJvciBwYXRocywgYnV0IEkgY291bGRuJ3QgZmluZCBhIHNjZW5hcmlvIHdoZXJlIHRoaXMgd2FzIHRoZSBjYXNlLlxuXG5JIGRyaWxsZWQgZG93biBpbnRvIGBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3lgIGFuZCB0aGUgY2FsY3VsYXRpb24gb2YgYGJ3Y19xdWV1ZXNgIGluIHRoZXJlLCB3aGljaCBkZXBlbmRzIG9uIGBjdHgtXHUwMDNlcXVldWVzYC4gVGhlIGNydWNpYWwgaW5zaWdodCwgaG93ZXZlciwgaXMgdGhhdCBpZiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCAqZmFpbHMqLCB0aGVuIGBod3Nfc2VuZF9xdWV1ZXNfYndjX2xvY2tzX2Rlc3Ryb3lgIGlzICpub3QqIGNhbGxlZC4gQW5kIGlmIGl0IHN1Y2NlZWRzLCB0aGVyZSB3aWxsIGJlIG5vIGlzc3Vlcy5cblxuSG93ZXZlciwgSSBzdGFydGVkIHRvIHF1ZXN0aW9uIHRoZSByYXRpb25hbGUgb2YgdGhlIHBhdGNoLCBzaW5jZSBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscy4gV2h5IHdhcyB0aGUgaW5jcmVtZW50IG1vdmVkP1xuTm93LCBJIHRoaW5rIEkgc2VlIGl0LiBCZWZvcmUgdGhlIHBhdGNoLCBpZiBga3phbGxvY19vYmpzYCBpbiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBmYWlscywgYGN0eC1cdTAwM2VxdWV1ZXNgIGlzIGluY3JlbWVudGVkIEJFRk9SRSB0aGUgZnVuY3Rpb24gcmV0dXJucyB3aXRoIC1FTk9NRU0uIFRoZW4gYGN0eGAgd291bGQgYmUgZnJlZWQsIHNvIHRoZSBpbmNyZW1lbnQgd291bGQgcmVzdWx0IGluIHNvbWUgZ2FyYmFnZSwgd2hpY2ggaXMgbm93IGF2b2lkZWQuIFNvIG5vdyB0aGUgaW5jcmVtZW50IGhhcyBiZWVuIG1vdmVkIHRvIHRoZSBlbmQsIGFmdGVyIGFsbCB0aGUgYWxsb2NhdGlvbnMsIGFuZCBpdCBpcyBjb3JyZWN0IGJlY2F1c2UgaXQgZG9lc24ndCBjYXVzZSBhbnkgcHJvYmxlbXMuXG5cbkl0J3MgbGlrZWx5IHRoZSBwYXRjaCB3YXMgaW50cm9kdWNlZCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIGhlYXAgY29ycnVwdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NjQsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6NDQuNDkxMzgzMTI0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTMxMzE1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHdzX2NvbnRleHRfaW5pdF9od3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9ODk9c3RhdGljIHZvaWQgaHdzX2NvbnRleHRfY2hlY2tfaHdzX3N1cHAoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMTMzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjEzNDpzdGF0aWMgaW50IGh3c19jb250ZXh0X2luaXRfaHdzKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NvbnRleHQuYy0xMzUtXFx0XFx0XFx0XFx0c3RydWN0IG1seDVod3NfY29udGV4dF9hdHRyICphdHRyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmM9MTg5PXN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKm1seDVod3NfY29udGV4dF9vcGVuKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jb250ZXh0LmMtMjE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jOjIxNjpcXHRyZXQgPSBod3NfY29udGV4dF9pbml0X2h3cyhjdHgsIGF0dHIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY29udGV4dC5jLTIxNy1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1Mzo0NC44NDQ1MjAzMTNaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4NDQyMjU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtbHg1aHdzX2NvbnRleHRfb3BlbmAgQ2FsbCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2Ugd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBSaWdodCBub3csIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0J3MgZXhjbHVzaXZlbHkgY2FsbGVkIGZyb20gYG1seDVod3NfY29udGV4dF9vcGVuYC4gQnV0IGhvbGQgb24sIEkgbmVlZCB0byBjb25zaWRlciBhIHBvdGVudGlhbCBkZXBlbmRlbmN5LiBUaGVyZSB3YXMgYSBjaGFuZ2UgaW52b2x2aW5nIGBjdHgtXHUwMDNlcXVldWVzICs9IGJ3Y19xdWV1ZXM7YC4gSSdtIHdvbmRlcmluZyBpZiBpdHMgbG9jYXRpb24gd2FzIHNoaWZ0ZWQgZHVlIHRvIGBremFsbG9jX29ianNgIHJlbHlpbmcgb24gdGhlIHZhbHVlIG9mIGBjdHgtXHUwMDNlcXVldWVzYC4gSG93ZXZlciwgdGhlIGRlZmluaXRpb24gb2YgYGt6YWxsb2Nfb2Jqc2AgaXMgYSBtYWNybywgYW5kIG5vdCBhIGZ1bmN0aW9uIGNhbGwgYXMgc3VjaDpcblxuYGBgY1xuI2RlZmluZSBremFsbG9jX29ianMob2JqLCBuKSBremFsbG9jKHNpemVvZihvYmopICogKG4pLCBHRlBfS0VSTkVMKVxuYGBgXG5cblRoZXJlZm9yZSwgdGhlIG1hY3JvIGV4cGFuc2lvbiBkb2VzIG5vdCBkaXJlY3RseSB1c2UgYGN0eC1cdTAwM2VxdWV1ZXNgIGluIGFueSBjYWxjdWxhdGlvbiwgb3IgdXNlIHRoYXQgdmFyaWFibGUgaW4gdGhlIG1hY3JvIGl0c2VsZi4gSSBzaG91bGQgY29uZmlybSB0aGlzIGJ5IGNoZWNraW5nIGhvdyBga3phbGxvY19vYmpzYCBpcyB1c2VkIHRvIG1ha2Ugc3VyZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGl0J3MgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIExldCdzIGRlbHZlIGludG8gdGhhdCBhc3BlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1Nzk1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjUzOjQ4LjgyODk0NTQ5M1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAwODkwMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvY19vYmpzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmM9NjE4PWh3c19hY3Rpb25fY3JlYXRlX2dlbmVyaWNfYnVsayhzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTYzNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jOjYzNTpcXHRhY3Rpb24gPSBremFsbG9jX29ianMoKmFjdGlvbiwgYnVsa19zeik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYy02MzYtXFx0aWYgKCFhY3Rpb24pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jPTEzNjE9bWx4NWh3c19hY3Rpb25fY3JlYXRlX2Rlc3RfYXJyYXkoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LCBzaXplX3QgbnVtX2Rlc3QsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTEzODUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYzoxMzg2OlxcdGRlc3RfbGlzdCA9IGt6YWxsb2Nfb2JqcygqZGVzdF9saXN0LCBudW1fZGVzdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYy0xMzg3LVxcdGlmICghZGVzdF9saXN0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYz0xNDY1PW1seDVod3NfYWN0aW9uX2NyZWF0ZV9pbnNlcnRfaGVhZGVyKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmMtMTQ3OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jOjE0ODA6XFx0cmVmb3JtYXRfaGRycyA9IGt6YWxsb2Nfb2JqcygqcmVmb3JtYXRfaGRycywgbnVtX29mX2hkcnMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmMtMTQ4MS1cXHRpZiAoIXJlZm9ybWF0X2hkcnMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jPTI2MTg9bWx4NWh3c19hY3Rpb25fdGVtcGxhdGVfY3JlYXRlKGVudW0gbWx4NWh3c19hY3Rpb25fdHlwZSBhY3Rpb25fdHlwZVtdKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYy0yNjMxLVxcdGF0LVxcdTAwM2VudW1fYWN0aW9ucyA9IG51bV9hY3Rpb25zIC0gMTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jOjI2MzI6XFx0YXQtXFx1MDAzZWFjdGlvbl90eXBlX2FyciA9IGt6YWxsb2Nfb2JqcygqYWN0aW9uX3R5cGUsIG51bV9hY3Rpb25zKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jLTI2MzMtXFx0aWYgKCFhdC1cXHUwMDNlYWN0aW9uX3R5cGVfYXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb25fc3RlX3Bvb2wuYz0zMjY9aW50IG1seDVod3NfYWN0aW9uX3N0ZV9wb29sX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb25fc3RlX3Bvb2wuYy0zMzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb25fc3RlX3Bvb2wuYzozMzI6XFx0cG9vbCA9IGt6YWxsb2Nfb2JqcygqcG9vbCwgcXVldWVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbl9zdGVfcG9vbC5jLTMzMy1cXHRpZiAoIXBvb2wpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jPTIyNz1pbnQgbWx4NWh3c19id2NfbWF0Y2hlcl9jcmVhdGVfc2ltcGxlKHN0cnVjdCBtbHg1aHdzX2J3Y19tYXRjaGVyICpid2NfbWF0Y2hlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjM5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM6MjQwOlxcdGJ3Y19tYXRjaGVyLVxcdTAwM2VydWxlcyA9IGt6YWxsb2Nfb2JqcygqYndjX21hdGNoZXItXFx1MDAzZXJ1bGVzLCBid2NfcXVldWVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2J3Yy5jLTI0MS1cXHRpZiAoIWJ3Y19tYXRjaGVyLVxcdTAwM2VydWxlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjU2LVxcdGJ3Y19tYXRjaGVyLVxcdTAwM2VzaXplX29mX2F0X2FycmF5ID0gTUxYNUhXU19CV0NfTUFUQ0hFUl9BVFRBQ0hfQVRfTlVNO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmM6MjU3OlxcdGJ3Y19tYXRjaGVyLVxcdTAwM2VhdCA9IGt6YWxsb2Nfb2JqcygqYndjX21hdGNoZXItXFx1MDAzZWF0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYndjLmMtMjU4LVxcdFxcdFxcdFxcdCAgICAgICBid2NfbWF0Y2hlci1cXHUwMDNlc2l6ZV9vZl9hdF9hcnJheSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2RlZmluZXIuYz0xNjg0PWh3c19kZWZpbmVyX2FsbG9jX2NvbXByZXNzZWRfZmMoc3RydWN0IG1seDVod3NfZGVmaW5lcl9mYyAqZmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2RlZmluZXIuYy0xNjkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZGVmaW5lci5jOjE2OTE6XFx0Y29tcHJlc3NlZF9mYyA9IGt6YWxsb2Nfb2JqcygqY29tcHJlc3NlZF9mYywgZGVmaW5lcl9zaXplKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2RlZmluZXIuYy0xNjkyLVxcdGlmICghY29tcHJlc3NlZF9mYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZGVmaW5lci5jPTE3Mjg9aHdzX2RlZmluZXJfYWxsb2NfZmMoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9kZWZpbmVyLmMtMTczMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2RlZmluZXIuYzoxNzM0OlxcdGZjID0ga3phbGxvY19vYmpzKCpmYywgbGVuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2RlZmluZXIuYy0xNzM1LVxcdGlmICghZmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jPTczOT1zdGF0aWMgaW50IG1seDVfZnNfZnRlX2dldF9od3NfYWN0aW9ucyhzdHJ1Y3QgbWx4NV9mbG93X3Jvb3RfbmFtZXNwYWNlICpucyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmMtNzYxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvZnNfaHdzLmM6NzYyOlxcdCpyYWN0aW9ucyA9IGt6YWxsb2Nfb2JqcygqKnJhY3Rpb25zLCBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTUFYKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jLTc2My1cXHRpZiAoISpyYWN0aW9ucykge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYy03NjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYzo3Njg6XFx0ZnNfYWN0aW9ucyA9IGt6YWxsb2Nfb2JqcygqZnNfYWN0aW9ucywgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01BWCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYy03NjktXFx0aWYgKCFmc19hY3Rpb25zKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jLTc3My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2ZzX2h3cy5jOjc3NDpcXHRkZXN0X2FjdGlvbnMgPSBremFsbG9jX29ianMoKmRlc3RfYWN0aW9ucywgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01BWCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9mc19od3MuYy03NzUtXFx0aWYgKCFkZXN0X2FjdGlvbnMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWF0Y2hlci5jPTEwNzI9aHdzX21hdGNoZXJfc2V0X3RlbXBsYXRlcyhzdHJ1Y3QgbWx4NWh3c19tYXRjaGVyICptYXRjaGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tYXRjaGVyLmMtMTA4Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21hdGNoZXIuYzoxMDg3OlxcdG1hdGNoZXItXFx1MDAzZW10ID0ga3phbGxvY19vYmpzKCptYXRjaGVyLVxcdTAwM2VtdCwgbnVtX29mX210KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21hdGNoZXIuYy0xMDg4LVxcdGlmICghbWF0Y2hlci1cXHUwMDNlbXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYz03MTE9c3RhdGljIGludCBod3Nfc2VuZF9yaW5nX2FsbG9jX3NxKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtNzMzLVxcdGJ1Zl9zeiA9IHF1ZXVlLVxcdTAwM2VudW1fZW50cmllcyAqIE1BWF9XUUVTX1BFUl9SVUxFO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjczNDpcXHRzcS1cXHUwMDNlZGVwX3dxZSA9IGt6YWxsb2Nfb2Jqcygqc3EtXFx1MDAzZWRlcF93cWUsIHF1ZXVlLVxcdTAwM2VudW1fZW50cmllcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtNzM1LVxcdGlmICghc3EtXFx1MDAzZWRlcF93cWUpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jPTEwNTU9c3RhdGljIGludCBtbHg1aHdzX3NlbmRfcXVldWVfb3BlbihzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMDY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jOjEwNjY6XFx0cXVldWUtXFx1MDAzZWNvbXBsZXRlZC5lbnRyaWVzID0ga3phbGxvY19vYmpzKHF1ZXVlLVxcdTAwM2Vjb21wbGV0ZWQuZW50cmllc1swXSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYy0xMDY3LVxcdFxcdFxcdFxcdFxcdFxcdHF1ZXVlLVxcdTAwM2VudW1fZW50cmllcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYz0xMTE1PXN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExMjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmM6MTEyNDpcXHRjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzID0ga3phbGxvY19vYmpzKCpjdHgtXFx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExMjUtXFx0XFx0XFx0XFx0XFx0XFx0IGJ3Y19xdWV1ZXMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTEyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYzoxMTMwOlxcdGN0eC1cXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyA9IGt6YWxsb2Nfb2JqcygqY3R4LVxcdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jLTExMzEtXFx0XFx0XFx0XFx0XFx0XFx0YndjX3F1ZXVlcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYz0xMTUwPWludCBtbHg1aHdzX3NlbmRfcXVldWVzX29wZW4oc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTE2NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYzoxMTY1OlxcdGN0eC1cXHUwMDNlc2VuZF9xdWV1ZSA9IGt6YWxsb2Nfb2JqcygqY3R4LVxcdTAwM2VzZW5kX3F1ZXVlLCBjdHgtXFx1MDAzZXF1ZXVlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMtMTE2Ni1cXHRpZiAoIWN0eC1cXHUwMDNlc2VuZF9xdWV1ZSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMjo1Mzo0OC44OTkwNDAyNTdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYzMzkyOTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBremFsbG9jX29ianMgYW5kIG51bV9oYXNoX2RlZmluZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBremFsbG9jX29ianNgIGlzbid0IHVzaW5nIGBjdHgtXHUwMDNlcXVldWVzYCBkaXJlY3RseSwgd2hpY2ggaXMgZ29vZC4gVGhlbiwgbG9va2luZyBhdCBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCwgSSBub3RlIHRoZSB1c2Ugb2YgYGt6YWxsb2Nfb2Jqc2AgdGhlcmUgYW5kIGhvdyBgY3R4LVx1MDAzZXF1ZXVlc2AgbWlnaHQgYmUgaW5jcmVtZW50ZWQgaWYgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgZmFpbHMuIEJ1dCB0aGVuLCBgbWx4NWh3c19zZW5kX3F1ZXVlc19vcGVuYCByZXR1cm5zIGFuIGVycm9yLCBhbmQgdGhlIGNhbGxlciBiYWlscyBvdXQgY2xlYW5seSwgZXZlbnR1YWxseSBmcmVlaW5nIGBjdHhgLiBTbywgdGhhdCBpbmNyZW1lbnQgdG8gYGN0eC1cdTAwM2VxdWV1ZXNgIHNlZW1zIGhhcm1sZXNzIGFmdGVyIGFsbCDigJMgaXQncyBjbGVhbmVkIHVwIGluIHRoZSBlcnJvciBwYXRoLlxuXG5Ib3dldmVyLCBJIHBhdXNlZCBmb3IgYSBtb21lbnQgdG8gY29uc2lkZXIgd2hldGhlciBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YCBjb3VsZCBiZSBjYWxsZWQgZWxzZXdoZXJlLiBBIHF1aWNrIGNoZWNrIGNvbmZpcm1lZCBpdCdzIG5vdC4gSXQgc2VlbXMgdGhpcyBtaWdodCBqdXN0IGJlIGEgbG9naWNhbCBjbGVhbnVwLCBhIHdheSB0byBhZGhlcmUgdG8gdGhlIFwiZG9uJ3QgbW9kaWZ5IHN0YXRlIHVudGlsIGFsbG9jYXRpb25zIHN1Y2NlZWRcIiBwcmluY2lwbGUsIHdoaWNoIGlzIGEgY29tbW9uIGtlcm5lbCBwcmFjdGljZS5cblxuTm93LCBsZXQncyBzaGlmdCBmb2N1cyB0byB0aGUgY2hhbmdlcyBpbiBgY21kLmNgLiBJIG5vdGljZSB0aGUgcmVtb3ZhbCBvZiBzZXR0aW5nIGBudW1faGFzaF9kZWZpbmVyYCBpbiBgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZWAuIEhtbSwgaW50ZXJlc3RpbmcuIFdoeSB3YXMgdGhpcyByZW1vdmVkPyBQZXJoYXBzIHRoaXMgZmllbGQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSwgb3IgbWF5YmUgaXQgd2FzIGludHJvZHVjaW5nIGlzc3Vlcz8gSWYgaXQgKndhcyogYmVpbmcgc2V0LCBhbmQgaW5jb3JyZWN0bHkgY29uZmlndXJlZCBvciB1bnN1cHBvcnRlZCBieSB0aGUgZmlybXdhcmUsIGl0IGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgRlcgZXJyb3JzLiBMZXQncyBzZWUgaWYgd2UgY2FuIGRpZyBmdXJ0aGVyIGludG8gdGhlIGNvbnRleHQgb2YgYHJ0Y19hdHRyLVx1MDAzZW51bV9oYXNoX2RlZmluZXJgIGFuZCBzZWUgd2hhdCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIHdhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkzNjYsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6NTYuNTMyOTc0NTc2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjAzNzIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudW1faGFzaF9kZWZpbmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmM9MTU4NT1od3NfYWN0aW9uX2NyZWF0ZV9kZXN0X21hdGNoX3JhbmdlX3RhYmxlKHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvYWN0aW9uLmMtMTYyNS1cXHRydGNfYXR0ci5taXNzX2Z0X2lkID0gbWlzc19mdF9pZDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2FjdGlvbi5jOjE2MjY6XFx0cnRjX2F0dHIubnVtX2hhc2hfZGVmaW5lciA9IDE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9hY3Rpb24uYy0xNjI3LVxcdHJ0Y19hdHRyLnVwZGF0ZV9pbmRleF9tb2RlID0gTUxYNV9JRkNfUlRDX1NURV9VUERBVEVfTU9ERV9CWV9IQVNIO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYz0zNzI9aW50IG1seDVod3NfY21kX3J0Y19jcmVhdGUoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jLTQwMy1cXHRNTFg1X1NFVChydGMsIGF0dHIsIHRhYmxlX3R5cGUsIHJ0Y19hdHRyLVxcdTAwM2V0YWJsZV90eXBlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jOjQwNDpcXHRNTFg1X1NFVChydGMsIGF0dHIsIG51bV9oYXNoX2RlZmluZXIsIHJ0Y19hdHRyLVxcdTAwM2VudW1faGFzaF9kZWZpbmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jLTQwNS1cXHRNTFg1X1NFVChydGMsIGF0dHIsIG1hdGNoX2RlZmluZXJfMCwgcnRjX2F0dHItXFx1MDAzZW1hdGNoX2RlZmluZXJfMCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jPTkzOD1pbnQgbWx4NWh3c19jbWRfcXVlcnlfY2FwcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMtMTEzNi1cXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmM6MTEzNzpcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS53cWVfYmFzZWRfZmxvd190YWJsZV9jYXAucnRjX21heF9udW1faGFzaF9kZWZpbmVyX2dlbl93cWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMtMTEzOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmg9NzA9c3RydWN0IG1seDVod3NfY21kX3J0Y19jcmVhdGVfYXR0ciB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5oLTc3LVxcdHU4IGFjY2Vzc19pbmRleF9tb2RlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmg6Nzg6XFx0dTggbnVtX2hhc2hfZGVmaW5lcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5oLTc5LVxcdHU4IGxvZ19kZXB0aDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWF0Y2hlci5jPTQ2OD1zdGF0aWMgaW50IGh3c19tYXRjaGVyX2NyZWF0ZV9ydGMoc3RydWN0IG1seDVod3NfbWF0Y2hlciAqbWF0Y2hlcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvbWF0Y2hlci5jLTQ5Ny1cXHRcXHRcXHRNTFg1X0lGQ19SVENfU1RFX1VQREFURV9NT0RFX0JZX09GRlNFVDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL21hdGNoZXIuYzo0OTg6XFx0XFx0cnRjX2F0dHIubnVtX2hhc2hfZGVmaW5lciA9IDE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9tYXRjaGVyLmMtNDk5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9wcm0uaD0xNDg9c3RydWN0IG1seDVfaWZjX3J0Y19iaXRzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvcHJtLmgtMTU2LVxcdHU4IGFjY2Vzc19pbmRleF9tb2RlWzB4M107XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9wcm0uaDoxNTc6XFx0dTggbnVtX2hhc2hfZGVmaW5lclsweDRdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvcHJtLmgtMTU4LVxcdHU4IHVwZGF0ZV9tZXRob2RbMHgxXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjI6NTM6NTYuNTk1MDE2MzQxWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTA5MTc4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZWAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBudW1faGFzaF9kZWZpbmVyYCByZWFsbHkgYmVpbmcgYXNzaWduZWQgYSB2YWx1ZSB0d2ljZSB3aXRoaW4gdGhlIGBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlYCBmdW5jdGlvbj8gVGhhdCBmZWVscy4uLiB1bnVzdWFsLiBMZXQgbWUgcHVsbCB1cCB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24uIFJpZ2h0LCBpdCdzIGluIGBjbWQuY2AsIHNvIEknbGwgbmF2aWdhdGUgdGhlcmUgYW5kIGRpZyBpbnRvIHRoZSBjb2RlLiBHb3R0YSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB3aHkgdGhleSdyZSBwb3RlbnRpYWxseSBvdmVyd3JpdGluZyB0aGF0IHZhcmlhYmxlLiBJcyB0aGVyZSBhIGNvbmRpdGlvbmFsIGludm9sdmVkIHRoYXQgSSBtaXNzZWQ/IEFyZSB0aGV5IGhhbmRsaW5nIGRpZmZlcmVudCBSVEMgY29uZmlndXJhdGlvbnM/IE9yIGlzIHRoaXMgYSBwb3RlbnRpYWwgYnVnIHRoYXQgbmVlZHMgdG8gYmUgYWRkcmVzc2VkPyBUaW1lIHRvIGRpdmUgaW4gYW5kIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBwcm9ibGVtLCBvciBpZiB0aGUgbG9naWMgaXMganVzdGlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTU1NSwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjU0OjAwLjA4NTkzNzE2NFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0XFx0XFx0IE1MWDVfSUZDX1JUQ19TVEVfRk9STUFUXzhEVyk7XFxuIDM5MTpcXHRcXG4gMzkyOlxcdFxcdGlmIChydGNfYXR0ci1cXHUwMDNlaXNfc2NuZF9yYW5nZSkge1xcbiAzOTM6XFx0XFx0XFx0TUxYNV9TRVQocnRjLCBhdHRyLCBzdGVfZm9ybWF0XzEsIE1MWDVfSUZDX1JUQ19TVEVfRk9STUFUX1JBTkdFKTtcXG4gMzk0OlxcdFxcdFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbnVtX21hdGNoX3N0ZSwgMik7XFxuIDM5NTpcXHRcXHR9XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgcGQsIHJ0Y19hdHRyLVxcdTAwM2VwZCk7XFxuIDM5ODpcXHRcXHRNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9tZXRob2QsIHJ0Y19hdHRyLVxcdTAwM2Vmd19nZW5fd3FlKTtcXG4gMzk5OlxcdFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdXBkYXRlX2luZGV4X21vZGUsIHJ0Y19hdHRyLVxcdTAwM2V1cGRhdGVfaW5kZXhfbW9kZSk7XFxuIDQwMDpcXHRcXHRNTFg1X1NFVChydGMsIGF0dHIsIGFjY2Vzc19pbmRleF9tb2RlLCBydGNfYXR0ci1cXHUwMDNlYWNjZXNzX2luZGV4X21vZGUpO1xcbiA0MDE6XFx0XFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfZGVwdGgsIHJ0Y19hdHRyLVxcdTAwM2Vsb2dfZGVwdGgpO1xcbiA0MDI6XFx0XFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfaGFzaF9zaXplLCBydGNfYXR0ci1cXHUwMDNlbG9nX3NpemUpO1xcbiA0MDM6XFx0XFx0TUxYNV9TRVQocnRjLCBhdHRyLCB0YWJsZV90eXBlLCBydGNfYXR0ci1cXHUwMDNldGFibGVfdHlwZSk7XFxuIDQwNDpcXHRcXHRNTFg1X1NFVChydGMsIGF0dHIsIG51bV9oYXNoX2RlZmluZXIsIHJ0Y19hdHRyLVxcdTAwM2VudW1faGFzaF9kZWZpbmVyKTtcXG4gNDA1OlxcdFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbWF0Y2hfZGVmaW5lcl8wLCBydGNfYXR0ci1cXHUwMDNlbWF0Y2hfZGVmaW5lcl8wKTtcXG4gNDA2OlxcdFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbWF0Y2hfZGVmaW5lcl8xLCBydGNfYXR0ci1cXHUwMDNlbWF0Y2hfZGVmaW5lcl8xKTtcXG4gNDA3OlxcdFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgc3RjX2lkLCBydGNfYXR0ci1cXHUwMDNlc3RjX2Jhc2UpO1xcbiA0MDg6XFx0XFx0TUxYNV9TRVQocnRjLCBhdHRyLCBzdGVfdGFibGVfYmFzZV9pZCwgcnRjX2F0dHItXFx1MDAzZXN0ZV9iYXNlKTtcXG4gNDA5OlxcdFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbWlzc19mbG93X3RhYmxlX2lkLCBydGNfYXR0ci1cXHUwMDNlbWlzc19mdF9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjU0OjAwLjA4NjA0NjkzNFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDM4OTkwNjA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQSBEZWVwIERpdmUgaW50byBNZWxsYW5veCBtbHg1IERyaXZlciBNb2RpZmljYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBhIGZldyB0aGluZ3M6IGR1cGxpY2F0ZSBsaW5lcywgZXJyb3IgbWVzc2FnZSBlbmhhbmNlbWVudHMsIGFuZCB3aGF0IGxvb2tlZCBsaWtlIGEgcG9zc2libGUgYnVnIGZpeC4gRGlnZ2luZyBkZWVwZXIsIGl0J3MgY2xlYXIgdGhlIGZpcnN0IHRoaW5nIGlzIGEgc2ltcGxlIHJlbW92YWwgb2YgYSByZWR1bmRhbnQgYE1MWDVfU0VUYCBtYWNybyBjYWxsIGluIGBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlYC4gTm8gcmVhbCBmdW5jdGlvbmFsIGNoYW5nZSB0aGVyZSwganVzdCB0aWR5aW5nIHVwIHRoZSBjb2RlLiBUaGVuLCB0aGVyZSdzIGFuIGFkZGl0aW9uIG9mIGEgc3luZHJvbWUgdG8gYW4gZXJyb3IgbWVzc2FnZSwgYW5kIGEgcmVtb3ZhbCBvZiBhIGR1cGxpY2F0ZSBgbWx4NV9jbWRfZXhlY2AgY2FsbCBpbiBhbm90aGVyIGZ1bmN0aW9uLiBNb3JlIG5vaXNlIHJlZHVjdGlvbiB0aGFuIGFueXRoaW5nLiBUaGVzZSBkb24ndCBzZWVtIGxpa2UgdGhleSdyZSB3b3J0aCBmdXp6aW5nLlxuXG5Ob3csIHRob3NlIGhlbHBlciBmdW5jdGlvbnMgYmVpbmcgYWRkZWQgdG8gY29udmVydCBlbnVtL3N0YXR1cyB0byBzdHJpbmcgZm9yIGVycm9yIG1lc3NhZ2VzIGluIHRoZSBgc2VuZC5jYCBhcmUgcHVyZWx5IGRlY29yYXRpdmUuIFNhbWUgd2l0aCBgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlYCwgaXQgcHJpbnRzIG1vcmUgaW5mbyAtIGxvZ2dpbmcuIE5vdCBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5UaGF0IGxlYXZlcyB0aGUgYGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdGAgY2hhbmdlLiBJdCBsb29rcyBsaWtlIGBjdHgtXHUwMDNlcXVldWVzYCB3YXMgaW5jcmVtZW50ZWQgYmVmb3JlIGBremFsbG9jX29ianNgIGFsbG9jYXRpb25zLCBwb3NzaWJseSBsZWFkaW5nIHRvIGFuIGluY29ycmVjdCBpbmNyZW1lbnQgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiBJIGluaXRpYWxseSB0aG91Z2h0IGl0IHdhcyBhIHByb2JsZW0sIGJ1dCBhZnRlciB0cmFjaW5nIHRoZSBjYWxsIHN0YWNrLCBpdCB0dXJucyBvdXQgdGhhdCBvbiBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgdGhlIGNvbnRleHQgaXMgZnJlZWQgaW1tZWRpYXRlbHkuIFNvIHRoZSBpbmNyZW1lbnRlZCBgY3R4LVx1MDAzZXF1ZXVlc2AgdmFyaWFibGUgaXMgaGFybWxlc3MuIEEgdGhlb3JldGljYWwgYnVnLCBidXQgbm8gaW1wYWN0LlxuXG5MZXQncyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgZHVwbGljYXRlIGBtbHg1X2NtZF9leGVjYCByZW1vdmFsLiBJdCB3YXMgcXVlcnlpbmcgdGhlIEhDQSBjYXBzLiBUaGVyZSB3ZXJlIHR3byBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLiBSZW1vdmluZyB0aGUgc2Vjb25kIGNhbGwganVzdCBwcmV2ZW50cyBhIHJlZHVuZGFudCBleGVjdXRpb24gb2YgdGhlIHNhbWUgY29tbWFuZC4gTm8gbmV3IGZ1bmN0aW9uYWxpdHkgb3IgYnVnIGZpeGVzLiBKdXN0IGEgbWlub3Igb3B0aW1pemF0aW9uLiBBbmQgaW4gdGhlIGxhcmdlciBwaWN0dXJlLCBpdCdzIGEgbWlub3Igb3B0aW1pemF0aW9uLCBhbmQgaXQncyBub3Qgd29ydGggZnV6emluZy5cblxuTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBjb3NtZXRpYzogZXJyb3IgbWVzc2FnZSBpbXByb3ZlbWVudHMsIHJlZHVuZGFudCBjb2RlIHJlbW92YWwsIGFuZCBhIGhhcm1sZXNzIGJ1ZyBmaXguIFBsdXMsIHRoaXMgaXMgYWxsIGhhcHBlbmluZyB3aXRoaW4gdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSB0aGF0IGlzbid0IHJlYWRpbHkgZW11bGF0ZWQuIFRoZXJlZm9yZSwgdGhlIGFuc3dlciBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0MTAsIk91dHB1dFRva2VucyI6MTM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIyOjU0OjI0LjQ3NTk1NjE0MloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIG9mIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMgKGVuaGFuY2luZyBlcnJvciBtZXNzYWdlcyB3aXRoIHN0cmluZyByZXByZXNlbnRhdGlvbnMgYW5kIGFkZGl0aW9uYWwgZGV0YWlscyksIHJlbW92YWwgb2YgcmVkdW5kYW50IGNvZGUgKGEgZHVwbGljYXRlIE1MWDVfU0VUIGFuZCBhIGR1cGxpY2F0ZSBtbHg1X2NtZF9leGVjIHRoYXQgaWdub3JlZCBpdHMgb3V0cHV0KSwgYW5kIGEgdGhlb3JldGljYWwgZXJyb3IgcGF0aCBmaXggaW4gaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0IHRoYXQgaGFzIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IGJlY2F1c2UgdGhlIGNvbnRleHQgaXMgZnJlZWQgaW1tZWRpYXRlbHkgb24gZmFpbHVyZS4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgTWVsbGFub3ggbWx4NSBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBvZiBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIChlbmhhbmNpbmcgZXJyb3IgbWVzc2FnZXMgd2l0aCBzdHJpbmcgcmVwcmVzZW50YXRpb25zIGFuZCBhZGRpdGlvbmFsIGRldGFpbHMpLCByZW1vdmFsIG9mIHJlZHVuZGFudCBjb2RlIChhIGR1cGxpY2F0ZSBNTFg1X1NFVCBhbmQgYSBkdXBsaWNhdGUgbWx4NV9jbWRfZXhlYyB0aGF0IGlnbm9yZWQgaXRzIG91dHB1dCksIGFuZCBhIHRoZW9yZXRpY2FsIGVycm9yIHBhdGggZml4IGluIGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdCB0aGF0IGhhcyBubyBmdW5jdGlvbmFsIGltcGFjdCBiZWNhdXNlIHRoZSBjb250ZXh0IGlzIGZyZWVkIGltbWVkaWF0ZWx5IG9uIGZhaWx1cmUuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyBhcmUgaW4gdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowl8gdr[1] Phase: Running StartedAt: 2026-07-25 22:54:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl8gdr[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-25 22:54:35 +0000 UTC FinishedAt: 2026-07-25 22:54:41 +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,}