From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chong Li Subject: [PATCH v6 for Xen 4.7 3/4] libxl: enable per-VCPU parameter settings for RTDS scheduler Date: Sun, 6 Mar 2016 11:55:57 -0600 Message-ID: <1457286958-5427-4-git-send-email-lichong659@gmail.com> References: <1457286958-5427-1-git-send-email-lichong659@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1457286958-5427-1-git-send-email-lichong659@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Chong Li , wei.liu2@citrix.com, Sisu Xi , george.dunlap@eu.citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, ian.campbell@eu.citrix.com, Meng Xu , lichong659@gmail.com, dgolomb@seas.upenn.edu List-Id: xen-devel@lists.xenproject.org QWRkIGxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zX2dldC9zZXQgYW5kIHNjaGVkX3J0ZHNfdmNwdV9n ZXQvc2V0CmZ1bmN0aW9ucyB0byBzdXBwb3J0IHBlci1WQ1BVIHNldHRpbmdzLgoKU2lnbmVkLW9m Zi1ieTogQ2hvbmcgTGkgPGNob25nLmxpQHd1c3RsLmVkdT4KU2lnbmVkLW9mZi1ieTogTWVuZyBY dSA8bWVuZ3h1QGNpcy51cGVubi5lZHU+ClNpZ25lZC1vZmYtYnk6IFNpc3UgWGkgPHhpc2lzdUBn bWFpbC5jb20+CgotLS0KQ2hhbmdlcyBvbiBQQVRDSCB2NToKMSkgQWRkIGEgc2VwZXJhdGUgZnVu Y3Rpb24sIHNjaGVkX3J0ZHNfdmNwdXNfcGFyYW1zX3NldF9hbGwoKSwgdG8gc2V0CnRoZSBwYXJh bWV0ZXJzIG9mIGFsbCB2Y3B1cyBvZiBhIGRvbWFpbi4KCjIpIEFkZCBsaWJ4bF92Y3B1X3NjaGVk X3BhcmFtc19zZXRfYWxsKCkgdG8gaW52b2tlIHRoZSBhYm92ZSBmdW5jdGlvbi4KCjMpIENvZGlu ZyBzdHlsZSBjaGFuZ2VzLiAoSSBkaWRuJ3QgZmluZCB0aGUgaW5kZW50YXRpb24gcnVsZXMgZm9y IGZ1bmN0aW9uCmNhbGxzIHdpdGggbG9uZyBwYXJhbWV0ZXJzIChzdGlsbCA0IHNwYWNlcz8pLCBz byBJIGp1c3QgaW1pdGF0ZWQgdGhlCmluZGVudGF0aW9uIHN0eWxlIG9mIHNvbWUgZXhpc3Rpbmcg ZnVuY3Rpb25zKQoKQ2hhbmdlcyBvbiBQQVRDSCB2NDoKMSkgQ29kaW5nIHN0eWxlIGNoYW5nZXMK CkNoYW5nZXMgb24gUEFUQ0ggdjM6CjEpIEFkZCBzYW5pdHkgY2hlY2sgb24gdmNwdWlkCgoyKSBB ZGQgY29tbWVudHMgb24gcGVyLWRvbWFpbiBhbmQgcGVyLXZjcHUgZnVuY3Rpb25zIGZvciBsaWJ4 bAp1c2VycwoKQ2hhbmdlcyBvbiBQQVRDSCB2MjoKMSkgTmV3IGRhdGEgc3RydWN0dXJlIChsaWJ4 bF92Y3B1X3NjaGVkX3BhcmFtcyBhbmQgbGlieGxfc2NoZWRfcGFyYW1zKQp0byBoZWxwIHBlci1W Q1BVIHNldHRpbmdzLgoKMikgc2NoZWRfcnRkc192Y3B1X2dldCBub3cgY2FuIHJldHVybiBhIHJh bmRvbSBzdWJzZXQgb2YgdGhlIHBhcmFtZXRlcnMKb2YgdGhlIFZDUFVzIG9mIGEgc3BlY2lmaWMg ZG9tYWluLgoKQ0M6IDxkYXJpby5mYWdnaW9saUBjaXRyaXguY29tPgpDQzogPGdlb3JnZS5kdW5s YXBAZXUuY2l0cml4LmNvbT4KQ0M6IDxkZ29sb21iQHNlYXMudXBlbm4uZWR1PgpDQzogPG1lbmd4 dUBjaXMudXBlbm4uZWR1PgpDQzogPHdlaS5saXUyQGNpdHJpeC5jb20+CkNDOiA8bGljaG9uZzY1 OUBnbWFpbC5jb20+CkNDOiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNvbT4KQ0M6IDxpYW4uY2Ft cGJlbGxAZXUuY2l0cml4LmNvbT4KLS0tCiB0b29scy9saWJ4bC9saWJ4bC5jICAgICAgICAgfCAz MjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KIHRvb2xzL2xp YnhsL2xpYnhsLmggICAgICAgICB8ICAzNyArKysrKwogdG9vbHMvbGlieGwvbGlieGxfdHlwZXMu aWRsIHwgIDE0ICsrCiAzIGZpbGVzIGNoYW5nZWQsIDM1NCBpbnNlcnRpb25zKCspLCAyMyBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bC5jIGIvdG9vbHMvbGlieGwv bGlieGwuYwppbmRleCBiZDNhYWM4Li40NTMyZTg2IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9s aWJ4bC5jCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsLmMKQEAgLTU3NzAsNiArNTc3MCwyMDcgQEAg c3RhdGljIGludCBzY2hlZF9jcmVkaXQyX2RvbWFpbl9zZXQobGlieGxfX2djICpnYywgdWludDMy X3QgZG9taWQsCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2NoZWRfcnRkc192YWxp ZGF0ZV9wYXJhbXMobGlieGxfX2djICpnYywgaW50IHBlcmlvZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBidWRnZXQsIHVpbnQzMl90ICpzZG9tX3BlcmlvZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpzZG9tX2J1ZGdldCkK K3sKKyAgICBpbnQgcmMgPSAwOworICAgIGlmIChwZXJpb2QgIT0gTElCWExfRE9NQUlOX1NDSEVE X1BBUkFNX1BFUklPRF9ERUZBVUxUKSB7CisgICAgICAgIGlmIChwZXJpb2QgPCAxKSB7CisgICAg ICAgICAgICBMT0coRVJST1IsICJWQ1BVIHBlcmlvZCBpcyBvdXQgb2YgcmFuZ2UsICIKKyAgICAg ICAgICAgICAgICAgICAgICAgInZhbGlkIHZhbHVlcyBhcmUgbGFyZ2VyIHRoYW4gb3IgZXF1YWwg dG8gMSIpOworICAgICAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsgLyogZXJyb3Igc2NoZWR1bGlu ZyBwYXJhbWV0ZXIgKi8KKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgICAg ICpzZG9tX3BlcmlvZCA9IHBlcmlvZDsKKyAgICB9CisKKyAgICBpZiAoYnVkZ2V0ICE9IExJQlhM X0RPTUFJTl9TQ0hFRF9QQVJBTV9CVURHRVRfREVGQVVMVCkgeworICAgICAgICBpZiAoYnVkZ2V0 IDwgMSkgeworICAgICAgICAgICAgTE9HKEVSUk9SLCAiVkNQVSBidWRnZXQgaXMgbm90IHNldCBv ciBvdXQgb2YgcmFuZ2UsICIKKyAgICAgICAgICAgICAgICAgICAgICAgInZhbGlkIHZhbHVlcyBh cmUgbGFyZ2VyIHRoYW4gb3IgZXF1YWwgdG8gMSIpOworICAgICAgICAgICAgcmMgPSBFUlJPUl9J TlZBTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgICAgICpzZG9tX2J1 ZGdldCA9IGJ1ZGdldDsKKyAgICB9CisKKyAgICBpZiAoKnNkb21fYnVkZ2V0ID4gKnNkb21fcGVy aW9kKSB7CisgICAgICAgIExPRyhFUlJPUiwgIlZDUFUgYnVkZ2V0IG11c3QgYmUgc21hbGxlciB0 aGFuICIKKyAgICAgICAgICAgICAgICAgICAib3IgZXF1YWwgdG8gVkNQVSBwZXJpb2QiKTsKKyAg ICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICB9CitvdXQ6CisgICAgcmV0dXJuIHJjOworfQor CisvKiBHZXQgdGhlIFJURFMgc2NoZWR1bGluZyBwYXJhbWV0ZXJzIG9mIHZjcHUocykgKi8KK3N0 YXRpYyBpbnQgc2NoZWRfcnRkc192Y3B1X2dldChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21p ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFt cyAqc2NpbmZvKQoreworICAgIHVpbnQzMl90IG51bV92Y3B1czsKKyAgICBpbnQgaSwgciwgcmM7 CisgICAgeGNfZG9taW5mb190IGluZm87CisgICAgc3RydWN0IHhlbl9kb21jdGxfc2NoZWRwYXJh bV92Y3B1ICp2Y3B1czsKKworICAgIHIgPSB4Y19kb21haW5fZ2V0aW5mbyhDVFgtPnhjaCwgZG9t aWQsIDEsICZpbmZvKTsKKyAgICBpZiAociA8IDApIHsKKyAgICAgICAgTE9HRShFUlJPUiwgImdl dHRpbmcgZG9tYWluIGluZm8iKTsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICBn b3RvIG91dDsKKyAgICB9CisKKyAgICBudW1fdmNwdXMgPSBzY2luZm8tPm51bV92Y3B1cyA/IHNj aW5mby0+bnVtX3ZjcHVzIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5t YXhfdmNwdV9pZCArIDE7CisKKyAgICBHQ05FV19BUlJBWSh2Y3B1cywgbnVtX3ZjcHVzKTsKKwor ICAgIGlmIChzY2luZm8tPm51bV92Y3B1cyA+IDApIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IG51bV92Y3B1czsgaSsrKSB7CisgICAgICAgICAgICBpZiAoc2NpbmZvLT52Y3B1c1tpXS52Y3B1 aWQgPCAwIHx8CisgICAgICAgICAgICAgICAgc2NpbmZvLT52Y3B1c1tpXS52Y3B1aWQgPiBpbmZv Lm1heF92Y3B1X2lkKSB7CisgICAgICAgICAgICAgICAgTE9HKEVSUk9SLCAiVkNQVSBpbmRleCBp cyBvdXQgb2YgcmFuZ2UsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWxpZCB2YWx1 ZXMgYXJlIHdpdGhpbiByYW5nZSBmcm9tIDAgdG8gJWQiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5mby5tYXhfdmNwdV9pZCk7CisgICAgICAgICAgICAgICAgcmMgPSBFUlJPUl9JTlZB TDsKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHZjcHVzW2ldLnZjcHVpZCA9IHNjaW5mby0+dmNwdXNbaV0udmNwdWlkOworICAgICAgICB9Cisg ICAgfSBlbHNlCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdmNwdXM7IGkrKykKKyAgICAg ICAgICAgIHZjcHVzW2ldLnZjcHVpZCA9IGk7CisKKyAgICByID0geGNfc2NoZWRfcnRkc192Y3B1 X2dldChDVFgtPnhjaCwgZG9taWQsIHZjcHVzLCBudW1fdmNwdXMpOworICAgIGlmIChyICE9IDAp IHsKKyAgICAgICAgTE9HRShFUlJPUiwgImdldHRpbmcgdmNwdSBzY2hlZCBydGRzIik7CisgICAg ICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorICAgIHNjaW5m by0+c2NoZWQgPSBMSUJYTF9TQ0hFRFVMRVJfUlREUzsKKyAgICBpZiAoc2NpbmZvLT5udW1fdmNw dXMgPT0gMCkgeworICAgICAgICBzY2luZm8tPm51bV92Y3B1cyA9IG51bV92Y3B1czsKKyAgICAg ICAgc2NpbmZvLT52Y3B1cyA9IGxpYnhsX19jYWxsb2MoTk9HQywgbnVtX3ZjcHVzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobGlieGxfc2NoZWRfcGFyYW1zKSk7Cisg ICAgfQorICAgIGZvcihpID0gMDsgaSA8IG51bV92Y3B1czsgaSsrKSB7CisgICAgICAgIHNjaW5m by0+dmNwdXNbaV0ucGVyaW9kID0gdmNwdXNbaV0ucy5ydGRzLnBlcmlvZDsKKyAgICAgICAgc2Np bmZvLT52Y3B1c1tpXS5idWRnZXQgPSB2Y3B1c1tpXS5zLnJ0ZHMuYnVkZ2V0OworICAgICAgICBz Y2luZm8tPnZjcHVzW2ldLnZjcHVpZCA9IHZjcHVzW2ldLnZjcHVpZDsKKyAgICB9CityZXR1cm4g cjsKK291dDoKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qIFNldCB0aGUgUlREUyBzY2hlZHVsaW5n IHBhcmFtZXRlcnMgb2YgdmNwdShzKSAqLworc3RhdGljIGludCBzY2hlZF9ydGRzX3ZjcHVzX3Bh cmFtc19zZXQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgbGlieGxfdmNwdV9zY2hlZF9wYXJhbXMgKnNjaW5mbykKK3sK KyAgICBpbnQgciwgcmM7CisgICAgaW50IGk7CisgICAgdWludDE2X3QgbWF4X3ZjcHVpZDsKKyAg ICB4Y19kb21pbmZvX3QgaW5mbzsKKyAgICBzdHJ1Y3QgeGVuX2RvbWN0bF9zY2hlZHBhcmFtX3Zj cHUgKnZjcHVzOworICAgIHVpbnQzMl90IG51bV92Y3B1czsKKworICAgIHIgPSB4Y19kb21haW5f Z2V0aW5mbyhDVFgtPnhjaCwgZG9taWQsIDEsICZpbmZvKTsKKyAgICBpZiAociA8IDApIHsKKyAg ICAgICAgTE9HRShFUlJPUiwgImdldHRpbmcgZG9tYWluIGluZm8iKTsKKyAgICAgICAgcmMgPSBF UlJPUl9GQUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgbWF4X3ZjcHVpZCA9IGlu Zm8ubWF4X3ZjcHVfaWQ7CisKKyAgICBpZiAoc2NpbmZvLT5udW1fdmNwdXMgPiAwKSB7CisgICAg ICAgIG51bV92Y3B1cyA9IHNjaW5mby0+bnVtX3ZjcHVzOworICAgICAgICBHQ05FV19BUlJBWSh2 Y3B1cywgbnVtX3ZjcHVzKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV92Y3B1czsgaSsr KSB7CisgICAgICAgICAgICBpZiAoc2NpbmZvLT52Y3B1c1tpXS52Y3B1aWQgPCAwIHx8CisgICAg ICAgICAgICAgICAgc2NpbmZvLT52Y3B1c1tpXS52Y3B1aWQgPiBtYXhfdmNwdWlkKSB7CisgICAg ICAgICAgICAgICAgTE9HKEVSUk9SLCAiVkNQVSBpbmRleCBpcyBvdXQgb2YgcmFuZ2UsICIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWxpZCB2YWx1ZXMgYXJlIHdpdGhpbiByYW5nZSBm cm9tIDAgdG8gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3ZjcHVpZCk7Cisg ICAgICAgICAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgICAgICAgICBnb3RvIG91 dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZjcHVzW2ldLnZjcHVpZCA9IHNjaW5mby0+ dmNwdXNbaV0udmNwdWlkOworCisgICAgICAgICAgICByYyA9IHNjaGVkX3J0ZHNfdmFsaWRhdGVf cGFyYW1zKGdjLAorICAgICAgICAgICAgICAgICAgICBzY2luZm8tPnZjcHVzW2ldLnBlcmlvZCwg c2NpbmZvLT52Y3B1c1tpXS5idWRnZXQsCisgICAgICAgICAgICAgICAgICAgICZ2Y3B1c1tpXS5z LnJ0ZHMucGVyaW9kLCAmdmNwdXNbaV0ucy5ydGRzLmJ1ZGdldCk7CisgICAgICAgICAgICBpZiAo cmMpIHsKKyAgICAgICAgICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICAgICAgICAg IGdvdG8gb3V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg ICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgciA9 IHhjX3NjaGVkX3J0ZHNfdmNwdV9zZXQoQ1RYLT54Y2gsIGRvbWlkLAorICAgICAgICB2Y3B1cywg bnVtX3ZjcHVzKTsKKyAgICBpZiAociAhPSAwKSB7CisgICAgICAgIExPR0UoRVJST1IsICJzZXR0 aW5nIHZjcHUgc2NoZWQgcnRkcyIpOworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAg IGdvdG8gb3V0OworICAgIH0KK3JldHVybiByOworb3V0OgorICAgIHJldHVybiByYzsKK30KKwor LyogU2V0IHRoZSBSVERTIHNjaGVkdWxpbmcgcGFyYW1ldGVycyBvZiBhbGwgdmNwdXMgb2YgYSBk b21haW4gKi8KK3N0YXRpYyBpbnQgc2NoZWRfcnRkc192Y3B1c19wYXJhbXNfc2V0X2FsbChsaWJ4 bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtcyAqc2NpbmZvKQoreworICAgIGludCByLCBy YzsKKyAgICBpbnQgaTsKKyAgICB1aW50MTZfdCBtYXhfdmNwdWlkOworICAgIHhjX2RvbWluZm9f dCBpbmZvOworICAgIHN0cnVjdCB4ZW5fZG9tY3RsX3NjaGVkcGFyYW1fdmNwdSAqdmNwdXM7Cisg ICAgdWludDMyX3QgbnVtX3ZjcHVzOworCisgICAgciA9IHhjX2RvbWFpbl9nZXRpbmZvKENUWC0+ eGNoLCBkb21pZCwgMSwgJmluZm8pOworICAgIGlmIChyIDwgMCkgeworICAgICAgICBMT0dFKEVS Uk9SLCAiZ2V0dGluZyBkb21haW4gaW5mbyIpOworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Cisg ICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICBtYXhfdmNwdWlkID0gaW5mby5tYXhfdmNwdV9p ZDsKKworICAgIGlmIChzY2luZm8tPm51bV92Y3B1cyA9PSAxKSB7CisgICAgICAgIG51bV92Y3B1 cyA9IG1heF92Y3B1aWQgKyAxOworICAgICAgICBHQ05FV19BUlJBWSh2Y3B1cywgbnVtX3ZjcHVz KTsKKyAgICAgICAgaWYgKHNjaGVkX3J0ZHNfdmFsaWRhdGVfcGFyYW1zKGdjLCBzY2luZm8tPnZj cHVzWzBdLnBlcmlvZCwKKyAgICAgICAgICAgIHNjaW5mby0+dmNwdXNbMF0uYnVkZ2V0LCAmdmNw dXNbMF0ucy5ydGRzLnBlcmlvZCwKKyAgICAgICAgICAgICZ2Y3B1c1swXS5zLnJ0ZHMuYnVkZ2V0 KSkgeworICAgICAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgICAgIGdvdG8gb3V0 OworICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdmNwdXM7IGkrKykgewor ICAgICAgICAgICAgdmNwdXNbaV0udmNwdWlkID0gaTsKKyAgICAgICAgICAgIHZjcHVzW2ldLnMu cnRkcy5wZXJpb2QgPSBzY2luZm8tPnZjcHVzWzBdLnBlcmlvZDsKKyAgICAgICAgICAgIHZjcHVz W2ldLnMucnRkcy5idWRnZXQgPSBzY2luZm8tPnZjcHVzWzBdLmJ1ZGdldDsKKyAgICAgICAgfQor ICAgIH0gZWxzZSB7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gb3V0 OworICAgIH0KKworICAgIHIgPSB4Y19zY2hlZF9ydGRzX3ZjcHVfc2V0KENUWC0+eGNoLCBkb21p ZCwKKyAgICAgICAgdmNwdXMsIG51bV92Y3B1cyk7CisgICAgaWYgKHIgIT0gMCkgeworICAgICAg ICBMT0dFKEVSUk9SLCAic2V0dGluZyB2Y3B1IHNjaGVkIHJ0ZHMiKTsKKyAgICAgICAgcmMgPSBF UlJPUl9GQUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CityZXR1cm4gcjsKK291dDoKKyAg ICByZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbnQgc2NoZWRfcnRkc19kb21haW5fZ2V0KGxpYnhs X19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX2RvbWFpbl9zY2hlZF9wYXJhbXMgKnNjaW5mbykKIHsKQEAgLTU4MDIsMzAgKzYwMDMs OSBAQCBzdGF0aWMgaW50IHNjaGVkX3J0ZHNfZG9tYWluX3NldChsaWJ4bF9fZ2MgKmdjLCB1aW50 MzJfdCBkb21pZCwKICAgICAgICAgTE9HRShFUlJPUiwgImdldHRpbmcgZG9tYWluIHNjaGVkIHJ0 ZHMiKTsKICAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7CiAgICAgfQotCi0gICAgaWYgKHNjaW5m by0+cGVyaW9kICE9IExJQlhMX0RPTUFJTl9TQ0hFRF9QQVJBTV9QRVJJT0RfREVGQVVMVCkgewot ICAgICAgICBpZiAoc2NpbmZvLT5wZXJpb2QgPCAxKSB7Ci0gICAgICAgICAgICBMT0coRVJST1Is ICJWQ1BVIHBlcmlvZCBpcyBub3Qgc2V0IG9yIG91dCBvZiByYW5nZSwgIgotICAgICAgICAgICAg ICAgICAgICAgICAidmFsaWQgdmFsdWVzIGFyZSBsYXJnZXIgdGhhbiAxIik7Ci0gICAgICAgICAg ICByZXR1cm4gRVJST1JfSU5WQUw7Ci0gICAgICAgIH0KLSAgICAgICAgc2RvbS5wZXJpb2QgPSBz Y2luZm8tPnBlcmlvZDsKLSAgICB9Ci0KLSAgICBpZiAoc2NpbmZvLT5idWRnZXQgIT0gTElCWExf RE9NQUlOX1NDSEVEX1BBUkFNX0JVREdFVF9ERUZBVUxUKSB7Ci0gICAgICAgIGlmIChzY2luZm8t PmJ1ZGdldCA8IDEpIHsKLSAgICAgICAgICAgIExPRyhFUlJPUiwgIlZDUFUgYnVkZ2V0IGlzIG5v dCBzZXQgb3Igb3V0IG9mIHJhbmdlLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICJ2YWxpZCB2 YWx1ZXMgYXJlIGxhcmdlciB0aGFuIDEiKTsKLSAgICAgICAgICAgIHJldHVybiBFUlJPUl9JTlZB TDsKLSAgICAgICAgfQotICAgICAgICBzZG9tLmJ1ZGdldCA9IHNjaW5mby0+YnVkZ2V0OwotICAg IH0KLQotICAgIGlmIChzZG9tLmJ1ZGdldCA+IHNkb20ucGVyaW9kKSB7Ci0gICAgICAgIExPRyhF UlJPUiwgIlZDUFUgYnVkZ2V0IGlzIGxhcmdlciB0aGFuIFZDUFUgcGVyaW9kLCAiCi0gICAgICAg ICAgICAgICAgICAgIlZDUFUgYnVkZ2V0IHNob3VsZCBiZSBubyBsYXJnZXIgdGhhbiBWQ1BVIHBl cmlvZCIpOworICAgIGlmIChzY2hlZF9ydGRzX3ZhbGlkYXRlX3BhcmFtcyhnYywgc2NpbmZvLT5w ZXJpb2QsIHNjaW5mby0+YnVkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Rv bS5wZXJpb2QsICZzZG9tLmJ1ZGdldCkpCiAgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsKLSAg ICB9CiAKICAgICByYyA9IHhjX3NjaGVkX3J0ZHNfZG9tYWluX3NldChDVFgtPnhjaCwgZG9taWQs ICZzZG9tKTsKICAgICBpZiAocmMgPCAwKSB7CkBAIC01ODczLDYgKzYwNTMsNzQgQEAgaW50IGxp YnhsX2RvbWFpbl9zY2hlZF9wYXJhbXNfc2V0KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21p ZCwKICAgICByZXR1cm4gcmV0OwogfQogCitpbnQgbGlieGxfdmNwdV9zY2hlZF9wYXJhbXNfc2V0 KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtcyAqc2NpbmZvKQoreworICAg IEdDX0lOSVQoY3R4KTsKKyAgICBsaWJ4bF9zY2hlZHVsZXIgc2NoZWQgPSBzY2luZm8tPnNjaGVk OworICAgIGludCByYzsKKworICAgIGlmIChzY2hlZCA9PSBMSUJYTF9TQ0hFRFVMRVJfVU5LTk9X TikKKyAgICAgICAgc2NoZWQgPSBsaWJ4bF9fZG9tYWluX3NjaGVkdWxlcihnYywgZG9taWQpOwor CisgICAgc3dpdGNoIChzY2hlZCkgeworICAgIGNhc2UgTElCWExfU0NIRURVTEVSX1NFREY6Cisg ICAgICAgIExPRyhFUlJPUiwgIlNFREYgc2NoZWR1bGVyIG5vIGxvbmdlciBhdmFpbGFibGUiKTsK KyAgICAgICAgcmMgPSBFUlJPUl9GRUFUVVJFX1JFTU9WRUQ7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgTElCWExfU0NIRURVTEVSX0NSRURJVDoKKyAgICBjYXNlIExJQlhMX1NDSEVEVUxFUl9D UkVESVQyOgorICAgIGNhc2UgTElCWExfU0NIRURVTEVSX0FSSU5DNjUzOgorICAgICAgICBMT0co RVJST1IsICJwZXItVkNQVSBwYXJhbWV0ZXIgc2V0dGluZyBub3Qgc3VwcG9ydGVkIGZvciB0aGlz IHNjaGVkdWxlciIpOworICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICBicmVhazsK KyAgICBjYXNlIExJQlhMX1NDSEVEVUxFUl9SVERTOgorICAgICAgICByYyA9IHNjaGVkX3J0ZHNf dmNwdXNfcGFyYW1zX3NldChnYywgZG9taWQsIHNjaW5mbyk7CisgICAgICAgIGJyZWFrOworICAg IGRlZmF1bHQ6CisgICAgICAgIExPRyhFUlJPUiwgIlVua25vd24gc2NoZWR1bGVyIik7CisgICAg ICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEdDX0ZS RUU7CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgbGlieGxfdmNwdV9zY2hlZF9wYXJhbXNfc2V0 X2FsbChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgbGlieGxfdmNwdV9zY2hlZF9wYXJhbXMgKnNjaW5mbykKK3sK KyAgICBHQ19JTklUKGN0eCk7CisgICAgbGlieGxfc2NoZWR1bGVyIHNjaGVkID0gc2NpbmZvLT5z Y2hlZDsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoc2NoZWQgPT0gTElCWExfU0NIRURVTEVSX1VO S05PV04pCisgICAgICAgIHNjaGVkID0gbGlieGxfX2RvbWFpbl9zY2hlZHVsZXIoZ2MsIGRvbWlk KTsKKworICAgIHN3aXRjaCAoc2NoZWQpIHsKKyAgICBjYXNlIExJQlhMX1NDSEVEVUxFUl9TRURG OgorICAgICAgICBMT0coRVJST1IsICJTRURGIHNjaGVkdWxlciBubyBsb25nZXIgYXZhaWxhYmxl Iik7CisgICAgICAgIHJjID0gRVJST1JfRkVBVFVSRV9SRU1PVkVEOworICAgICAgICBicmVhazsK KyAgICBjYXNlIExJQlhMX1NDSEVEVUxFUl9DUkVESVQ6CisgICAgY2FzZSBMSUJYTF9TQ0hFRFVM RVJfQ1JFRElUMjoKKyAgICBjYXNlIExJQlhMX1NDSEVEVUxFUl9BUklOQzY1MzoKKyAgICAgICAg TE9HKEVSUk9SLCAicGVyLVZDUFUgcGFyYW1ldGVyIHNldHRpbmcgbm90IHN1cHBvcnRlZCBmb3Ig dGhpcyBzY2hlZHVsZXIiKTsKKyAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBMSUJYTF9TQ0hFRFVMRVJfUlREUzoKKyAgICAgICAgcmMgPSBzY2hlZF9y dGRzX3ZjcHVzX3BhcmFtc19zZXRfYWxsKGdjLCBkb21pZCwgc2NpbmZvKTsKKyAgICAgICAgYnJl YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgTE9HKEVSUk9SLCAiVW5rbm93biBzY2hlZHVsZXIi KTsKKyAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg ICAgR0NfRlJFRTsKKyAgICByZXR1cm4gcmM7Cit9CisKIGludCBsaWJ4bF9kb21haW5fc2NoZWRf cGFyYW1zX2dldChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZG9tYWluX3NjaGVkX3BhcmFtcyAqc2NpbmZvKQog ewpAQCAtNTkwNyw2ICs2MTU1LDM4IEBAIGludCBsaWJ4bF9kb21haW5fc2NoZWRfcGFyYW1zX2dl dChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCiAgICAgcmV0dXJuIHJldDsKIH0KIAor aW50IGxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zX2dldChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3Qg ZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfdmNwdV9zY2hl ZF9wYXJhbXMgKnNjaW5mbykKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgaW50IHJjOworCisg ICAgc2NpbmZvLT5zY2hlZCA9IGxpYnhsX19kb21haW5fc2NoZWR1bGVyKGdjLCBkb21pZCk7CisK KyAgICBzd2l0Y2ggKHNjaW5mby0+c2NoZWQpIHsKKyAgICBjYXNlIExJQlhMX1NDSEVEVUxFUl9T RURGOgorICAgICAgICBMT0coRVJST1IsICJTRURGIHNjaGVkdWxlciBpcyBubyBsb25nZXIgYXZh aWxhYmxlIik7CisgICAgICAgIHJjID0gRVJST1JfRkVBVFVSRV9SRU1PVkVEOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIExJQlhMX1NDSEVEVUxFUl9DUkVESVQ6CisgICAgY2FzZSBMSUJYTF9T Q0hFRFVMRVJfQ1JFRElUMjoKKyAgICBjYXNlIExJQlhMX1NDSEVEVUxFUl9BUklOQzY1MzoKKyAg ICAgICAgTE9HKEVSUk9SLCAicGVyLVZDUFUgcGFyYW1ldGVyIGdldHRpbmcgbm90IHN1cHBvcnRl ZCBmb3IgdGhpcyBzY2hlZHVsZXIiKTsKKyAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBMSUJYTF9TQ0hFRFVMRVJfUlREUzoKKyAgICAgICAgcmMgPSBz Y2hlZF9ydGRzX3ZjcHVfZ2V0KGdjLCBkb21pZCwgc2NpbmZvKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgZGVmYXVsdDoKKyAgICAgICAgTE9HKEVSUk9SLCAiVW5rbm93biBzY2hlZHVsZXIiKTsKKyAg ICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgR0Nf RlJFRTsKKyAgICByZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbnQgbGlieGxfX2RvbWFpbl9zM19y ZXN1bWUobGlieGxfX2djICpnYywgaW50IGRvbWlkKQogewogICAgIGludCByYyA9IDA7CmRpZmYg LS1naXQgYS90b29scy9saWJ4bC9saWJ4bC5oIGIvdG9vbHMvbGlieGwvbGlieGwuaAppbmRleCA2 YjczODQ4Li5mMWQ1M2Q4IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bC5oCisrKyBiL3Rv b2xzL2xpYnhsL2xpYnhsLmgKQEAgLTIwNiw2ICsyMDYsMTcgQEAKICNkZWZpbmUgTElCWExfSEFW RV9ERVZJQ0VfTU9ERUxfVVNFUiAxCiAKIC8qCisgKiBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtcyBp cyB1c2VkIHRvIHN0b3JlIHBlci12Y3B1IHBhcmFtcy4KKyAqLworI2RlZmluZSBMSUJYTF9IQVZF X1ZDUFVfU0NIRURfUEFSQU1TIDEKKworLyoKKyAqIExJQlhMX0hBVkVfU0NIRURfUlREU19WQ1BV X1BBUkFNUyBpbmRpY2F0ZXMgUlREUyBzY2hlZHVsZXIKKyAqIG5vdyBzdXBwb3J0cyBwZXItdmNw dSBzZXR0aW5ncy4KKyAqLworI2RlZmluZSBMSUJYTF9IQVZFX1NDSEVEX1JURFNfVkNQVV9QQVJB TVMgMQorCisvKgogICogbGlieGxfZG9tYWluX2J1aWxkX2luZm8gaGFzIHRoZSBhcm0uZ2ljX3Zl cnNpb24gZmllbGQuCiAgKi8KICNkZWZpbmUgTElCWExfSEFWRV9CVUlMRElORk9fQVJNX0dJQ19W RVJTSU9OIDEKQEAgLTE2NDcsMTEgKzE2NTgsMzcgQEAgaW50IGxpYnhsX3NjaGVkX2NyZWRpdF9w YXJhbXNfc2V0KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBwb29saWQsCiAjZGVmaW5lIExJQlhM X0RPTUFJTl9TQ0hFRF9QQVJBTV9FWFRSQVRJTUVfREVGQVVMVCAtMQogI2RlZmluZSBMSUJYTF9E T01BSU5fU0NIRURfUEFSQU1fQlVER0VUX0RFRkFVTFQgICAgLTEKIAorLyogUGVyLVZDUFUgcGFy YW1ldGVycyovCisjZGVmaW5lIExJQlhMX1NDSEVEX1BBUkFNX1ZDUFVfSU5ERVhfREVGQVVMVCAg IC0xCisKKy8qIEdldCB0aGUgcGVyLWRvbWFpbiBzY2hlZHVsaW5nIHBhcmFtZXRlcnMuCisgKiBG b3Igc2NoZWR1bGVycyB0aGF0IHN1cHBvcnQgcGVyLXZjcHUgc2V0dGluZ3MgKGUuZy4sIFJURFMp LAorICogY2FsbGluZyAqX2RvbWFpbl9nZXQgZnVuY3Rpb25zIHdpbGwgZ2V0IGRlZmF1bHQgc2No ZWR1bGluZworICogcGFyYW1ldGVycy4KKyAqLwogaW50IGxpYnhsX2RvbWFpbl9zY2hlZF9wYXJh bXNfZ2V0KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9kb21haW5fc2NoZWRfcGFyYW1zICpwYXJhbXMpOworCisv KiBTZXQgdGhlIHBlci1kb21haW4gc2NoZWR1bGluZyBwYXJhbWV0ZXJzLgorICogRm9yIHNjaGVk dWxlcnMgdGhhdCBzdXBwb3J0IHBlci12Y3B1IHNldHRpbmdzIChlLmcuLCBSVERTKSwKKyAqIGNh bGxpbmcgKl9kb21haW5fc2V0IGZ1bmN0aW9ucyB3aWxsIHNldCBhbGwgdmNwdXMgd2l0aCB0aGUg c2FtZQorICogc2NoZWR1bGluZyBwYXJhbWV0ZXJzLgorICovCiBpbnQgbGlieGxfZG9tYWluX3Nj aGVkX3BhcmFtc19zZXQobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2RvbWFpbl9zY2hlZF9wYXJhbXMg KnBhcmFtcyk7CiAKKy8qIEdldCB0aGUgcGVyLXZjcHUgc2NoZWR1bGluZyBwYXJhbWV0ZXJzICov CitpbnQgbGlieGxfdmNwdV9zY2hlZF9wYXJhbXNfZ2V0KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJf dCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF92Y3B1X3Nj aGVkX3BhcmFtcyAqcGFyYW1zKTsKKworLyogU2V0IHRoZSBwZXItdmNwdSBzY2hlZHVsaW5nIHBh cmFtZXRlcnMgKi8KK2ludCBsaWJ4bF92Y3B1X3NjaGVkX3BhcmFtc19zZXQobGlieGxfY3R4ICpj dHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zICpwYXJhbXMpOworCisvKiBTZXQgdGhlIHBlci12 Y3B1IHNjaGVkdWxpbmcgcGFyYW1ldGVycyBvZiBhbGwgdmNwdXMgb2YgYSBkb21haW4qLworaW50 IGxpYnhsX3ZjcHVfc2NoZWRfcGFyYW1zX3NldF9hbGwobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90 IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX3Zj cHVfc2NoZWRfcGFyYW1zICpwYXJhbXMpOworCiBpbnQgbGlieGxfc2VuZF90cmlnZ2VyKGxpYnhs X2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf dHJpZ2dlciB0cmlnZ2VyLCB1aW50MzJfdCB2Y3B1aWQpOwogaW50IGxpYnhsX3NlbmRfc3lzcnEo bGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBjaGFyIHN5c3JxKTsKZGlmZiAtLWdpdCBh L3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlk bAppbmRleCBjZjM3MzBmLi43NDg3ZmM5IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF90 eXBlcy5pZGwKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsCkBAIC0zNzgsNiArMzc4 LDIwIEBAIGxpYnhsX2RvbWFpbl9yZXN0b3JlX3BhcmFtcyA9IFN0cnVjdCgiZG9tYWluX3Jlc3Rv cmVfcGFyYW1zIiwgWwogICAgICgic3RyZWFtX3ZlcnNpb24iLCB1aW50MzIsIHsnaW5pdF92YWwn OiAnMSd9KSwKICAgICBdKQogCitsaWJ4bF9zY2hlZF9wYXJhbXMgPSBTdHJ1Y3QoInNjaGVkX3Bh cmFtcyIsWworICAgICgidmNwdWlkIiwgICAgICAgaW50ZWdlciwgeydpbml0X3ZhbCc6ICdMSUJY TF9TQ0hFRF9QQVJBTV9WQ1BVX0lOREVYX0RFRkFVTFQnfSksCisgICAgKCJ3ZWlnaHQiLCAgICAg ICBpbnRlZ2VyLCB7J2luaXRfdmFsJzogJ0xJQlhMX0RPTUFJTl9TQ0hFRF9QQVJBTV9XRUlHSFRf REVGQVVMVCd9KSwKKyAgICAoImNhcCIsICAgICAgICAgIGludGVnZXIsIHsnaW5pdF92YWwnOiAn TElCWExfRE9NQUlOX1NDSEVEX1BBUkFNX0NBUF9ERUZBVUxUJ30pLAorICAgICgicGVyaW9kIiwg ICAgICAgaW50ZWdlciwgeydpbml0X3ZhbCc6ICdMSUJYTF9ET01BSU5fU0NIRURfUEFSQU1fUEVS SU9EX0RFRkFVTFQnfSksCisgICAgKCJleHRyYXRpbWUiLCAgICBpbnRlZ2VyLCB7J2luaXRfdmFs JzogJ0xJQlhMX0RPTUFJTl9TQ0hFRF9QQVJBTV9FWFRSQVRJTUVfREVGQVVMVCd9KSwKKyAgICAo ImJ1ZGdldCIsICAgICAgIGludGVnZXIsIHsnaW5pdF92YWwnOiAnTElCWExfRE9NQUlOX1NDSEVE X1BBUkFNX0JVREdFVF9ERUZBVUxUJ30pLAorICAgIF0pCisKK2xpYnhsX3ZjcHVfc2NoZWRfcGFy YW1zID0gU3RydWN0KCJ2Y3B1X3NjaGVkX3BhcmFtcyIsWworICAgICgic2NoZWQiLCAgICAgICAg bGlieGxfc2NoZWR1bGVyKSwKKyAgICAoInZjcHVzIiwgICAgICAgIEFycmF5KGxpYnhsX3NjaGVk X3BhcmFtcywgIm51bV92Y3B1cyIpKSwKKyAgICBdKQorCiBsaWJ4bF9kb21haW5fc2NoZWRfcGFy YW1zID0gU3RydWN0KCJkb21haW5fc2NoZWRfcGFyYW1zIixbCiAgICAgKCJzY2hlZCIsICAgICAg ICBsaWJ4bF9zY2hlZHVsZXIpLAogICAgICgid2VpZ2h0IiwgICAgICAgaW50ZWdlciwgeydpbml0 X3ZhbCc6ICdMSUJYTF9ET01BSU5fU0NIRURfUEFSQU1fV0VJR0hUX0RFRkFVTFQnfSksCi0tIAox LjkuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhl bi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3Rz Lnhlbi5vcmcveGVuLWRldmVsCg==