From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Rex Dieter To: git-commits@fedoraproject.org Subject: [rpms/amarok] epel10: - amarok-1.4.8 Date: Mon, 06 Jul 2026 18:03:44 GMT Message-ID: <178336102455.1.2137512662231279556.rpms-amarok-513e32fc8c39@fedoraproject.org> List-ID: X-Git-Repo: rpms/amarok X-Git-Branch: epel10 X-Git-Rev: 513e32fc8c393ff77acd1584ba98d2cfee14183f QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvYW1hcm9rCkJyYW5j aCA6IGVwZWwxMApDb21taXQgOiA1MTNlMzJmYzhjMzkzZmY3N2FjZDE1ODRiYTk4ZDJjZmVlMTQx ODNmCkF1dGhvciA6IFJleCBEaWV0ZXIgPHJkaWV0ZXJAZmVkb3JhcHJvamVjdC5vcmc+CkRhdGUg ICA6IDIwMDctMTItMjFUMDE6MjE6MDUrMDA6MDAKU3RhdHMgIDogKzEyLy0zNjYzIGluIDcgZmls ZShzKQpVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL2FtYXJvay9j LzUxM2UzMmZjOGMzOTNmZjc3YWNkMTU4NGJhOThkMmNmZWUxNDE4M2Y/YnJhbmNoPWVwZWwxMAoK TG9nOgotIGFtYXJvay0xLjQuOAoKLS0tCmRpZmYgLS1naXQgYS8uY3ZzaWdub3JlIGIvLmN2c2ln bm9yZQppbmRleCA3Y2Q5NTI3Li40NjI5OTI0IDEwMDY0NAotLS0gYS8uY3ZzaWdub3JlCisrKyBi Ly5jdnNpZ25vcmUKQEAgLTEgKzEgQEAKLWFtYXJvay0xLjQuNy50YXIuYnoyCithbWFyb2stMS40 LjgudGFyLmJ6MgoKZGlmZiAtLWdpdCBhL2FtYXJvay0xLjQuNy0xNDcxMjYucGF0Y2ggYi9hbWFy b2stMS40LjctMTQ3MTI2LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWQ3 ZjA1Li4wMDAwMDAwCi0tLSBhL2FtYXJvay0xLjQuNy0xNDcxMjYucGF0Y2gKKysrIC9kZXYvbnVs bApAQCAtMSw3OCArMCwwIEBACi1kaWZmIC11cCAuL2FtYXJvay9zcmMvc3RhdHVzYmFyL3N0YXR1 c0JhckJhc2UuY3BwLjE0NzEyNiAuL2FtYXJvay9zcmMvc3RhdHVzYmFyL3N0YXR1c0JhckJhc2Uu Y3BwCi0tLS0gLi9hbWFyb2svc3JjL3N0YXR1c2Jhci9zdGF0dXNCYXJCYXNlLmNwcC4xNDcxMjYJ MjAwNy0wOC0wNyAxOTo0ODoyOC4wMDAwMDAwMDAgKzAyMDAKLSsrKyAuL2FtYXJvay9zcmMvc3Rh dHVzYmFyL3N0YXR1c0JhckJhc2UuY3BwCTIwMDctMDktMDIgMTM6NTU6MzguMDAwMDAwMDAwICsw MjAwCi1AQCAtMjUsNiArMjUsNyBAQAotICNpbmNsdWRlICJzcXVlZXplZHRleHRsYWJlbC5oIgot ICNpbmNsdWRlICJzdGF0dXNCYXJCYXNlLmgiCi0gI2luY2x1ZGUgInRocmVhZG1hbmFnZXIuaCIK LSsjaW5jbHVkZSAiZW5naW5lY29udHJvbGxlci5oIgotIAotICNpbmNsdWRlIDxraW8vam9iLmg+ Ci0gI2luY2x1ZGUgPGtpY29ubG9hZGVyLmg+Ci1AQCAtMzQzLDkgKzM0NCwxMyBAQCBTdGF0dXNC YXI6OmxvbmdNZXNzYWdlVGhyZWFkU2FmZSggY29uc3QgCi0gdm9pZAotIFN0YXR1c0Jhcjo6Y3Vz dG9tRXZlbnQoIFFDdXN0b21FdmVudCAqZSApCi0gewotLSAgICBRU3RyaW5nICpzID0gc3RhdGlj X2Nhc3Q8UVN0cmluZyo+KCBlLT5kYXRhKCkgKTsKLS0gICAgbG9uZ01lc3NhZ2UoICpzICk7Ci0t ICAgIGRlbGV0ZSBzOwotKyAgICBpZihlLT50eXBlKCkgPT0gMTAwMCApewotKyAgICAgIFFTdHJp bmcgKnMgPSBzdGF0aWNfY2FzdDxRU3RyaW5nKj4oIGUtPmRhdGEoKSApOwotKyAgICAgIGxvbmdN ZXNzYWdlKCAqcyApOwotKyAgICAgIGRlbGV0ZSBzOwotKyAgICB9ZWxzZSBpZihlLT50eXBlKCkg PT0gMjAwMCApewotKyAgICAgIEVuZ2luZUNvbnRyb2xsZXI6Omluc3RhbmNlKCktPnVucGxheWFi bGVOb3RpZmljYXRpb24oKTsKLSsgICAgfQotIH0KLSAKLSAKLWRpZmYgLXVwIC4vYW1hcm9rL3Ny Yy9lbmdpbmVjb250cm9sbGVyLmNwcC4xNDcxMjYgLi9hbWFyb2svc3JjL2VuZ2luZWNvbnRyb2xs ZXIuY3BwCi0tLS0gLi9hbWFyb2svc3JjL2VuZ2luZWNvbnRyb2xsZXIuY3BwLjE0NzEyNgkyMDA3 LTA4LTA3IDE5OjQ4OjI4LjAwMDAwMDAwMCArMDIwMAotKysrIC4vYW1hcm9rL3NyYy9lbmdpbmVj b250cm9sbGVyLmNwcAkyMDA3LTA5LTAyIDEzOjU1OjM4LjAwMDAwMDAwMCArMDIwMAotQEAgLTI0 NCwxMyArMjQ0LDEwIEBAIGJvb2wgRW5naW5lQ29udHJvbGxlcjo6Y2FuRGVjb2RlKCBjb25zdCAK LSAgICAgaWYoIGVuZ2luZSgpICE9IEVuZ2luZUNvbnRyb2xsZXI6Omluc3RhbmNlKCktPm1fdm9p ZEVuZ2luZSApCi0gICAgIHsKLSAgICAgICAgIC8vd2Ugc3BlY2lhbCBjYXNlIHRoaXMgYXMgb3Ro ZXJ3aXNlIHVzZXJzIGhhdGUgdXMKLS0gICAgICAgIGlmICggIXZhbGlkICYmIGV4dC5sb3dlcigp ID09ICJtcDMiICYmICFpbnN0YWxsRGlzdHJvQ29kZWMoQW1hcm9rQ29uZmlnOjpzb3VuZFN5c3Rl bSgpKSApCi0tICAgICAgICAgICAgQW1hcm9rOjpTdGF0dXNCYXI6Omluc3RhbmNlKCktPmxvbmdN ZXNzYWdlVGhyZWFkU2FmZSgKLS0gICAgICAgICAgICAgICAgICAgIGkxOG4oICI8cD5UaGUgJTEg Y2xhaW1zIGl0IDxiPmNhbm5vdDwvYj4gcGxheSBNUDMgZmlsZXMuIgotLSAgICAgICAgICAgICAg ICAgICAgICAgICI8cD5Zb3UgbWF5IHdhbnQgdG8gY2hvb3NlIGEgZGlmZmVyZW50IGVuZ2luZSBm cm9tIHRoZSA8aT5Db25maWd1cmUgRGlhbG9nPC9pPiwgb3IgZXhhbWluZSAiCi0tICAgICAgICAg ICAgICAgICAgICAgICAgInRoZSBpbnN0YWxsYXRpb24gb2YgdGhlIG11bHRpbWVkaWEtZnJhbWV3 b3JrIHRoYXQgdGhlIGN1cnJlbnQgZW5naW5lIHVzZXMuICIKLS0gICAgICAgICAgICAgICAgICAg ICAgICAiPHA+WW91IG1heSBmaW5kIHVzZWZ1bCBpbmZvcm1hdGlvbiBpbiB0aGUgPGk+RkFRPC9p PiBzZWN0aW9uIG9mIHRoZSA8aT5BbWFyb2sgSGFuZEJvb2s8L2k+LiIgKQotLSAgICAgICAgICAg ICAgICAgICAgLmFyZyggQW1hcm9rQ29uZmlnOjpzb3VuZFN5c3RlbSgpICksIEtERTo6U3RhdHVz QmFyOjpFcnJvciApOwotKyAgICAgICAgaWYgKCAhdmFsaWQgJiYgZXh0Lmxvd2VyKCkgPT0gIm1w MyIpewotKyAgICAgICAgICAgIFFDdXN0b21FdmVudCAqIGUgPSBuZXcgUUN1c3RvbUV2ZW50KCAy MDAwICk7Ci0rICAgICAgICAgICAgUUFwcGxpY2F0aW9uOjpwb3N0RXZlbnQoIEFtYXJvazo6U3Rh dHVzQmFyOjppbnN0YW5jZSgpLCBlICk7Ci0rIH0KLSAKLSAgICAgICAgIC8vIENhY2hlIHRoaXMg cmVzdWx0IGZvciB0aGUgbmV4dCBsb29rdXAKLSAgICAgICAgIGlmICggIWV4dC5pc0VtcHR5KCkg KQotQEAgLTI2MCw2ICsyNTcsMTcgQEAgYm9vbCBFbmdpbmVDb250cm9sbGVyOjpjYW5EZWNvZGUo IGNvbnN0IAotICAgICByZXR1cm4gdmFsaWQ7Ci0gfQotIAotK3ZvaWQgRW5naW5lQ29udHJvbGxl cjo6dW5wbGF5YWJsZU5vdGlmaWNhdGlvbigpIHsKLSsKLSsgICAgaWYoICFpbnN0YWxsRGlzdHJv Q29kZWMoQW1hcm9rQ29uZmlnOjpzb3VuZFN5c3RlbSgpKSkKLSsgICAgICAgIEFtYXJvazo6U3Rh dHVzQmFyOjppbnN0YW5jZSgpLT5sb25nTWVzc2FnZVRocmVhZFNhZmUoCi0rICAgICAgICAgICAg ICAgICAgaTE4biggIjxwPlRoZSAlMSBjbGFpbXMgaXQgPGI+Y2Fubm90PC9iPiBwbGF5IE1QMyBm aWxlcy4iCi0rICAgICAgICAgICAgICAgICAgICAgICAgIjxwPllvdSBtYXkgd2FudCB0byBjaG9v c2UgYSBkaWZmZXJlbnQgZW5naW5lIGZyb20gdGhlIDxpPkNvbmZpZ3VyZSBEaWFsb2c8L2k+LCBv ciBleGFtaW5lICIKLSsgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGluc3RhbGxhdGlvbiBv ZiB0aGUgbXVsdGltZWRpYS1mcmFtZXdvcmsgdGhhdCB0aGUgY3VycmVudCBlbmdpbmUgdXNlcy4g IgotKyAgICAgICAgICAgICAgICAgICAgICAgICI8cD5Zb3UgbWF5IGZpbmQgdXNlZnVsIGluZm9y bWF0aW9uIGluIHRoZSA8aT5GQVE8L2k+IHNlY3Rpb24gb2YgdGhlIDxpPkFtYXJvayBIYW5kQm9v azwvaT4uIiApCi0rICAgICAgICAgICAgICAgICAgICAuYXJnKCBBbWFyb2tDb25maWc6OnNvdW5k U3lzdGVtKCkgKSwgS0RFOjpTdGF0dXNCYXI6OkVycm9yICk7Ci0rfQotKwotIGJvb2wgRW5naW5l Q29udHJvbGxlcjo6aW5zdGFsbERpc3Ryb0NvZGVjKCBjb25zdCBRU3RyaW5nJiBlbmdpbmUgLypG aWxldHlwZSB0eXBlKi8pCi0gewotICAgICBLU2VydmljZTo6UHRyIHNlcnZpY2UgPSBLVHJhZGVy OjpzZWxmKCktPnF1ZXJ5KCAiQW1hcm9rL0NvZGVjSW5zdGFsbCIKLWRpZmYgLXVwIC4vYW1hcm9r L3NyYy9lbmdpbmVjb250cm9sbGVyLmguMTQ3MTI2IC4vYW1hcm9rL3NyYy9lbmdpbmVjb250cm9s bGVyLmgKLS0tLSAuL2FtYXJvay9zcmMvZW5naW5lY29udHJvbGxlci5oLjE0NzEyNgkyMDA3LTA4 LTA3IDE5OjQ4OjI4LjAwMDAwMDAwMCArMDIwMAotKysrIC4vYW1hcm9rL3NyYy9lbmdpbmVjb250 cm9sbGVyLmgJMjAwNy0wOS0wMiAxMzo1NTozOC4wMDAwMDAwMDAgKzAyMDAKLUBAIC01Miw2ICs1 Miw3IEBAIHB1YmxpYzoKLSAgICAgdWludCAgICAgICAgICAgICAgICAgICAgIHRyYWNrUG9zaXRp b24oKSBjb25zdDsKLSAKLSAgICAgRW5naW5lQmFzZSogbG9hZEVuZ2luZSgpOwotKyAgICB2b2lk IHVucGxheWFibGVOb3RpZmljYXRpb24oKTsKLSAKLSAgICAgdWludCB0cmFja0xlbmd0aCgpIGNv bnN0IHsgcmV0dXJuIG1fYnVuZGxlLmxlbmd0aCgpICogMTAwMDsgfQotICAgICBjb25zdCBNZXRh QnVuZGxlICZidW5kbGUoKSBjb25zdDsKCmRpZmYgLS1naXQgYS9hbWFyb2stMS40LjctMTQ4MzE3 LnBhdGNoIGIvYW1hcm9rLTEuNC43LTE0ODMxNy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggZTZiZjUxYi4uMDAwMDAwMAotLS0gYS9hbWFyb2stMS40LjctMTQ4MzE3LnBhdGNo CisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLS0tIGJyYW5jaGVzL3N0YWJsZS9leHRy YWdlYXIvbXVsdGltZWRpYS9hbWFyb2svc3JjL3BsYXlsaXN0LmNwcAkyMDA3LzA4LzI4IDAzOjIz OjAyCTcwNTQ5MwotKysrIGJyYW5jaGVzL3N0YWJsZS9leHRyYWdlYXIvbXVsdGltZWRpYS9hbWFy b2svc3JjL3BsYXlsaXN0LmNwcAkyMDA3LzA4LzI4IDAzOjI1OjM0CTcwNTQ5NAotQEAgLTEyMjcs NyArMTIyNywxMCBAQAotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotLSAgICAgICAgaWYgKCAh QW1hcm9rQ29uZmlnOjpyYW5kb21Nb2RlKCkgfHwgbV9wcmV2VHJhY2tzLmNvdW50KCkgPD0gMSAp Ci0rICAgICAgICBpZiggZHluYW1pY01vZGUoKSApCi0rICAgICAgICB7Ci0rICAgICAgICB9Ci0r ICAgICAgICBlbHNlIGlmKCAhQW1hcm9rQ29uZmlnOjpyYW5kb21Nb2RlKCkgfHwgbV9wcmV2VHJh Y2tzLmNvdW50KCkgPD0gMSApCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgaWYoIGl0ZW0gKQot ICAgICAgICAgICAgIHsKCmRpZmYgLS1naXQgYS9hbWFyb2stMS40LjctdXRmOC5wYXRjaCBiL2Ft YXJvay0xLjQuNy11dGY4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODNk NmYzLi4wMDAwMDAwCi0tLSBhL2FtYXJvay0xLjQuNy11dGY4LnBhdGNoCisrKyAvZGV2L251bGwK QEAgLTEsMTQgKzAsMCBAQAotLS0tIGFtYXJvay0xLjQuNy5vbGQvYW1hcm9rL3NyYy9tZWRpYWRl dmljZS9tdHAvbXRwbWVkaWFkZXZpY2UuY3BwCTIwMDctMDgtMDcgMTM6NDg6MjguMDAwMDAwMDAw IC0wNDAwCi0rKysgYW1hcm9rLTEuNC43L2FtYXJvay9zcmMvbWVkaWFkZXZpY2UvbXRwL210cG1l ZGlhZGV2aWNlLmNwcAkyMDA3LTA5LTI3IDAzOjE4OjE5LjAwMDAwMDAwMCAtMDQwMAotQEAgLTI5 NSw5ICsyOTUsOSBAQAotICAgICBkZWJ1ZygpIDw8ICJQYXJlbnQgaWQgOiAiIDw8IHBhcmVudF9p ZCA8PCBlbmRsOwotIAotICAgICBtX2NyaXRpY2FsX211dGV4LmxvY2soKTsKLS0gICAgZGVidWco KSA8PCAiU2VuZGluZyB0cmFjay4uLiAiIDw8IGJ1bmRsZS51cmwoKS5wYXRoKCkubGF0aW4xKCkg PDwgZW5kbDsKLSsgICAgZGVidWcoKSA8PCAiU2VuZGluZyB0cmFjay4uLiAiIDw8IGJ1bmRsZS51 cmwoKS5wYXRoKCkudXRmOCgpIDw8IGVuZGw7Ci0gICAgIGludCByZXQgPSBMSUJNVFBfU2VuZF9U cmFja19Gcm9tX0ZpbGUoCi0tICAgICAgICBtX2RldmljZSwgYnVuZGxlLnVybCgpLnBhdGgoKS5s YXRpbjEoKSwgdHJhY2ttZXRhLAotKyAgICAgICAgbV9kZXZpY2UsIGJ1bmRsZS51cmwoKS5wYXRo KCkudXRmOCgpLCB0cmFja21ldGEsCi0gICAgICAgICBwcm9ncmVzc0NhbGxiYWNrLCB0aGlzLCBw YXJlbnRfaWQKLSAgICAgKTsKLSAgICAgbV9jcml0aWNhbF9tdXRleC51bmxvY2soKTsKCmRpZmYg LS1naXQgYS9hbWFyb2stYXNmLnBhdGNoIGIvYW1hcm9rLWFzZi5wYXRjaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggZmZjYTJiOS4uMDAwMDAwMAotLS0gYS9hbWFyb2stYXNmLnBhdGNo CisrKyAvZGV2L251bGwKQEAgLTEsMzUzMyArMCwwIEBACi0KLVByb3BlcnR5IGNoYW5nZXMgb246 IGFtYXJvay9zcmMvbWV0YWRhdGEvYXNmCi1fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCi1OYW1lOiBzdm46aWdub3JlCi0g ICArIC5saWJzCi0uZGVwcwotTWFrZWZpbGUKLU1ha2VmaWxlLmluCi0KLQotSW5kZXg6IGFtYXJv ay9zcmMvbWV0YWRhdGEvYXNmL2FzZmZpbGUuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGFtYXJvay9zcmMv bWV0YWRhdGEvYXNmL2FzZmZpbGUuaAkocmV2aXNpb24gMCkKLSsrKyBhbWFyb2svc3JjL21ldGFk YXRhL2FzZi9hc2ZmaWxlLmgJKHJldmlzaW9uIDc0MzAwNSkKLUBAIC0wLDAgKzEsMTE0IEBACi0r LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCi0rICAgIGNvcHlyaWdodCAgICAgICAgICAgIDogKEMpIDIwMDUt MjAwNyBieSBMdWvDocWhIExhbGluc2vDvQotKyAgICBlbWFpbCAgICAgICAgICAgICAgICA6IGxh bGluc2t5QGdtYWlsLmNvbQotKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSsvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCi0rICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotKyAqICAgaXQgIHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gICoKLSsgKiAg IDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gICAgICAg ICAgICAgICAgICAgICAqCi0rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKyAqICAgVGhpcyBsaWJyYXJ5 IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAg ICoKLSsgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YgICAgICAgICAgICAqCi0rICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSAgICAgKgotKyAqICAgTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAg ICAgICAgICAgICoKLSsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0rICogICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljICAgICAgKgot KyAqICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZSAgICoKLSsgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ bGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICAqCi0rICogICBVU0EgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKgotKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rI2lmbmRlZiBUQUdMSUJfQVNGRklM RV9ICi0rI2RlZmluZSBUQUdMSUJfQVNGRklMRV9ICi0rCi0rI2luY2x1ZGUgPHRhZy5oPgotKyNp bmNsdWRlIDx0ZmlsZS5oPgotKyNpbmNsdWRlICJhc2Zwcm9wZXJ0aWVzLmgiCi0rI2luY2x1ZGUg ImFzZnRhZy5oIgotKwotK25hbWVzcGFjZSBUYWdMaWIgewotKwotKyAgLy8hIEFuIGltcGxlbWVu dGF0aW9uIG9mIEFTRiAoV01BKSBtZXRhZGF0YQotKyAgbmFtZXNwYWNlIEFTRiB7Ci0rCi0rICAg IC8qIQotKyAgICAgKiBUaGlzIGltcGxlbWVudHMgYW5kIHByb3ZpZGVzIGFuIGludGVyZmFjZSBm b3IgQVNGIGZpbGVzIHRvIHRoZQotKyAgICAgKiBUYWdMaWI6OlRhZyBhbmQgVGFnTGliOjpBdWRp b1Byb3BlcnRpZXMgaW50ZXJmYWNlcyBieSB3YXkgb2YgaW1wbGVtZW50aW5nCi0rICAgICAqIHRo ZSBhYnN0cmFjdCBUYWdMaWI6OkZpbGUgQVBJIGFzIHdlbGwgYXMgcHJvdmlkaW5nIHNvbWUgYWRk aXRpb25hbAotKyAgICAgKiBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byBBU0YgZmlsZXMuCi0rICAg ICAqLwotKyAgICBjbGFzcyBGaWxlIDogcHVibGljIFRhZ0xpYjo6RmlsZQotKyAgICB7Ci0rICAg IHB1YmxpYzoKLSsKLSsgICAgICAvKiEKLSsgICAgICAgKiBDb250cnVjdHMgYW4gQVNGIGZpbGUg ZnJvbSBcYSBmaWxlLiAgSWYgXGEgcmVhZFByb3BlcnRpZXMgaXMgdHJ1ZSB0aGUKLSsgICAgICAg KiBmaWxlJ3MgYXVkaW8gcHJvcGVydGllcyB3aWxsIGFsc28gYmUgcmVhZCB1c2luZyBcYSBwcm9w ZXJ0aWVzU3R5bGUuICBJZgotKyAgICAgICAqIGZhbHNlLCBcYSBwcm9wZXJ0aWVzU3R5bGUgaXMg aWdub3JlZC4KLSsgICAgICAgKgotKyAgICAgICAqIFxub3RlIEluIHRoZSBjdXJyZW50IGltcGxl bWVudGF0aW9uLCBib3RoIFxhIHJlYWRQcm9wZXJ0aWVzIGFuZAotKyAgICAgICAqIFxhIHByb3Bl cnRpZXNTdHlsZSBhcmUgaWdub3JlZC4KLSsgICAgICAgKi8KLSsgICAgICBGaWxlKGNvbnN0IGNo YXIgKmZpbGUsIGJvb2wgcmVhZFByb3BlcnRpZXMgPSB0cnVlLCBQcm9wZXJ0aWVzOjpSZWFkU3R5 bGUgcHJvcGVydGllc1N0eWxlID0gUHJvcGVydGllczo6QXZlcmFnZSk7Ci0rCi0rICAgICAgLyoh Ci0rICAgICAgICogRGVzdHJveXMgdGhpcyBpbnN0YW5jZSBvZiB0aGUgRmlsZS4KLSsgICAgICAg Ki8KLSsgICAgICB2aXJ0dWFsIH5GaWxlKCk7Ci0rCi0rICAgICAgLyohCi0rICAgICAgICogUmV0 dXJucyBhIHBvaW50ZXIgdG8gdGhlIEFTRiB0YWcgb2YgdGhlIGZpbGUuCi0rICAgICAgICoKLSsg ICAgICAgKiBBU0Y6OlRhZyBpbXBsZW1lbnRzIHRoZSB0YWcgaW50ZXJmYWNlLCBzbyB0aGlzIHNl cnZlcyBhcyB0aGUKLSsgICAgICAgKiByZWltcGxlbWVudGF0aW9uIG9mIFRhZ0xpYjo6RmlsZTo6 dGFnKCkuCi0rICAgICAgICoKLSsgICAgICAgKiBcbm90ZSBUaGUgVGFnIDxiPmlzIHN0aWxsPC9i PiBvd25lZCBieSB0aGUgQVNGOjpGaWxlIGFuZCBzaG91bGQgbm90IGJlCi0rICAgICAgICogZGVs ZXRlZCBieSB0aGUgdXNlci4gIEl0IHdpbGwgYmUgZGVsZXRlZCB3aGVuIHRoZSBmaWxlIChvYmpl Y3QpIGlzCi0rICAgICAgICogZGVzdHJveWVkLgotKyAgICAgICAqLwotKyAgICAgIHZpcnR1YWwg VGFnICp0YWcoKSBjb25zdDsKLSsKLSsgICAgICAvKiEKLSsgICAgICAgKiBSZXR1cm5zIHRoZSBB U0YgYXVkaW8gcHJvcGVydGllcyBmb3IgdGhpcyBmaWxlLgotKyAgICAgICAqLwotKyAgICAgIHZp cnR1YWwgUHJvcGVydGllcyAqYXVkaW9Qcm9wZXJ0aWVzKCkgY29uc3Q7Ci0rCi0rICAgICAgLyoh Ci0rICAgICAgICogU2F2ZSB0aGUgZmlsZS4KLSsgICAgICAgKgotKyAgICAgICAqIFRoaXMgcmV0 dXJucyB0cnVlIGlmIHRoZSBzYXZlIHdhcyBzdWNjZXNzZnVsLgotKyAgICAgICAqLwotKyAgICAg IHZpcnR1YWwgYm9vbCBzYXZlKCk7Ci0rCi0rICAgIHByaXZhdGU6Ci0rCi0rICAgICAgaW50IHJl YWRCWVRFKCk7Ci0rICAgICAgaW50IHJlYWRXT1JEKCk7Ci0rICAgICAgdW5zaWduZWQgaW50IHJl YWREV09SRCgpOwotKyAgICAgIGxvbmcgbG9uZyByZWFkUVdPUkQoKTsKLSsgICAgICBzdGF0aWMg Qnl0ZVZlY3RvciByZW5kZXJTdHJpbmcoY29uc3QgU3RyaW5nICZzdHIsIGJvb2wgaW5jbHVkZUxl bmd0aCA9IGZhbHNlKTsKLSsgICAgICBTdHJpbmcgcmVhZFN0cmluZyhpbnQgbGVuKTsKLSsgICAg ICB2b2lkIHJlYWQoYm9vbCByZWFkUHJvcGVydGllcywgUHJvcGVydGllczo6UmVhZFN0eWxlIHBy b3BlcnRpZXNTdHlsZSk7Ci0rCi0rICAgICAgZnJpZW5kIGNsYXNzIEF0dHJpYnV0ZTsKLSsKLSsg ICAgICBjbGFzcyBCYXNlT2JqZWN0OwotKyAgICAgIGNsYXNzIFVua25vd25PYmplY3Q7Ci0rICAg ICAgY2xhc3MgRmlsZVByb3BlcnRpZXNPYmplY3Q7Ci0rICAgICAgY2xhc3MgU3RyZWFtUHJvcGVy dGllc09iamVjdDsKLSsgICAgICBjbGFzcyBDb250ZW50RGVzY3JpcHRpb25PYmplY3Q7Ci0rICAg ICAgY2xhc3MgRXh0ZW5kZWRDb250ZW50RGVzY3JpcHRpb25PYmplY3Q7Ci0rICAgICAgY2xhc3Mg SGVhZGVyRXh0ZW5zaW9uT2JqZWN0OwotKyAgICAgIGNsYXNzIE1ldGFkYXRhT2JqZWN0OwotKyAg ICAgIGNsYXNzIE1ldGFkYXRhTGlicmFyeU9iamVjdDsKLSsKLSsgICAgICBjbGFzcyBGaWxlUHJp dmF0ZTsKLSsgICAgICBGaWxlUHJpdmF0ZSAqZDsKLSsgICAgfTsKLSsKLSsgIH0KLSsKLSt9Ci0r Ci0rI2VuZGlmCi0KLVByb3BlcnR5IGNoYW5nZXMgb246IGFtYXJvay9zcmMvbWV0YWRhdGEvYXNm L2FzZmZpbGUuaAotX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwotTmFtZTogc3ZuOmVvbC1zdHlsZQotICAgKyBuYXRpdmUK LQotSW5kZXg6IGFtYXJvay9zcmMvbWV0YWRhdGEvYXNmL3RhZ2xpYl9hc2ZmaWxldHlwZXJlc29s dmVyLmNwcAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0tIGFtYXJvay9zcmMvbWV0YWRhdGEvYXNmL3RhZ2xpYl9h c2ZmaWxldHlwZXJlc29sdmVyLmNwcAkocmV2aXNpb24gMCkKLSsrKyBhbWFyb2svc3JjL21ldGFk YXRhL2FzZi90YWdsaWJfYXNmZmlsZXR5cGVyZXNvbHZlci5jcHAJKHJldmlzaW9uIDc0MzAwNSkK LUBAIC0wLDAgKzEsNDcgQEAKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rICAgIGNvcHlyaWdodCAg ICAgICAgICAgIDogKEMpIDIwMDUgYnkgTWFydGluIEF1bXVlbGxlcgotKyAgICBlbWFpbCAgICAg ICAgICAgICAgICA6IGF1bXVlbGxAcmVzZXJ2LmF0Ci0rICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsK LSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCi0rICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotKyAqICAgaXQgIHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gICoKLSsgKiAgIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4gICAgICAgICAgICAgICAgICAgICAqCi0rICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKyAq ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dCAgICoKLSsgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgICAqCi0rICogICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSAg ICAgKgotKyAqICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4gICAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0rICogICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljICAgICAgKgotKyAqICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICoKLSsgKiAgIEZvdW5kYXRpb24sIElu Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgICAgICAgICAgICAq Ci0rICogICBNQSAgMDIxMTAtMTMwMSAgVVNBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKgotKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rLy8gKGMp IDIwMDUgTWFydGluIEF1bXVlbGxlciA8YXVtdWVsbEByZXNlcnYuYXQ+Ci0rLy8gU2VlIENPUFlJ TkcgZmlsZSBmb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uCi0rCi0rI2luY2x1ZGUgInRhZ2xpYl9h c2ZmaWxldHlwZXJlc29sdmVyLmgiCi0rI2luY2x1ZGUgImFzZmZpbGUuaCIKLSsKLSsjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0rCi0rVGFnTGliOjpGaWxlICpBU0ZGaWxlVHlwZVJlc29sdmVyOjpjcmVh dGVGaWxlKGNvbnN0IGNoYXIgKmZpbGVOYW1lLAotKyAgICAgICAgYm9vbCByZWFkUHJvcGVydGll cywKLSsgICAgICAgIFRhZ0xpYjo6QXVkaW9Qcm9wZXJ0aWVzOjpSZWFkU3R5bGUgcHJvcGVydGll c1N0eWxlKSBjb25zdAotK3sKLSsgICAgY29uc3QgY2hhciAqZXh0ID0gc3RycmNocihmaWxlTmFt ZSwgJy4nKTsKLSsgICAgaWYoZXh0ICYmICghc3RyY2FzZWNtcChleHQsICIud21hIikgfHwgIXN0 cmNhc2VjbXAoZXh0LCAiLmFzZiIpKSkKLSsgICAgewotKyAgICAgICAgVGFnTGliOjpBU0Y6OkZp bGUgKmYgPSBuZXcgVGFnTGliOjpBU0Y6OkZpbGUoZmlsZU5hbWUsIHJlYWRQcm9wZXJ0aWVzLCBw cm9wZXJ0aWVzU3R5bGUpOwotKyAgICAgICAgaWYoZi0+aXNWYWxpZCgpKQotKyAgICAgICAgICAg IHJldHVybiBmOwotKyAgICAgICAgZWxzZQotKyAgICAgICAgewotKyAgICAgICAgICAgIGRlbGV0 ZSBmOwotKyAgICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHJldHVybiAwOwotK30KLUluZGV4OiBh bWFyb2svc3JjL21ldGFkYXRhL2FzZi9hc2ZhdHRyaWJ1dGUuaAotPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGFt YXJvay9zcmMvbWV0YWRhdGEvYXNmL2FzZmF0dHJpYnV0ZS5oCShyZXZpc2lvbiAwKQotKysrIGFt YXJvay9zcmMvbWV0YWRhdGEvYXNmL2FzZmF0dHJpYnV0ZS5oCShyZXZpc2lvbiA3NDMwMDUpCi1A QCAtMCwwICsxLDE3NiBAQAotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKyAgICBjb3B5cmlnaHQgICAg ICAgICAgICA6IChDKSAyMDA1LTIwMDcgYnkgTHVrw6HFoSBMYWxpbnNrw70KLSsgICAgZW1haWwg ICAgICAgICAgICAgICAgOiBsYWxpbnNreUBnbWFpbC5jb20KLSsgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgotKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSsgKiAgIGl0 ICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uICAqCi0rICogICAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uICAgICAgICAgICAgICAgICAgICAgKgotKyAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoK LSsgKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLCBidXQgICAqCi0rICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICAgKgotKyAqICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUgICAgICoKLSsgKiAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqCi0rICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKyAq ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYyAgICAgICoKLSsgKiAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAqCi0rICogICBGb3VuZGF0aW9u LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMw NyAgKgotKyAqICAgVVNBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICoKLSsgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotKyNp Zm5kZWYgVEFHTElCX0FTRkFUVFJJQlVURV9ICi0rI2RlZmluZSBUQUdMSUJfQVNGQVRUUklCVVRF X0gKLSsKLSsjaW5jbHVkZSA8dHN0cmluZy5oPgotKyNpbmNsdWRlIDx0Ynl0ZXZlY3Rvci5oPgot KwotK25hbWVzcGFjZSBUYWdMaWIKLSt7Ci0rCi0rICBuYW1lc3BhY2UgQVNGCi0rICB7Ci0rCi0r ICAgIGNsYXNzIEZpbGU7Ci0rCi0rICAgIGNsYXNzIEF0dHJpYnV0ZQotKyAgICB7Ci0rICAgIHB1 YmxpYzoKLSsKLSsgICAgICAvKiEKLSsgICAgICAgKiBFbnVtIG9mIHR5cGVzIGFuIEF0dHJpYnV0 ZSBjYW4gaGF2ZS4KLSsgICAgICAgKi8KLSsgICAgICBlbnVtIEF0dHJpYnV0ZVR5cGVzIHsKLSsg ICAgICAgIFVuaWNvZGVUeXBlID0gMCwKLSsgICAgICAgIEJ5dGVzVHlwZSAgID0gMSwKLSsgICAg ICAgIEJvb2xUeXBlICAgID0gMiwKLSsgICAgICAgIERXb3JkVHlwZSAgID0gMywKLSsgICAgICAg IFFXb3JkVHlwZSAgID0gNCwKLSsgICAgICAgIFdvcmRUeXBlICAgID0gNSwKLSsgICAgICAgIEd1 aWRUeXBlICAgID0gNgotKyAgICAgIH07Ci0rCi0rICAgICAgLyohCi0rICAgICAgICogQ29uc3Ry dWN0cyBhbiBlbXB0eSBhdHRyaWJ1dGUuCi0rICAgICAgICovCi0rICAgICAgQXR0cmlidXRlKCk7 Ci0rCi0rICAgICAgLyohCi0rICAgICAgICogQ29uc3RydWN0cyBhbiBhdHRyaWJ1dGUgd2l0aCBc YSBrZXkgYW5kIGEgVW5pY29kZVR5cGUgXGEgdmFsdWUuCi0rICAgICAgICovCi0rICAgICAgQXR0 cmlidXRlKGNvbnN0IFN0cmluZyAmdmFsdWUpOwotKwotKyAgICAgIC8qIQotKyAgICAgICAqIENv bnN0cnVjdHMgYW4gYXR0cmlidXRlIHdpdGggXGEga2V5IGFuZCBhIEJ5dGVzVHlwZSBcYSB2YWx1 ZS4KLSsgICAgICAgKi8KLSsgICAgICBBdHRyaWJ1dGUoY29uc3QgQnl0ZVZlY3RvciAmdmFsdWUp OwotKwotKyAgICAgIC8qIQotKyAgICAgICAqIENvbnN0cnVjdHMgYW4gYXR0cmlidXRlIHdpdGgg XGEga2V5IGFuZCBhIERXb3JkVHlwZSBcYSB2YWx1ZS4KLSsgICAgICAgKi8KLSsgICAgICBBdHRy aWJ1dGUodW5zaWduZWQgaW50IHZhbHVlKTsKLSsKLSsgICAgICAvKiEKLSsgICAgICAgKiBDb25z dHJ1Y3RzIGFuIGF0dHJpYnV0ZSB3aXRoIFxhIGtleSBhbmQgYSBRV29yZFR5cGUgXGEgdmFsdWUu Ci0rICAgICAgICovCi0rICAgICAgQXR0cmlidXRlKHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSk7 Ci0rCi0rICAgICAgLyohCi0rICAgICAgICogQ29uc3RydWN0cyBhbiBhdHRyaWJ1dGUgd2l0aCBc YSBrZXkgYW5kIGEgV29yZFR5cGUgXGEgdmFsdWUuCi0rICAgICAgICovCi0rICAgICAgQXR0cmli dXRlKHVuc2lnbmVkIHNob3J0IHZhbHVlKTsKLSsKLSsgICAgICAvKiEKLSsgICAgICAgKiBDb25z dHJ1Y3RzIGFuIGF0dHJpYnV0ZSB3aXRoIFxhIGtleSBhbmQgYSBCb29sVHlwZSBcYSB2YWx1ZS4K LSsgICAgICAgKi8KLSsgICAgICBBdHRyaWJ1dGUoYm9vbCB2YWx1ZSk7Ci0rCi0rICAgICAgLyoh Ci0rICAgICAgICogQ29uc3RydWN0IGFuIGF0dHJpYnV0ZSBhcyBhIGNvcHkgb2YgXGEgb3RoZXIu Ci0rICAgICAgICovCi0rICAgICAgQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSAmaXRlbSk7Ci0r Ci0rICAgICAgLyohCi0rICAgICAgICogQ29waWVzIHRoZSBjb250ZW50cyBvZiBcYSBvdGhlciBp bnRvIHRoaXMgaXRlbS4KLSsgICAgICAgKi8KLSsgICAgICBBU0Y6OkF0dHJpYnV0ZSAmb3BlcmF0 b3I9KGNvbnN0IEF0dHJpYnV0ZSAmb3RoZXIpOwotKwotKyAgICAgIC8qIQotKyAgICAgICAqIERl c3Ryb3lzIHRoZSBhdHRyaWJ1dGUuCi0rICAgICAgICovCi0rICAgICAgdmlydHVhbCB+QXR0cmli dXRlKCk7Ci0rCi0rICAgICAgLyohCi0rICAgICAgICogUmV0dXJucyB0eXBlIG9mIHRoZSB2YWx1 ZS4KLSsgICAgICAgKi8KLSsgICAgICBBdHRyaWJ1dGVUeXBlcyB0eXBlKCkgY29uc3Q7Ci0rCi0r ICAgICAgLyohCi0rICAgICAgICogUmV0dXJucyB0aGUgQm9vbFR5cGUgXGEgdmFsdWUuCi0rICAg ICAgICovCi0rICAgICAgdW5zaWduZWQgc2hvcnQgdG9Cb29sKCkgY29uc3Q7Ci0rCi0rICAgICAg LyohCi0rICAgICAgICogUmV0dXJucyB0aGUgV29yZFR5cGUgXGEgdmFsdWUuCi0rICAgICAgICov Ci0rICAgICAgdW5zaWduZWQgc2hvcnQgdG9VU2hvcnQoKSBjb25zdDsKLSsKLSsgICAgICAvKiEK LSsgICAgICAgKiBSZXR1cm5zIHRoZSBEV29yZFR5cGUgXGEgdmFsdWUuCi0rICAgICAgICovCi0r ICAgICAgdW5zaWduZWQgaW50IHRvVUludCgpIGNvbnN0OwotKwotKyAgICAgIC8qIQotKyAgICAg ICAqIFJldHVybnMgdGhlIFFXb3JkVHlwZSBcYSB2YWx1ZS4KLSsgICAgICAgKi8KLSsgICAgICB1 bnNpZ25lZCBsb25nIGxvbmcgdG9VTG9uZ0xvbmcoKSBjb25zdDsKLSsKLSsgICAgICAvKiEKLSsg ICAgICAgKiBSZXR1cm5zIHRoZSBVbmljb2RlVHlwZSBcYSB2YWx1ZS4KLSsgICAgICAgKi8KLSsg ICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKLSsKLSsgICAgICAvKiEKLSsgICAgICAgKiBS ZXR1cm5zIHRoZSBCeXRlc1R5cGUgXGEgdmFsdWUuCi0rICAgICAgICovCi0rICAgICAgQnl0ZVZl Y3RvciB0b0J5dGVWZWN0b3IoKSBjb25zdDsKLSsKLSsgICAgICAvKiEKLSsgICAgICAgKiBSZXR1 cm5zIHRoZSBsYW5ndWFnZSBudW1iZXIsIG9yIDAgaXMgbm8gc3RyZWFtIG51bWJlciB3YXMgc2V0 LgotKyAgICAgICAqLwotKyAgICAgIGludCBsYW5ndWFnZSgpIGNvbnN0OwotKwotKyAgICAgIC8q IQotKyAgICAgICAqIFNldHMgdGhlIGxhbmd1YWdlIG51bWJlci4KLSsgICAgICAgKi8KLSsgICAg ICB2b2lkIHNldExhbmd1YWdlKGludCB2YWx1ZSk7Ci0rCi0rICAgICAgLyohCi0rICAgICAgICog UmV0dXJucyB0aGUgc3RyZWFtIG51bWJlciwgb3IgMCBpcyBubyBzdHJlYW0gbnVtYmVyIHdhcyBz ZXQuCi0rICAgICAgICovCi0rICAgICAgaW50IHN0cmVhbSgpIGNvbnN0OwotKwotKyAgICAgIC8q IQotKyAgICAgICAqIFNldHMgdGhlIHN0cmVhbSBudW1iZXIuCi0rICAgICAgICovCi0rICAgICAg dm9pZCBzZXRTdHJlYW0oaW50IHZhbHVlKTsKLSsKLSsjaWZuZGVmIERPX05PVF9ET0NVTUVOVAot KyAgICAgIC8qIFRISVMgSVMgUFJJVkFURSwgRE9OJ1QgVE9VQ0ggSVQhICovCi0rICAgICAgU3Ry aW5nIHBhcnNlKEFTRjo6RmlsZSAmZmlsZSwgaW50IGtpbmQgPSAwKTsKLSsjZW5kaWYKLSsKLSsg ICAgcHJpdmF0ZToKLSsgICAgICBmcmllbmQgY2xhc3MgRmlsZTsKLSsKLSsgICAgICBCeXRlVmVj dG9yIHJlbmRlcihjb25zdCBTdHJpbmcgJm5hbWUsIGludCBraW5kID0gMCkgY29uc3Q7Ci0rCi0r ICAgICAgY2xhc3MgQXR0cmlidXRlUHJpdmF0ZTsKLSsgICAgICBBdHRyaWJ1dGVQcml2YXRlICpk OwotKyAgICB9OwotKwotKyAgfQotKwotK30KLSsKLSsjZW5kaWYKLQotUHJvcGVydHkgY2hhbmdl cyBvbjogYW1hcm9rL3NyYy9tZXRhZGF0YS9hc2YvYXNmYXR0cmlidXRlLmgKLV9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K LU5hbWU6IHN2bjplb2wtc3R5bGUKLSAgICsgbmF0aXZlCi0KLUluZGV4OiBhbWFyb2svc3JjL21l dGFkYXRhL2FzZi90YWdsaWJfYXNmZmlsZXR5cGVyZXNvbHZlci5oCi09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0g YW1hcm9rL3NyYy9tZXRhZGF0YS9hc2YvdGFnbGliX2FzZmZpbGV0eXBlcmVzb2x2ZXIuaAkocmV2 aXNpb24gMCkKLSsrKyBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi90YWdsaWJfYXNmZmlsZXR5cGVy ZXNvbHZlci5oCShyZXZpc2lvbiA3NDMwMDUpCi1AQCAtMCwwICsxLDM5IEBACi0rLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgotKyAgICBjb3B5cmlnaHQgICAgICAgICAgICA6IChDKSAyMDA1IGJ5IE1hcnRp biBBdW11ZWxsZXIKLSsgICAgZW1haWwgICAgICAgICAgICAgICAgOiBhdW11ZWxsQHJlc2Vydi5h dAotKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKyAqICAg VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkgICoKLSsgKiAgIGl0ICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uICAqCi0rICogICAyLjEgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICAgICAgICAgICAgICAgICAg KgotKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgICAqCi0rICogICBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAg ICAgICAgICAgKgotKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgICAgICoKLSsgKiAgIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqCi0r ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKgotKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyAgICAgICoKLSsgKiAgIExpY2Vuc2Ug YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUgICAqCi0rICogICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo IEZsb29yLCBCb3N0b24sICAgICAgICAgICAgKgotKyAqICAgTUEgIDAyMTEwLTEzMDEgIFVTQSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSsgKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwotKwotKy8vIChjKSAyMDA1IE1hcnRpbiBBdW11ZWxsZXIgPGF1bXVl bGxAcmVzZXJ2LmF0PgotKy8vIFNlZSBDT1BZSU5HIGZpbGUgZm9yIGxpY2Vuc2luZyBpbmZvcm1h dGlvbgotKwotKyNpZm5kZWYgVEFHTElCX0FTRkZJTEVUWVBFUkVTT0xWRVJfSAotKyNkZWZpbmUg VEFHTElCX0FTRkZJTEVUWVBFUkVTT0xWRVJfSAotKwotKyNpbmNsdWRlIDx0YWdsaWIvdGZpbGUu aD4KLSsjaW5jbHVkZSA8dGFnbGliL2ZpbGVyZWYuaD4KLSsKLSsKLStjbGFzcyBBU0ZGaWxlVHlw ZVJlc29sdmVyIDogcHVibGljIFRhZ0xpYjo6RmlsZVJlZjo6RmlsZVR5cGVSZXNvbHZlcgotK3sK LSsgICAgVGFnTGliOjpGaWxlICpjcmVhdGVGaWxlKGNvbnN0IGNoYXIgKmZpbGVOYW1lLAotKyAg ICAgICAgICAgIGJvb2wgcmVhZEF1ZGlvUHJvcGVydGllcywKLSsgICAgICAgICAgICBUYWdMaWI6 OkF1ZGlvUHJvcGVydGllczo6UmVhZFN0eWxlIGF1ZGlvUHJvcGVydGllc1N0eWxlKSBjb25zdDsK LSt9OwotKwotKyNlbmRpZgotSW5kZXg6IGFtYXJvay9zcmMvbWV0YWRhdGEvYXNmL2FzZnRhZy5j cHAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tLSBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi9hc2Z0YWcuY3BwCShy ZXZpc2lvbiAwKQotKysrIGFtYXJvay9zcmMvbWV0YWRhdGEvYXNmL2FzZnRhZy5jcHAJKHJldmlz aW9uIDc0MzAwNSkKLUBAIC0wLDAgKzEsMjAyIEBACi0rLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rICAg IGNvcHlyaWdodCAgICAgICAgICAgIDogKEMpIDIwMDUtMjAwNyBieSBMdWvDocWhIExhbGluc2vD vQotKyAgICBlbWFpbCAgICAgICAgICAgICAgICA6IGxhbGluc2t5QGdtYWlsLmNvbQotKyAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rICogICBUaGlzIGxpYnJh cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eSAgKgotKyAqICAgaXQgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gICoKLSsgKiAgIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gICAgICAgICAgICAgICAgICAgICAqCi0rICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKgotKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICoKLSsgKiAgIFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgICAq Ci0rICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVSAgICAgKgotKyAqICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqCi0rICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljICAgICAgKgotKyAqICAgTGljZW5zZSBhbG9uZyB3aXRo IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICoKLSsg KiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24s IE1BICAwMjExMS0xMzA3ICAqCi0rICogICBVU0EgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKyAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0rCi0rI2luY2x1ZGUgImFzZnRhZy5oIgotKwotK3VzaW5nIG5hbWVzcGFjZSBUYWdM aWI7Ci0rCi0rY2xhc3MgQVNGOjpUYWc6OlRhZ1ByaXZhdGUKLSt7Ci0rcHVibGljOgotKyAgU3Ry aW5nIHRpdGxlOwotKyAgU3RyaW5nIGFydGlzdDsKLSsgIFN0cmluZyBjb3B5cmlnaHQ7Ci0rICBT dHJpbmcgY29tbWVudDsKLSsgIFN0cmluZyByYXRpbmc7Ci0rICBBdHRyaWJ1dGVMaXN0TWFwIGF0 dHJpYnV0ZUxpc3RNYXA7Ci0rfTsKLSsKLStBU0Y6OlRhZzo6VGFnKCkKLSs6IFRhZ0xpYjo6VGFn KCkKLSt7Ci0rICBkID0gbmV3IFRhZ1ByaXZhdGU7Ci0rfQotKwotK0FTRjo6VGFnOjp+VGFnKCkK LSt7Ci0rICBpZihkKQotKyAgICBkZWxldGUgZDsKLSt9Ci0rCi0rU3RyaW5nCi0rQVNGOjpUYWc6 OnRpdGxlKCkgY29uc3QKLSt7Ci0rICByZXR1cm4gZC0+dGl0bGU7Ci0rfQotKwotK1N0cmluZwot K0FTRjo6VGFnOjphcnRpc3QoKSBjb25zdAotK3sKLSsgIHJldHVybiBkLT5hcnRpc3Q7Ci0rfQot KwotK1N0cmluZwotK0FTRjo6VGFnOjphbGJ1bSgpIGNvbnN0Ci0rewotKyAgaWYoZC0+YXR0cmli dXRlTGlzdE1hcC5jb250YWlucygiV00vQWxidW1UaXRsZSIpKQotKyAgICByZXR1cm4gZC0+YXR0 cmlidXRlTGlzdE1hcFsiV00vQWxidW1UaXRsZSJdWzBdLnRvU3RyaW5nKCk7Ci0rICByZXR1cm4g U3RyaW5nOjpudWxsOwotK30KLSsKLStTdHJpbmcKLStBU0Y6OlRhZzo6Y29weXJpZ2h0KCkgY29u c3QKLSt7Ci0rICByZXR1cm4gZC0+Y29weXJpZ2h0OwotK30KLSsKLStTdHJpbmcKLStBU0Y6OlRh Zzo6Y29tbWVudCgpIGNvbnN0Ci0rewotKyAgcmV0dXJuIGQtPmNvbW1lbnQ7Ci0rfQotKwotK1N0 cmluZwotK0FTRjo6VGFnOjpyYXRpbmcoKSBjb25zdAotK3sKLSsgIHJldHVybiBkLT5yYXRpbmc7 Ci0rfQotKwotK3Vuc2lnbmVkIGludAotK0FTRjo6VGFnOjp5ZWFyKCkgY29uc3QKLSt7Ci0rICBp ZihkLT5hdHRyaWJ1dGVMaXN0TWFwLmNvbnRhaW5zKCJXTS9ZZWFyIikpCi0rICAgIHJldHVybiBk LT5hdHRyaWJ1dGVMaXN0TWFwWyJXTS9ZZWFyIl1bMF0udG9TdHJpbmcoKS50b0ludCgpOwotKyAg cmV0dXJuIDA7Ci0rfQotKwotK3Vuc2lnbmVkIGludAotK0FTRjo6VGFnOjp0cmFjaygpIGNvbnN0 Ci0rewotKyAgaWYoZC0+YXR0cmlidXRlTGlzdE1hcC5jb250YWlucygiV00vVHJhY2tOdW1iZXIi KSkKLSsgICAgcmV0dXJuIGQtPmF0dHJpYnV0ZUxpc3RNYXBbIldNL1RyYWNrTnVtYmVyIl1bMF0u dG9TdHJpbmcoKS50b0ludCgpOwotKyAgaWYoZC0+YXR0cmlidXRlTGlzdE1hcC5jb250YWlucygi V00vVHJhY2siKSkKLSsgICAgcmV0dXJuIGQtPmF0dHJpYnV0ZUxpc3RNYXBbIldNL1RyYWNrIl1b MF0udG9VSW50KCk7Ci0rICByZXR1cm4gMDsKLSt9Ci0rCi0rU3RyaW5nCi0rQVNGOjpUYWc6Omdl bnJlKCkgY29uc3QKLSt7Ci0rICBpZihkLT5hdHRyaWJ1dGVMaXN0TWFwLmNvbnRhaW5zKCJXTS9H ZW5yZSIpKQotKyAgICByZXR1cm4gZC0+YXR0cmlidXRlTGlzdE1hcFsiV00vR2VucmUiXVswXS50 b1N0cmluZygpOwotKyAgcmV0dXJuIFN0cmluZzo6bnVsbDsKLSt9Ci0rCi0rdm9pZAotK0FTRjo6 VGFnOjpzZXRUaXRsZShjb25zdCBTdHJpbmcgJnZhbHVlKQotK3sKLSsgIGQtPnRpdGxlID0gdmFs dWU7Ci0rfQotKwotK3ZvaWQKLStBU0Y6OlRhZzo6c2V0QXJ0aXN0KGNvbnN0IFN0cmluZyAmdmFs dWUpCi0rewotKyAgZC0+YXJ0aXN0ID0gdmFsdWU7Ci0rfQotKwotK3ZvaWQKLStBU0Y6OlRhZzo6 c2V0Q29weXJpZ2h0KGNvbnN0IFN0cmluZyAmdmFsdWUpCi0rewotKyAgZC0+Y29weXJpZ2h0ID0g dmFsdWU7Ci0rfQotKwotK3ZvaWQKLStBU0Y6OlRhZzo6c2V0Q29tbWVudChjb25zdCBTdHJpbmcg JnZhbHVlKQotK3sKLSsgIGQtPmNvbW1lbnQgPSB2YWx1ZTsKLSt9Ci0rCi0rdm9pZAotK0FTRjo6 VGFnOjpzZXRSYXRpbmcoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLSt7Ci0rICBkLT5yYXRpbmcgPSB2 YWx1ZTsKLSt9Ci0rCi0rdm9pZAotK0FTRjo6VGFnOjpzZXRBbGJ1bShjb25zdCBTdHJpbmcgJnZh bHVlKQotK3sKLSsgIHNldEF0dHJpYnV0ZSgiV00vQWxidW1UaXRsZSIsIHZhbHVlKTsKLSt9Ci0r Ci0rdm9pZAotK0FTRjo6VGFnOjpzZXRHZW5yZShjb25zdCBTdHJpbmcgJnZhbHVlKQotK3sKLSsg IHNldEF0dHJpYnV0ZSgiV00vR2VucmUiLCB2YWx1ZSk7Ci0rfQotKwotK3ZvaWQKLStBU0Y6OlRh Zzo6c2V0WWVhcih1aW50IHZhbHVlKQotK3sKLSsgIHNldEF0dHJpYnV0ZSgiV00vWWVhciIsIFN0 cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci0rfQotKwotK3ZvaWQKLStBU0Y6OlRhZzo6c2V0VHJhY2so dWludCB2YWx1ZSkKLSt7Ci0rICBzZXRBdHRyaWJ1dGUoIldNL1RyYWNrTnVtYmVyIiwgU3RyaW5n OjpudW1iZXIodmFsdWUpKTsKLSt9Ci0rCi0rQVNGOjpBdHRyaWJ1dGVMaXN0TWFwJgotK0FTRjo6 VGFnOjphdHRyaWJ1dGVMaXN0TWFwKCkKLSt7Ci0rICByZXR1cm4gZC0+YXR0cmlidXRlTGlzdE1h cDsKLSt9Ci0rCi0rdm9pZCBBU0Y6OlRhZzo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcgJmtleSkK LSt7Ci0rICBBdHRyaWJ1dGVMaXN0TWFwOjpJdGVyYXRvciBpdCA9IGQtPmF0dHJpYnV0ZUxpc3RN YXAuZmluZChrZXkpOwotKyAgaWYoaXQgIT0gZC0+YXR0cmlidXRlTGlzdE1hcC5lbmQoKSkKLSsg ICAgZC0+YXR0cmlidXRlTGlzdE1hcC5lcmFzZShpdCk7Ci0rfQotKwotK3ZvaWQgQVNGOjpUYWc6 OnNldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcgJm5hbWUsIGNvbnN0IEF0dHJpYnV0ZSAmYXR0cmli dXRlKQotK3sKLSsgIEF0dHJpYnV0ZUxpc3QgdmFsdWU7Ci0rICB2YWx1ZS5hcHBlbmQoYXR0cmli dXRlKTsKLSsgIGQtPmF0dHJpYnV0ZUxpc3RNYXAuaW5zZXJ0KG5hbWUsIHZhbHVlKTsKLSt9Ci0r Ci0rdm9pZCBBU0Y6OlRhZzo6YWRkQXR0cmlidXRlKGNvbnN0IFN0cmluZyAmbmFtZSwgY29uc3Qg QXR0cmlidXRlICZhdHRyaWJ1dGUpCi0rewotKyAgaWYoZC0+YXR0cmlidXRlTGlzdE1hcC5jb250 YWlucyhuYW1lKSkgewotKyAgICBkLT5hdHRyaWJ1dGVMaXN0TWFwW25hbWVdLmFwcGVuZChhdHRy aWJ1dGUpOwotKyAgfQotKyAgZWxzZSB7Ci0rICAgIHNldEF0dHJpYnV0ZShuYW1lLCBhdHRyaWJ1 dGUpOwotKyAgfQotK30KLSsKLStib29sIEFTRjo6VGFnOjppc0VtcHR5KCkgY29uc3QgewotKyAg cmV0dXJuIFRhZ0xpYjo6VGFnOjppc0VtcHR5KCkgJiYKLSsgICAgICAgICBjb3B5cmlnaHQoKS5p c0VtcHR5KCkgJiYKLSsgICAgICAgICByYXRpbmcoKS5pc0VtcHR5KCkgJiYKLSsgICAgICAgICBk LT5hdHRyaWJ1dGVMaXN0TWFwLmlzRW1wdHkoKTsKLSt9Ci1JbmRleDogYW1hcm9rL3NyYy9tZXRh ZGF0YS9hc2YvYXNmcHJvcGVydGllcy5jcHAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhbWFyb2svc3JjL21l dGFkYXRhL2FzZi9hc2Zwcm9wZXJ0aWVzLmNwcAkocmV2aXNpb24gMCkKLSsrKyBhbWFyb2svc3Jj L21ldGFkYXRhL2FzZi9hc2Zwcm9wZXJ0aWVzLmNwcAkocmV2aXNpb24gNzQzMDA1KQotQEAgLTAs MCArMSw5NSBAQAotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKyAgICBjb3B5cmlnaHQgICAgICAgICAg ICA6IChDKSAyMDA1LTIwMDcgYnkgTHVrw6HFoSBMYWxpbnNrw70KLSsgICAgZW1haWwgICAgICAg ICAgICAgICAgOiBsYWxpbnNreUBnbWFpbC5jb20KLSsgKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0r LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgotKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLSsgKiAgIGl0ICB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uICAqCi0rICogICAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uICAgICAgICAgICAgICAgICAgICAgKgotKyAqICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAg IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLCBidXQgICAqCi0rICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICAgKgotKyAqICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgICAg ICoKLSsgKiAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu ICAgICAgICAgICAgICAgICAgICAgICAqCi0rICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKyAqICAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYyAgICAgICoKLSsgKiAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAqCi0rICogICBGb3VuZGF0aW9uLCBJbmMu LCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgKgot KyAqICAgVVNBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICoKLSsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotKyNpbmNsdWRl IDx0c3RyaW5nLmg+Ci0rI2luY2x1ZGUgImFzZnByb3BlcnRpZXMuaCIKLSsKLSt1c2luZyBuYW1l c3BhY2UgVGFnTGliOwotKwotK2NsYXNzIEFTRjo6UHJvcGVydGllczo6UHJvcGVydGllc1ByaXZh dGUKLSt7Ci0rcHVibGljOgotKyAgUHJvcGVydGllc1ByaXZhdGUoKTogbGVuZ3RoKDApLCBiaXRy YXRlKDApLCBzYW1wbGVSYXRlKDApLCBjaGFubmVscygwKSB7fQotKyAgaW50IGxlbmd0aDsKLSsg IGludCBiaXRyYXRlOwotKyAgaW50IHNhbXBsZVJhdGU7Ci0rICBpbnQgY2hhbm5lbHM7Ci0rfTsK LSsKLSsvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotKy8vIHB1YmxpYyBtZW1iZXJzCi0rLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8KLSsKLStBU0Y6OlByb3BlcnRpZXM6OlByb3BlcnRpZXMoKSA6IEF1 ZGlvUHJvcGVydGllcyhBdWRpb1Byb3BlcnRpZXM6OkF2ZXJhZ2UpCi0rewotKyAgZCA9IG5ldyBQ cm9wZXJ0aWVzUHJpdmF0ZTsKLSt9Ci0rCi0rQVNGOjpQcm9wZXJ0aWVzOjp+UHJvcGVydGllcygp Ci0rewotKyAgaWYoZCkKLSsgICAgZGVsZXRlIGQ7ICAKLSt9Ci0rCi0raW50IEFTRjo6UHJvcGVy dGllczo6bGVuZ3RoKCkgY29uc3QKLSt7Ci0rICByZXR1cm4gZC0+bGVuZ3RoOwotK30KLSsKLStp bnQgQVNGOjpQcm9wZXJ0aWVzOjpiaXRyYXRlKCkgY29uc3QKLSt7Ci0rICByZXR1cm4gZC0+Yml0 cmF0ZTsKLSt9Ci0rCi0raW50IEFTRjo6UHJvcGVydGllczo6c2FtcGxlUmF0ZSgpIGNvbnN0Ci0r ewotKyAgcmV0dXJuIGQtPnNhbXBsZVJhdGU7Ci0rfQotKwotK2ludCBBU0Y6OlByb3BlcnRpZXM6 OmNoYW5uZWxzKCkgY29uc3QKLSt7Ci0rICByZXR1cm4gZC0+Y2hhbm5lbHM7Ci0rfSAKLSsKLSsv Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotKy8vIHByaXZhdGUgbWVtYmVycwotKy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vCi0rCi0rdm9pZCBBU0Y6OlByb3BlcnRpZXM6OnNldExlbmd0aChpbnQgbGVu Z3RoKQotK3sKLSsgIGQtPmxlbmd0aCA9IGxlbmd0aDsKLSt9Ci0rCi0rdm9pZCBBU0Y6OlByb3Bl cnRpZXM6OnNldEJpdHJhdGUoaW50IGxlbmd0aCkKLSt7Ci0rICBkLT5iaXRyYXRlID0gbGVuZ3Ro OwotK30KLSsKLSt2b2lkIEFTRjo6UHJvcGVydGllczo6c2V0U2FtcGxlUmF0ZShpbnQgbGVuZ3Ro KQotK3sKLSsgIGQtPnNhbXBsZVJhdGUgPSBsZW5ndGg7Ci0rfQotKwotK3ZvaWQgQVNGOjpQcm9w ZXJ0aWVzOjpzZXRDaGFubmVscyhpbnQgbGVuZ3RoKQotK3sKLSsgIGQtPmNoYW5uZWxzID0gbGVu Z3RoOwotK30KLSsKLQotUHJvcGVydHkgY2hhbmdlcyBvbjogYW1hcm9rL3NyYy9tZXRhZGF0YS9h c2YvYXNmcHJvcGVydGllcy5jcHAKLV9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLU5hbWU6IHN2bjplb2wtc3R5bGUKLSAg ICsgbmF0aXZlCi0KLUluZGV4OiBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi9NYWtlZmlsZS5hbQot PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0tIGFtYXJvay9zcmMvbWV0YWRhdGEvYXNmL01ha2VmaWxlLmFtCShyZXZp c2lvbiAwKQotKysrIGFtYXJvay9zcmMvbWV0YWRhdGEvYXNmL01ha2VmaWxlLmFtCShyZXZpc2lv biA3NDMwMDUpCi1AQCAtMCwwICsxLDIwIEBACi0rU1VCRElSUyA9Ci0rCi0rSU5DTFVERVMgICAg ICAgICAgID0gJChhbGxfaW5jbHVkZXMpICQodGFnbGliX2luY2x1ZGVzKQotK01FVEFTT1VSQ0VT ICAgICAgICA9IEFVVE8KLStsaWJ0YWdhc2ZfbGFfTERGTEFHUyAgPSAkKGFsbF9saWJyYXJpZXMp Ci0rbm9pbnN0X0xUTElCUkFSSUVTID0gbGlidGFnYXNmLmxhCi0rCi0rbGlidGFnYXNmX2xhX1NP VVJDRVMgPSAgXAotKyAgICAgICAgICAgICAgICAgICAgIGFzZmF0dHJpYnV0ZS5jcHAgXAotKyAg ICAgICAgICAgICAgICAgICAgIGFzZnByb3BlcnRpZXMuY3BwIFwKLSsgICAgICAgICAgICAgICAg ICAgICBhc2Z0YWcuY3BwIFwKLSsgICAgICAgICAgICAgICAgICAgICBhc2ZmaWxlLmNwcCBcCi0r ICAgICAgICAgICAgICAgICAgICAgdGFnbGliX2FzZmZpbGV0eXBlcmVzb2x2ZXIuY3BwCi0rCi0r bm9pbnN0X0hFQURFUlMgPSBcCi0rICAgICAgICAgICAgICAgICAgICAgYXNmYXR0cmlidXRlLmgg XAotKyAgICAgICAgICAgICAgICAgICAgIGFzZnByb3BlcnRpZXMuaCBcCi0rICAgICAgICAgICAg ICAgICAgICAgYXNmdGFnLmggXAotKyAgICAgICAgICAgICAgICAgICAgIGFzZmZpbGUuaCBcCi0r ICAgICAgICAgICAgICAgICAgICAgdGFnbGliX2FzZmZpbGV0eXBlcmVzb2x2ZXIuaAotSW5kZXg6 IGFtYXJvay9zcmMvbWV0YWRhdGEvYXNmL2FzZmZpbGUuY3BwCi09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYW1h cm9rL3NyYy9tZXRhZGF0YS9hc2YvYXNmZmlsZS5jcHAJKHJldmlzaW9uIDApCi0rKysgYW1hcm9r L3NyYy9tZXRhZGF0YS9hc2YvYXNmZmlsZS5jcHAJKHJldmlzaW9uIDc0MzAwNSkKLUBAIC0wLDAg KzEsNTQ3IEBACi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rICAgIGNvcHlyaWdodCAgICAgICAgICAg IDogKEMpIDIwMDUtMjAwNyBieSBMdWvDocWhIExhbGluc2vDvQotKyAgICBlbWFpbCAgICAgICAg ICAgICAgICA6IGxhbGluc2t5QGdtYWlsLmNvbQotKyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSsv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCi0rICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgotKyAqICAgaXQgIHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gICoKLSsgKiAgIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4gICAgICAgICAgICAgICAgICAgICAqCi0rICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKyAqICAg VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dCAgICoKLSsgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgICAqCi0rICogICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSAgICAg KgotKyAqICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4g ICAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0rICogICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljICAgICAgKgotKyAqICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICoKLSsgKiAgIEZvdW5kYXRpb24sIEluYy4s IDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICAqCi0r ICogICBVU0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKgotKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rI2luY2x1ZGUg PHRieXRldmVjdG9ybGlzdC5oPgotKyNpbmNsdWRlIDx0c3RyaW5nLmg+Ci0rI2luY2x1ZGUgImFz ZmZpbGUuaCIKLSsjaW5jbHVkZSAiYXNmdGFnLmgiCi0rI2luY2x1ZGUgImFzZnByb3BlcnRpZXMu aCIKLSsKLSt1c2luZyBuYW1lc3BhY2UgVGFnTGliOwotKwotK2NsYXNzIEFTRjo6RmlsZTo6Rmls ZVByaXZhdGUKLSt7Ci0rcHVibGljOgotKyAgRmlsZVByaXZhdGUoKToKLSsgICAgc2l6ZSgwKSwK LSsgICAgdGFnKDApLAotKyAgICBwcm9wZXJ0aWVzKDApLAotKyAgICBjb250ZW50RGVzY3JpcHRp b25PYmplY3QoMCksCi0rICAgIGV4dGVuZGVkQ29udGVudERlc2NyaXB0aW9uT2JqZWN0KDApLAot KyAgICBoZWFkZXJFeHRlbnNpb25PYmplY3QoMCksCi0rICAgIG1ldGFkYXRhT2JqZWN0KDApLAot KyAgICBtZXRhZGF0YUxpYnJhcnlPYmplY3QoMCkge30KLSsgIHVuc2lnbmVkIGxvbmcgbG9uZyBz aXplOwotKyAgQVNGOjpUYWcgKnRhZzsKLSsgIEFTRjo6UHJvcGVydGllcyAqcHJvcGVydGllczsK LSsgIExpc3Q8QVNGOjpGaWxlOjpCYXNlT2JqZWN0ICo+IG9iamVjdHM7Ci0rICBBU0Y6OkZpbGU6 OkNvbnRlbnREZXNjcmlwdGlvbk9iamVjdCAqY29udGVudERlc2NyaXB0aW9uT2JqZWN0OwotKyAg QVNGOjpGaWxlOjpFeHRlbmRlZENvbnRlbnREZXNjcmlwdGlvbk9iamVjdCAqZXh0ZW5kZWRDb250 ZW50RGVzY3JpcHRpb25PYmplY3Q7Ci0rICBBU0Y6OkZpbGU6OkhlYWRlckV4dGVuc2lvbk9iamVj dCAqaGVhZGVyRXh0ZW5zaW9uT2JqZWN0OwotKyAgQVNGOjpGaWxlOjpNZXRhZGF0YU9iamVjdCAq bWV0YWRhdGFPYmplY3Q7Ci0rICBBU0Y6OkZpbGU6Ok1ldGFkYXRhTGlicmFyeU9iamVjdCAqbWV0 YWRhdGFMaWJyYXJ5T2JqZWN0OwotK307Ci0rCi0rc3RhdGljIEJ5dGVWZWN0b3IgaGVhZGVyR3Vp ZCgiXHgzMFx4MjZceEIyXHg3NVx4OEVceDY2XHhDRlx4MTFceEE2XHhEOVx4MDBceEFBXHgwMFx4 NjJceENFXHg2QyIsIDE2KTsKLStzdGF0aWMgQnl0ZVZlY3RvciBmaWxlUHJvcGVydGllc0d1aWQo Ilx4QTFceERDXHhBQlx4OENceDQ3XHhBOVx4Q0ZceDExXHg4RVx4RTRceDAwXHhDMFx4MENceDIw XHg1M1x4NjUiLCAxNik7Ci0rc3RhdGljIEJ5dGVWZWN0b3Igc3RyZWFtUHJvcGVydGllc0d1aWQo Ilx4OTFceDA3XHhEQ1x4QjdceEI3XHhBOVx4Q0ZceDExXHg4RVx4RTZceDAwXHhDMFx4MENceDIw XHg1M1x4NjUiLCAxNik7Ci0rc3RhdGljIEJ5dGVWZWN0b3IgY29udGVudERlc2NyaXB0aW9uR3Vp ZCgiXHgzM1x4MjZceEIyXHg3NVx4OEVceDY2XHhDRlx4MTFceEE2XHhEOVx4MDBceEFBXHgwMFx4 NjJceENFXHg2QyIsIDE2KTsKLStzdGF0aWMgQnl0ZVZlY3RvciBleHRlbmRlZENvbnRlbnREZXNj cmlwdGlvbkd1aWQoIlx4NDBceEE0XHhEMFx4RDJceDA3XHhFM1x4RDJceDExXHg5N1x4RjBceDAw XHhBMFx4QzlceDVFXHhBOFx4NTAiLCAxNik7Ci0rc3RhdGljIEJ5dGVWZWN0b3IgaGVhZGVyRXh0 ZW5zaW9uR3VpZCgiXHhiNVx4MDNceGJmXy5ceGE5XHhjZlx4MTFceDhlXHhlM1x4MDBceGMwXHgw YyBTZSIsIDE2KTsKLStzdGF0aWMgQnl0ZVZlY3RvciBtZXRhZGF0YUd1aWQoIlx4RUFceENCXHhG OFx4QzVceEFGW3dIXDIwNGdceEFBXDIxNERceEZBTFx4Q0EiLCAxNik7Ci0rc3RhdGljIEJ5dGVW ZWN0b3IgbWV0YWRhdGFMaWJyYXJ5R3VpZCgiXDIyNFwwMzQjRFwyMzBcMjI0XDMyMUlcMjQxQVx4 MWRceDEzTkVwVCIsIDE2KTsKLSsKLStjbGFzcyBBU0Y6OkZpbGU6OkJhc2VPYmplY3QKLSt7Ci0r cHVibGljOgotKyAgQnl0ZVZlY3RvciBkYXRhOwotKyAgdmlydHVhbCB+QmFzZU9iamVjdCgpIHt9 Ci0rICB2aXJ0dWFsIEJ5dGVWZWN0b3IgZ3VpZCgpID0gMDsKLSsgIHZpcnR1YWwgdm9pZCBwYXJz ZShBU0Y6OkZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzaXplKTsKLSsgIHZpcnR1YWwgQnl0ZVZl Y3RvciByZW5kZXIoQVNGOjpGaWxlICpmaWxlKTsKLSt9OwotKwotK2NsYXNzIEFTRjo6RmlsZTo6 VW5rbm93bk9iamVjdCA6IHB1YmxpYyBBU0Y6OkZpbGU6OkJhc2VPYmplY3QKLSt7Ci0rICBCeXRl VmVjdG9yIG15R3VpZDsKLStwdWJsaWM6Ci0rICBVbmtub3duT2JqZWN0KGNvbnN0IEJ5dGVWZWN0 b3IgJmd1aWQpOwotKyAgQnl0ZVZlY3RvciBndWlkKCk7Ci0rfTsKLSsKLStjbGFzcyBBU0Y6OkZp bGU6OkZpbGVQcm9wZXJ0aWVzT2JqZWN0IDogcHVibGljIEFTRjo6RmlsZTo6QmFzZU9iamVjdAot K3sKLStwdWJsaWM6Ci0rICBCeXRlVmVjdG9yIGd1aWQoKTsKLSsgIHZvaWQgcGFyc2UoQVNGOjpG aWxlICpmaWxlLCB1aW50IHNpemUpOwotK307Ci0rCi0rY2xhc3MgQVNGOjpGaWxlOjpTdHJlYW1Q cm9wZXJ0aWVzT2JqZWN0IDogcHVibGljIEFTRjo6RmlsZTo6QmFzZU9iamVjdAotK3sKLStwdWJs aWM6Ci0rICBCeXRlVmVjdG9yIGd1aWQoKTsKLSsgIHZvaWQgcGFyc2UoQVNGOjpGaWxlICpmaWxl LCB1aW50IHNpemUpOwotK307Ci0rCi0rY2xhc3MgQVNGOjpGaWxlOjpDb250ZW50RGVzY3JpcHRp b25PYmplY3QgOiBwdWJsaWMgQVNGOjpGaWxlOjpCYXNlT2JqZWN0Ci0rewotK3B1YmxpYzoKLSsg IEJ5dGVWZWN0b3IgZ3VpZCgpOwotKyAgdm9pZCBwYXJzZShBU0Y6OkZpbGUgKmZpbGUsIHVpbnQg c2l6ZSk7Ci0rICBCeXRlVmVjdG9yIHJlbmRlcihBU0Y6OkZpbGUgKmZpbGUpOwotK307Ci0rCi0r Y2xhc3MgQVNGOjpGaWxlOjpFeHRlbmRlZENvbnRlbnREZXNjcmlwdGlvbk9iamVjdCA6IHB1Ymxp YyBBU0Y6OkZpbGU6OkJhc2VPYmplY3QKLSt7Ci0rcHVibGljOgotKyAgQnl0ZVZlY3Rvckxpc3Qg YXR0cmlidXRlRGF0YTsKLSsgIEJ5dGVWZWN0b3IgZ3VpZCgpOwotKyAgdm9pZCBwYXJzZShBU0Y6 OkZpbGUgKmZpbGUsIHVpbnQgc2l6ZSk7Ci0rICBCeXRlVmVjdG9yIHJlbmRlcihBU0Y6OkZpbGUg KmZpbGUpOwotK307Ci0rCi0rY2xhc3MgQVNGOjpGaWxlOjpNZXRhZGF0YU9iamVjdCA6IHB1Ymxp YyBBU0Y6OkZpbGU6OkJhc2VPYmplY3QKLSt7Ci0rcHVibGljOgotKyAgQnl0ZVZlY3Rvckxpc3Qg YXR0cmlidXRlRGF0YTsKLSsgIEJ5dGVWZWN0b3IgZ3VpZCgpOwotKyAgdm9pZCBwYXJzZShBU0Y6 OkZpbGUgKmZpbGUsIHVpbnQgc2l6ZSk7Ci0rICBCeXRlVmVjdG9yIHJlbmRlcihBU0Y6OkZpbGUg KmZpbGUpOwotK307Ci0rCi0rY2xhc3MgQVNGOjpGaWxlOjpNZXRhZGF0YUxpYnJhcnlPYmplY3Qg OiBwdWJsaWMgQVNGOjpGaWxlOjpCYXNlT2JqZWN0Ci0rewotK3B1YmxpYzoKLSsgIEJ5dGVWZWN0 b3JMaXN0IGF0dHJpYnV0ZURhdGE7Ci0rICBCeXRlVmVjdG9yIGd1aWQoKTsKLSsgIHZvaWQgcGFy c2UoQVNGOjpGaWxlICpmaWxlLCB1aW50IHNpemUpOwotKyAgQnl0ZVZlY3RvciByZW5kZXIoQVNG OjpGaWxlICpmaWxlKTsKLSt9OwotKwotK2NsYXNzIEFTRjo6RmlsZTo6SGVhZGVyRXh0ZW5zaW9u T2JqZWN0IDogcHVibGljIEFTRjo6RmlsZTo6QmFzZU9iamVjdAotK3sKLStwdWJsaWM6Ci0rICBM aXN0PEFTRjo6RmlsZTo6QmFzZU9iamVjdCAqPiBvYmplY3RzOwotKyAgQnl0ZVZlY3RvciBndWlk KCk7Ci0rICB2b2lkIHBhcnNlKEFTRjo6RmlsZSAqZmlsZSwgdWludCBzaXplKTsKLSsgIEJ5dGVW ZWN0b3IgcmVuZGVyKEFTRjo6RmlsZSAqZmlsZSk7Ci0rfTsKLSsKLSt2b2lkCi0rQVNGOjpGaWxl OjpCYXNlT2JqZWN0OjpwYXJzZShBU0Y6OkZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzaXplKQot K3sKLSsgIGRhdGEgPSBmaWxlLT5yZWFkQmxvY2soc2l6ZSAtIDI0KTsKLSt9Ci0rCi0rQnl0ZVZl Y3RvcgotK0FTRjo6RmlsZTo6QmFzZU9iamVjdDo6cmVuZGVyKEFTRjo6RmlsZSAqIC8qZmlsZSov KQotK3sKLSsgIHJldHVybiBndWlkKCkgKyBCeXRlVmVjdG9yOjpmcm9tTG9uZ0xvbmcoZGF0YS5z aXplKCkgKyAyNCwgZmFsc2UpICsgZGF0YTsKLSt9Ci0rCi0rQVNGOjpGaWxlOjpVbmtub3duT2Jq ZWN0OjpVbmtub3duT2JqZWN0KGNvbnN0IEJ5dGVWZWN0b3IgJmd1aWQpIDogbXlHdWlkKGd1aWQp Ci0rewotK30KLSsKLStCeXRlVmVjdG9yCi0rQVNGOjpGaWxlOjpVbmtub3duT2JqZWN0OjpndWlk KCkKLSt7Ci0rICByZXR1cm4gbXlHdWlkOwotK30KLSsKLStCeXRlVmVjdG9yCi0rQVNGOjpGaWxl OjpGaWxlUHJvcGVydGllc09iamVjdDo6Z3VpZCgpCi0rewotKyAgcmV0dXJuIGZpbGVQcm9wZXJ0 aWVzR3VpZDsKLSt9Ci0rCi0rdm9pZAotK0FTRjo6RmlsZTo6RmlsZVByb3BlcnRpZXNPYmplY3Q6 OnBhcnNlKEFTRjo6RmlsZSAqZmlsZSwgdWludCBzaXplKQotK3sKLSsgIEJhc2VPYmplY3Q6OnBh cnNlKGZpbGUsIHNpemUpOwotKyAgZmlsZS0+ZC0+cHJvcGVydGllcy0+c2V0TGVuZ3RoKChpbnQp KGRhdGEubWlkKDQwLCA4KS50b0xvbmdMb25nKGZhbHNlKSAvIDEwMDAwMDAwTCAtIGRhdGEubWlk KDU2LCA4KS50b0xvbmdMb25nKGZhbHNlKSAvIDEwMDBMKSk7Ci0rfQotKwotK0J5dGVWZWN0b3IK LStBU0Y6OkZpbGU6OlN0cmVhbVByb3BlcnRpZXNPYmplY3Q6Omd1aWQoKQotK3sKLSsgIHJldHVy biBzdHJlYW1Qcm9wZXJ0aWVzR3VpZDsKLSt9Ci0rCi0rdm9pZAotK0FTRjo6RmlsZTo6U3RyZWFt UHJvcGVydGllc09iamVjdDo6cGFyc2UoQVNGOjpGaWxlICpmaWxlLCB1aW50IHNpemUpCi0rewot KyAgQmFzZU9iamVjdDo6cGFyc2UoZmlsZSwgc2l6ZSk7Ci0rICBmaWxlLT5kLT5wcm9wZXJ0aWVz LT5zZXRDaGFubmVscyhkYXRhLm1pZCg1NiwgMikudG9TaG9ydChmYWxzZSkpOwotKyAgZmlsZS0+ ZC0+cHJvcGVydGllcy0+c2V0U2FtcGxlUmF0ZShkYXRhLm1pZCg1OCwgNCkudG9VSW50KGZhbHNl KSk7Ci0rICBmaWxlLT5kLT5wcm9wZXJ0aWVzLT5zZXRCaXRyYXRlKGRhdGEubWlkKDYyLCA0KS50 b1VJbnQoZmFsc2UpICogOCAvIDEwMDApOwotK30KLSsKLStCeXRlVmVjdG9yCi0rQVNGOjpGaWxl OjpDb250ZW50RGVzY3JpcHRpb25PYmplY3Q6Omd1aWQoKQotK3sKLSsgIHJldHVybiBjb250ZW50 RGVzY3JpcHRpb25HdWlkOwotK30KLSsKLSt2b2lkCi0rQVNGOjpGaWxlOjpDb250ZW50RGVzY3Jp cHRpb25PYmplY3Q6OnBhcnNlKEFTRjo6RmlsZSAqZmlsZSwgdWludCAvKnNpemUqLykKLSt7Ci0r ICBmaWxlLT5kLT5jb250ZW50RGVzY3JpcHRpb25PYmplY3QgPSB0aGlzOwotKyAgaW50IHRpdGxl TGVuZ3RoID0gZmlsZS0+cmVhZFdPUkQoKTsKLSsgIGludCBhcnRpc3RMZW5ndGggPSBmaWxlLT5y ZWFkV09SRCgpOwotKyAgaW50IGNvcHlyaWdodExlbmd0aCA9IGZpbGUtPnJlYWRXT1JEKCk7Ci0r ICBpbnQgY29tbWVudExlbmd0aCA9IGZpbGUtPnJlYWRXT1JEKCk7Ci0rICBpbnQgcmF0aW5nTGVu Z3RoID0gZmlsZS0+cmVhZFdPUkQoKTsKLSsgIGZpbGUtPmQtPnRhZy0+c2V0VGl0bGUoZmlsZS0+ cmVhZFN0cmluZyh0aXRsZUxlbmd0aCkpOwotKyAgZmlsZS0+ZC0+dGFnLT5zZXRBcnRpc3QoZmls ZS0+cmVhZFN0cmluZyhhcnRpc3RMZW5ndGgpKTsKLSsgIGZpbGUtPmQtPnRhZy0+c2V0Q29weXJp Z2h0KGZpbGUtPnJlYWRTdHJpbmcoY29weXJpZ2h0TGVuZ3RoKSk7Ci0rICBmaWxlLT5kLT50YWct PnNldENvbW1lbnQoZmlsZS0+cmVhZFN0cmluZyhjb21tZW50TGVuZ3RoKSk7Ci0rICBmaWxlLT5k LT50YWctPnNldFJhdGluZyhmaWxlLT5yZWFkU3RyaW5nKHJhdGluZ0xlbmd0aCkpOwotK30KLSsK LStCeXRlVmVjdG9yCi0rQVNGOjpGaWxlOjpDb250ZW50RGVzY3JpcHRpb25PYmplY3Q6OnJlbmRl cihBU0Y6OkZpbGUgKmZpbGUpCi0rewotKyAgQnl0ZVZlY3RvciB2MSA9IGZpbGUtPnJlbmRlclN0 cmluZyhmaWxlLT5kLT50YWctPnRpdGxlKCkpOwotKyAgQnl0ZVZlY3RvciB2MiA9IGZpbGUtPnJl bmRlclN0cmluZyhmaWxlLT5kLT50YWctPmFydGlzdCgpKTsKLSsgIEJ5dGVWZWN0b3IgdjMgPSBm aWxlLT5yZW5kZXJTdHJpbmcoZmlsZS0+ZC0+dGFnLT5jb3B5cmlnaHQoKSk7Ci0rICBCeXRlVmVj dG9yIHY0ID0gZmlsZS0+cmVuZGVyU3RyaW5nKGZpbGUtPmQtPnRhZy0+Y29tbWVudCgpKTsKLSsg IEJ5dGVWZWN0b3IgdjUgPSBmaWxlLT5yZW5kZXJTdHJpbmcoZmlsZS0+ZC0+dGFnLT5yYXRpbmco KSk7Ci0rICBkYXRhLmNsZWFyKCk7Ci0rICBkYXRhLmFwcGVuZChCeXRlVmVjdG9yOjpmcm9tU2hv cnQodjEuc2l6ZSgpLCBmYWxzZSkpOwotKyAgZGF0YS5hcHBlbmQoQnl0ZVZlY3Rvcjo6ZnJvbVNo b3J0KHYyLnNpemUoKSwgZmFsc2UpKTsKLSsgIGRhdGEuYXBwZW5kKEJ5dGVWZWN0b3I6OmZyb21T aG9ydCh2My5zaXplKCksIGZhbHNlKSk7Ci0rICBkYXRhLmFwcGVuZChCeXRlVmVjdG9yOjpmcm9t U2hvcnQodjQuc2l6ZSgpLCBmYWxzZSkpOwotKyAgZGF0YS5hcHBlbmQoQnl0ZVZlY3Rvcjo6ZnJv bVNob3J0KHY1LnNpemUoKSwgZmFsc2UpKTsKLSsgIGRhdGEuYXBwZW5kKHYxKTsKLSsgIGRhdGEu YXBwZW5kKHYyKTsKLSsgIGRhdGEuYXBwZW5kKHYzKTsKLSsgIGRhdGEuYXBwZW5kKHY0KTsKLSsg IGRhdGEuYXBwZW5kKHY1KTsKLSsgIHJldHVybiBCYXNlT2JqZWN0OjpyZW5kZXIoZmlsZSk7Ci0r fQotKwotK0J5dGVWZWN0b3IKLStBU0Y6OkZpbGU6OkV4dGVuZGVkQ29udGVudERlc2NyaXB0aW9u T2JqZWN0OjpndWlkKCkKLSt7Ci0rICByZXR1cm4gZXh0ZW5kZWRDb250ZW50RGVzY3JpcHRpb25H dWlkOwotK30KLSsKLSt2b2lkCi0rQVNGOjpGaWxlOjpFeHRlbmRlZENvbnRlbnREZXNjcmlwdGlv bk9iamVjdDo6cGFyc2UoQVNGOjpGaWxlICpmaWxlLCB1aW50IC8qc2l6ZSovKQotK3sKLSsgIGZp bGUtPmQtPmV4dGVuZGVkQ29udGVudERlc2NyaXB0aW9uT2JqZWN0ID0gdGhpczsKLSsgIGludCBj b3VudCA9IGZpbGUtPnJlYWRXT1JEKCk7Ci0rICB3aGlsZShjb3VudC0tKSB7Ci0rICAgIEFTRjo6 QXR0cmlidXRlIGF0dHJpYnV0ZTsKLSsgICAgU3RyaW5nIG5hbWUgPSBhdHRyaWJ1dGUucGFyc2Uo KmZpbGUpOwotKyAgICBmaWxlLT5kLT50YWctPmFkZEF0dHJpYnV0ZShuYW1lLCBhdHRyaWJ1dGUp OwotKyAgfQotK30KLSsKLStCeXRlVmVjdG9yCi0rQVNGOjpGaWxlOjpFeHRlbmRlZENvbnRlbnRE ZXNjcmlwdGlvbk9iamVjdDo6cmVuZGVyKEFTRjo6RmlsZSAqZmlsZSkKLSt7Ci0rICBkYXRhLmNs ZWFyKCk7Ci0rICBkYXRhLmFwcGVuZChCeXRlVmVjdG9yOjpmcm9tU2hvcnQoYXR0cmlidXRlRGF0 YS5zaXplKCksIGZhbHNlKSk7Ci0rICBkYXRhLmFwcGVuZChhdHRyaWJ1dGVEYXRhLnRvQnl0ZVZl Y3RvcihCeXRlVmVjdG9yOjpudWxsKSk7Ci0rICByZXR1cm4gQmFzZU9iamVjdDo6cmVuZGVyKGZp bGUpOwotK30KLSsKLStCeXRlVmVjdG9yCi0rQVNGOjpGaWxlOjpNZXRhZGF0YU9iamVjdDo6Z3Vp ZCgpCi0rewotKyAgcmV0dXJuIG1ldGFkYXRhR3VpZDsKLSt9Ci0rCi0rdm9pZAotK0FTRjo6Rmls ZTo6TWV0YWRhdGFPYmplY3Q6OnBhcnNlKEFTRjo6RmlsZSAqZmlsZSwgdWludCAvKnNpemUqLykK LSt7Ci0rICBmaWxlLT5kLT5tZXRhZGF0YU9iamVjdCA9IHRoaXM7Ci0rICBpbnQgY291bnQgPSBm aWxlLT5yZWFkV09SRCgpOwotKyAgd2hpbGUoY291bnQtLSkgewotKyAgICBBU0Y6OkF0dHJpYnV0 ZSBhdHRyaWJ1dGU7Ci0rICAgIFN0cmluZyBuYW1lID0gYXR0cmlidXRlLnBhcnNlKCpmaWxlLCAx KTsKLSsgICAgZmlsZS0+ZC0+dGFnLT5hZGRBdHRyaWJ1dGUobmFtZSwgYXR0cmlidXRlKTsKLSsg IH0KLSt9Ci0rCi0rQnl0ZVZlY3RvcgotK0FTRjo6RmlsZTo6TWV0YWRhdGFPYmplY3Q6OnJlbmRl cihBU0Y6OkZpbGUgKmZpbGUpCi0rewotKyAgZGF0YS5jbGVhcigpOwotKyAgZGF0YS5hcHBlbmQo Qnl0ZVZlY3Rvcjo6ZnJvbVNob3J0KGF0dHJpYnV0ZURhdGEuc2l6ZSgpLCBmYWxzZSkpOwotKyAg ZGF0YS5hcHBlbmQoYXR0cmlidXRlRGF0YS50b0J5dGVWZWN0b3IoQnl0ZVZlY3Rvcjo6bnVsbCkp OwotKyAgcmV0dXJuIEJhc2VPYmplY3Q6OnJlbmRlcihmaWxlKTsKLSt9Ci0rCi0rQnl0ZVZlY3Rv cgotK0FTRjo6RmlsZTo6TWV0YWRhdGFMaWJyYXJ5T2JqZWN0OjpndWlkKCkKLSt7Ci0rICByZXR1 cm4gbWV0YWRhdGFMaWJyYXJ5R3VpZDsKLSt9Ci0rCi0rdm9pZAotK0FTRjo6RmlsZTo6TWV0YWRh dGFMaWJyYXJ5T2JqZWN0OjpwYXJzZShBU0Y6OkZpbGUgKmZpbGUsIHVpbnQgLypzaXplKi8pCi0r ewotKyAgZmlsZS0+ZC0+bWV0YWRhdGFMaWJyYXJ5T2JqZWN0ID0gdGhpczsKLSsgIGludCBjb3Vu dCA9IGZpbGUtPnJlYWRXT1JEKCk7Ci0rICB3aGlsZShjb3VudC0tKSB7Ci0rICAgIEFTRjo6QXR0 cmlidXRlIGF0dHJpYnV0ZTsKLSsgICAgU3RyaW5nIG5hbWUgPSBhdHRyaWJ1dGUucGFyc2UoKmZp bGUsIDIpOwotKyAgICBmaWxlLT5kLT50YWctPmFkZEF0dHJpYnV0ZShuYW1lLCBhdHRyaWJ1dGUp OwotKyAgfQotK30KLSsKLStCeXRlVmVjdG9yCi0rQVNGOjpGaWxlOjpNZXRhZGF0YUxpYnJhcnlP YmplY3Q6OnJlbmRlcihBU0Y6OkZpbGUgKmZpbGUpCi0rewotKyAgZGF0YS5jbGVhcigpOwotKyAg ZGF0YS5hcHBlbmQoQnl0ZVZlY3Rvcjo6ZnJvbVNob3J0KGF0dHJpYnV0ZURhdGEuc2l6ZSgpLCBm YWxzZSkpOwotKyAgZGF0YS5hcHBlbmQoYXR0cmlidXRlRGF0YS50b0J5dGVWZWN0b3IoQnl0ZVZl Y3Rvcjo6bnVsbCkpOwotKyAgcmV0dXJuIEJhc2VPYmplY3Q6OnJlbmRlcihmaWxlKTsKLSt9Ci0r Ci0rQnl0ZVZlY3RvcgotK0FTRjo6RmlsZTo6SGVhZGVyRXh0ZW5zaW9uT2JqZWN0OjpndWlkKCkK LSt7Ci0rICByZXR1cm4gaGVhZGVyRXh0ZW5zaW9uR3VpZDsKLSt9Ci0rCi0rdm9pZAotK0FTRjo6 RmlsZTo6SGVhZGVyRXh0ZW5zaW9uT2JqZWN0OjpwYXJzZShBU0Y6OkZpbGUgKmZpbGUsIHVpbnQg LypzaXplKi8pCi0rewotKyAgZmlsZS0+ZC0+aGVhZGVyRXh0ZW5zaW9uT2JqZWN0ID0gdGhpczsK LSsgIGZpbGUtPnNlZWsoMTgsIEZpbGU6OkN1cnJlbnQpOwotKyAgbG9uZyBsb25nIGRhdGFTaXpl ID0gZmlsZS0+cmVhZERXT1JEKCk7Ci0rICBsb25nIGxvbmcgZGF0YVBvcyA9IDA7Ci0rICB3aGls ZShkYXRhUG9zIDwgZGF0YVNpemUpIHsKLSsgICAgQnl0ZVZlY3RvciBndWlkID0gZmlsZS0+cmVh ZEJsb2NrKDE2KTsKLSsgICAgbG9uZyBsb25nIHNpemUgPSBmaWxlLT5yZWFkUVdPUkQoKTsKLSsg ICAgQmFzZU9iamVjdCAqb2JqOwotKyAgICBpZihndWlkID09IG1ldGFkYXRhR3VpZCkgewotKyAg ICAgIG9iaiA9IG5ldyBNZXRhZGF0YU9iamVjdCgpOwotKyAgICB9Ci0rICAgIGVsc2UgaWYoZ3Vp ZCA9PSBtZXRhZGF0YUxpYnJhcnlHdWlkKSB7Ci0rICAgICAgb2JqID0gbmV3IE1ldGFkYXRhTGli cmFyeU9iamVjdCgpOwotKyAgICB9Ci0rICAgIGVsc2UgewotKyAgICAgIG9iaiA9IG5ldyBVbmtu b3duT2JqZWN0KGd1aWQpOwotKyAgICB9Ci0rICAgIG9iai0+cGFyc2UoZmlsZSwgc2l6ZSk7Ci0r ICAgIG9iamVjdHMuYXBwZW5kKG9iaik7Ci0rICAgIGRhdGFQb3MgKz0gc2l6ZTsKLSsgIH0KLSt9 Ci0rCi0rQnl0ZVZlY3RvcgotK0FTRjo6RmlsZTo6SGVhZGVyRXh0ZW5zaW9uT2JqZWN0OjpyZW5k ZXIoQVNGOjpGaWxlICpmaWxlKQotK3sKLSsgIGRhdGEuY2xlYXIoKTsKLSsgIGZvcih1bnNpZ25l ZCBpbnQgaSA9IDA7IGkgPCBvYmplY3RzLnNpemUoKTsgaSsrKSB7Ci0rICAgIGRhdGEuYXBwZW5k KG9iamVjdHNbaV0tPnJlbmRlcihmaWxlKSk7Ci0rICB9Ci0rICBkYXRhID0gQnl0ZVZlY3Rvcigi XHgxMVx4RDJceEQzXHhBQlx4QkFceEE5XHhjZlx4MTFceDhFXHhFNlx4MDBceEMwXHgwQ1x4MjBc eDUzXHg2NVx4MDZceDAwIiwgMTgpICsgQnl0ZVZlY3Rvcjo6ZnJvbVVJbnQoZGF0YS5zaXplKCks IGZhbHNlKSArIGRhdGE7Ci0rICByZXR1cm4gQmFzZU9iamVjdDo6cmVuZGVyKGZpbGUpOwotK30K LSsKLSsvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotKy8vIHB1YmxpYyBtZW1iZXJzCi0rLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8KLSsKLStBU0Y6OkZpbGU6OkZpbGUoY29uc3QgY2hhciAqZmlsZSwg Ym9vbCByZWFkUHJvcGVydGllcywgUHJvcGVydGllczo6UmVhZFN0eWxlIHByb3BlcnRpZXNTdHls ZSkgCi0rICA6IFRhZ0xpYjo6RmlsZShmaWxlKQotK3sKLSsgIGQgPSBuZXcgRmlsZVByaXZhdGU7 Ci0rICByZWFkKHJlYWRQcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzU3R5bGUpOwotK30KLSsKLStBU0Y6 OkZpbGU6On5GaWxlKCkKLSt7Ci0rICBmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZC0+b2Jq ZWN0cy5zaXplKCk7IGkrKykgewotKyAgICBkZWxldGUgZC0+b2JqZWN0c1tpXTsKLSsgIH0KLSsg IGlmKGQtPnRhZykgewotKyAgICBkZWxldGUgZC0+dGFnOwotKyAgfQotKyAgaWYoZC0+cHJvcGVy dGllcykgewotKyAgICBkZWxldGUgZC0+cHJvcGVydGllczsKLSsgIH0KLSsgIGRlbGV0ZSBkOwot K30KLSsKLStBU0Y6OlRhZyAqQVNGOjpGaWxlOjp0YWcoKSBjb25zdAotK3sKLSsgIHJldHVybiBk LT50YWc7Ci0rfQotKwotK0FTRjo6UHJvcGVydGllcyAqQVNGOjpGaWxlOjphdWRpb1Byb3BlcnRp ZXMoKSBjb25zdAotK3sKLSsgIHJldHVybiBkLT5wcm9wZXJ0aWVzOwotK30KLSsKLSt2b2lkIEFT Rjo6RmlsZTo6cmVhZChib29sIC8qcmVhZFByb3BlcnRpZXMqLywgUHJvcGVydGllczo6UmVhZFN0 eWxlIC8qcHJvcGVydGllc1N0eWxlKi8pCi0rewotKyAgaWYoIWlzVmFsaWQoKSkKLSsgICAgcmV0 dXJuOwotKwotKyAgQnl0ZVZlY3RvciBndWlkID0gcmVhZEJsb2NrKDE2KTsKLSsgIGlmKGd1aWQg IT0gaGVhZGVyR3VpZCkgewotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBkLT50YWcgPSBuZXcg QVNGOjpUYWcoKTsKLSsgIGQtPnByb3BlcnRpZXMgPSBuZXcgQVNGOjpQcm9wZXJ0aWVzKCk7Ci0r Ci0rICBkLT5zaXplID0gcmVhZFFXT1JEKCk7Ci0rICBpbnQgbnVtT2JqZWN0cyA9IHJlYWREV09S RCgpOwotKyAgc2VlaygyLCBDdXJyZW50KTsKLSsKLSsgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1P YmplY3RzOyBpKyspIHsKLSsgICAgQnl0ZVZlY3RvciBndWlkID0gcmVhZEJsb2NrKDE2KTsKLSsg ICAgbG9uZyBzaXplID0gKGxvbmcpcmVhZFFXT1JEKCk7Ci0rICAgIEJhc2VPYmplY3QgKm9iajsK LSsgICAgaWYoZ3VpZCA9PSBmaWxlUHJvcGVydGllc0d1aWQpIHsKLSsgICAgICBvYmogPSBuZXcg RmlsZVByb3BlcnRpZXNPYmplY3QoKTsKLSsgICAgfQotKyAgICBlbHNlIGlmKGd1aWQgPT0gc3Ry ZWFtUHJvcGVydGllc0d1aWQpIHsKLSsgICAgICBvYmogPSBuZXcgU3RyZWFtUHJvcGVydGllc09i amVjdCgpOwotKyAgICB9Ci0rICAgIGVsc2UgaWYoZ3VpZCA9PSBjb250ZW50RGVzY3JpcHRpb25H dWlkKSB7Ci0rICAgICAgb2JqID0gbmV3IENvbnRlbnREZXNjcmlwdGlvbk9iamVjdCgpOwotKyAg ICB9Ci0rICAgIGVsc2UgaWYoZ3VpZCA9PSBleHRlbmRlZENvbnRlbnREZXNjcmlwdGlvbkd1aWQp IHsKLSsgICAgICBvYmogPSBuZXcgRXh0ZW5kZWRDb250ZW50RGVzY3JpcHRpb25PYmplY3QoKTsK LSsgICAgfQotKyAgICBlbHNlIGlmKGd1aWQgPT0gaGVhZGVyRXh0ZW5zaW9uR3VpZCkgewotKyAg ICAgIG9iaiA9IG5ldyBIZWFkZXJFeHRlbnNpb25PYmplY3QoKTsKLSsgICAgfQotKyAgICBlbHNl IHsKLSsgICAgICBvYmogPSBuZXcgVW5rbm93bk9iamVjdChndWlkKTsKLSsgICAgfQotKyAgICBv YmotPnBhcnNlKHRoaXMsIHNpemUpOwotKyAgICBkLT5vYmplY3RzLmFwcGVuZChvYmopOwotKyAg fQotK30KLSsKLStib29sIEFTRjo6RmlsZTo6c2F2ZSgpCi0rewotKyAgaWYocmVhZE9ubHkoKSkg ewotKyAgICByZXR1cm4gZmFsc2U7Ci0rICB9Ci0rCi0rICBpZighZC0+Y29udGVudERlc2NyaXB0 aW9uT2JqZWN0KSB7Ci0rICAgIGQtPmNvbnRlbnREZXNjcmlwdGlvbk9iamVjdCA9IG5ldyBDb250 ZW50RGVzY3JpcHRpb25PYmplY3QoKTsKLSsgICAgZC0+b2JqZWN0cy5hcHBlbmQoZC0+Y29udGVu dERlc2NyaXB0aW9uT2JqZWN0KTsKLSsgIH0KLSsgIGlmKCFkLT5leHRlbmRlZENvbnRlbnREZXNj cmlwdGlvbk9iamVjdCkgewotKyAgICBkLT5leHRlbmRlZENvbnRlbnREZXNjcmlwdGlvbk9iamVj dCA9IG5ldyBFeHRlbmRlZENvbnRlbnREZXNjcmlwdGlvbk9iamVjdCgpOwotKyAgICBkLT5vYmpl Y3RzLmFwcGVuZChkLT5leHRlbmRlZENvbnRlbnREZXNjcmlwdGlvbk9iamVjdCk7Ci0rICB9Ci0r ICBpZighZC0+aGVhZGVyRXh0ZW5zaW9uT2JqZWN0KSB7Ci0rICAgIGQtPmhlYWRlckV4dGVuc2lv bk9iamVjdCA9IG5ldyBIZWFkZXJFeHRlbnNpb25PYmplY3QoKTsKLSsgICAgZC0+b2JqZWN0cy5h cHBlbmQoZC0+aGVhZGVyRXh0ZW5zaW9uT2JqZWN0KTsKLSsgIH0KLSsgIGlmKCFkLT5tZXRhZGF0 YU9iamVjdCkgewotKyAgICBkLT5tZXRhZGF0YU9iamVjdCA9IG5ldyBNZXRhZGF0YU9iamVjdCgp OwotKyAgICBkLT5oZWFkZXJFeHRlbnNpb25PYmplY3QtPm9iamVjdHMuYXBwZW5kKGQtPm1ldGFk YXRhT2JqZWN0KTsKLSsgIH0KLSsgIGlmKCFkLT5tZXRhZGF0YUxpYnJhcnlPYmplY3QpIHsKLSsg ICAgZC0+bWV0YWRhdGFMaWJyYXJ5T2JqZWN0ID0gbmV3IE1ldGFkYXRhTGlicmFyeU9iamVjdCgp OwotKyAgICBkLT5oZWFkZXJFeHRlbnNpb25PYmplY3QtPm9iamVjdHMuYXBwZW5kKGQtPm1ldGFk YXRhTGlicmFyeU9iamVjdCk7Ci0rICB9Ci0rCi0rICBBU0Y6OkF0dHJpYnV0ZUxpc3RNYXA6OkNv bnN0SXRlcmF0b3IgaXQgPSBkLT50YWctPmF0dHJpYnV0ZUxpc3RNYXAoKS5iZWdpbigpOwotKyAg Zm9yKDsgaXQgIT0gZC0+dGFnLT5hdHRyaWJ1dGVMaXN0TWFwKCkuZW5kKCk7IGl0KyspIHsKLSsg ICAgY29uc3QgU3RyaW5nICZuYW1lID0gaXQtPmZpcnN0OwotKyAgICBjb25zdCBBdHRyaWJ1dGVM aXN0ICZhdHRyaWJ1dGVzID0gaXQtPnNlY29uZDsKLSsgICAgYm9vbCBpbkV4dGVuZGVkQ29udGVu dERlc2NyaXB0aW9uT2JqZWN0ID0gZmFsc2U7Ci0rICAgIGJvb2wgaW5NZXRhZGF0YU9iamVjdCA9 IGZhbHNlOwotKyAgICBmb3IodW5zaWduZWQgaW50IGogPSAwOyBqIDwgYXR0cmlidXRlcy5zaXpl KCk7IGorKykgewotKyAgICAgIGNvbnN0IEF0dHJpYnV0ZSAmYXR0cmlidXRlID0gYXR0cmlidXRl c1tqXTsKLSsgICAgICBpZighaW5FeHRlbmRlZENvbnRlbnREZXNjcmlwdGlvbk9iamVjdCAmJiBh dHRyaWJ1dGUubGFuZ3VhZ2UoKSA9PSAwICYmIGF0dHJpYnV0ZS5zdHJlYW0oKSA9PSAwKSB7Ci0r ICAgICAgICBkLT5leHRlbmRlZENvbnRlbnREZXNjcmlwdGlvbk9iamVjdC0+YXR0cmlidXRlRGF0 YS5hcHBlbmQoYXR0cmlidXRlLnJlbmRlcihuYW1lKSk7Ci0rICAgICAgICBpbkV4dGVuZGVkQ29u dGVudERlc2NyaXB0aW9uT2JqZWN0ID0gdHJ1ZTsKLSsgICAgICB9Ci0rICAgICAgZWxzZSBpZigh aW5NZXRhZGF0YU9iamVjdCAmJiBhdHRyaWJ1dGUubGFuZ3VhZ2UoKSA9PSAwICYmIGF0dHJpYnV0 ZS5zdHJlYW0oKSAhPSAwKSB7Ci0rICAgICAgICBkLT5tZXRhZGF0YU9iamVjdC0+YXR0cmlidXRl RGF0YS5hcHBlbmQoYXR0cmlidXRlLnJlbmRlcihuYW1lLCAxKSk7Ci0rICAgICAgICBpbk1ldGFk YXRhT2JqZWN0ID0gdHJ1ZTsKLSsgICAgICB9Ci0rICAgICAgZWxzZSB7Ci0rICAgICAgICBkLT5t ZXRhZGF0YUxpYnJhcnlPYmplY3QtPmF0dHJpYnV0ZURhdGEuYXBwZW5kKGF0dHJpYnV0ZS5yZW5k ZXIobmFtZSwgMikpOwotKyAgICAgIH0KLSsgICAgfQotKyAgfQotKwotKyAgQnl0ZVZlY3RvciBk YXRhOwotKyAgZm9yKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGQtPm9iamVjdHMuc2l6ZSgpOyBp KyspIHsKLSsgICAgZGF0YS5hcHBlbmQoZC0+b2JqZWN0c1tpXS0+cmVuZGVyKHRoaXMpKTsKLSsg IH0KLSsgIGRhdGEgPSBoZWFkZXJHdWlkICsgQnl0ZVZlY3Rvcjo6ZnJvbUxvbmdMb25nKGRhdGEu c2l6ZSgpICsgMzAsIGZhbHNlKSArIEJ5dGVWZWN0b3I6OmZyb21VSW50KGQtPm9iamVjdHMuc2l6 ZSgpLCBmYWxzZSkgKyBCeXRlVmVjdG9yKCJceDAxXHgwMiIsIDIpICsgZGF0YTsKLSsgIGluc2Vy dChkYXRhLCAwLCBkLT5zaXplKTsKLSsKLSsgIHJldHVybiB0cnVlOwotK30KLSsKLSsvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLwotKy8vIHByb3RlY3RlZCBtZW1iZXJzCi0rLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8KLSsKLStpbnQgQVNGOjpGaWxlOjpyZWFkQllURSgpCi0rewotKyAgQnl0ZVZlY3Rv ciB2ID0gcmVhZEJsb2NrKDEpOwotKyAgcmV0dXJuIHZbMF07Ci0rfQotKwotK2ludCBBU0Y6OkZp bGU6OnJlYWRXT1JEKCkKLSt7Ci0rICBCeXRlVmVjdG9yIHYgPSByZWFkQmxvY2soMik7Ci0rICBy ZXR1cm4gdi50b1Nob3J0KGZhbHNlKTsKLSt9Ci0rCi0rdW5zaWduZWQgaW50IEFTRjo6RmlsZTo6 cmVhZERXT1JEKCkKLSt7Ci0rICBCeXRlVmVjdG9yIHYgPSByZWFkQmxvY2soNCk7Ci0rICByZXR1 cm4gdi50b1VJbnQoZmFsc2UpOwotK30KLSsKLStsb25nIGxvbmcgQVNGOjpGaWxlOjpyZWFkUVdP UkQoKQotK3sKLSsgIEJ5dGVWZWN0b3IgdiA9IHJlYWRCbG9jayg4KTsKLSsgIHJldHVybiB2LnRv TG9uZ0xvbmcoZmFsc2UpOwotK30KLSsKLStTdHJpbmcKLStBU0Y6OkZpbGU6OnJlYWRTdHJpbmco aW50IGxlbmd0aCkKLSt7Ci0rICBCeXRlVmVjdG9yIGRhdGEgPSByZWFkQmxvY2sobGVuZ3RoKTsK LSsgIHVuc2lnbmVkIGludCBzaXplID0gZGF0YS5zaXplKCk7Ci0rICB3aGlsZSAoc2l6ZSA+PSAy KSB7Ci0rICAgIGlmKGRhdGFbc2l6ZSAtIDFdICE9ICdcMCcgfHwgZGF0YVtzaXplIC0gMl0gIT0g J1wwJykgewotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIHNpemUgLT0gMjsKLSsgIH0KLSsg IGlmKHNpemUgIT0gZGF0YS5zaXplKCkpIHsKLSsgICAgZGF0YS5yZXNpemUoc2l6ZSk7Ci0rICB9 Ci0rICByZXR1cm4gU3RyaW5nKGRhdGEsIFN0cmluZzo6VVRGMTZMRSk7Ci0rfQotKwotK0J5dGVW ZWN0b3IKLStBU0Y6OkZpbGU6OnJlbmRlclN0cmluZyhjb25zdCBTdHJpbmcgJnN0ciwgYm9vbCBp bmNsdWRlTGVuZ3RoKQotK3sKLSsgIEJ5dGVWZWN0b3IgZGF0YSA9IHN0ci5kYXRhKFN0cmluZzo6 VVRGMTZMRSkgKyBCeXRlVmVjdG9yOjpmcm9tU2hvcnQoMCwgZmFsc2UpOwotKyAgaWYoaW5jbHVk ZUxlbmd0aCkgewotKyAgICBkYXRhID0gQnl0ZVZlY3Rvcjo6ZnJvbVNob3J0KGRhdGEuc2l6ZSgp LCBmYWxzZSkgKyBkYXRhOwotKyAgfQotKyAgcmV0dXJuIGRhdGE7Ci0rfQotCi1Qcm9wZXJ0eSBj aGFuZ2VzIG9uOiBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi9hc2ZmaWxlLmNwcAotX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwotTmFtZTogc3ZuOmVvbC1zdHlsZQotICAgKyBuYXRpdmUKLQotSW5kZXg6IGFtYXJvay9zcmMv bWV0YWRhdGEvYXNmL2FzZnRhZy5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYW1hcm9rL3NyYy9tZXRhZGF0 YS9hc2YvYXNmdGFnLmgJKHJldmlzaW9uIDApCi0rKysgYW1hcm9rL3NyYy9tZXRhZGF0YS9hc2Yv YXNmdGFnLmgJKHJldmlzaW9uIDc0MzAwNSkKLUBAIC0wLDAgKzEsMTgxIEBACi0rLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCi0rICAgIGNvcHlyaWdodCAgICAgICAgICAgIDogKEMpIDIwMDUtMjAwNyBieSBM dWvDocWhIExhbGluc2vDvQotKyAgICBlbWFpbCAgICAgICAgICAgICAgICA6IGxhbGluc2t5QGdt YWlsLmNvbQotKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSsvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0r ICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSAgKgotKyAqICAgaXQgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gICoKLSsgKiAgIDIuMSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gICAgICAgICAgICAgICAg ICAgICAqCi0rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICoKLSsgKiAg IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YgICAgICAgICAgICAqCi0rICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSAgICAgKgotKyAqICAgTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAg ICoKLSsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqCi0rICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljICAgICAgKgotKyAqICAgTGlj ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZSAgICoKLSsgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3Vp dGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICAqCi0rICogICBVU0EgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgot KyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0rCi0rI2lmbmRlZiBUQUdMSUJfQVNGVEFHX0gKLSsjZGVm aW5lIFRBR0xJQl9BU0ZUQUdfSAotKwotKyNpbmNsdWRlIDx0YWcuaD4KLSsjaW5jbHVkZSA8dGxp c3QuaD4KLSsjaW5jbHVkZSA8dG1hcC5oPgotKyNpbmNsdWRlICJhc2ZhdHRyaWJ1dGUuaCIKLSsK LStuYW1lc3BhY2UgVGFnTGliIHsKLSsKLSsgIG5hbWVzcGFjZSBBU0YgewotKwotKyAgICB0eXBl ZGVmIExpc3Q8QXR0cmlidXRlPiBBdHRyaWJ1dGVMaXN0OwotKyAgICB0eXBlZGVmIE1hcDxTdHJp bmcsIEF0dHJpYnV0ZUxpc3Q+IEF0dHJpYnV0ZUxpc3RNYXA7Ci0rCi0rICAgIGNsYXNzIFRhZyA6 IHB1YmxpYyBUYWdMaWI6OlRhZyB7Ci0rCi0rICAgICAgZnJpZW5kIGNsYXNzIEZpbGU7Ci0rCi0r ICAgIHB1YmxpYzoKLSsKLSsgICAgICBUYWcoKTsKLSsKLSsgICAgICB2aXJ0dWFsIH5UYWcoKTsK LSsKLSsgICAgICAvKiEKLSsgICAgICAgKiBSZXR1cm5zIHRoZSB0cmFjayBuYW1lLgotKyAgICAg ICAqLwotKyAgICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3Q7Ci0rCi0rICAgICAgLyoh Ci0rICAgICAgICogUmV0dXJucyB0aGUgYXJ0aXN0IG5hbWUuCi0rICAgICAgICovCi0rICAgICAg dmlydHVhbCBTdHJpbmcgYXJ0aXN0KCkgY29uc3Q7Ci0rCi0rICAgICAgLyohCi0rICAgICAgICog UmV0dXJucyB0aGUgYWxidW0gbmFtZTsgaWYgbm8gYWxidW0gbmFtZSBpcyBwcmVzZW50IGluIHRo ZSB0YWcKLSsgICAgICAgKiBTdHJpbmc6Om51bGwgd2lsbCBiZSByZXR1cm5lZC4KLSsgICAgICAg Ki8KLSsgICAgICB2aXJ0dWFsIFN0cmluZyBhbGJ1bSgpIGNvbnN0OwotKwotKyAgICAgIC8qIQot KyAgICAgICAqIFJldHVybnMgdGhlIHRyYWNrIGNvbW1lbnQuCi0rICAgICAgICovCi0rICAgICAg dmlydHVhbCBTdHJpbmcgY29tbWVudCgpIGNvbnN0OwotKwotKyAgICAgIC8qIQotKyAgICAgICAq IFJldHVybnMgdGhlIGdlbnJlIG5hbWU7IGlmIG5vIGdlbnJlIGlzIHByZXNlbnQgaW4gdGhlIHRh ZyBTdHJpbmc6Om51bGwKLSsgICAgICAgKiB3aWxsIGJlIHJldHVybmVkLgotKyAgICAgICAqLwot KyAgICAgIHZpcnR1YWwgU3RyaW5nIGdlbnJlKCkgY29uc3Q7Ci0rCi0rICAgICAgLyohCi0rICAg ICAgICogUmV0dXJucyB0aGUgcmF0aW5nLgotKyAgICAgICAqLwotKyAgICAgIHZpcnR1YWwgU3Ry aW5nIHJhdGluZygpIGNvbnN0OwotKwotKyAgICAgIC8qIQotKyAgICAgICAqIFJldHVybnMgdGhl IGdlbnJlIG5hbWU7IGlmIG5vIGdlbnJlIGlzIHByZXNlbnQgaW4gdGhlIHRhZyBTdHJpbmc6Om51 bGwKLSsgICAgICAgKiB3aWxsIGJlIHJldHVybmVkLgotKyAgICAgICAqLwotKyAgICAgIHZpcnR1 YWwgU3RyaW5nIGNvcHlyaWdodCgpIGNvbnN0OwotKwotKyAgICAgIC8qIQotKyAgICAgICAqIFJl dHVybnMgdGhlIHllYXI7IGlmIHRoZXJlIGlzIG5vIHllYXIgc2V0LCB0aGlzIHdpbGwgcmV0dXJu IDAuCi0rICAgICAgICovCi0rICAgICAgdmlydHVhbCB1aW50IHllYXIoKSBjb25zdDsKLSsKLSsg ICAgICAvKiEKLSsgICAgICAgKiBSZXR1cm5zIHRoZSB0cmFjayBudW1iZXI7IGlmIHRoZXJlIGlz IG5vIHRyYWNrIG51bWJlciBzZXQsIHRoaXMgd2lsbAotKyAgICAgICAqIHJldHVybiAwLgotKyAg ICAgICAqLwotKyAgICAgIHZpcnR1YWwgdWludCB0cmFjaygpIGNvbnN0OwotKwotKyAgICAgIC8q IQotKyAgICAgICAqIFNldHMgdGhlIHRpdGxlIHRvIFxhIHMuCi0rICAgICAgICovCi0rICAgICAg dmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyAmcyk7Ci0rCi0rICAgICAgLyohCi0r ICAgICAgICogU2V0cyB0aGUgYXJ0aXN0IHRvIFxhIHMuCi0rICAgICAgICovCi0rICAgICAgdmly dHVhbCB2b2lkIHNldEFydGlzdChjb25zdCBTdHJpbmcgJnMpOwotKwotKyAgICAgIC8qIQotKyAg ICAgICAqIFNldHMgdGhlIGFsYnVtIHRvIFxhIHMuICBJZiBcYSBzIGlzIFN0cmluZzo6bnVsbCB0 aGVuIHRoaXMgdmFsdWUgd2lsbCBiZQotKyAgICAgICAqIGNsZWFyZWQuCi0rICAgICAgICovCi0r ICAgICAgdmlydHVhbCB2b2lkIHNldEFsYnVtKGNvbnN0IFN0cmluZyAmcyk7Ci0rCi0rICAgICAg LyohCi0rICAgICAgICogU2V0cyB0aGUgY29tbWVudCB0byBcYSBzLgotKyAgICAgICAqLwotKyAg ICAgIHZpcnR1YWwgdm9pZCBzZXRDb21tZW50KGNvbnN0IFN0cmluZyAmcyk7Ci0rCi0rICAgICAg LyohCi0rICAgICAgICogU2V0cyB0aGUgcmF0aW5nIHRvIFxhIHMuIAotKyAgICAgICAqLwotKyAg ICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRpbmcoY29uc3QgU3RyaW5nICZzKTsKLSsKLSsgICAgICAv KiEKLSsgICAgICAgKiBTZXRzIHRoZSBjb3B5cmlnaHQgdG8gXGEgcy4gCi0rICAgICAgICovCi0r ICAgICAgdmlydHVhbCB2b2lkIHNldENvcHlyaWdodChjb25zdCBTdHJpbmcgJnMpOwotKwotKyAg ICAgIC8qIQotKyAgICAgICAqIFNldHMgdGhlIGdlbnJlIHRvIFxhIHMuIAotKyAgICAgICAqLwot KyAgICAgIHZpcnR1YWwgdm9pZCBzZXRHZW5yZShjb25zdCBTdHJpbmcgJnMpOwotKwotKyAgICAg IC8qIQotKyAgICAgICAqIFNldHMgdGhlIHllYXIgdG8gXGEgaS4gIElmIFxhIHMgaXMgMCB0aGVu IHRoaXMgdmFsdWUgd2lsbCBiZSBjbGVhcmVkLgotKyAgICAgICAqLwotKyAgICAgIHZpcnR1YWwg dm9pZCBzZXRZZWFyKHVpbnQgaSk7Ci0rCi0rICAgICAgLyohCi0rICAgICAgICogU2V0cyB0aGUg dHJhY2sgdG8gXGEgaS4gIElmIFxhIHMgaXMgMCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBjbGVh cmVkLgotKyAgICAgICAqLwotKyAgICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFjayh1aW50IGkpOwot KwotKyAgICAgIC8qIQotKyAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFnIGRvZXMgbm90 IGNvbnRhaW4gYW55IGRhdGEuICBUaGlzIHNob3VsZCBiZQotKyAgICAgICAqIHJlaW1wbGVtZW50 ZWQgaW4gc3ViY2xhc3NlcyB0aGF0IHByb3ZpZGUgbW9yZSB0aGFuIHRoZSBiYXNpYyB0YWdnaW5n Ci0rICAgICAgICogYWJpbGl0aWVzIGluIHRoaXMgY2xhc3MuCi0rICAgICAgICovCi0rICAgICAg dmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdDsKLSsKLSsgICAgICAvKiEKLSsgICAgICAgKiBS ZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBpdGVtIGxpc3QgbWFwLiAgVGhpcyBpcyBhbiBBdHRy aWJ1dGVMaXN0TWFwIG9mCi0rICAgICAgICogYWxsIG9mIHRoZSBpdGVtcyBpbiB0aGUgdGFnLgot KyAgICAgICAqCi0rICAgICAgICogVGhpcyBpcyB0aGUgbW9zdCBwb3dlcmZ1bGwgc3RydWN0dXJl IGZvciBhY2Nlc3NpbmcgdGhlIGl0ZW1zIG9mIHRoZSB0YWcuCi0rICAgICAgICovCi0rICAgICAg QXR0cmlidXRlTGlzdE1hcCAmYXR0cmlidXRlTGlzdE1hcCgpOwotKwotKyAgICAgIC8qIQotKyAg ICAgICAqIFJlbW92ZXMgdGhlIFxhIGtleSBhdHRyaWJ1dGUgZnJvbSB0aGUgdGFnCi0rICAgICAg ICovCi0rICAgICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyAmbmFtZSk7Ci0rCi0rICAg ICAgLyohCi0rICAgICAgICogU2V0cyB0aGUgXGEga2V5IGF0dHJpYnV0ZSB0byB0aGUgdmFsdWUg b2YgXGEgYXR0cmlidXRlLiBJZiBhbiBhdHRyaWJ1dGUKLSsgICAgICAgKiB3aXRoIHRoZSBcYSBr ZXkgaXMgYWxyZWFkeSBwcmVzZW50LCBpdCB3aWxsIGJlIHJlcGxhY2VkLgotKyAgICAgICAqLwot KyAgICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IFN0cmluZyAmbmFtZSwgY29uc3QgQXR0cmli dXRlICZhdHRyaWJ1dGUpOwotKwotKyAgICAgIC8qIQotKyAgICAgICAqIFNldHMgdGhlIFxhIGtl eSBhdHRyaWJ1dGUgdG8gdGhlIHZhbHVlIG9mIFxhIGF0dHJpYnV0ZS4gSWYgYW4gYXR0cmlidXRl Ci0rICAgICAgICogd2l0aCB0aGUgXGEga2V5IGlzIGFscmVhZHkgcHJlc2VudCwgaXQgd2lsbCBi ZSBhZGRlZCB0byB0aGUgbGlzdC4KLSsgICAgICAgKi8KLSsgICAgICB2b2lkIGFkZEF0dHJpYnV0 ZShjb25zdCBTdHJpbmcgJm5hbWUsIGNvbnN0IEF0dHJpYnV0ZSAmYXR0cmlidXRlKTsKLSsKLSsg ICAgcHJpdmF0ZToKLSsKLSsgICAgICBjbGFzcyBUYWdQcml2YXRlOwotKyAgICAgIFRhZ1ByaXZh dGUgKmQ7Ci0rICAgIH07Ci0rICB9Ci0rfQotKyNlbmRpZgotSW5kZXg6IGFtYXJvay9zcmMvbWV0 YWRhdGEvYXNmL2FzZnByb3BlcnRpZXMuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGFtYXJvay9zcmMvbWV0 YWRhdGEvYXNmL2FzZnByb3BlcnRpZXMuaAkocmV2aXNpb24gMCkKLSsrKyBhbWFyb2svc3JjL21l dGFkYXRhL2FzZi9hc2Zwcm9wZXJ0aWVzLmgJKHJldmlzaW9uIDc0MzAwNSkKLUBAIC0wLDAgKzEs NjkgQEAKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKLSsgICAgY29weXJpZ2h0ICAgICAgICAgICAgOiAo QykgMjAwNS0yMDA3IGJ5IEx1a8OhxaEgTGFsaW5za8O9Ci0rICAgIGVtYWlsICAgICAgICAgICAg ICAgIDogbGFsaW5za3lAZ21haWwuY29tCi0rICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKLSsgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0rICogICBpdCAgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAg KgotKyAqICAgMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LiAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0rICogICBUaGlz IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwgYnV0ICAgKgotKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAgICoKLSsgKiAgIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VICAgICAqCi0r ICogICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAg ICAgICAgICAgICAgICAgICAgKgotKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg ICAgICAqCi0rICogICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgKgotKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkg VGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgICoKLSsgKiAg IFVTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqCi0rICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSsjaWZuZGVmIFRBR0xJ Ql9BU0ZQUk9QRVJUSUVTX0gKLSsjZGVmaW5lIFRBR0xJQl9BU0ZQUk9QRVJUSUVTX0gKLSsKLSsj aW5jbHVkZSA8YXVkaW9wcm9wZXJ0aWVzLmg+Ci0rI2luY2x1ZGUgPHRzdHJpbmcuaD4KLSsKLStu YW1lc3BhY2UgVGFnTGliIHsKLSsKLSsgIG5hbWVzcGFjZSBBU0YgewotKwotKyAgICAvLyEgQW4g aW1wbGVtZW50YXRpb24gb2YgQVNGIGF1ZGlvIHByb3BlcnRpZXMKLSsgICAgY2xhc3MgUHJvcGVy dGllcyA6IHB1YmxpYyBBdWRpb1Byb3BlcnRpZXMKLSsgICAgewotKyAgICBwdWJsaWM6Ci0rCi0r ICAgICAgLyohCi0rICAgICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEFTRjo6UHJvcGVydGll cy4KLSsgICAgICAgKi8KLSsgICAgICBQcm9wZXJ0aWVzKCk7Ci0rCi0rICAgICAgLyohCi0rICAg ICAgICogRGVzdHJveXMgdGhpcyBBU0Y6OlByb3BlcnRpZXMgaW5zdGFuY2UuCi0rICAgICAgICov Ci0rICAgICAgdmlydHVhbCB+UHJvcGVydGllcygpOwotKwotKyAgICAgIC8vIFJlaW1wbGVtZW50 YXRpb25zLgotKyAgICAgIHZpcnR1YWwgaW50IGxlbmd0aCgpIGNvbnN0OwotKyAgICAgIHZpcnR1 YWwgaW50IGJpdHJhdGUoKSBjb25zdDsKLSsgICAgICB2aXJ0dWFsIGludCBzYW1wbGVSYXRlKCkg Y29uc3Q7Ci0rICAgICAgdmlydHVhbCBpbnQgY2hhbm5lbHMoKSBjb25zdDsKLSsKLSsjaWZuZGVm IERPX05PVF9ET0NVTUVOVAotKyAgICAgIHZvaWQgc2V0TGVuZ3RoKGludCB2YWx1ZSk7Ci0rICAg ICAgdm9pZCBzZXRCaXRyYXRlKGludCB2YWx1ZSk7Ci0rICAgICAgdm9pZCBzZXRTYW1wbGVSYXRl KGludCB2YWx1ZSk7Ci0rICAgICAgdm9pZCBzZXRDaGFubmVscyhpbnQgdmFsdWUpOwotKyNlbmRp ZgotKwotKyAgICBwcml2YXRlOgotKyAgICAgIGNsYXNzIFByb3BlcnRpZXNQcml2YXRlOwotKyAg ICAgIFByb3BlcnRpZXNQcml2YXRlICpkOwotKyAgICB9OwotKwotKyAgfQotKwotK30KLSsKLSsj ZW5kaWYgCi0KLVByb3BlcnR5IGNoYW5nZXMgb246IGFtYXJvay9zcmMvbWV0YWRhdGEvYXNmL2Fz ZnByb3BlcnRpZXMuaAotX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwotTmFtZTogc3ZuOmVvbC1zdHlsZQotICAgKyBuYXRp dmUKLQotSW5kZXg6IGFtYXJvay9zcmMvbWV0YWRhdGEvYXNmL2FzZmF0dHJpYnV0ZS5jcHAKLT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tLSBhbWFyb2svc3JjL21ldGFkYXRhL2FzZi9hc2ZhdHRyaWJ1dGUuY3BwCShy ZXZpc2lvbiAwKQotKysrIGFtYXJvay9zcmMvbWV0YWRhdGEvYXNmL2FzZmF0dHJpYnV0ZS5jcHAJ KHJldmlzaW9uIDc0MzAwNSkKLUBAIC0wLDAgKzEsMzA0IEBACi0rLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ci0rICAgIGNvcHlyaWdodCAgICAgICAgICAgIDogKEMpIDIwMDUtMjAwNyBieSBMdWvDocWhIExh bGluc2vDvQotKyAgICBlbWFpbCAgICAgICAgICAgICAgICA6IGxhbGluc2t5QGdtYWlsLmNvbQot KyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rICogICBUaGlz IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSAgKgotKyAqICAgaXQgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gICoKLSsgKiAgIDIuMSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gICAgICAgICAgICAgICAgICAgICAqCi0r ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKgotKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICoKLSsgKiAgIFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAg ICAgICAqCi0rICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVSAgICAgKgotKyAqICAgTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICoKLSsgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqCi0rICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljICAgICAgKgotKyAqICAgTGljZW5zZSBhbG9u ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAg ICoKLSsgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBC b3N0b24sIE1BICAwMjExMS0xMzA3ICAqCi0rICogICBVU0EgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotKyAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0rCi0rI2luY2x1ZGUgPHRhZ2xpYi5oPgotKyNpbmNsdWRlICJhc2ZhdHRy aWJ1dGUuaCIKLSsjaW5jbHVkZSAiYXNmZmlsZS5oIgotKwotK3VzaW5nIG5hbWVzcGFjZSBUYWdM aWI7Ci0rCi0rY2xhc3MgQVNGOjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZVByaXZhdGUgOiBwdWJsaWMg UmVmQ291bnRlcgotK3sKLStwdWJsaWM6Ci0rICBBdHRyaWJ1dGVQcml2YXRlKCkKLSsgICAgOiBz dHJlYW0oMCksCi0rICAgICAgbGFuZ3VhZ2UoMCkge30KLSsgIEF0dHJpYnV0ZVR5cGVzIHR5cGU7 Ci0rICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0rICBCeXRlVmVjdG9yIGJ5dGVWZWN0b3JWYWx1ZTsK LSsgIHVuaW9uIHsKLSsgICAgdW5zaWduZWQgaW50IGludFZhbHVlOwotKyAgICB1bnNpZ25lZCBz aG9ydCBzaG9ydFZhbHVlOwotKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbG9uZ0xvbmdWYWx1ZTsK LSsgICAgYm9vbCBib29sVmFsdWU7Ci0rICB9OwotKyAgaW50IHN0cmVhbTsKLSsgIGludCBsYW5n dWFnZTsKLSt9OwotKwotKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0rLy8gcHVibGljIG1lbWJl cnMKLSsvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotKwotK0FTRjo6QXR0cmlidXRlOjpBdHRyaWJ1 dGUoKQotK3sKLSsgIGQgPSBuZXcgQXR0cmlidXRlUHJpdmF0ZTsKLSsgIGQtPnR5cGUgPSBVbmlj b2RlVHlwZTsKLSt9Ci0rCi0rQVNGOjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZShjb25zdCBBU0Y6OkF0 dHJpYnV0ZSAmb3RoZXIpCi0rICA6IGQob3RoZXIuZCkKLSt7Ci0rICBkLT5yZWYoKTsKLSt9Ci0r Ci0rQVNGOjpBdHRyaWJ1dGUgJgotK0FTRjo6QXR0cmlidXRlOjpvcGVyYXRvcj0oY29uc3QgQVNG OjpBdHRyaWJ1dGUgJm90aGVyKQotK3sKLSsgIGlmKGQtPmRlcmVmKCkpCi0rICAgIGRlbGV0ZSBk OwotKyAgZCA9IG90aGVyLmQ7Ci0rICBkLT5yZWYoKTsKLSsgIHJldHVybiAqdGhpczsKLSt9Ci0r Ci0rQVNGOjpBdHRyaWJ1dGU6On5BdHRyaWJ1dGUoKQotK3sKLSsgIGlmKGQtPmRlcmVmKCkpCi0r ICAgIGRlbGV0ZSBkOwotK30KLSsKLStBU0Y6OkF0dHJpYnV0ZTo6QXR0cmlidXRlKGNvbnN0IFN0 cmluZyAmdmFsdWUpCi0rewotKyAgZCA9IG5ldyBBdHRyaWJ1dGVQcml2YXRlOwotKyAgZC0+dHlw ZSA9IFVuaWNvZGVUeXBlOwotKyAgZC0+c3RyaW5nVmFsdWUgPSB2YWx1ZTsKLSt9Ci0rCi0rQVNG OjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZShjb25zdCBCeXRlVmVjdG9yICZ2YWx1ZSkKLSt7Ci0rICBk ID0gbmV3IEF0dHJpYnV0ZVByaXZhdGU7Ci0rICBkLT50eXBlID0gQnl0ZXNUeXBlOwotKyAgZC0+ Ynl0ZVZlY3RvclZhbHVlID0gdmFsdWU7Ci0rfQotKwotK0FTRjo6QXR0cmlidXRlOjpBdHRyaWJ1 dGUodW5zaWduZWQgaW50IHZhbHVlKQotK3sKLSsgIGQgPSBuZXcgQXR0cmlidXRlUHJpdmF0ZTsK LSsgIGQtPnR5cGUgPSBEV29yZFR5cGU7Ci0rICBkLT5pbnRWYWx1ZSA9IHZhbHVlOwotK30KLSsK LStBU0Y6OkF0dHJpYnV0ZTo6QXR0cmlidXRlKHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSkKLSt7 Ci0rICBkID0gbmV3IEF0dHJpYnV0ZVByaXZhdGU7Ci0rICBkLT50eXBlID0gUVdvcmRUeXBlOwot KyAgZC0+bG9uZ0xvbmdWYWx1ZSA9IHZhbHVlOwotK30KLSsKLStBU0Y6OkF0dHJpYnV0ZTo6QXR0 cmlidXRlKHVuc2lnbmVkIHNob3J0IHZhbHVlKQotK3sKLSsgIGQgPSBuZXcgQXR0cmlidXRlUHJp dmF0ZTsKLSsgIGQtPnR5cGUgPSBXb3JkVHlwZTsKLSsgIGQtPnNob3J0VmFsdWUgPSB2YWx1ZTsK LSt9Ci0rCi0rQVNGOjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZShib29sIHZhbHVlKQotK3sKLSsgIGQg PSBuZXcgQXR0cmlidXRlUHJpdmF0ZTsKLSsgIGQtPnR5cGUgPSBCb29sVHlwZTsKLSsgIGQtPmJv b2xWYWx1ZSA9IHZhbHVlOwotK30KLSsKLStBU0Y6OkF0dHJpYnV0ZTo6QXR0cmlidXRlVHlwZXMK LStBU0Y6OkF0dHJpYnV0ZTo6dHlwZSgpIGNvbnN0Ci0rewotKyAgcmV0dXJuIGQtPnR5cGU7Ci0r fQotKwotK1N0cmluZwotK0FTRjo6QXR0cmlidXRlOjp0b1N0cmluZygpIGNvbnN0Ci0rewotKyAg cmV0dXJuIGQtPnN0cmluZ1ZhbHVlOwotK30KLSsKLStCeXRlVmVjdG9yCi0rQVNGOjpBdHRyaWJ1 dGU6OnRvQnl0ZVZlY3RvcigpIGNvbnN0Ci0rewotKyAgcmV0dXJuIGQtPmJ5dGVWZWN0b3JWYWx1 ZTsKLSt9Ci0rCi0rdW5zaWduZWQgc2hvcnQKLStBU0Y6OkF0dHJpYnV0ZTo6dG9Cb29sKCkgY29u c3QKLSt7Ci0rICByZXR1cm4gZC0+c2hvcnRWYWx1ZTsKLSt9Ci0rCi0rdW5zaWduZWQgc2hvcnQK LStBU0Y6OkF0dHJpYnV0ZTo6dG9VU2hvcnQoKSBjb25zdAotK3sKLSsgIHJldHVybiBkLT5zaG9y dFZhbHVlOwotK30KLSsKLSt1bnNpZ25lZCBpbnQKLStBU0Y6OkF0dHJpYnV0ZTo6dG9VSW50KCkg Y29uc3QKLSt7Ci0rICByZXR1cm4gZC0+aW50VmFsdWU7Ci0rfQotKwotK3Vuc2lnbmVkIGxvbmcg bG9uZwotK0FTRjo6QXR0cmlidXRlOjp0b1VMb25nTG9uZygpIGNvbnN0Ci0rewotKyAgcmV0dXJu IGQtPmxvbmdMb25nVmFsdWU7Ci0rfQotKwotK1N0cmluZwotK0FTRjo6QXR0cmlidXRlOjpwYXJz ZShBU0Y6OkZpbGUgJmYsIGludCBraW5kKQotK3sKLSsgIGludCBzaXplLCBuYW1lTGVuZ3RoOwot KyAgU3RyaW5nIG5hbWU7Ci0rCi0rICAvLyBleHRlbmRlZCBjb250ZW50IGRlc2NyaXB0b3IKLSsg IGlmKGtpbmQgPT0gMCkgewotKyAgICBuYW1lTGVuZ3RoID0gZi5yZWFkV09SRCgpOwotKyAgICBu YW1lID0gZi5yZWFkU3RyaW5nKG5hbWVMZW5ndGgpOwotKyAgICBkLT50eXBlID0gQVNGOjpBdHRy aWJ1dGU6OkF0dHJpYnV0ZVR5cGVzKGYucmVhZFdPUkQoKSk7Ci0rICAgIHNpemUgPSBmLnJlYWRX T1JEKCk7Ci0rICB9Ci0rICAvLyBtZXRhZGF0YSAmIG1ldGFkYXRhIGxpYnJhcnkKLSsgIGVsc2Ug ewotKyAgICBpbnQgdGVtcCA9IGYucmVhZFdPUkQoKTsKLSsgICAgLy8gbWV0YWRhdGEgbGlicmFy eQotKyAgICBpZihraW5kID09IDIpIHsKLSsgICAgICBkLT5sYW5ndWFnZSA9IHRlbXA7Ci0rICAg IH0KLSsgICAgZC0+c3RyZWFtID0gZi5yZWFkV09SRCgpOwotKyAgICBuYW1lTGVuZ3RoID0gZi5y ZWFkV09SRCgpOwotKyAgICBkLT50eXBlID0gQVNGOjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZVR5cGVz KGYucmVhZFdPUkQoKSk7Ci0rICAgIHNpemUgPSBmLnJlYWREV09SRCgpOwotKyAgICBuYW1lID0g Zi5yZWFkU3RyaW5nKG5hbWVMZW5ndGgpOwotKyAgfQotKwotKyAgc3dpdGNoKGQtPnR5cGUpIHsK LSsgIGNhc2UgV29yZFR5cGU6Ci0rICAgIGQtPnNob3J0VmFsdWUgPSBmLnJlYWRXT1JEKCk7Ci0r ICAgIGJyZWFrOwotKwotKyAgY2FzZSBCb29sVHlwZToKLSsgICAgaWYoa2luZCA9PSAwKSB7Ci0r ICAgICAgZC0+Ym9vbFZhbHVlID0gZi5yZWFkRFdPUkQoKSA9PSAxOwotKyAgICB9Ci0rICAgIGVs c2UgewotKyAgICAgIGQtPmJvb2xWYWx1ZSA9IGYucmVhZFdPUkQoKSA9PSAxOwotKyAgICB9Ci0r ICAgIGJyZWFrOwotKwotKyAgY2FzZSBEV29yZFR5cGU6Ci0rICAgIGQtPmludFZhbHVlID0gZi5y ZWFkRFdPUkQoKTsKLSsgICAgYnJlYWs7Ci0rCi0rICBjYXNlIFFXb3JkVHlwZToKLSsgICAgZC0+ bG9uZ0xvbmdWYWx1ZSA9IGYucmVhZFFXT1JEKCk7Ci0rICAgIGJyZWFrOwotKwotKyAgY2FzZSBV bmljb2RlVHlwZToKLSsgICAgZC0+c3RyaW5nVmFsdWUgPSBmLnJlYWRTdHJpbmcoc2l6ZSk7Ci0r ICAgIGJyZWFrOwotKwotKyAgY2FzZSBCeXRlc1R5cGU6Ci0rICBjYXNlIEd1aWRUeXBlOgotKyAg ICBkLT5ieXRlVmVjdG9yVmFsdWUgPSBmLnJlYWRCbG9jayhzaXplKTsKLSsgICAgYnJlYWs7Ci0r ICB9Ci0rCi0rICByZXR1cm4gbmFtZTsKLSt9Ci0rCi0rQnl0ZVZlY3RvcgotK0FTRjo6QXR0cmli dXRlOjpyZW5kZXIoY29uc3QgU3RyaW5nICZuYW1lLCBpbnQga2luZCkgY29uc3QKLSt7Ci0rICBC eXRlVmVjdG9yIGRhdGE7Ci0rCi0rICBzd2l0Y2ggKGQtPnR5cGUpIHsKLSsgIGNhc2UgV29yZFR5 cGU6Ci0rICAgIGRhdGEuYXBwZW5kKEJ5dGVWZWN0b3I6OmZyb21TaG9ydChkLT5zaG9ydFZhbHVl LCBmYWxzZSkpOwotKyAgICBicmVhazsKLSsKLSsgIGNhc2UgQm9vbFR5cGU6Ci0rICAgIGlmKGtp bmQgPT0gMCkgewotKyAgICAgIGRhdGEuYXBwZW5kKEJ5dGVWZWN0b3I6OmZyb21VSW50KGQtPmJv b2xWYWx1ZSA/IDEgOiAwLCBmYWxzZSkpOwotKyAgICB9Ci0rICAgIGVsc2UgewotKyAgICAgIGRh dGEuYXBwZW5kKEJ5dGVWZWN0b3I6OmZyb21TaG9ydChkLT5ib29sVmFsdWUgPyAxIDogMCwgZmFs c2UpKTsKLSsgICAgfQotKyAgICBicmVhazsKLSsKLSsgIGNhc2UgRFdvcmRUeXBlOgotKyAgICBk YXRhLmFwcGVuZChCeXRlVmVjdG9yOjpmcm9tVUludChkLT5pbnRWYWx1ZSwgZmFsc2UpKTsKLSsg ICAgYnJlYWs7Ci0rCi0rICBjYXNlIFFXb3JkVHlwZToKLSsgICAgZGF0YS5hcHBlbmQoQnl0ZVZl Y3Rvcjo6ZnJvbUxvbmdMb25nKGQtPmxvbmdMb25nVmFsdWUsIGZhbHNlKSk7Ci0rICAgIGJyZWFr OwotKwotKyAgY2FzZSBVbmljb2RlVHlwZToKLSsgICAgZGF0YS5hcHBlbmQoRmlsZTo6cmVuZGVy U3RyaW5nKGQtPnN0cmluZ1ZhbHVlKSk7Ci0rICAgIGJyZWFrOwotKwotKyAgY2FzZSBCeXRlc1R5 cGU6Ci0rICBjYXNlIEd1aWRUeXBlOgotKyAgICBkYXRhLmFwcGVuZChkLT5ieXRlVmVjdG9yVmFs dWUpOwotKyAgICBicmVhazsKLSsgIH0KLSsKLSsgIGlmKGtpbmQgPT0gMCkgewotKyAgICBkYXRh ID0gRmlsZTo6cmVuZGVyU3RyaW5nKG5hbWUsIHRydWUpICsKLSsgICAgICAgICAgIEJ5dGVWZWN0 b3I6OmZyb21TaG9ydCgoaW50KWQtPnR5cGUsIGZhbHNlKSArCi0rICAgICAgICAgICBCeXRlVmVj dG9yOjpmcm9tU2hvcnQoZGF0YS5zaXplKCksIGZhbHNlKSArCi0rICAgICAgICAgICBkYXRhOwot KyAgfQotKyAgZWxzZSB7Ci0rICAgIEJ5dGVWZWN0b3IgbmFtZURhdGEgPSBGaWxlOjpyZW5kZXJT dHJpbmcobmFtZSk7Ci0rICAgIGRhdGEgPSBCeXRlVmVjdG9yOjpmcm9tU2hvcnQoa2luZCA9PSAy ID8gZC0+bGFuZ3VhZ2UgOiAwLCBmYWxzZSkgKwotKyAgICAgICAgICAgQnl0ZVZlY3Rvcjo6ZnJv bVNob3J0KGQtPnN0cmVhbSwgZmFsc2UpICsKLSsgICAgICAgICAgIEJ5dGVWZWN0b3I6OmZyb21T aG9ydChuYW1lRGF0YS5zaXplKCksIGZhbHNlKSArCi0rICAgICAgICAgICBCeXRlVmVjdG9yOjpm cm9tU2hvcnQoKGludClkLT50eXBlLCBmYWxzZSkgKwotKyAgICAgICAgICAgQnl0ZVZlY3Rvcjo6 ZnJvbVVJbnQoZGF0YS5zaXplKCksIGZhbHNlKSArCi0rICAgICAgICAgICBuYW1lRGF0YSArCi0r ICAgICAgICAgICBkYXRhOwotKyAgfQotKwotKyAgcmV0dXJuIGRhdGE7Ci0rfQotKwotK2ludAot K0FTRjo6QXR0cmlidXRlOjpsYW5ndWFnZSgpIGNvbnN0Ci0rewotKyAgcmV0dXJuIGQtPmxhbmd1 YWdlOwotK30KLSsKLSt2b2lkCi0rQVNGOjpBdHRyaWJ1dGU6OnNldExhbmd1YWdlKGludCB2YWx1 ZSkKLSt7Ci0rICBkLT5sYW5ndWFnZSA9IHZhbHVlOwotK30KLSsKLStpbnQKLStBU0Y6OkF0dHJp YnV0ZTo6c3RyZWFtKCkgY29uc3QKLSt7Ci0rICByZXR1cm4gZC0+c3RyZWFtOwotK30KLSsKLSt2 b2lkCi0rQVNGOjpBdHRyaWJ1dGU6OnNldFN0cmVhbShpbnQgdmFsdWUpCi0rewotKyAgZC0+c3Ry ZWFtID0gdmFsdWU7Ci0rfQotCi1Qcm9wZXJ0eSBjaGFuZ2VzIG9uOiBhbWFyb2svc3JjL21ldGFk YXRhL2FzZi9hc2ZhdHRyaWJ1dGUuY3BwCi1fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCi1OYW1lOiBzdm46ZW9sLXN0eWxl Ci0gICArIG5hdGl2ZQotCi1JbmRleDogYW1hcm9rL3NyYy9tZXRhZGF0YS9tcDQvbXA0ZmlsZS5j cHAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tLSBhbWFyb2svc3JjL21ldGFkYXRhL21wNC9tcDRmaWxlLmNwcAko cmV2aXNpb24gNzA1MjMxKQotKysrIGFtYXJvay9zcmMvbWV0YWRhdGEvbXA0L21wNGZpbGUuY3Bw CSh3b3JraW5nIGNvcHkpCi1AQCAtMTU2LDEwICsxNTYsNyBAQAotICAgICB9Ci0gI2VuZGlmCi0g Ci0tICAgIGlmKCFNUDRDbG9zZShoYW5kbGUpKQotLSAgICB7Ci0tICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgImNsb3NlIGZhaWxlZFxuIik7Ci0tICAgIH0KLSsgICAgTVA0Q2xvc2UoaGFuZGxlKTsK LSAKLSAgICAgbXA0ZmlsZSA9IE1QNFJlYWQobmFtZSgpKTsKLSAgICAgaWYobXA0ZmlsZSA9PSBN UDRfSU5WQUxJRF9GSUxFX0hBTkRMRSkKLUluZGV4OiBhbWFyb2svc3JjL21ldGFkYXRhL3dtYS90 YWdsaWJfd21hZmlsZXR5cGVyZXNvbHZlci5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYW1hcm9rL3NyYy9t ZXRhZGF0YS93bWEvdGFnbGliX3dtYWZpbGV0eXBlcmVzb2x2ZXIuaAkocmV2aXNpb24gNzA1MjMx KQotKysrIGFtYXJvay9zcmMvbWV0YWRhdGEvd21hL3RhZ2xpYl93bWFmaWxldHlwZXJlc29sdmVy LmgJKHdvcmtpbmcgY29weSkKLUBAIC0xLDM5ICswLDAgQEAKLS0vKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ci0tICAgIGNvcHlyaWdodCAgICAgICAgICAgIDogKEMpIDIwMDUgYnkgTWFydGluIEF1bXVlbGxl cgotLSAgICBlbWFpbCAgICAgICAgICAgICAgICA6IGF1bXVlbGxAcmVzZXJ2LmF0Ci0tICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KLS0KLS0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0tICogICBUaGlzIGxpYnJh cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eSAgKgotLSAqICAgaXQgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gICoKLS0gKiAgIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gICAgICAgICAgICAgICAgICAgICAqCi0tICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKgotLSAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICoKLS0gKiAgIFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgICAq Ci0tICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVSAgICAgKgotLSAqICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqCi0tICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljICAgICAgKgotLSAqICAgTGljZW5zZSBhbG9uZyB3aXRo IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICoKLS0g KiAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv c3RvbiwgICAgICAgICAgICAqCi0tICogICBNQSAgMDIxMTAtMTMwMSAgVVNBICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotLSAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0tCi0tLy8gKGMpIDIwMDUgTWFydGluIEF1bXVlbGxlciA8YXVtdWVsbEByZXNlcnYu YXQ+Ci0tLy8gU2VlIENPUFlJTkcgZmlsZSBmb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uCi0tCi0t I2lmbmRlZiBUQUdMSUJfV01BRklMRVRZUEVSRVNPTFZFUl9ICi0tI2RlZmluZSBUQUdMSUJfV01B RklMRVRZUEVSRVNPTFZFUl9ICi0tCi0tI2luY2x1ZGUgPHRhZ2xpYi90ZmlsZS5oPgotLSNpbmNs dWRlIDx0YWdsaWIvZmlsZXJlZi5oPgotLQotLQotLWNsYXNzIFdNQUZpbGVUeXBlUmVzb2x2ZXIg OiBwdWJsaWMgVGFnTGliOjpGaWxlUmVmOjpGaWxlVHlwZVJlc29sdmVyCi0tewotLSAgICBUYWdM aWI6OkZpbGUgKmNyZWF0ZUZpbGUoY29uc3QgY2hhciAqZmlsZU5hbWUsCi0tICAgICAgICAgICAg Ym9vbCByZWFkQXVkaW9Qcm9wZXJ0aWVzLAotLSAgICAgICAgICAgIFRhZ0xpYjo6QXVkaW9Qcm9w ZXJ0aWVzOjpSZWFkU3R5bGUgYXVkaW9Qcm9wZXJ0aWVzU3R5bGUpIGNvbnN0OwotLX07Ci0tCi0t I2VuZGlmCi1JbmRleDogYW1hcm9rL3NyYy9tZXRhZGF0YS93bWEvd21hdGFnLmNwcAotPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0tIGFtYXJvay9zcmMvbWV0YWRhdGEvd21hL3dtYXRhZy5jcHAJKHJldmlzaW9uIDcw NTIzMSkKLSsrKyBhbWFyb2svc3JjL21ldGFkYXRhL3dtYS93bWF0YWcuY3BwCSh3b3JraW5nIGNv cHkpCi1AQCAtMSwyMTAgKzAsMCBAQAotLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS0gICAgY29weXJp Z2h0ICAgICAgICAgICAgOiAoQykgMjAwNSBieSBMdWthcyBMYWxpbnNreQotLSAgICBlbWFpbCAg ICAgICAgICAgICAgICA6IGxhbGluc2t5QGdtYWlsLmNvbQotLSAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0tCi0tLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgotLSAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLS0gKiAgIGl0 ICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uICAqCi0tICogICAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uICAgICAgICAgICAgICAgICAgICAgKgotLSAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoK LS0gKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLCBidXQgICAqCi0tICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICAgKgotLSAqICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUgICAgICoKLS0gKiAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqCi0tICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotLSAq ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYyAgICAgICoKLS0gKiAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAqCi0tICogICBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sICAgICAgICAg ICAgKgotLSAqICAgTUEgIDAyMTEwLTEzMDEgIFVTQSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICoKLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLQotLSNp bmNsdWRlIDx3bWF0YWcuaD4KLS0KLS11c2luZyBuYW1lc3BhY2UgVGFnTGliOwotLQotLWNsYXNz IFdNQTo6VGFnOjpUYWdQcml2YXRlCi0tewotLXB1YmxpYzoKLS0gIFN0cmluZyB0aXRsZTsKLS0g IFN0cmluZyBhcnRpc3Q7Ci0tICBTdHJpbmcgY29weXJpZ2h0OwotLSAgU3RyaW5nIGNvbW1lbnQ7 Ci0tICBTdHJpbmcgcmF0aW5nOwotLSAgQXR0cmlidXRlTWFwIGF0dHJpYnV0ZU1hcDsKLS19Owot LQotLVdNQTo6VGFnOjpUYWcoKQotLTogVGFnTGliOjpUYWcoKQotLXsKLS0gIGQgPSBuZXcgVGFn UHJpdmF0ZTsKLS19Ci0tCi0tV01BOjpUYWc6On5UYWcoKQotLXsKLS0gIGlmKGQpCi0tICAgIGRl bGV0ZSBkOyAgCi0tfQotLQotLVN0cmluZwotLVdNQTo6VGFnOjp0aXRsZSgpIGNvbnN0Ci0tewot LSAgcmV0dXJuIGQtPnRpdGxlOyAgCi0tfQotLQotLVN0cmluZwotLVdNQTo6VGFnOjphcnRpc3Qo KSBjb25zdAotLXsKLS0gIHJldHVybiBkLT5hcnRpc3Q7ICAKLS19Ci0tCi0tU3RyaW5nCi0tV01B OjpUYWc6OmFsYnVtKCkgY29uc3QKLS17Ci0tICBpZihkLT5hdHRyaWJ1dGVNYXAuY29udGFpbnMo IldNL0FsYnVtVGl0bGUiKSkKLS0gICAgcmV0dXJuIGQtPmF0dHJpYnV0ZU1hcFsiV00vQWxidW1U aXRsZSJdLnRvU3RyaW5nKCk7Ci0tICByZXR1cm4gU3RyaW5nOjpudWxsOwotLX0KLS0KLS1TdHJp bmcKLS1XTUE6OlRhZzo6Y29weXJpZ2h0KCkgY29uc3QKLS17Ci0tICByZXR1cm4gZC0+Y29weXJp Z2h0OwotLX0KLS0KLS1TdHJpbmcKLS1XTUE6OlRhZzo6Y29tbWVudCgpIGNvbnN0Ci0tewotLSAg cmV0dXJuIGQtPmNvbW1lbnQ7Ci0tfQotLQotLVN0cmluZwotLVdNQTo6VGFnOjpyYXRpbmcoKSBj b25zdAotLXsKLS0gIHJldHVybiBkLT5yYXRpbmc7Ci0tfQotLQotLXVuc2lnbmVkIGludAotLVdN QTo6VGFnOjp5ZWFyKCkgY29uc3QKLS17Ci0tICBpZihkLT5hdHRyaWJ1dGVNYXAuY29udGFpbnMo IldNL1llYXIiKSkKLS0gICAgcmV0dXJuIGQtPmF0dHJpYnV0ZU1hcFsiV00vWWVhciJdLnRvSW50 KCk7Ci0tICByZXR1cm4gMDsKLS19Ci0tCi0tdW5zaWduZWQgaW50Ci0tV01BOjpUYWc6OnRyYWNr KCkgY29uc3QKLS17Ci0tICBpZihkLT5hdHRyaWJ1dGVNYXAuY29udGFpbnMoIldNL1RyYWNrTnVt YmVyIikpCi0tICAgIHJldHVybiBkLT5hdHRyaWJ1dGVNYXBbIldNL1RyYWNrTnVtYmVyIl0udG9J bnQoKTsKLS0gIGlmKGQtPmF0dHJpYnV0ZU1hcC5jb250YWlucygiV00vVHJhY2siKSkKLS0gICAg cmV0dXJuIGQtPmF0dHJpYnV0ZU1hcFsiV00vVHJhY2siXS50b0ludCgpOwotLSAgcmV0dXJuIDA7 Ci0tfQotLQotLVN0cmluZwotLVdNQTo6VGFnOjpnZW5yZSgpIGNvbnN0Ci0tewotLSAgaWYoZC0+ YXR0cmlidXRlTWFwLmNvbnRhaW5zKCJXTS9HZW5yZSIpKQotLSAgICByZXR1cm4gZC0+YXR0cmli dXRlTWFwWyJXTS9HZW5yZSJdLnRvU3RyaW5nKCk7Ci0tICByZXR1cm4gU3RyaW5nOjpudWxsOwot LX0KLS0KLS12b2lkIAotLVdNQTo6VGFnOjpzZXRUaXRsZShjb25zdCBTdHJpbmcgJnZhbHVlKQot LXsKLS0gIGQtPnRpdGxlID0gdmFsdWU7Ci0tfQotLQotLXZvaWQgCi0tV01BOjpUYWc6OnNldEFy dGlzdChjb25zdCBTdHJpbmcgJnZhbHVlKQotLXsKLS0gIGQtPmFydGlzdCA9IHZhbHVlOyAgCi0t fQotLQotLXZvaWQgCi0tV01BOjpUYWc6OnNldENvcHlyaWdodChjb25zdCBTdHJpbmcgJnZhbHVl KQotLXsKLS0gIGQtPmNvcHlyaWdodCA9IHZhbHVlOyAgCi0tfQotLQotLXZvaWQgCi0tV01BOjpU YWc6OnNldENvbW1lbnQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLS17Ci0tICBkLT5jb21tZW50ID0g dmFsdWU7Ci0tfQotLQotLXZvaWQgCi0tV01BOjpUYWc6OnNldFJhdGluZyhjb25zdCBTdHJpbmcg JnZhbHVlKQotLXsKLS0gIGQtPnJhdGluZyA9IHZhbHVlOwotLX0KLS0KLS12b2lkIAotLVdNQTo6 VGFnOjpzZXRBbGJ1bShjb25zdCBTdHJpbmcgJnZhbHVlKQotLXsKLS0gIHNldEF0dHJpYnV0ZSgi V00vQWxidW1UaXRsZSIsIHZhbHVlKTsKLS19Ci0tCi0tdm9pZCAKLS1XTUE6OlRhZzo6c2V0R2Vu cmUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLS17Ci0tICBzZXRBdHRyaWJ1dGUoIldNL0dlbnJlIiwg dmFsdWUpOwotLX0KLS0KLS12b2lkIAotLVdNQTo6VGFnOjpzZXRZZWFyKHVpbnQgdmFsdWUpCi0t ewotLSAgc2V0QXR0cmlidXRlKCJXTS9ZZWFyIiwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKLS19 Ci0tCi0tdm9pZCAKLS1XTUE6OlRhZzo6c2V0VHJhY2sodWludCB2YWx1ZSkKLS17Ci0tICBzZXRB dHRyaWJ1dGUoIldNL1RyYWNrTnVtYmVyIiwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKLS19Ci0t Ci0tY29uc3QgV01BOjpBdHRyaWJ1dGVNYXAmIFdNQTo6VGFnOjphdHRyaWJ1dGVNYXAoKSBjb25z dAotLXsKLS0gIHJldHVybiBkLT5hdHRyaWJ1dGVNYXA7Ci0tfQotLQotLXZvaWQgV01BOjpUYWc6 OnJlbW92ZUl0ZW0oY29uc3QgQnl0ZVZlY3RvciAma2V5KQotLXsKLS0gIEF0dHJpYnV0ZU1hcDo6 SXRlcmF0b3IgaXQgPSBkLT5hdHRyaWJ1dGVNYXAuZmluZChrZXkpOwotLSAgaWYoaXQgIT0gZC0+ YXR0cmlidXRlTWFwLmVuZCgpKQotLSAgICBkLT5hdHRyaWJ1dGVNYXAuZXJhc2UoaXQpOwotLX0g Ci0tCi0tdm9pZCBXTUE6OlRhZzo6c2V0QXR0cmlidXRlKGNvbnN0IEJ5dGVWZWN0b3IgJmtleSwg Y29uc3QgU3RyaW5nICZ2YWx1ZSkKLS17Ci0tICBzZXRBdHRyaWJ1dGUoa2V5LCBXTUE6OkF0dHJp YnV0ZShrZXksIHZhbHVlKSk7Ci0tfQotLQotLXZvaWQgV01BOjpUYWc6OnNldEF0dHJpYnV0ZShj b25zdCBCeXRlVmVjdG9yICZrZXksIGNvbnN0IEF0dHJpYnV0ZSAmYXR0cmlidXRlKQotLXsKLS0g IHJlbW92ZUl0ZW0oa2V5KTsKLS0gIGQtPmF0dHJpYnV0ZU1hcC5pbnNlcnQoa2V5LCBhdHRyaWJ1 dGUpOwotLX0KLS0KLS1ib29sIFdNQTo6VGFnOjppc0VtcHR5KCkgY29uc3QgewotLSAgcmV0dXJu IFRhZ0xpYjo6VGFnOjppc0VtcHR5KCkgJiYKLS0gICAgICAgICBjb3B5cmlnaHQoKS5pc0VtcHR5 KCkgJiYKLS0gICAgICAgICByYXRpbmcoKS5pc0VtcHR5KCkgJiYKLS0gICAgICAgICBkLT5hdHRy aWJ1dGVNYXAuaXNFbXB0eSgpOwotLX0KLS0KLS12b2lkIFdNQTo6VGFnOjpkdXBsaWNhdGUoY29u c3QgVGFnICpzb3VyY2UsIFRhZyAqdGFyZ2V0LCBib29sIG92ZXJ3cml0ZSkgewotLSAgVGFnTGli OjpUYWc6OmR1cGxpY2F0ZShzb3VyY2UsIHRhcmdldCwgb3ZlcndyaXRlKTsKLS0gIGlmKG92ZXJ3 cml0ZSkgewotLSAgICB0YXJnZXQtPnNldENvcHlyaWdodChzb3VyY2UtPmNvcHlyaWdodCgpKTsK LS0gICAgdGFyZ2V0LT5zZXRSYXRpbmcoc291cmNlLT5yYXRpbmcoKSk7Ci0tICB9Ci0tICBlbHNl IHsKLS0gICAgaWYgKHRhcmdldC0+Y29weXJpZ2h0KCkuaXNFbXB0eSgpKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tICAgICAgdGFyZ2V0LT5zZXRDb3B5cmln aHQoc291cmNlLT5jb3B5cmlnaHQoKSk7Ci0tICAgIGlmICh0YXJnZXQtPnJhdGluZygpLmlzRW1w dHkoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLSAgICAg IHRhcmdldC0+c2V0UmF0aW5nKHNvdXJjZS0+cmF0aW5nKCkpOwotLSAgfQotLX0KLS0KLUluZGV4 OiBhbWFyb2svc3JjL21ldGFkYXRhL3dtYS93bWFwcm9wZXJ0aWVzLmNwcAotPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0tIGFtYXJvay9zcmMvbWV0YWRhdGEvd21hL3dtYXByb3BlcnRpZXMuY3BwCShyZXZpc2lvbiA3 MDUyMzEpCi0rKysgYW1hcm9rL3NyYy9tZXRhZGF0YS93bWEvd21hcHJvcGVydGllcy5jcHAJKHdv cmtpbmcgY29weSkKLUBAIC0xLDgzICswLDAgQEAKLS0vKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0tICAg IGNvcHlyaWdodCAgICAgICAgICAgIDogKEMpIDIwMDUgYnkgTHVrYXMgTGFsaW5za3kKLS0gICAg ZW1haWwgICAgICAgICAgICAgICAgOiBsYWxpbnNreUBnbWFpbC5jb20KLS0gKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwotLQotLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS0gKiAgIFRoaXMgbGlicmFyeSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0t ICogICBpdCAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAgKgotLSAqICAgMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqCi0tICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgKgotLSAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAgICoKLS0gKiAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VICAgICAqCi0tICogICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgKgotLSAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICoKLS0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgICAgICAqCi0tICogICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgKgotLSAqICAgRm91 bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCAg ICAgICAgICAgICoKLS0gKiAgIE1BICAwMjExMC0xMzAxICBVU0EgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0tICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K LS0KLS0jaW5jbHVkZSA8dHN0cmluZy5oPgotLSNpbmNsdWRlIDx3bWFwcm9wZXJ0aWVzLmg+Ci0t ICAKLS11c2luZyBuYW1lc3BhY2UgVGFnTGliOwotLQotLWNsYXNzIFdNQTo6UHJvcGVydGllczo6 UHJvcGVydGllc1ByaXZhdGUKLS17Ci0tcHVibGljOgotLSAgUHJvcGVydGllc1ByaXZhdGUoKTog bGVuZ3RoKDApLCBiaXRyYXRlKDApLCBzYW1wbGVSYXRlKDApLCBjaGFubmVscygwKSB7fQotLSAg aW50IGxlbmd0aDsKLS0gIGludCBiaXRyYXRlOwotLSAgaW50IHNhbXBsZVJhdGU7Ci0tICBpbnQg Y2hhbm5lbHM7Ci0tfTsKLS0KLS0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLS8vIHB1YmxpYyBt ZW1iZXJzCi0tLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS0KLS1XTUE6OlByb3BlcnRpZXM6OlBy b3BlcnRpZXMoKSA6IEF1ZGlvUHJvcGVydGllcyhBdWRpb1Byb3BlcnRpZXM6OkF2ZXJhZ2UpCi0t ewotLSAgZCA9IG5ldyBQcm9wZXJ0aWVzUHJpdmF0ZTsKLS19Ci0tCi0tV01BOjpQcm9wZXJ0aWVz Ojp+UHJvcGVydGllcygpCi0tewotLSAgaWYoZCkKLS0gICAgZGVsZXRlIGQ7ICAKLS19Ci0tCi0t aW50IFdNQTo6UHJvcGVydGllczo6bGVuZ3RoKCkgY29uc3QKLS17Ci0tICByZXR1cm4gZC0+bGVu Z3RoOwotLX0KLS0KLS1pbnQgV01BOjpQcm9wZXJ0aWVzOjpiaXRyYXRlKCkgY29uc3QKLS17Ci0t ICByZXR1cm4gZC0+Yml0cmF0ZTsKLS19Ci0tCi0taW50IFdNQTo6UHJvcGVydGllczo6c2FtcGxl UmF0ZSgpIGNvbnN0Ci0tewotLSAgcmV0dXJuIGQtPnNhbXBsZVJhdGU7Ci0tfQotLQotLWludCBX TUE6OlByb3BlcnRpZXM6OmNoYW5uZWxzKCkgY29uc3QKLS17Ci0tICByZXR1cm4gZC0+Y2hhbm5l bHM7Ci0tfSAKLS0KLS0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLS8vIHByaXZhdGUgbWVtYmVy cwotLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0tCi0tdm9pZCBXTUE6OlByb3BlcnRpZXM6OnNl dChpbnQgbGVuZ3RoLCBpbnQgYml0cmF0ZSwgaW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVscykK LS17Ci0tICBkLT5sZW5ndGggPSBsZW5ndGg7Ci0tICBkLT5iaXRyYXRlID0gYml0cmF0ZTsKLS0g IGQtPnNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOwotLSAgZC0+Y2hhbm5lbHMgPSBjaGFubmVsczsK LS19Ci0tCi1JbmRleDogYW1hcm9rL3NyYy9tZXRhZGF0YS93bWEvd21hZmlsZS5jcHAKLT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tLSBhbWFyb2svc3JjL21ldGFkYXRhL3dtYS93bWFmaWxlLmNwcAkocmV2aXNpb24g NzA1MjMxKQotKysrIGFtYXJvay9zcmMvbWV0YWRhdGEvd21hL3dtYWZpbGUuY3BwCSh3b3JraW5n IGNvcHkpCi1AQCAtMSwzODggKzAsMCBAQAotLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS0gICAgY29w eXJpZ2h0ICAgICAgICAgICAgOiAoQykgMjAwNSBieSBMdWthcyBMYWxpbnNreQotLSAgICBlbWFp bCAgICAgICAgICAgICAgICA6IGxhbGluc2t5QGdtYWlsLmNvbQotLSAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCi0tCi0tLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLSAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLS0gKiAg IGl0ICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uICAqCi0tICogICAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uICAgICAgICAgICAgICAgICAgICAgKgotLSAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICoKLS0gKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLCBidXQgICAqCi0tICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICAgKgotLSAqICAgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUgICAgICoKLS0gKiAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqCi0tICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgot LSAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYyAgICAgICoKLS0gKiAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAqCi0tICogICBGb3VuZGF0 aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sICAgICAg ICAgICAgKgotLSAqICAgTUEgIDAyMTEwLTEzMDEgIFVTQSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLS0gKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLQot LSNpbmNsdWRlIDx0c3RyaW5nLmg+Ci0tI2luY2x1ZGUgPHdtYWZpbGUuaD4KLS0jaW5jbHVkZSA8 d21hdGFnLmg+Ci0tI2luY2x1ZGUgPHdtYXByb3BlcnRpZXMuaD4KLS0KLS0jaW5jbHVkZSA8c3Ry aW5nLmg+Ci0tCi0tdXNpbmcgbmFtZXNwYWNlIFRhZ0xpYjsKLS0KLS1jbGFzcyBXTUE6OkZpbGU6 OkZpbGVQcml2YXRlCi0tewotLXB1YmxpYzoKLS0gIEZpbGVQcml2YXRlKCk6IHNpemUoMCksIG9m ZnNldDEoMCksIG9mZnNldDIoMCksIHNpemUxKDApLCBzaXplMigwKSwKLS0gICAgbnVtT2JqZWN0 cygwKSwgdGFnKDApLCBwcm9wZXJ0aWVzKDApIHt9Ci0tICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6 ZTsKLS0gIHVuc2lnbmVkIGxvbmcgb2Zmc2V0MSwgb2Zmc2V0Miwgc2l6ZTEsIHNpemUyLCBudW1P YmplY3RzOwotLSAgV01BOjpUYWcgKnRhZzsgCi0tICBXTUE6OlByb3BlcnRpZXMgKnByb3BlcnRp ZXM7IAotLX07Ci0tCi0tLy8gR1VJRHMKLS0KLS1zdHJ1Y3QgV01BOjpHVUlEIAotLXsKLS0gIFdN QTo6RFdPUkQgdjE7Ci0tICBXTUE6OldPUkQgdjI7Ci0tICBXTUE6OldPUkQgdjM7Ci0tICBXTUE6 OkJZVEUgdjRbOF07Ci0tICBib29sIG9wZXJhdG9yPT0oY29uc3QgR1VJRCAmZykgY29uc3QgeyBy ZXR1cm4gbWVtY21wKHRoaXMsICZnLCBzaXplb2YoV01BOjpHVUlEKSkgPT0gMDsgfQotLSAgYm9v bCBvcGVyYXRvciE9KGNvbnN0IEdVSUQgJmcpIGNvbnN0IHsgcmV0dXJuIG1lbWNtcCh0aGlzLCAm Zywgc2l6ZW9mKFdNQTo6R1VJRCkpICE9IDA7IH0KLS0gIHN0YXRpYyBHVUlEIGhlYWRlcjsKLS0g IHN0YXRpYyBHVUlEIGZpbGVQcm9wZXJ0aWVzOwotLSAgc3RhdGljIEdVSUQgc3RyZWFtUHJvcGVy dGllczsKLS0gIHN0YXRpYyBHVUlEIGNvbnRlbnREZXNjcmlwdGlvbjsKLS0gIHN0YXRpYyBHVUlE IGV4dGVuZGVkQ29udGVudERlc2NyaXB0aW9uOwotLSAgc3RhdGljIEdVSUQgYXVkaW9NZWRpYTsK LS19OyAKLS0KLS1XTUE6OkdVSUQgV01BOjpHVUlEOjpoZWFkZXIgPSB7Ci0tICAweDc1QjIyNjMw LCAweDY2OEUsIDB4MTFDRiwgeyAweEE2LCAweEQ5LCAweDAwLCAweEFBLCAweDAwLCAweDYyLCAw eENFLCAweDZDIH0KLS19OyAKLS0KLS1XTUE6OkdVSUQgV01BOjpHVUlEOjpmaWxlUHJvcGVydGll cyA9IHsKLS0gIDB4OENBQkRDQTEsIDB4QTk0NywgMHgxMUNGLCB7IDB4OEUsIDB4RTQsIDB4MDAs IDB4QzAsIDB4MEMsIDB4MjAsIDB4NTMsIDB4NjUgfSwKLS19OyAKLS0KLS1XTUE6OkdVSUQgV01B OjpHVUlEOjpzdHJlYW1Qcm9wZXJ0aWVzID0gewotLSAgMHhCN0RDMDc5MSwgMHhBOUI3LCAweDEx Q0YsIHsgMHg4RSwgMHhFNiwgMHgwMCwgMHhDMCwgMHgwQywgMHgyMCwgMHg1MywgMHg2NSB9LAot LX07Ci0tCi0tV01BOjpHVUlEIFdNQTo6R1VJRDo6Y29udGVudERlc2NyaXB0aW9uID0gewotLSAg MHg3NWIyMjYzMywgMHg2NjhlLCAweDExY2YsIHsgMHhhNiwgMHhkOSwgMHgwMCwgMHhhYSwgMHgw MCwgMHg2MiwgMHhjZSwgMHg2YyB9LAotLX07IAotLQotLVdNQTo6R1VJRCBXTUE6OkdVSUQ6OmV4 dGVuZGVkQ29udGVudERlc2NyaXB0aW9uID0gewotLSAgMHhEMkQwQTQ0MCwgMHhFMzA3LCAweDEx RDIsIHsgMHg5NywgMHhGMCwgMHgwMCwgMHhBMCwgMHhDOSwgMHg1RSwgMHhBOCwgMHg1MCB9LAot LX07IAotLQotLVdNQTo6R1VJRCBXTUE6OkdVSUQ6OmF1ZGlvTWVkaWEgPSB7Ci0tICAweEY4Njk5 RTQwLCAweDVCNEQsIDB4MTFDRiwgeyAweEE4LCAweEZELCAweDAwLCAweDgwLCAweDVGLCAweDVD LCAweDQ0LCAweDJCIH0sCi0tfTsgCi0tCi0tLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS0vLyBw dWJsaWMgbWVtYmVycwotLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0tCi0tV01BOjpGaWxlOjpG aWxlKGNvbnN0IGNoYXIgKmZpbGUsIGJvb2wgcmVhZFByb3BlcnRpZXMsIFByb3BlcnRpZXM6OlJl YWRTdHlsZSBwcm9wZXJ0aWVzU3R5bGUpIAotLSAgOiBUYWdMaWI6OkZpbGUoZmlsZSkKLS17Ci0t ICBkID0gbmV3IEZpbGVQcml2YXRlOwotLSAgcmVhZChyZWFkUHJvcGVydGllcywgcHJvcGVydGll c1N0eWxlKTsKLS19Ci0tCi0tV01BOjpGaWxlOjp+RmlsZSgpCi0tewotLSAgaWYoZCkgewotLSAg ICBpZiAoZC0+dGFnKSAKLS0gICAgICBkZWxldGUgZC0+dGFnOwotLSAgICBpZiAoZC0+cHJvcGVy dGllcykgCi0tICAgICAgZGVsZXRlIGQtPnByb3BlcnRpZXM7Ci0tICAgIGRlbGV0ZSBkOyAgIAot LSAgfQotLX0KLS0KLS1UYWdMaWI6OlRhZyAqV01BOjpGaWxlOjp0YWcoKSBjb25zdAotLXsKLS0g IHJldHVybiBkLT50YWc7Ci0tfSAKLS0KLS1XTUE6OlRhZyAqV01BOjpGaWxlOjpXTUFUYWcoKSBj b25zdAotLXsKLS0gIHJldHVybiBkLT50YWc7Ci0tfSAKLS0KLS1XTUE6OlByb3BlcnRpZXMgKldN QTo6RmlsZTo6YXVkaW9Qcm9wZXJ0aWVzKCkgY29uc3QKLS17Ci0tICByZXR1cm4gZC0+cHJvcGVy dGllczsKLS19IAotLQotLXZvaWQgV01BOjpGaWxlOjpyZWFkKGJvb2wgcmVhZFByb3BlcnRpZXMs IFByb3BlcnRpZXM6OlJlYWRTdHlsZSAvKiBwcm9wZXJ0aWVzU3R5bGUgKi8pCi0tewotLSAgV01B OjpHVUlEIGd1aWQ7Ci0tCi0tICByZWFkR1VJRChndWlkKTsKLS0gIGlmKGd1aWQgIT0gR1VJRDo6 aGVhZGVyKSB7Ci0tICAgIHJldHVybjsKLS0gIH0KLS0KLS0gIGludCBsZW5ndGggPSAwOwotLSAg aW50IGJpdHJhdGUgPSAwOwotLSAgaW50IHNhbXBsZVJhdGUgPSAwOwotLSAgaW50IGNoYW5uZWxz ID0gMDsKLS0gIAotLSAgZC0+dGFnID0gbmV3IFdNQTo6VGFnKCk7Ci0tICBpZighZC0+dGFnKQot LSAgICByZXR1cm47Ci0tICAKLS0gIGQtPnNpemUgPSByZWFkUVdPUkQoKTsKLS0gIGQtPm51bU9i amVjdHMgPSByZWFkRFdPUkQoKTsgCi0tICBzZWVrKDIsIEN1cnJlbnQpOwotLSAgICAKLS0gIGZv cihpbnQgaSA9IDA7IGkgPCAoaW50KWQtPm51bU9iamVjdHM7IGkrKykgewotLQotLSAgICByZWFk R1VJRChndWlkKTsKLS0gICAgbG9uZyBvYmplY3RTaXplID0gKGxvbmcpcmVhZFFXT1JEKCk7Ci0t ICAgICAgCi0tICAgIGlmKHJlYWRQcm9wZXJ0aWVzICYmIGd1aWQgPT0gR1VJRDo6ZmlsZVByb3Bl cnRpZXMpIHsKLS0KLS0gICAgICBzZWVrKDE2KzgrOCs4LCBDdXJyZW50KTsKLS0gICAgICBsZW5n dGggPSAoaW50KShyZWFkUVdPUkQoKSAvIDEwMDAwMDAwTCk7Ci0tICAgICAgc2Vlayg4KzgrNCs0 KzQrNCwgQ3VycmVudCk7Ci0tICAgICAgCi0tICAgIH0KLS0KLS0gICAgZWxzZSBpZihyZWFkUHJv cGVydGllcyAmJiBndWlkID09IEdVSUQ6OnN0cmVhbVByb3BlcnRpZXMpIHsKLS0gICAgICAKLS0g ICAgICBsb25nIHBvcyA9IHRlbGwoKTsKLS0gICAgICAgIAotLSAgICAgIHJlYWRHVUlEKGd1aWQp OwotLSAgICAgIGlmKGd1aWQgIT0gR1VJRDo6YXVkaW9NZWRpYSkgewotLSAgICAgICAgcmV0dXJu OyAKLS0gICAgICB9Ci0tICAgICAgICAKLS0gICAgICBzZWVrKDE2KzgrNCs0KzIrNCsyLCBDdXJy ZW50KTsKLS0gICAgICBjaGFubmVscyA9IHJlYWRXT1JEKCk7Ci0tICAgICAgc2FtcGxlUmF0ZSA9 IHJlYWREV09SRCgpOwotLSAgICAgIGJpdHJhdGUgPSByZWFkRFdPUkQoKSAqIDggLyAxMDAwOwot LSAgICAgICAgCi0tICAgICAgc2Vlayhwb3MgKyAobG9uZylvYmplY3RTaXplIC0gMjQpOwotLSAg ICB9Ci0tICAgICAgCi0tICAgIGVsc2UgaWYoZ3VpZCA9PSBHVUlEOjpleHRlbmRlZENvbnRlbnRE ZXNjcmlwdGlvbikgewotLQotLSAgICAgIGQtPm9mZnNldDIgPSB0ZWxsKCkgLSAxNiAtIDg7Ci0t ICAgICAgZC0+c2l6ZTIgPSAobG9uZylvYmplY3RTaXplOwotLQotLSAgICAgIGludCBudW1EZXNj cmlwdG9ycyA9IHJlYWRXT1JEKCk7Ci0tICAgICAgICAKLS0gICAgICBmb3IoaW50IGogPSAwOyBq IDwgbnVtRGVzY3JpcHRvcnM7IGorKykgewotLSAgICAgICAgV01BOjpBdHRyaWJ1dGUgYXR0cigq dGhpcyk7Ci0tICAgICAgICBkLT50YWctPnNldEF0dHJpYnV0ZShhdHRyLm5hbWUoKS50b0NTdHJp bmcoZmFsc2UpLCBhdHRyKTsKLS0gICAgICB9Ci0tICAgICAgCi0tICAgIH0KLS0gICAgICAKLS0g ICAgZWxzZSBpZihndWlkID09IEdVSUQ6OmNvbnRlbnREZXNjcmlwdGlvbikgewotLQotLSAgICAg IGQtPm9mZnNldDEgPSB0ZWxsKCkgLSAxNiAtIDg7Ci0tICAgICAgZC0+c2l6ZTEgPSAobG9uZylv YmplY3RTaXplOwotLQotLSAgICAgIGludCB0aXRsZUxlbmd0aCA9IHJlYWRXT1JEKCk7Ci0tICAg ICAgaW50IGFydGlzdExlbmd0aCA9IHJlYWRXT1JEKCk7Ci0tICAgICAgaW50IGNvcHlyaWdodExl bmd0aCA9IHJlYWRXT1JEKCk7Ci0tICAgICAgaW50IGNvbW1lbnRMZW5ndGggPSByZWFkV09SRCgp OwotLSAgICAgIGludCByYXRpbmdMZW5ndGggPSByZWFkV09SRCgpOwotLQotLSAgICAgIFN0cmlu ZyB2YWx1ZTsKLS0gICAgICAKLS0gICAgICByZWFkU3RyaW5nKHRpdGxlTGVuZ3RoLCB2YWx1ZSk7 Ci0tICAgICAgZC0+dGFnLT5zZXRUaXRsZSh2YWx1ZSk7Ci0tICAgICAgCi0tICAgICAgcmVhZFN0 cmluZyhhcnRpc3RMZW5ndGgsIHZhbHVlKTsKLS0gICAgICBkLT50YWctPnNldEFydGlzdCh2YWx1 ZSk7Ci0tICAgICAgCi0tICAgICAgcmVhZFN0cmluZyhjb3B5cmlnaHRMZW5ndGgsIHZhbHVlKTsK LS0gICAgICBkLT50YWctPnNldENvcHlyaWdodCh2YWx1ZSk7Ci0tICAgICAgCi0tICAgICAgcmVh ZFN0cmluZyhjb21tZW50TGVuZ3RoLCB2YWx1ZSk7Ci0tICAgICAgZC0+dGFnLT5zZXRDb21tZW50 KHZhbHVlKTsKLS0gICAgICAKLS0gICAgICByZWFkU3RyaW5nKHJhdGluZ0xlbmd0aCwgdmFsdWUp OwotLSAgICAgIGQtPnRhZy0+c2V0UmF0aW5nKHZhbHVlKTsKLS0gICAgfQotLSAgICAgIAotLSAg ICBlbHNlIHsKLS0gICAgICBzZWVrKChsb25nKW9iamVjdFNpemUgLSAyNCwgQ3VycmVudCk7Ci0t ICAgIH0KLS0gICAgCi0tICB9Ci0tICAKLS0gIGlmKHJlYWRQcm9wZXJ0aWVzKSB7Ci0tICAgIGQt PnByb3BlcnRpZXMgPSBuZXcgV01BOjpQcm9wZXJ0aWVzKCk7Ci0tICAgIGlmKGQtPnByb3BlcnRp ZXMpIAotLSAgICAgIGQtPnByb3BlcnRpZXMtPnNldChsZW5ndGgsIGJpdHJhdGUsIHNhbXBsZVJh dGUsIGNoYW5uZWxzKTsKLS0gIH0KLS0gIAotLX0KLS0KLS1ib29sIFdNQTo6RmlsZTo6c2F2ZSgp Ci0tewotLSAgaWYocmVhZE9ubHkoKSkgewotLSAgICByZXR1cm4gZmFsc2U7Ci0tICB9Ci0tCi0t ICBpZihkLT5vZmZzZXQxID09IDApIHsKLS0gICAgZC0+b2Zmc2V0MSA9IDE2ICsgOCArIDQgKyAy OwotLSAgICBkLT5udW1PYmplY3RzKys7Ci0tICB9Ci0tCi0tICBpZihkLT5vZmZzZXQyID09IDAp IHsKLS0gICAgZC0+b2Zmc2V0MiA9IDE2ICsgOCArIDQgKyAyOwotLSAgICBkLT5udW1PYmplY3Rz Kys7Ci0tICB9Ci0tCi0tICBCeXRlVmVjdG9yIGNodW5rMSA9IHJlbmRlckNvbnRlbnREZXNjcmlw dGlvbigpOwotLSAgQnl0ZVZlY3RvciBjaHVuazIgPSByZW5kZXJFeHRlbmRlZENvbnRlbnREZXNj cmlwdGlvbigpOwotLQotLSAgaWYoZC0+b2Zmc2V0MSA+IGQtPm9mZnNldDIpIHsKLS0gICAgaW5z ZXJ0KGNodW5rMSwgZC0+b2Zmc2V0MSwgZC0+c2l6ZTEpOwotLSAgICBpbnNlcnQoY2h1bmsyLCBk LT5vZmZzZXQyLCBkLT5zaXplMik7Ci0tICB9Ci0tICBlbHNlIHsKLS0gICAgaW5zZXJ0KGNodW5r MiwgZC0+b2Zmc2V0MiwgZC0+c2l6ZTIpOwotLSAgICBpbnNlcnQoY2h1bmsxLCBkLT5vZmZzZXQx LCBkLT5zaXplMSk7Ci0tICB9Ci0tCi0tICBpbnNlcnQoQnl0ZVZlY3Rvcjo6ZnJvbUxvbmdMb25n KGQtPnNpemUgKyAKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoY2h1 bmsxLnNpemUoKSAtIGQtPnNpemUxKSArIAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoaW50KShjaHVuazIuc2l6ZSgpIC0gZC0+c2l6ZTIpLCBmYWxzZSkgKwotLSAgICAgICAg IEJ5dGVWZWN0b3I6OmZyb21VSW50KGQtPm51bU9iamVjdHMsIGZhbHNlKSwgMTYsIDggKyA0KTsK LS0KLS0gIHJldHVybiB0cnVlOwotLX0KLS0KLS0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLS8v IHByb3RlY3RlZCBtZW1iZXJzCi0tLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS0KLS1pbnQgV01B OjpGaWxlOjpyZWFkQllURSgpCi0tewotLSAgQnl0ZVZlY3RvciB2ID0gcmVhZEJsb2NrKDEpOwot LSAgcmV0dXJuIHZbMF07Ci0tfQotLQotLWludCBXTUE6OkZpbGU6OnJlYWRXT1JEKCkKLS17Ci0t ICBCeXRlVmVjdG9yIHYgPSByZWFkQmxvY2soMik7Ci0tICByZXR1cm4gdi50b1Nob3J0KGZhbHNl KTsKLS19Ci0tCi0tdW5zaWduZWQgaW50IFdNQTo6RmlsZTo6cmVhZERXT1JEKCkKLS17Ci0tICBC eXRlVmVjdG9yIHYgPSByZWFkQmxvY2soNCk7Ci0tICByZXR1cm4gdi50b1VJbnQoZmFsc2UpOwot LX0KLS0KLS1sb25nIGxvbmcgV01BOjpGaWxlOjpyZWFkUVdPUkQoKQotLXsKLS0gIEJ5dGVWZWN0 b3IgdiA9IHJlYWRCbG9jayg4KTsKLS0gIHJldHVybiB2LnRvTG9uZ0xvbmcoZmFsc2UpOwotLX0K LS0KLS12b2lkIFdNQTo6RmlsZTo6cmVhZEdVSUQoR1VJRCAmZykKLS17Ci0tICBnLnYxID0gcmVh ZERXT1JEKCk7Ci0tICBnLnYyID0gcmVhZFdPUkQoKTsKLS0gIGcudjMgPSByZWFkV09SRCgpOwot LSAgZm9yKGludCBpID0gMDsgaSA8IDg7IGkrKykKLS0gICAgZy52NFtpXSA9IHJlYWRCWVRFKCk7 IAotLX0KLS0KLS12b2lkIFdNQTo6RmlsZTo6cmVhZFN0cmluZyhpbnQgbGVuLCBTdHJpbmcgJnMp Ci0tewotLSAgQnl0ZVZlY3RvciB2ID0gcmVhZEJsb2NrKGxlbik7Ci0tICBpZihsZW4gPCAyIHx8 IHZbbGVuLTFdICE9IDAgfHwgdltsZW4tMl0gIT0gMCkKLS0gICAgdi5hcHBlbmQoQnl0ZVZlY3Rv cjo6ZnJvbVNob3J0KDApKTsKLS0gIHMgPSBTdHJpbmcodiwgU3RyaW5nOjpVVEYxNkxFKTsKLS19 Ci0tCi0tQnl0ZVZlY3RvciBXTUE6OkZpbGU6OnJlbmRlckNvbnRlbnREZXNjcmlwdGlvbigpCi0t ewotLSAgU3RyaW5nIHM7ICAgIAotLSAgICAKLS0gIHMgPSBkLT50YWctPnRpdGxlKCk7ICAKLS0g IEJ5dGVWZWN0b3IgdjEgPSBzLmRhdGEoU3RyaW5nOjpVVEYxNkxFKTsKLS0gIGlmKHMuc2l6ZSgp KSB7Ci0tICAgIHYxLmFwcGVuZCgoY2hhcikwKTsKLS0gICAgdjEuYXBwZW5kKChjaGFyKTApOwot LSAgfQotLSAgCi0tICBzID0gZC0+dGFnLT5hcnRpc3QoKTsgIAotLSAgQnl0ZVZlY3RvciB2MiA9 IHMuZGF0YShTdHJpbmc6OlVURjE2TEUpOwotLSAgaWYocy5zaXplKCkpIHsKLS0gICAgdjIuYXBw ZW5kKChjaGFyKTApOwotLSAgICB2Mi5hcHBlbmQoKGNoYXIpMCk7Ci0tICB9Ci0tICAKLS0gIHMg PSBkLT50YWctPmNvcHlyaWdodCgpOyAgCi0tICBCeXRlVmVjdG9yIHYzID0gcy5kYXRhKFN0cmlu Zzo6VVRGMTZMRSk7Ci0tICBpZihzLnNpemUoKSkgewotLSAgICB2My5hcHBlbmQoKGNoYXIpMCk7 Ci0tICAgIHYzLmFwcGVuZCgoY2hhcikwKTsKLS0gIH0gCi0tICAKLS0gIHMgPSBkLT50YWctPmNv bW1lbnQoKTsgIAotLSAgQnl0ZVZlY3RvciB2NCA9IHMuZGF0YShTdHJpbmc6OlVURjE2TEUpOwot LSAgaWYocy5zaXplKCkpIHsKLS0gICAgdjQuYXBwZW5kKChjaGFyKTApOwotLSAgICB2NC5hcHBl bmQoKGNoYXIpMCk7Ci0tICB9Ci0tICAKLS0gIHMgPSBkLT50YWctPnJhdGluZygpOyAgCi0tICBC eXRlVmVjdG9yIHY1ID0gcy5kYXRhKFN0cmluZzo6VVRGMTZMRSk7Ci0tICBpZihzLnNpemUoKSkg ewotLSAgICB2NS5hcHBlbmQoKGNoYXIpMCk7Ci0tICAgIHY1LmFwcGVuZCgoY2hhcikwKTsKLS0g IH0KLS0KLS0gIEJ5dGVWZWN0b3IgZGF0YTsKLS0KLS0gIGRhdGEuYXBwZW5kKEJ5dGVWZWN0b3I6 OmZyb21TaG9ydCh2MS5zaXplKCksIGZhbHNlKSk7Ci0tICBkYXRhLmFwcGVuZChCeXRlVmVjdG9y Ojpmcm9tU2hvcnQodjIuc2l6ZSgpLCBmYWxzZSkpOwotLSAgZGF0YS5hcHBlbmQoQnl0ZVZlY3Rv cjo6ZnJvbVNob3J0KHYzLnNpemUoKSwgZmFsc2UpKTsKLS0gIGRhdGEuYXBwZW5kKEJ5dGVWZWN0 b3I6OmZyb21TaG9ydCh2NC5zaXplKCksIGZhbHNlKSk7Ci0tICBkYXRhLmFwcGVuZChCeXRlVmVj dG9yOjpmcm9tU2hvcnQodjUuc2l6ZSgpLCBmYWxzZSkpOwotLQotLSAgZGF0YS5hcHBlbmQodjEp OwotLSAgZGF0YS5hcHBlbmQodjIpOwotLSAgZGF0YS5hcHBlbmQodjMpOwotLSAgZGF0YS5hcHBl bmQodjQpOwotLSAgZGF0YS5hcHBlbmQodjUpOwotLQotLSAgZGF0YSA9IEJ5dGVWZWN0b3IocmVp bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KCZHVUlEOjpjb250ZW50RGVzY3JpcHRpb24pLCBz aXplb2YoR1VJRCkpCi0tICAgICsgQnl0ZVZlY3Rvcjo6ZnJvbUxvbmdMb25nKGRhdGEuc2l6ZSgp ICsgMTYgKyA4LCBmYWxzZSkKLS0gICAgKyBkYXRhOwotLQotLSAgcmV0dXJuIGRhdGE7Ci0tfQot LQotLUJ5dGVWZWN0b3IgV01BOjpGaWxlOjpyZW5kZXJFeHRlbmRlZENvbnRlbnREZXNjcmlwdGlv bigpCi0tewotLSAgQnl0ZVZlY3RvciBkYXRhOwotLQotLSAgZGF0YS5hcHBlbmQoQnl0ZVZlY3Rv cjo6ZnJvbVNob3J0KGQtPnRhZy0+YXR0cmlidXRlTWFwKCkuc2l6ZSgpLCBmYWxzZSkpOwotLSAg Ci0tICBXTUE6OkF0dHJpYnV0ZU1hcDo6Q29uc3RJdGVyYXRvciBpdCA9IGQtPnRhZy0+YXR0cmli dXRlTWFwKCkuYmVnaW4oKTsKLS0gIGZvcig7IGl0ICE9IGQtPnRhZy0+YXR0cmlidXRlTWFwKCku ZW5kKCk7IGl0KyspIAotLSAgICBkYXRhLmFwcGVuZChpdC0+c2Vjb25kLnJlbmRlcigpKTsKLS0g IAotLSAgZGF0YSA9IEJ5dGVWZWN0b3IocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyICo+KCZH VUlEOjpleHRlbmRlZENvbnRlbnREZXNjcmlwdGlvbiksIHNpemVvZihHVUlEKSkKLS0gICAgKyBC eXRlVmVjdG9yOjpmcm9tTG9uZ0xvbmcoZGF0YS5zaXplKCkgKyAxNiArIDgsIGZhbHNlKQotLSAg ICArIGRhdGE7Ci0tCi0tICByZXR1cm4gZGF0YTsKLS19Ci0tCi0tCi1JbmRleDogYW1hcm9rL3Ny Yy9tZXRhZGF0YS93bWEvd21hdGFnLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhbWFyb2svc3JjL21ldGFk YXRhL3dtYS93bWF0YWcuaAkocmV2aXNpb24gNzA1MjMxKQotKysrIGFtYXJvay9zcmMvbWV0YWRh dGEvd21hL3dtYXRhZy5oCSh3b3JraW5nIGNvcHkpCi1AQCAtMSwxODggKzAsMCBAQAotLS8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKLS0gICAgY29weXJpZ2h0ICAgICAgICAgICAgOiAoQykgMjAwNSBieSBM dWthcyBMYWxpbnNreQotLSAgICBlbWFpbCAgICAgICAgICAgICAgICA6IGxhbGluc2t5QGdtYWls LmNvbQotLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0tCi0tLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLSAq ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgICoKLS0gKiAgIGl0ICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uICAqCi0tICogICAyLjEgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICAgICAgICAgICAgICAg ICAgKgotLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgICAqCi0tICogICBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m ICAgICAgICAgICAgKgotLSAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgICAgICoKLS0gKiAgIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAq Ci0tICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKgotLSAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyAgICAgICoKLS0gKiAgIExpY2Vu c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUgICAqCi0tICogICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sICAgICAgICAgICAgKgotLSAqICAgTUEgIDAyMTEwLTEzMDEgIFVT QSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLS0g KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotLQotLSNpZm5kZWYgVEFHTElCX1dNQVRBR19ICi0tI2RlZmlu ZSBUQUdMSUJfV01BVEFHX0gKLS0KLS0jaW5jbHVkZSA8dG1hcC5oPgotLSNpbmNsdWRlIDx0YWcu aD4KLS0jaW5jbHVkZSAid21hZmlsZS5oIgotLSNpbmNsdWRlICJ3bWFhdHRyaWJ1dGUuaCIKLS0K LS1uYW1lc3BhY2UgVGFnTGliIHsKLS0KLS0gIG5hbWVzcGFjZSBXTUEgewotLSAgCi0tICAgIHR5 cGVkZWYgTWFwPGNvbnN0IEJ5dGVWZWN0b3IsIEF0dHJpYnV0ZT4gQXR0cmlidXRlTWFwOwotLSAg ICAgIAotLSAgICBjbGFzcyBUYWcgOiBwdWJsaWMgVGFnTGliOjpUYWcgewotLSAgICAKLS0gICAg ICBmcmllbmQgY2xhc3MgRmlsZTsKLS0gICAgICAKLS0gICAgcHVibGljOgotLSAgICAKLS0gICAg ICBUYWcoKTsKLS0KLS0gICAgICB2aXJ0dWFsIH5UYWcoKTsKLS0KLS0gICAgICAvKiEKLS0gICAg ICAgKiBSZXR1cm5zIHRoZSB0cmFjayBuYW1lLgotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwg U3RyaW5nIHRpdGxlKCkgY29uc3Q7Ci0tCi0tICAgICAgLyohCi0tICAgICAgICogUmV0dXJucyB0 aGUgYXJ0aXN0IG5hbWUuCi0tICAgICAgICovCi0tICAgICAgdmlydHVhbCBTdHJpbmcgYXJ0aXN0 KCkgY29uc3Q7Ci0tCi0tICAgICAgLyohCi0tICAgICAgICogUmV0dXJucyB0aGUgYWxidW0gbmFt ZTsgaWYgbm8gYWxidW0gbmFtZSBpcyBwcmVzZW50IGluIHRoZSB0YWcKLS0gICAgICAgKiBTdHJp bmc6Om51bGwgd2lsbCBiZSByZXR1cm5lZC4KLS0gICAgICAgKi8KLS0gICAgICB2aXJ0dWFsIFN0 cmluZyBhbGJ1bSgpIGNvbnN0OwotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFJldHVybnMgdGhl IHRyYWNrIGNvbW1lbnQuCi0tICAgICAgICovCi0tICAgICAgdmlydHVhbCBTdHJpbmcgY29tbWVu dCgpIGNvbnN0OwotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFJldHVybnMgdGhlIGdlbnJlIG5h bWU7IGlmIG5vIGdlbnJlIGlzIHByZXNlbnQgaW4gdGhlIHRhZyBTdHJpbmc6Om51bGwKLS0gICAg ICAgKiB3aWxsIGJlIHJldHVybmVkLgotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgU3RyaW5n IGdlbnJlKCkgY29uc3Q7Ci0tCi0tICAgICAgLyohCi0tICAgICAgICogUmV0dXJucyB0aGUgcmF0 aW5nLgotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgU3RyaW5nIHJhdGluZygpIGNvbnN0Owot LQotLSAgICAgIC8qIQotLSAgICAgICAqIFJldHVybnMgdGhlIGdlbnJlIG5hbWU7IGlmIG5vIGdl bnJlIGlzIHByZXNlbnQgaW4gdGhlIHRhZyBTdHJpbmc6Om51bGwKLS0gICAgICAgKiB3aWxsIGJl IHJldHVybmVkLgotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgU3RyaW5nIGNvcHlyaWdodCgp IGNvbnN0OwotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFJldHVybnMgdGhlIHllYXI7IGlmIHRo ZXJlIGlzIG5vIHllYXIgc2V0LCB0aGlzIHdpbGwgcmV0dXJuIDAuCi0tICAgICAgICovCi0tICAg ICAgdmlydHVhbCB1aW50IHllYXIoKSBjb25zdDsKLS0KLS0gICAgICAvKiEKLS0gICAgICAgKiBS ZXR1cm5zIHRoZSB0cmFjayBudW1iZXI7IGlmIHRoZXJlIGlzIG5vIHRyYWNrIG51bWJlciBzZXQs IHRoaXMgd2lsbAotLSAgICAgICAqIHJldHVybiAwLgotLSAgICAgICAqLwotLSAgICAgIHZpcnR1 YWwgdWludCB0cmFjaygpIGNvbnN0OwotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFNldHMgdGhl IHRpdGxlIHRvIFxhIHMuCi0tICAgICAgICovCi0tICAgICAgdmlydHVhbCB2b2lkIHNldFRpdGxl KGNvbnN0IFN0cmluZyAmcyk7Ci0tCi0tICAgICAgLyohCi0tICAgICAgICogU2V0cyB0aGUgYXJ0 aXN0IHRvIFxhIHMuCi0tICAgICAgICovCi0tICAgICAgdmlydHVhbCB2b2lkIHNldEFydGlzdChj b25zdCBTdHJpbmcgJnMpOwotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFNldHMgdGhlIGFsYnVt IHRvIFxhIHMuICBJZiBcYSBzIGlzIFN0cmluZzo6bnVsbCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBi ZQotLSAgICAgICAqIGNsZWFyZWQuCi0tICAgICAgICovCi0tICAgICAgdmlydHVhbCB2b2lkIHNl dEFsYnVtKGNvbnN0IFN0cmluZyAmcyk7Ci0tCi0tICAgICAgLyohCi0tICAgICAgICogU2V0cyB0 aGUgY29tbWVudCB0byBcYSBzLgotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgdm9pZCBzZXRD b21tZW50KGNvbnN0IFN0cmluZyAmcyk7Ci0tCi0tICAgICAgLyohCi0tICAgICAgICogU2V0cyB0 aGUgcmF0aW5nIHRvIFxhIHMuIAotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgdm9pZCBzZXRS YXRpbmcoY29uc3QgU3RyaW5nICZzKTsKLS0KLS0gICAgICAvKiEKLS0gICAgICAgKiBTZXRzIHRo ZSBjb3B5cmlnaHQgdG8gXGEgcy4gCi0tICAgICAgICovCi0tICAgICAgdmlydHVhbCB2b2lkIHNl dENvcHlyaWdodChjb25zdCBTdHJpbmcgJnMpOwotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFNl dHMgdGhlIGdlbnJlIHRvIFxhIHMuIAotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgdm9pZCBz ZXRHZW5yZShjb25zdCBTdHJpbmcgJnMpOwotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFNldHMg dGhlIHllYXIgdG8gXGEgaS4gIElmIFxhIHMgaXMgMCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBj bGVhcmVkLgotLSAgICAgICAqLwotLSAgICAgIHZpcnR1YWwgdm9pZCBzZXRZZWFyKHVpbnQgaSk7 Ci0tCi0tICAgICAgLyohCi0tICAgICAgICogU2V0cyB0aGUgdHJhY2sgdG8gXGEgaS4gIElmIFxh IHMgaXMgMCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBjbGVhcmVkLgotLSAgICAgICAqLwotLSAg ICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFjayh1aW50IGkpOwotLQotLSAgICAgIC8qIQotLSAgICAg ICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFnIGRvZXMgbm90IGNvbnRhaW4gYW55IGRhdGEuICBU aGlzIHNob3VsZCBiZQotLSAgICAgICAqIHJlaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3NlcyB0aGF0 IHByb3ZpZGUgbW9yZSB0aGFuIHRoZSBiYXNpYyB0YWdnaW5nCi0tICAgICAgICogYWJpbGl0aWVz IGluIHRoaXMgY2xhc3MuCi0tICAgICAgICovCi0tICAgICAgdmlydHVhbCBib29sIGlzRW1wdHko KSBjb25zdDsKLS0KLS0gICAgICAvKiEKLS0gICAgICAgKiBDb3BpZXMgdGhlIGdlbmVyaWMgZGF0 YSBmcm9tIG9uZSB0YWcgdG8gYW5vdGhlci4KLS0gICAgICAgKgotLSAgICAgICAqIElmIFxhIG92 ZXJ3cml0ZSBpcyB0cnVlIHRoZW4gdGhlIHZhbHVlcyB3aWxsIGJlIHVuY29uZGl0aW9uYWxseSBj b3BpZWQuCi0tICAgICAgICogSWYgZmFsc2Ugb25seSBlbXB0eSB2YWx1ZXMgd2lsbCBiZSBvdmVy d3JpdHRlbi4KLS0gICAgICAgKi8KLS0gICAgICBzdGF0aWMgdm9pZCBkdXBsaWNhdGUoY29uc3Qg VGFnICpzb3VyY2UsIFRhZyAqdGFyZ2V0LCBib29sIG92ZXJ3cml0ZSA9IHRydWUpOwotLQotLSAg ICAgIC8qIQotLSAgICAgICAqIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGl0ZW0gbGlzdCBt YXAuICBUaGlzIGlzIGFuIEl0ZW1MaXN0TWFwIG9mCi0tICAgICAgICogYWxsIG9mIHRoZSBpdGVt cyBpbiB0aGUgdGFnLgotLSAgICAgICAqCi0tICAgICAgICogVGhpcyBpcyB0aGUgbW9zdCBwb3dl cmZ1bGwgc3RydWN0dXJlIGZvciBhY2Nlc3NpbmcgdGhlIGl0ZW1zIG9mIHRoZSB0YWcuCi0tICAg ICAgICoKLS0gICAgICAgKiBcd2FybmluZyBZb3Ugc2hvdWxkIG5vdCBtb2RpZnkgdGhpcyBkYXRh IHN0cnVjdHVyZSBkaXJlY3RseSwgaW5zdGVhZAotLSAgICAgICAqIHVzZSBzZXRJdGVtKCkgYW5k IHJlbW92ZUl0ZW0oKS4KLS0gICAgICAgKi8gCi0tICAgICAgIGNvbnN0IEF0dHJpYnV0ZU1hcCAm YXR0cmlidXRlTWFwKCkgY29uc3Q7Ci0tICAgICAgCi0tICAgICAgLyohCi0tICAgICAgICogUmVt b3ZlcyB0aGUgXGEga2V5IGF0dHJpYnV0ZSBmcm9tIHRoZSB0YWcKLS0gICAgICAgKi8KLS0gICAg ICB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgQnl0ZVZlY3RvciAma2V5KTsgICAgICAgCi0tICAgICAg Ci0tICAgICAgdm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgQnl0ZVZlY3RvciAma2V5LCBjb25zdCBT dHJpbmcgJnZhbHVlKTsKLS0gICAgICAKLS0gICAgICAvKiEKLS0gICAgICAgKiBTZXRzIHRoZSBc YSBrZXkgYXR0cmlidXRlIHRvIHRoZSB2YWx1ZSBvZiBcYSBhdHRyaWJ1dGUuIElmIGFuIGF0dHJp YnV0ZQotLSAgICAgICAqIHdpdGggdGhlIFxhIGtleSBpcyBhbHJlYWR5IHByZXNlbnQsIGl0IHdp bGwgYmUgcmVwbGFjZWQuCi0tICAgICAgICovCi0tICAgICAgdm9pZCBzZXRBdHRyaWJ1dGUoY29u c3QgQnl0ZVZlY3RvciAma2V5LCBjb25zdCBBdHRyaWJ1dGUgJmF0dHJpYnV0ZSk7Ci0tCi0tICAg IHByaXZhdGU6Ci0tICAgICAgCi0tICAgICAgY2xhc3MgVGFnUHJpdmF0ZTsKLS0gICAgICBUYWdQ cml2YXRlICpkOwotLSAgICAgIAotLSAgICB9OwotLSAgfQotLX0KLS0jZW5kaWYKLUluZGV4OiBh bWFyb2svc3JjL21ldGFkYXRhL3dtYS93bWFwcm9wZXJ0aWVzLmgKLT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBh bWFyb2svc3JjL21ldGFkYXRhL3dtYS93bWFwcm9wZXJ0aWVzLmgJKHJldmlzaW9uIDcwNTIzMSkK LSsrKyBhbWFyb2svc3JjL21ldGFkYXRhL3dtYS93bWFwcm9wZXJ0aWVzLmgJKHdvcmtpbmcgY29w eSkKLUBAIC0xLDcxICswLDAgQEAKLS0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0tICAgIGNvcHlyaWdo dCAgICAgICAgICAgIDogKEMpIDIwMDUgYnkgTHVrYXMgTGFsaW5za3kKLS0gICAgZW1haWwgICAg ICAgICAgICAgICAgOiBsYWxpbnNreUBnbWFpbC5jb20KLS0gKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot LQotLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKLS0gKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0tICogICBpdCAg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAgKgotLSAqICAgMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0t ICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwgYnV0ICAgKgotLSAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAgICoKLS0gKiAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V ICAgICAqCi0tICogICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLiAgICAgICAgICAgICAgICAgICAgICAgKgotLSAqICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgICAgICAqCi0tICogICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgKgotLSAqICAgRm91bmRhdGlvbiwg SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCAgICAgICAgICAg ICoKLS0gKiAgIE1BICAwMjExMC0xMzAxICBVU0EgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqCi0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS0KLS0jaWZu ZGVmIFRBR0xJQl9XTUFQUk9QRVJUSUVTX0gKLS0jZGVmaW5lIFRBR0xJQl9XTUFQUk9QRVJUSUVT X0gKLS0KLS0jaW5jbHVkZSA8YXVkaW9wcm9wZXJ0aWVzLmg+Ci0tI2luY2x1ZGUgPHRzdHJpbmcu aD4KLS0KLS1uYW1lc3BhY2UgVGFnTGliIHsKLS0gICAgCi0tICBuYW1lc3BhY2UgV01BIHsKLS0g ICAgICAgIAotLSAgICBjbGFzcyBGaWxlOyAgCi0tICAgICAgCi0tICAgIGNsYXNzIFByb3BlcnRp ZXMgOiBwdWJsaWMgQXVkaW9Qcm9wZXJ0aWVzCi0tICAgIHsKLS0gICAgICAgIAotLSAgICAgIGZy aWVuZCBjbGFzcyBXTUE6OkZpbGU7Ci0tICAgICAgCi0tICAgIHB1YmxpYzoKLS0gICAgCi0tICAg ICAgLyohCi0tICAgICAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIFdNQTo6UHJvcGVydGllcy4K LS0gICAgICAgKi8KLS0gICAgICBQcm9wZXJ0aWVzKCk7Ci0tICAgICAgCi0tICAgICAgLyohCi0t ICAgICAgICogRGVzdHJveXMgdGhpcyBXTUE6OlByb3BlcnRpZXMgaW5zdGFuY2UuCi0tICAgICAg ICovCi0tICAgICAgdmlydHVhbCB+UHJvcGVydGllcygpOwotLQotLSAgICAgIC8vIFJlaW1wbGVt ZW50YXRpb25zLgotLQotLSAgICAgIHZpcnR1YWwgaW50IGxlbmd0aCgpIGNvbnN0OwotLSAgICAg IHZpcnR1YWwgaW50IGJpdHJhdGUoKSBjb25zdDsKLS0gICAgICB2aXJ0dWFsIGludCBzYW1wbGVS YXRlKCkgY29uc3Q7Ci0tICAgICAgdmlydHVhbCBpbnQgY2hhbm5lbHMoKSBjb25zdDsKLS0KLS0g ICAgICBwcml2YXRlOgotLSAgICAKLS0gICAgICBjbGFzcyBQcm9wZXJ0aWVzUHJpdmF0ZTsKLS0g ICAgICBQcm9wZXJ0aWVzUHJpdmF0ZSAqZDsKLS0gICAgICAKLS0gICAgICB2b2lkIHNldChpbnQg bGVuZ3RoLCBpbnQgYml0cmF0ZSwgaW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVscyk7Ci0tICAg ICAgCi0tICAgIH07Ci0tCi0tICB9Ci0tCi0tfQotLQotLSNlbmRpZiAKLUluZGV4OiBhbWFyb2sv c3JjL21ldGFkYXRhL3dtYS9NYWtlZmlsZS5hbQotPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGFtYXJvay9zcmMv bWV0YWRhdGEvd21hL01ha2VmaWxlLmFtCShyZXZpc2lvbiA3MDUyMzEpCi0rKysgYW1hcm9rL3Ny Yy9tZXRhZGF0YS93bWEvTWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKLUBAIC0xLDIwICswLDAg QEAKLS1TVUJESVJTID0KLS0KLS1JTkNMVURFUyAgICAgICAgICAgPSAkKGFsbF9pbmNsdWRlcykg JCh0YWdsaWJfaW5jbHVkZXMpCi0tTUVUQVNPVVJDRVMgICAgICAgID0gQVVUTwotLWxpYnRhZ3dt YV9sYV9MREZMQUdTICA9ICQoYWxsX2xpYnJhcmllcykKLS1ub2luc3RfTFRMSUJSQVJJRVMgPSBs aWJ0YWd3bWEubGEKLS0KLS1saWJ0YWd3bWFfbGFfU09VUkNFUyA9ICBcCi0tICAgICAgICAgICAg ICAgICAgICAgd21hYXR0cmlidXRlLmNwcCBcCi0tICAgICAgICAgICAgICAgICAgICAgd21hcHJv cGVydGllcy5jcHAgXAotLSAgICAgICAgICAgICAgICAgICAgIHdtYXRhZy5jcHAgXAotLSAgICAg ICAgICAgICAgICAgICAgIHdtYWZpbGUuY3BwIFwKLS0gICAgICAgICAgICAgICAgICAgICB0YWds aWJfd21hZmlsZXR5cGVyZXNvbHZlci5jcHAKLS0KLS1ub2luc3RfSEVBREVSUyA9IFwKLS0gICAg ICAgICAgICAgICAgICAgICB3bWFhdHRyaWJ1dGUuaCBcCi0tICAgICAgICAgICAgICAgICAgICAg d21hcHJvcGVydGllcy5oIFwKLS0gICAgICAgICAgICAgICAgICAgICB3bWF0YWcuaCBcCi0tICAg ICAgICAgICAgICAgICAgICAgd21hZmlsZS5oIFwKLS0gICAgICAgICAgICAgICAgICAgICB0YWds aWJfd21hZmlsZXR5cGVyZXNvbHZlci5oCi1JbmRleDogYW1hcm9rL3NyYy9tZXRhZGF0YS93bWEv d21hYXR0cmlidXRlLmNwcAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGFtYXJvay9zcmMvbWV0YWRhdGEvd21h L3dtYWF0dHJpYnV0ZS5jcHAJKHJldmlzaW9uIDcwNTIzMSkKLSsrKyBhbWFyb2svc3JjL21ldGFk YXRhL3dtYS93bWFhdHRyaWJ1dGUuY3BwCSh3b3JraW5nIGNvcHkpCi1AQCAtMSwyMzEgKzAsMCBA QAotLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKLS0gICAgY29weXJpZ2h0ICAgICAgICAgICAgOiAoQykg MjAwNSBieSBMdWthcyBMYWxpbnNreQotLSAgICBlbWFpbCAgICAgICAgICAgICAgICA6IGxhbGlu c2t5QGdtYWlsLmNvbQotLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0tCi0tLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgotLSAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKLS0gKiAgIGl0ICB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uICAqCi0tICogICAy LjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICAgICAg ICAgICAgICAgICAgKgotLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLS0gKiAgIFRoaXMgbGlicmFyeSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgICAq Ci0tICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mICAgICAgICAgICAgKgotLSAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgICAgICoKLS0gKiAgIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAg ICAgICAgICAqCi0tICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotLSAqICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyAgICAgICoKLS0g KiAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUgICAqCi0tICogICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sICAgICAgICAgICAgKgotLSAqICAgTUEgIDAyMTEw LTEzMDEgIFVTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICoKLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLQotLSNpbmNsdWRlIDx3bWFhdHRyaWJ1dGUu aD4KLS0jaW5jbHVkZSA8d21hZmlsZS5oPgotLQotLXVzaW5nIG5hbWVzcGFjZSBUYWdMaWI7Ci0t Ci0tY2xhc3MgV01BOjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZVByaXZhdGUKLS17Ci0tcHVibGljOgot LSAgQXR0cmlidXRlVHlwZXMgdHlwZTsgICAgCi0tICBTdHJpbmcgbmFtZTsKLS0gIFN0cmluZyB2 YWx1ZV9zdHJpbmc7Ci0tICBCeXRlVmVjdG9yIHZhbHVlX2J5dGVzOwotLSAgdW5pb24gewotLSAg ICBpbnQgdmFsdWVfaW50OwotLSAgICBsb25nIGxvbmcgdmFsdWVfbG9uZ2xvbmc7Ci0tICB9Owot LX07Ci0tCi0tLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS0vLyBwdWJsaWMgbWVtYmVycwotLS8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0tCi0tV01BOjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZSgpCi0t ewotLSAgZCA9IG5ldyBBdHRyaWJ1dGVQcml2YXRlOwotLSAgZC0+bmFtZSA9IFN0cmluZzo6bnVs bDsKLS0gIGQtPnR5cGUgPSBVbmljb2RlVHlwZTsKLS19Ci0tCi0tV01BOjpBdHRyaWJ1dGU6OkF0 dHJpYnV0ZShXTUE6OkZpbGUgJmZpbGUpCi0tewotLSAgZCA9IG5ldyBBdHRyaWJ1dGVQcml2YXRl OwotLSAgcGFyc2UoZmlsZSk7Ci0tfQotLQotLVdNQTo6QXR0cmlidXRlOjpBdHRyaWJ1dGUoY29u c3QgU3RyaW5nICZuYW1lLCBjb25zdCBTdHJpbmcgJnZhbHVlKQotLXsKLS0gIGQgPSBuZXcgQXR0 cmlidXRlUHJpdmF0ZTsKLS0gIGQtPm5hbWUgPSBuYW1lOwotLSAgZC0+dHlwZSA9IFVuaWNvZGVU eXBlOwotLSAgZC0+dmFsdWVfc3RyaW5nID0gdmFsdWU7Ci0tfQotLQotLVdNQTo6QXR0cmlidXRl OjpBdHRyaWJ1dGUoY29uc3QgU3RyaW5nICZuYW1lLCBjb25zdCBCeXRlVmVjdG9yICZ2YWx1ZSkK LS17Ci0tICBkID0gbmV3IEF0dHJpYnV0ZVByaXZhdGU7Ci0tICBkLT5uYW1lID0gbmFtZTsKLS0g IGQtPnR5cGUgPSBCeXRlc1R5cGU7Ci0tICBkLT52YWx1ZV9ieXRlcyA9IHZhbHVlOwotLX0KLS0K LS1XTUE6OkF0dHJpYnV0ZTo6QXR0cmlidXRlKGNvbnN0IFN0cmluZyAmbmFtZSwgdW5zaWduZWQg aW50IHZhbHVlKQotLXsKLS0gIGQgPSBuZXcgQXR0cmlidXRlUHJpdmF0ZTsKLS0gIGQtPm5hbWUg PSBuYW1lOwotLSAgZC0+dHlwZSA9IERXb3JkVHlwZTsKLS0gIGQtPnZhbHVlX2ludCA9IHZhbHVl OwotLX0KLS0KLS1XTUE6OkF0dHJpYnV0ZTo6QXR0cmlidXRlKGNvbnN0IFN0cmluZyAmbmFtZSwg dW5zaWduZWQgbG9uZyBsb25nIHZhbHVlKQotLXsKLS0gIGQgPSBuZXcgQXR0cmlidXRlUHJpdmF0 ZTsKLS0gIGQtPm5hbWUgPSBuYW1lOwotLSAgZC0+dHlwZSA9IFFXb3JkVHlwZTsKLS0gIGQtPnZh bHVlX2xvbmdsb25nID0gdmFsdWU7Ci0tfQotLQotLVdNQTo6QXR0cmlidXRlOjpBdHRyaWJ1dGUo Y29uc3QgU3RyaW5nICZuYW1lLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKLS17Ci0tICBkID0gbmV3 IEF0dHJpYnV0ZVByaXZhdGU7Ci0tICBkLT5uYW1lID0gbmFtZTsKLS0gIGQtPnR5cGUgPSBXb3Jk VHlwZTsKLS0gIGQtPnZhbHVlX2ludCA9IHZhbHVlOwotLX0KLS0KLS1XTUE6OkF0dHJpYnV0ZTo6 QXR0cmlidXRlKGNvbnN0IFN0cmluZyAmbmFtZSwgYm9vbCB2YWx1ZSkKLS17Ci0tICBkID0gbmV3 IEF0dHJpYnV0ZVByaXZhdGU7Ci0tICBkLT5uYW1lID0gbmFtZTsKLS0gIGQtPnR5cGUgPSBCb29s VHlwZTsKLS0gIGQtPnZhbHVlX2ludCA9IHZhbHVlOwotLX0KLS0KLS1XTUE6OkF0dHJpYnV0ZTo6 QXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSAmYXR0cikKLS17Ci0tICBkID0gbmV3IEF0dHJpYnV0 ZVByaXZhdGUoKmF0dHIuZCk7Ci0tfSAKLS0KLS1XTUE6OkF0dHJpYnV0ZTo6fkF0dHJpYnV0ZSgp Ci0tewotLSAgaWYoZCkgCi0tICAgIGRlbGV0ZSBkOwotLX0KLS0KLS1TdHJpbmcgV01BOjpBdHRy aWJ1dGU6Om5hbWUoKSBjb25zdAotLXsKLS0gIHJldHVybiBkLT5uYW1lOwotLX0KLS0KLS1XTUE6 OkF0dHJpYnV0ZTo6QXR0cmlidXRlVHlwZXMgV01BOjpBdHRyaWJ1dGU6OnR5cGUoKSBjb25zdAot LXsKLS0gIHJldHVybiBkLT50eXBlOwotLX0KLS0KLS1TdHJpbmcgV01BOjpBdHRyaWJ1dGU6OnRv U3RyaW5nKCkgY29uc3QKLS17Ci0tICByZXR1cm4gZC0+dmFsdWVfc3RyaW5nOwotLX0KLS0KLS1C eXRlVmVjdG9yIFdNQTo6QXR0cmlidXRlOjp0b0J5dGVWZWN0b3IoKSBjb25zdAotLXsKLS0gIHJl dHVybiBkLT52YWx1ZV9ieXRlczsKLS19Ci0tCi0taW50IFdNQTo6QXR0cmlidXRlOjp0b0ludCgp IGNvbnN0Ci0tewotLSAgaWYgKGQtPnR5cGUgPT0gVW5pY29kZVR5cGUpCi0tICAgIHJldHVybiBk LT52YWx1ZV9zdHJpbmcudG9JbnQoKTsKLS0gIGVsc2UKLS0gICAgcmV0dXJuIGQtPnZhbHVlX2lu dDsKLS19Ci0tCi0tbG9uZyBsb25nIFdNQTo6QXR0cmlidXRlOjp0b0xvbmdMb25nKCkgY29uc3QK LS17Ci0tICByZXR1cm4gZC0+dmFsdWVfbG9uZ2xvbmc7Ci0tfQotLQotLWJvb2wgV01BOjpBdHRy aWJ1dGU6OnBhcnNlKFdNQTo6RmlsZSAmZikKLS17Ci0tICBpbnQgc2l6ZSA9IGYucmVhZFdPUkQo KTsKLS0gIGYucmVhZFN0cmluZyhzaXplLCBkLT5uYW1lKTsKLS0gIAotLSAgZC0+dHlwZSA9IChX TUE6OkF0dHJpYnV0ZTo6QXR0cmlidXRlVHlwZXMpZi5yZWFkV09SRCgpOwotLSAgc2l6ZSA9IGYu cmVhZFdPUkQoKTsKLS0KLS0gIHN3aXRjaChkLT50eXBlKSB7Ci0tICBjYXNlIFdvcmRUeXBlOgot LSAgICBkLT52YWx1ZV9pbnQgPSBmLnJlYWRXT1JEKCk7Ci0tICAgIGJyZWFrOwotLSAgICAKLS0g IGNhc2UgQm9vbFR5cGU6Ci0tICBjYXNlIERXb3JkVHlwZToKLS0gICAgZC0+dmFsdWVfaW50ID0g Zi5yZWFkRFdPUkQoKTsKLS0gICAgYnJlYWs7Ci0tICAgIAotLSAgY2FzZSBRV29yZFR5cGU6ICAK LS0gICAgZC0+dmFsdWVfbG9uZ2xvbmcgPSBmLnJlYWRRV09SRCgpOwotLSAgICBicmVhazsKLS0g ICAgCi0tICBjYXNlIFVuaWNvZGVUeXBlOiAgCi0tICAgIGYucmVhZFN0cmluZyhzaXplLCBkLT52 YWx1ZV9zdHJpbmcpOwotLSAgICBicmVhazsKLS0gICAgCi0tICBjYXNlIEJ5dGVzVHlwZTogIAot LSAgICBkLT52YWx1ZV9ieXRlcyA9IGYucmVhZEJsb2NrKHNpemUpOwotLSAgICBicmVhazsKLS0g ICAgCi0tICBkZWZhdWx0OgotLSAgICByZXR1cm4gZmFsc2U7IAotLSAgfQotLSAgCi0tICByZXR1 cm4gdHJ1ZTsKLS19Ci0tCi0tQnl0ZVZlY3RvciBXTUE6OkF0dHJpYnV0ZTo6cmVuZGVyKCkgY29u c3QKLS17Ci0tICBCeXRlVmVjdG9yIGRhdGE7Ci0tCi0tICBCeXRlVmVjdG9yIHYgPSBkLT5uYW1l LmRhdGEoU3RyaW5nOjpVVEYxNkxFKTsKLS0gIGRhdGEuYXBwZW5kKEJ5dGVWZWN0b3I6OmZyb21T aG9ydCh2LnNpemUoKSArIDIsIGZhbHNlKSk7Ci0tICBkYXRhLmFwcGVuZCh2ICsgQnl0ZVZlY3Rv cjo6ZnJvbVNob3J0KDAsIGZhbHNlKSk7Ci0tICAKLS0gIGRhdGEuYXBwZW5kKEJ5dGVWZWN0b3I6 OmZyb21TaG9ydCgoaW50KWQtPnR5cGUsIGZhbHNlKSk7Ci0tICAgIAotLSAgc3dpdGNoIChkLT50 eXBlKSB7Ci0tICBjYXNlIFdvcmRUeXBlOgotLSAgICBkYXRhLmFwcGVuZChCeXRlVmVjdG9yOjpm cm9tU2hvcnQoMiwgZmFsc2UpKTsKLS0gICAgZGF0YS5hcHBlbmQoQnl0ZVZlY3Rvcjo6ZnJvbVNo b3J0KGQtPnZhbHVlX2ludCwgZmFsc2UpKTsKLS0gICAgYnJlYWs7Ci0tICAgICAgCi0tICBjYXNl IEJvb2xUeXBlOgotLSAgY2FzZSBEV29yZFR5cGU6Ci0tICAgIGRhdGEuYXBwZW5kKEJ5dGVWZWN0 b3I6OmZyb21TaG9ydCg0LCBmYWxzZSkpOwotLSAgICBkYXRhLmFwcGVuZChCeXRlVmVjdG9yOjpm cm9tVUludChkLT52YWx1ZV9pbnQsIGZhbHNlKSk7Ci0tICAgIGJyZWFrOwotLSAgICAgIAotLSAg Y2FzZSBRV29yZFR5cGU6Ci0tICAgIGRhdGEuYXBwZW5kKEJ5dGVWZWN0b3I6OmZyb21TaG9ydCg4 LCBmYWxzZSkpOwotLSAgICBkYXRhLmFwcGVuZChCeXRlVmVjdG9yOjpmcm9tTG9uZ0xvbmcoZC0+ dmFsdWVfbG9uZ2xvbmcsIGZhbHNlKSk7Ci0tICAgIGJyZWFrOwotLSAgICAgIAotLSAgY2FzZSBV bmljb2RlVHlwZToKLS0gICAgdiA9IGQtPnZhbHVlX3N0cmluZy5kYXRhKFN0cmluZzo6VVRGMTZM RSk7Ci0tICAgIGRhdGEuYXBwZW5kKEJ5dGVWZWN0b3I6OmZyb21TaG9ydCh2LnNpemUoKSArIDIs IGZhbHNlKSk7Ci0tICAgIGRhdGEuYXBwZW5kKHYgKyBCeXRlVmVjdG9yOjpmcm9tU2hvcnQoMCwg ZmFsc2UpKTsKLS0gICAgYnJlYWs7Ci0tICAgIAotLSAgY2FzZSBCeXRlc1R5cGU6Ci0tICAgIGRh dGEuYXBwZW5kKEJ5dGVWZWN0b3I6OmZyb21TaG9ydChkLT52YWx1ZV9ieXRlcy5zaXplKCksIGZh bHNlKSk7Ci0tICAgIGRhdGEuYXBwZW5kKGQtPnZhbHVlX2J5dGVzKTsKLS0gICAgYnJlYWs7Ci0t ICAgIAotLSAgZGVmYXVsdDogIAotLSAgICByZXR1cm4gQnl0ZVZlY3Rvcjo6bnVsbDsgCi0tICB9 Ci0tICAKLS0gIHJldHVybiBkYXRhOwotLX0KLS0KLS0KLUluZGV4OiBhbWFyb2svc3JjL21ldGFk YXRhL3dtYS93bWFmaWxlLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhbWFyb2svc3JjL21ldGFkYXRhL3dt YS93bWFmaWxlLmgJKHJldmlzaW9uIDcwNTIzMSkKLSsrKyBhbWFyb2svc3JjL21ldGFkYXRhL3dt YS93bWFmaWxlLmgJKHdvcmtpbmcgY29weSkKLUBAIC0xLDEwMCArMCwwIEBACi0tLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgotLSAgICBjb3B5cmlnaHQgICAgICAgICAgICA6IChDKSAyMDA1IGJ5IEx1a2Fz IExhbGluc2t5Ci0tICAgIGVtYWlsICAgICAgICAgICAgICAgIDogbGFsaW5za3lAZ21haWwuY29t Ci0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLS0KLS0vKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0tICogICBU aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSAgKgotLSAqICAgaXQgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gICoKLS0gKiAgIDIuMSBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gICAgICAgICAgICAgICAgICAgICAq Ci0tICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKgotLSAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICoKLS0gKiAgIFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAg ICAgICAgICAqCi0tICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSAgICAgKgotLSAqICAgTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICoKLS0g KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqCi0tICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljICAgICAgKgotLSAqICAgTGljZW5zZSBh bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZSAgICoKLS0gKiAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg Rmxvb3IsIEJvc3RvbiwgICAgICAgICAgICAqCi0tICogICBNQSAgMDIxMTAtMTMwMSAgVVNBICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotLSAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0tCi0tI2lmbmRlZiBUQUdMSUJfV01BRklMRV9ICi0tI2RlZmluZSBU QUdMSUJfV01BRklMRV9ICi0tCi0tI2luY2x1ZGUgPHRmaWxlLmg+Ci0tI2luY2x1ZGUgPHRhZy5o PgotLSNpbmNsdWRlICJ3bWFwcm9wZXJ0aWVzLmgiCi0tI2luY2x1ZGUgIndtYXRhZy5oIgotLQot LW5hbWVzcGFjZSBUYWdMaWIgewotLQotLSAgbmFtZXNwYWNlIFdNQSB7Ci0tICAKLS0gICAgc3Ry dWN0IEdVSUQ7Ci0tICAgIAotLSAgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQllURTsKLS0gICAg dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBXT1JEOwotLSAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBE V09SRDsKLS0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgUVdPUkQ7Ci0tICAgIAotLSAg ICBjbGFzcyBGaWxlIDogcHVibGljIFRhZ0xpYjo6RmlsZQotLSAgICB7Ci0tICAgICAgICAKLS0g ICAgICBmcmllbmQgY2xhc3MgQXR0cmlidXRlOwotLQotLSAgICBwdWJsaWM6Ci0tCi0tICAgICAg RmlsZShjb25zdCBjaGFyICpmaWxlLCBib29sIHJlYWRQcm9wZXJ0aWVzID0gdHJ1ZSwgUHJvcGVy dGllczo6UmVhZFN0eWxlIHByb3BlcnRpZXNTdHlsZSA9IFByb3BlcnRpZXM6OkF2ZXJhZ2UpOwot LSAgICAgIAotLSAgICAgIHZpcnR1YWwgfkZpbGUoKTsKLS0gICAgCi0tICAgICAgLyohCi0tICAg ICAgICogUmV0dXJucyB0aGUgVGFnTGliOjpUYWcgZm9yIHRoaXMgZmlsZS4gCi0tICAgICAgICov Ci0tICAgICAgdmlydHVhbCBUYWdMaWI6OlRhZyAqdGFnKCkgY29uc3Q7Ci0tCi0tICAgICAgLyoh Ci0tICAgICAgICogUmV0dXJucyB0aGUgV01BOjpUYWcgZm9yIHRoaXMgZmlsZS4gCi0tICAgICAg ICovCi0tICAgICAgdmlydHVhbCBUYWcgKldNQVRhZygpIGNvbnN0OwotLQotLSAgICAgIC8qIQot LSAgICAgICAqIFJldHVybnMgdGhlIFdNQTo6UHJvcGVydGllcyBmb3IgdGhpcyBmaWxlLiAKLS0g ICAgICAgKi8KLS0gICAgICB2aXJ0dWFsIFByb3BlcnRpZXMgKmF1ZGlvUHJvcGVydGllcygpIGNv bnN0OwotLQotLQotLSAgICAgIC8qIQotLSAgICAgICAqIFNhdmUgdGhlIGZpbGUuIAotLSAgICAg ICAqCi0tICAgICAgICogVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIHNhdmUgd2FzIHN1Y2Nlc3Nm dWwuCi0tICAgICAgICovCi0tICAgICAgdmlydHVhbCBib29sIHNhdmUoKTsKLS0gICAgCi0tICAg IHByb3RlY3RlZDoKLS0KLS0gICAgICBpbnQgcmVhZEJZVEUoKTsKLS0gICAgICBpbnQgcmVhZFdP UkQoKTsKLS0gICAgICB1bnNpZ25lZCBpbnQgcmVhZERXT1JEKCk7Ci0tICAgICAgbG9uZyBsb25n IHJlYWRRV09SRCgpOwotLSAgICAgIHZvaWQgcmVhZEdVSUQoR1VJRCAmZyk7Ci0tICAgICAgdm9p ZCByZWFkU3RyaW5nKGludCBsZW4sIFN0cmluZyAmcyk7Ci0tCi0tICAgICAgQnl0ZVZlY3RvciBy ZW5kZXJDb250ZW50RGVzY3JpcHRpb24oKTsKLS0gICAgICBCeXRlVmVjdG9yIHJlbmRlckV4dGVu ZGVkQ29udGVudERlc2NyaXB0aW9uKCk7Ci0tICAgICAgCi0tICAgICAgdm9pZCByZWFkKGJvb2wg cmVhZFByb3BlcnRpZXMsIFByb3BlcnRpZXM6OlJlYWRTdHlsZSBwcm9wZXJ0aWVzU3R5bGUpOwot LQotLSAgICBwcml2YXRlOgotLSAgICAgIAotLSAgICAgIGNsYXNzIEZpbGVQcml2YXRlOwotLSAg ICAgIEZpbGVQcml2YXRlICpkOwotLSAgICAgIAotLSAgICB9OwotLSAgCi0tICB9Ci0tCi0tfSAg Ci0tCi0tI2VuZGlmCi1JbmRleDogYW1hcm9rL3NyYy9tZXRhZGF0YS93bWEvdGFnbGliX3dtYWZp bGV0eXBlcmVzb2x2ZXIuY3BwCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYW1hcm9rL3NyYy9tZXRhZGF0YS93 bWEvdGFnbGliX3dtYWZpbGV0eXBlcmVzb2x2ZXIuY3BwCShyZXZpc2lvbiA3MDUyMzEpCi0rKysg YW1hcm9rL3NyYy9tZXRhZGF0YS93bWEvdGFnbGliX3dtYWZpbGV0eXBlcmVzb2x2ZXIuY3BwCSh3 b3JraW5nIGNvcHkpCi1AQCAtMSw0NyArMCwwIEBACi0tLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLSAg ICBjb3B5cmlnaHQgICAgICAgICAgICA6IChDKSAyMDA1IGJ5IE1hcnRpbiBBdW11ZWxsZXIKLS0g ICAgZW1haWwgICAgICAgICAgICAgICAgOiBhdW11ZWxsQHJlc2Vydi5hdAotLSAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0tCi0tLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLSAqICAgVGhpcyBsaWJyYXJ5IGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoK LS0gKiAgIGl0ICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uICAqCi0tICogICAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICAgICAgICAgICAgICAgICAgKgotLSAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICoKLS0gKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgICAqCi0tICogICBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICAgKgotLSAq ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUgICAgICoKLS0gKiAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqCi0tICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKgotLSAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYyAgICAgICoKLS0gKiAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAqCi0tICogICBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s ICAgICAgICAgICAgKgotLSAqICAgTUEgIDAyMTEwLTEzMDEgIFVTQSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLS0gKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwotLQotLS8vIChjKSAyMDA1IE1hcnRpbiBBdW11ZWxsZXIgPGF1bXVlbGxAcmVzZXJ2LmF0Pgot LS8vIFNlZSBDT1BZSU5HIGZpbGUgZm9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbgotLQotLSNpbmNs dWRlICJ0YWdsaWJfd21hZmlsZXR5cGVyZXNvbHZlci5oIgotLSNpbmNsdWRlICJ3bWFmaWxlLmgi Ci0tCi0tI2luY2x1ZGUgPHN0cmluZy5oPgotLQotLVRhZ0xpYjo6RmlsZSAqV01BRmlsZVR5cGVS ZXNvbHZlcjo6Y3JlYXRlRmlsZShjb25zdCBjaGFyICpmaWxlTmFtZSwKLS0gICAgICAgIGJvb2wg cmVhZFByb3BlcnRpZXMsCi0tICAgICAgICBUYWdMaWI6OkF1ZGlvUHJvcGVydGllczo6UmVhZFN0 eWxlIHByb3BlcnRpZXNTdHlsZSkgY29uc3QKLS17Ci0tICAgIGNvbnN0IGNoYXIgKmV4dCA9IHN0 cnJjaHIoZmlsZU5hbWUsICcuJyk7Ci0tICAgIGlmKGV4dCAmJiAoIXN0cmNhc2VjbXAoZXh0LCAi LndtYSIpIHx8ICFzdHJjYXNlY21wKGV4dCwgIi5hc2YiKSkpCi0tICAgIHsKLS0gICAgICAgIFRh Z0xpYjo6V01BOjpGaWxlICpmID0gbmV3IFRhZ0xpYjo6V01BOjpGaWxlKGZpbGVOYW1lLCByZWFk UHJvcGVydGllcywgcHJvcGVydGllc1N0eWxlKTsKLS0gICAgICAgIGlmKGYtPmlzVmFsaWQoKSkK LS0gICAgICAgICAgICByZXR1cm4gZjsKLS0gICAgICAgIGVsc2UKLS0gICAgICAgIHsKLS0gICAg ICAgICAgICBkZWxldGUgZjsKLS0gICAgICAgIH0KLS0gICAgfQotLQotLSAgICByZXR1cm4gMDsK LS19Ci1JbmRleDogYW1hcm9rL3NyYy9tZXRhZGF0YS93bWEvd21hYXR0cmlidXRlLmgKLT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tLSBhbWFyb2svc3JjL21ldGFkYXRhL3dtYS93bWFhdHRyaWJ1dGUuaAkocmV2aXNp b24gNzA1MjMxKQotKysrIGFtYXJvay9zcmMvbWV0YWRhdGEvd21hL3dtYWF0dHJpYnV0ZS5oCSh3 b3JraW5nIGNvcHkpCi1AQCAtMSwxMjUgKzAsMCBAQAotLS8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS0g ICAgY29weXJpZ2h0ICAgICAgICAgICAgOiAoQykgMjAwNSBieSBMdWthcyBMYWxpbnNreQotLSAg ICBlbWFpbCAgICAgICAgICAgICAgICA6IGxhbGluc2t5QGdtYWlsLmNvbQotLSAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0tCi0tLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLSAqICAgVGhpcyBsaWJyYXJ5IGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoK LS0gKiAgIGl0ICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uICAqCi0tICogICAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICAgICAgICAgICAgICAgICAgKgotLSAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICoKLS0gKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgICAqCi0tICogICBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICAgKgotLSAq ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUgICAgICoKLS0gKiAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqCi0tICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKgotLSAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYyAgICAgICoKLS0gKiAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAqCi0tICogICBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s ICAgICAgICAgICAgKgotLSAqICAgTUEgIDAyMTEwLTEzMDEgIFVTQSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLS0gKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwotLQotLSNpZm5kZWYgVEFHTElCX1dNQUFUVFJJQlVURV9ICi0tI2RlZmluZSBUQUdMSUJfV01B QVRUUklCVVRFX0gKLS0KLS0jaW5jbHVkZSA8dHN0cmluZy5oPgotLSNpbmNsdWRlIDx0Ynl0ZXZl Y3Rvci5oPgotLQotLW5hbWVzcGFjZSBUYWdMaWIgewotLQotLSAgbmFtZXNwYWNlIFdNQSB7Ci0t IAotLSAgICBjbGFzcyBGaWxlOyAgCi0tICAgICAgCi0tICAgIGNsYXNzIEF0dHJpYnV0ZSB7Ci0t Ci0tICAgICAgZnJpZW5kIGNsYXNzIEZpbGU7ICAKLS0gICAgICAgIAotLSAgICBwdWJsaWM6Ci0t Ci0tICAgICAgLyohCi0tICAgICAgICogRW51bSBvZiB0eXBlcyBhbiBBdHRyaWJ1dGUgY2FuIGhh dmUuCi0tICAgICAgICovCi0tICAgICAgZW51bSBBdHRyaWJ1dGVUeXBlcyB7Ci0tICAgICAgICBV bmljb2RlVHlwZSA9IDAsCi0tICAgICAgICBCeXRlc1R5cGUgICA9IDEsCi0tICAgICAgICBCb29s VHlwZSAgICA9IDIsCi0tICAgICAgICBEV29yZFR5cGUgICA9IDMsCi0tICAgICAgICBRV29yZFR5 cGUgICA9IDQsCi0tICAgICAgICBXb3JkVHlwZSAgICA9IDUKLS0gICAgICB9OwotLQotLSAgICAg IC8qIQotLSAgICAgICAqIENvbnN0cnVjdHMgYW4gZW1wdHkgYXR0cmlidXRlLgotLSAgICAgICAq LyAgICAgICAKLS0gICAgICBBdHRyaWJ1dGUoKTsKLS0gICAgICAKLS0gICAgICAvKiEKLS0gICAg ICAgKiBDb25zdHJ1Y3RzIGFuIGF0dHJpYnV0ZSB3aXRoIFxhIGtleSBhbmQgXGEgdmFsdWUuCi0t ICAgICAgICovICAgICAgIAotLSAgICAgIEF0dHJpYnV0ZShjb25zdCBTdHJpbmcgJmtleSwgY29u c3QgU3RyaW5nICZ2YWx1ZSk7Ci0tICAgICAgQXR0cmlidXRlKGNvbnN0IFN0cmluZyAma2V5LCBj b25zdCBCeXRlVmVjdG9yICZ2YWx1ZSk7Ci0tICAgICAgQXR0cmlidXRlKGNvbnN0IFN0cmluZyAm a2V5LCB1bnNpZ25lZCBpbnQgdmFsdWUpOwotLSAgICAgIEF0dHJpYnV0ZShjb25zdCBTdHJpbmcg JmtleSwgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlKTsKLS0gICAgICBBdHRyaWJ1dGUoY29uc3Qg U3RyaW5nICZrZXksIHVuc2lnbmVkIHNob3J0IHZhbHVlKTsKLS0gICAgICBBdHRyaWJ1dGUoY29u c3QgU3RyaW5nICZrZXksIGJvb2wgdmFsdWUpOwotLSAgICAgIAotLSAgICAgIC8qIQotLSAgICAg ICAqIENvbnN0cnVjdCBhbiBhdHRyaWJ1dGUgYXMgYSBjb3B5IG9mIFxhIGl0ZW0uCi0tICAgICAg ICovCi0tICAgICAgQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSAmaXRlbSk7ICAgICAgIAotLSAg ICAgIAotLSAgICAgIC8qIQotLSAgICAgICAqIERlc3Ryb3lzIHRoZSBhdHRyaWJ1dGUuCi0tICAg ICAgICovIAotLSAgICAgIHZpcnR1YWwgfkF0dHJpYnV0ZSgpOwotLQotLSAgICAgIC8qIQotLSAg ICAgICAqIFJldHVybnMgdGhlIG5hbWUuCi0tICAgICAgICovCi0tICAgICAgU3RyaW5nIG5hbWUo KSBjb25zdDsKLS0gICAgICAKLS0gICAgICAvKiEKLS0gICAgICAgKiBSZXR1cm5zIHR5cGUgb2Yg dGhlIHZhbHVlLgotLSAgICAgICAqLwotLSAgICAgIEF0dHJpYnV0ZVR5cGVzIHR5cGUoKSBjb25z dDsKLS0gICAgICAKLS0gICAgICAvKiEKLS0gICAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBh IFN0cmluZy4KLS0gICAgICAgKi8KLS0gICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKLS0g ICAgICAKLS0gICAgICAvKiEKLS0gICAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIEJ5dGVW ZWN0b3IuCi0tICAgICAgICovCi0tICAgICAgQnl0ZVZlY3RvciB0b0J5dGVWZWN0b3IoKSBjb25z dDsKLS0gICAgICAKLS0gICAgICAvKiEKLS0gICAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBh biBpbnRlZ2VyLgotLSAgICAgICAqLwotLSAgICAgIGludCB0b0ludCgpIGNvbnN0OwotLSAgICAg IAotLSAgICAgIC8qIQotLSAgICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEgbG9uZyBsb25n LgotLSAgICAgICAqLwotLSAgICAgIGxvbmcgbG9uZyB0b0xvbmdMb25nKCkgY29uc3Q7Ci0tICAg ICAgCi0tICAgICAgQnl0ZVZlY3RvciByZW5kZXIoKSBjb25zdDsKLS0gICAgICAKLS0gICAgcHJv dGVjdGVkOgotLSAgICAKLS0gICAgICBBdHRyaWJ1dGUoV01BOjpGaWxlICZmaWxlKTsKLS0gICAg ICBib29sIHBhcnNlKFdNQTo6RmlsZSAmZmlsZSk7Ci0tICAgICAgCi0tICAgIHByaXZhdGU6Ci0t ICAgICAgCi0tICAgICAgY2xhc3MgQXR0cmlidXRlUHJpdmF0ZTsKLS0gICAgICBBdHRyaWJ1dGVQ cml2YXRlICpkOwotLSAgICAKLS0gICAgfTsKLS0gIAotLSAgfQotLSAgCi0tfQotLQotLSNlbmRp ZgotCi1Qcm9wZXJ0eSBjaGFuZ2VzIG9uOiBhbWFyb2svc3JjL21ldGFkYXRhL3dtYQotX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwotTmFtZTogc3ZuOmlnbm9yZQotICAgLSAubGlicwotLmRlcHMKLU1ha2VmaWxlCi1NYWtl ZmlsZS5pbgotCi0KLUluZGV4OiBhbWFyb2svc3JjL21ldGFkYXRhL3RwbHVnaW5zLmNwcAotPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0tIGFtYXJvay9zcmMvbWV0YWRhdGEvdHBsdWdpbnMuY3BwCShyZXZpc2lvbiA3 MDUyMzEpCi0rKysgYW1hcm9rL3NyYy9tZXRhZGF0YS90cGx1Z2lucy5jcHAJKHdvcmtpbmcgY29w eSkKLUBAIC00Miw4ICs0Miw4IEBACi0gI2luY2x1ZGUgIndhdnBhY2svd3ZmaWxlLmgiCi0gI2lu Y2x1ZGUgInNwZWV4L3RhZ2xpYl9zcGVleGZpbGV0eXBlcmVzb2x2ZXIuaCIKLSAjaW5jbHVkZSAi c3BlZXgvc3BlZXhmaWxlLmgiCi0tI2luY2x1ZGUgIndtYS90YWdsaWJfd21hZmlsZXR5cGVyZXNv bHZlci5oIgotLSNpbmNsdWRlICJ3bWEvd21hZmlsZS5oIgotKyNpbmNsdWRlICJhc2YvdGFnbGli X2FzZmZpbGV0eXBlcmVzb2x2ZXIuaCIKLSsjaW5jbHVkZSAiYXNmL2FzZmZpbGUuaCIKLSAjaW5j bHVkZSAicm1mZi90YWdsaWJfcmVhbG1lZGlhZmlsZXR5cGVyZXNvbHZlci5oIgotICNpbmNsdWRl ICJybWZmL3RhZ2xpYl9yZWFsbWVkaWFmaWxlLmgiCi0gI2luY2x1ZGUgImF1ZGlibGUvdGFnbGli X2F1ZGlibGVmaWxldHlwZXJlc29sdmVyLmgiCi1AQCAtOTUsNyArOTUsNyBAQAotICAgICAgICAg ICAgIHx8IG1pbWV0eXBlLT5pcyggInZpZGVvL3gtbXN2aWRlbyIgKQotICAgICAgICAgICAgIHx8 IG1pbWV0eXBlLT5pcyggInZpZGVvL3gtbXMtd212IiApICkKLSAgICAgewotLSAgICAgICAgcmV0 dXJuIG5ldyBUYWdMaWI6OldNQTo6RmlsZShmaWxlTmFtZSwgcmVhZFByb3BlcnRpZXMsIHByb3Bl cnRpZXNTdHlsZSk7Ci0rICAgICAgICByZXR1cm4gbmV3IFRhZ0xpYjo6QVNGOjpGaWxlKGZpbGVO YW1lLCByZWFkUHJvcGVydGllcywgcHJvcGVydGllc1N0eWxlKTsKLSAgICAgfQotICAgICBlbHNl IGlmKCBtaW1ldHlwZS0+aXMoICJhdWRpby92bmQucm4tcmVhbGF1ZGlvIiApCi0gICAgICAgICAg ICAgfHwgbWltZXR5cGUtPmlzKCAiYXVkaW8veC1wbi1yZWFsYXVkaW8iICkKLUBAIC0xMzAsNyAr MTMwLDcgQEAKLSB7Ci0gICAgIC8vVGFnTGliOjpGaWxlUmVmOjphZGRGaWxlVHlwZVJlc29sdmVy KG5ldyBNaW1lVHlwZUZpbGVUeXBlUmVzb2x2ZXIpOwotICAgICBUYWdMaWI6OkZpbGVSZWY6OmFk ZEZpbGVUeXBlUmVzb2x2ZXIobmV3IE1QNEZpbGVUeXBlUmVzb2x2ZXIpOwotLSAgICBUYWdMaWI6 OkZpbGVSZWY6OmFkZEZpbGVUeXBlUmVzb2x2ZXIobmV3IFdNQUZpbGVUeXBlUmVzb2x2ZXIpOwot KyAgICBUYWdMaWI6OkZpbGVSZWY6OmFkZEZpbGVUeXBlUmVzb2x2ZXIobmV3IEFTRkZpbGVUeXBl UmVzb2x2ZXIpOwotICAgICBUYWdMaWI6OkZpbGVSZWY6OmFkZEZpbGVUeXBlUmVzb2x2ZXIobmV3 IFJlYWxNZWRpYUZpbGVUeXBlUmVzb2x2ZXIpOwotICAgICBUYWdMaWI6OkZpbGVSZWY6OmFkZEZp bGVUeXBlUmVzb2x2ZXIobmV3IEF1ZGlibGVGaWxlVHlwZVJlc29sdmVyKTsKLSAgICAgVGFnTGli OjpGaWxlUmVmOjphZGRGaWxlVHlwZVJlc29sdmVyKG5ldyBBQUNGaWxlVHlwZVJlc29sdmVyKTsK LUluZGV4OiBhbWFyb2svc3JjL21ldGFkYXRhL01ha2VmaWxlLmFtCi09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0g YW1hcm9rL3NyYy9tZXRhZGF0YS9NYWtlZmlsZS5hbQkocmV2aXNpb24gNzA1MjMxKQotKysrIGFt YXJvay9zcmMvbWV0YWRhdGEvTWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKLUBAIC02LDcgKzYs NyBAQAotIE1QNF9MREFERCA9IG00YS9saWJ0YWdtNGEubGEKLSBlbmRpZgotIAotLVNVQkRJUlMg PSBzcGVleCB3YXZwYWNrIHRydWVhdWRpbyB3bWEgYXVkaWJsZSBybWZmICQoTVA0X1NVQkRJUikg YWFjIHdhdgotK1NVQkRJUlMgPSBzcGVleCB3YXZwYWNrIHRydWVhdWRpbyBhc2YgYXVkaWJsZSBy bWZmICQoTVA0X1NVQkRJUikgYWFjIHdhdgotIAotIAotIElOQ0xVREVTICAgICAgICAgICA9IC1J JCh0b3Bfc3JjZGlyKS9hbWFyb2svc3JjICQoYWxsX2luY2x1ZGVzKSAkKHRhZ2xpYl9pbmNsdWRl cykKLUBAIC0yNCw3ICsyNCw3IEBACi0gICAgICAgICAgICAgICAgICAgICAgc3BlZXgvbGlidGFn c3BlZXgubGEgXAotICAgICAgICAgICAgICAgICAgICAgIHRydWVhdWRpby9saWJ0YWd0cnVlYXVk aW8ubGEgXAotICAgICAgICAgICAgICAgICAgICAgIHdhdnBhY2svbGlidGFnd2F2cGFjay5sYSBc Ci0tICAgICAgICAgICAgICAgICAgICAgd21hL2xpYnRhZ3dtYS5sYSBcCi0rICAgICAgICAgICAg ICAgICAgICAgYXNmL2xpYnRhZ2FzZi5sYSBcCi0gICAgICAgICAgICAgICAgICAgICAgd2F2L2xp YnRhZ3dhdi5sYSBcCi0gICAgICAgICAgICAgICAgICAgICAgcm1mZi9saWJ0YWdyZWFsbWVkaWEu bGEgXAotICAgICAgICAgICAgICAgICAgICAgICQoTVA0X0xEQUREKSBcCgpkaWZmIC0tZ2l0IGEv YW1hcm9rLnNwZWMgYi9hbWFyb2suc3BlYwppbmRleCAyOGUxMTUxLi42M2Y2NTc1IDEwMDY0NAot LS0gYS9hbWFyb2suc3BlYworKysgYi9hbWFyb2suc3BlYwpAQCAtNSw4ICs1LDggQEAKIAogTmFt ZTogICAgICAgYW1hcm9rCiBTdW1tYXJ5OiAgICBNZWRpYSBwbGF5ZXIKLVZlcnNpb246ICAgIDEu NC43Ci1SZWxlYXNlOiAgICAxNCV7P2Rpc3R9CitWZXJzaW9uOiAgICAxLjQuOAorUmVsZWFzZTog ICAgMSV7P2Rpc3R9CiAKIEdyb3VwOiAJICAgIEFwcGxpY2F0aW9ucy9NdWx0aW1lZGlhCiBMaWNl bnNlOiAgICBHUEx2MisKQEAgLTE0LDIxICsxNCwxMiBAQCBVcmw6ICAgICAgICBodHRwOi8vYW1h cm9rLmtkZS5vcmcKICMgaHR0cDovL2Rvd25sb2FkLmtkZS5vcmcvZG93bmxvYWQucGhwP3VybD1z dGFibGUvYW1hcm9rLzEuNC4zL3NyYwogI1NvdXJjZTA6ICAgIGh0dHA6Ly9taXJyb3JzLmlzYy5v cmcvcHViL2tkZS9zdGFibGUvYW1hcm9rLyV7dmVyc2lvbn0vc3JjL2FtYXJvay0le3ZlcnNpb259 LnRhci5iejIKIFNvdXJjZTA6ICAgIGZ0cDovL2Z0cC5rZGUub3JnL3B1Yi9rZGUvc3RhYmxlL2Ft YXJvay8le3ZlcnNpb259L3NyYy9hbWFyb2stJXt2ZXJzaW9ufS50YXIuYnoyCi0jIEtERSBidWcg MTQ3MTI2OiBhbWFyb2sgZnJlZXplcyB3aGVuIHRyeWluZyB0byBwbGF5IG1wMyBmaWxlcyB3aXRo b3V0IG1wMyBzdXBwb3J0Ci1QYXRjaDA6ICAgICBhbWFyb2stMS40LjctMTQ3MTI2LnBhdGNoCi0j IEZlZG9yYSBidWcgMjQyODYyOiBBbWFyb2sgZG9lc24ndCBzdXBwb3J0IHRyYW5zZmVyIG9mIFVu aWNvZGUgZmlsZW5hbWVzIHRvIE1UUCBkZXZpY2VzCi1QYXRjaDE6ICAgICBhbWFyb2stMS40Ljct dXRmOC5wYXRjaAorQnVpbGRSb290OiAgICAgICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9u fS0le3JlbGVhc2V9LXJvb3QtJSgle19faWRfdX0gLW4pCisKICMgVXNlIHhkZy1vcGVuIHRvIHN0 YXJ0IHRoZSBzZWxlY3RlZCBicm93c2VyCiBQYXRjaDI6ICAgICBhbWFyb2stMS40LjcteGRnLnBh dGNoCi0jIGh0dHA6Ly9idWdzLmtkZS5vcmcvMTQ4MzE3IC0gZHluYW1pYyBtb2RlIGZsb29kcyBw bGF5bGlzdCAuLi4KLSMgaHR0cDovL3dlYnN2bi5rZGUub3JnL2JyYW5jaGVzL3N0YWJsZS9leHRy YWdlYXIvbXVsdGltZWRpYS9hbWFyb2svc3JjL3BsYXlsaXN0LmNwcD9yMT03MDU0OTQmcjI9NzA1 NDkzJnBhdGhyZXY9NzA1NDk0JnZpZXc9cGF0Y2gKLVBhdGNoMzogICAgIGFtYXJvay0xLjQuNy0x NDgzMTcucGF0Y2ggCi0jIGZpeCBhc2Yvd21hIHN1cHBvcnQgKHdpdGggcmVjZW50IHRhZ2xpYikK LSMgc3ZuIGRpZmYgYW1hcm9rL3NyYy9tZXRhZGF0YSAtLXJldmlzaW9uIDcwNTIzMQotUGF0Y2g0 OiAgICAgYW1hcm9rLWFzZi5wYXRjaAotQnVpbGRSb290OiAgICAgICV7X3RtcHBhdGh9LyV7bmFt ZX0tJXt2ZXJzaW9ufS0le3JlbGVhc2V9LXJvb3QtJSgle19faWRfdX0gLW4pCiAKLUJ1aWxkUmVx dWlyZXM6ICBhdXRvbWFrZSBsaWJ0b29sCisjQnVpbGRSZXF1aXJlczogIGF1dG9tYWtlIGxpYnRv b2wKIEJ1aWxkUmVxdWlyZXM6ICBhbHNhLWxpYi1kZXZlbAogQnVpbGRSZXF1aXJlczogIGRlc2t0 b3AtZmlsZS11dGlscwogQnVpbGRSZXF1aXJlczogIGVzb3VuZC1kZXZlbApAQCAtMTA4LDIwICs5 OSwxNCBAQCB1c2UgYW55IG9mIHhtbXMnIHZpc3VhbGlzYXRpb24gcGx1Z2lucyB3aXRoIEFtYXJv ay4KICVwcmVwCiAlc2V0dXAgLXEgCiAKLSVwYXRjaDAgLXAwIC1iIC4xNDcxMjYKLSVwYXRjaDEg LXAxIC1iIC51dGY4CiAlcGF0Y2gyIC1wMSAtYiAueGRnCi0lcGF0Y2gzIC1wNCAtYiAuMTQ4MzE3 Ci0lcGF0Y2g0IC1wMCAtYiAuYXNmCi0KLSMgZm9yIHBhdGNoNAotbWFrZSAtZiBhZG1pbi9NYWtl ZmlsZS5jb21tb24gCiAKIAogJWJ1aWxkCiB1bnNldCBRVERJUiAmJiAuICV7X3N5c2NvbmZkaXJ9 L3Byb2ZpbGUuZC9xdC5zaAorCiAlY29uZmlndXJlIFwKLSAgICAgLS1kaXNhYmxlLWRlYnVnIFwK KyAgICAgLS1kaXNhYmxlLWRlYnVnIC0tZGlzYWJsZS13YXJuaW5ncyBcCiAgICAgIC0tZGlzYWJs ZS1ycGF0aCBcCiAgICAgIC0tZW5hYmxlLW15c3FsIFwKICAgICAgLS1lbmFibGUtcG9zdGdyZXNx bCBcCkBAIC0yNjcsNiArMjUyLDkgQEAgcm0gLWZyICRSUE1fQlVJTERfUk9PVAogCiAKICVjaGFu Z2Vsb2cKKyogVGh1IERlYyAyMCAyMDA3IFJleCBEaWV0ZXIgPHJkaWV0ZXJbQVRdZmVkb3JhcHJv amVjdC5vcmc+IDEuNC44LTEKKy0gYW1hcm9rLTEuNC44CisKICogRnJpIERlYyAwNyAyMDA3IEFs ZXggTGFuY2FzdGVyIDxhbGV4bGFuW0FUXWZlZG9yYXByb2plY3Qub3JnPiAxLjQuNy0xNAogLSBS ZWJ1aWxkIGZvciBuZXcgb3BlbnNzbAogCgpkaWZmIC0tZ2l0IGEvc291cmNlcyBiL3NvdXJjZXMK aW5kZXggNDIzYjU1OS4uYWIzZWUwMiAxMDA2NDQKLS0tIGEvc291cmNlcworKysgYi9zb3VyY2Vz CkBAIC0xICsxIEBACi1mMTI5OWUxNDJkYThhNjliYzNjZmY1ZDU4NWUzOGQ0MyAgYW1hcm9rLTEu NC43LnRhci5iejIKKzdmNjVjNGE4ZjNmMGZmOTA0MmE1YjVkZDIxYjM2Y2M4ICBhbWFyb2stMS40 LjgudGFyLmJ6Mgo=