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: Dominik 'Rathann' Mierzejewski To: git-commits@fedoraproject.org Subject: [rpms/musescore] rawhide: Backport upstream PR to add FFmpeg 9 support Date: Tue, 08 Sep 2026 17:43:09 GMT Message-ID: <178888938900.1.5131373207507872918.rpms-musescore-f100664cfe29@fedoraproject.org> List-ID: X-Git-Repo: rpms/musescore X-Git-Branch: rawhide X-Git-Rev: f100664cfe2931da4b9cbc091b415887d5b7713d ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvbXVzZXNjb3JlCiAgICAgICAgICAgIEJyYW5jaCA6IHJhd2hpZGUKICAgICAg ICAgICAgQ29tbWl0IDogZjEwMDY2NGNmZTI5MzFkYTRiOWNiYzA5MWI0MTU4ODdkNWI3NzEzZAog ICAgICAgICAgICBBdXRob3IgOiBEb21pbmlrICdSYXRoYW5uJyBNaWVyemVqZXdza2kgPGRvbWlu aWtAZ3JleXNlY3Rvci5uZXQ+CiAgICAgICAgICAgIERhdGUgICA6IDIwMjYtMDktMDdUMTI6NDM6 NDYrMDI6MDAKICAgICAgICAgICAgU3RhdHMgIDogKzIzNjI0Ly0xMiBpbiAyIGZpbGUocykKICAg ICAgICAgICAgVVJMICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9tdXNl c2NvcmUvYy9mMTAwNjY0Y2ZlMjkzMWRhNGI5Y2JjMDkxYjQxNTg4N2Q1Yjc3MTNkP2JyYW5jaD1y YXdoaWRlCgogICAgICAgICAgICBMb2c6CiAgICAgICAgICAgIEJhY2twb3J0IHVwc3RyZWFtIFBS IHRvIGFkZCBGRm1wZWcgOSBzdXBwb3J0CgotIERyb3AgdW5uZWNlc3NhcnkgQnVpbGRSZXF1aXJl cyBvbiBGRm1wZWcgKHVzZXMgYnVuZGxlZCBoZWFkZXJzKQoKLS0tCmRpZmYgLS1naXQgYS9tdXNl c2NvcmUtZmZtcGVnOS5wYXRjaCBiL211c2VzY29yZS1mZm1wZWc5LnBhdGNoCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MWIwZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tdXNl c2NvcmUtZmZtcGVnOS5wYXRjaApAQCAtMCwwICsxLDIzNjA2IEBACitkaWZmIC11cCBNdXNlU2Nv cmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9DTWFrZUxpc3RzLnR4dC5mZm1wZWc5IE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL0NNYWtlTGlzdHMudHh0CistLS0gTXVzZVNj b3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvQ01ha2VMaXN0cy50eHQuZmZtcGVnOQkyMDI2 LTA3LTA2IDA5OjUyOjMyLjAwMDAwMDAwMCArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMv ZnJhbWV3b3JrL21lZGlhL0NNYWtlTGlzdHMudHh0CTIwMjYtMDktMDcgMTI6MjM6NDcuNjgwMDg1 OTUzICswMjAwCitAQCAtMzcsNiArMzcsMTEgQEAgdGFyZ2V0X3NvdXJjZXMobXVzZV9tZWRpYSBQ UklWQVRFCisgICAgIGludGVybmFsL2ZmbXBlZ3V0aWxzLmNwcAorICAgICBpbnRlcm5hbC9mZm1w ZWd1dGlscy5oCisgCisrICAgIGludGVybmFsL2ZmbXBlZy92OS9mZm1wZWdsaWJoYW5kbGVyLmNw cAorKyAgICBpbnRlcm5hbC9mZm1wZWcvdjkvZmZtcGVnbGliaGFuZGxlci5oCisrICAgIGludGVy bmFsL2ZmbXBlZy92OS92aWRlb2VuY29kZXIuY3BwCisrICAgIGludGVybmFsL2ZmbXBlZy92OS92 aWRlb2VuY29kZXIuaAorKworICAgICBpbnRlcm5hbC9mZm1wZWcvdjgvZmZtcGVnbGliaGFuZGxl ci5jcHAKKyAgICAgaW50ZXJuYWwvZmZtcGVnL3Y4L2ZmbXBlZ2xpYmhhbmRsZXIuaAorICAgICBp bnRlcm5hbC9mZm1wZWcvdjgvdmlkZW9lbmNvZGVyLmNwcAorQEAgLTY0LDYgKzY5LDEyIEBAIHRh cmdldF9zb3VyY2VzKG11c2VfbWVkaWEgUFJJVkFURQorICkKKyAKKyBzZXRfc291cmNlX2ZpbGVz X3Byb3BlcnRpZXMoCisrICAgIGludGVybmFsL2ZmbXBlZy92OS9mZm1wZWdsaWJoYW5kbGVyLmNw cAorKyAgICBpbnRlcm5hbC9mZm1wZWcvdjkvdmlkZW9lbmNvZGVyLmNwcAorKyAgICBQUk9QRVJU SUVTIElOQ0xVREVfRElSRUNUT1JJRVMgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS90aGly ZHBhcnR5L2ZmbXBlZy92OSIKKyspCisrCisrc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKAor ICAgICBpbnRlcm5hbC9mZm1wZWcvdjgvZmZtcGVnbGliaGFuZGxlci5jcHAKKyAgICAgaW50ZXJu YWwvZmZtcGVnL3Y4L3ZpZGVvZW5jb2Rlci5jcHAKKyAgICAgUFJPUEVSVElFUyBJTkNMVURFX0RJ UkVDVE9SSUVTICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdGhpcmRwYXJ0eS9mZm1wZWcv djgiCitAQCAtOTIsMyArMTAzLDcgQEAgc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzKAorICAg ICBpbnRlcm5hbC9mZm1wZWcvdjQvdmlkZW9lbmNvZGVyLmNwcAorICAgICBQUk9QRVJUSUVTIElO Q0xVREVfRElSRUNUT1JJRVMgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS90aGlyZHBhcnR5 L2ZmbXBlZy92NCIKKyApCisrCisraWYgKE1VU0VfTU9EVUxFX01FRElBX1RFU1RTKQorKyAgICBh ZGRfc3ViZGlyZWN0b3J5KHRlc3RzKQorK2VuZGlmKCkKK2RpZmYgLXVwIE11c2VTY29yZS00Ljcu NC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZ3V0aWxzLmNwcC5mZm1wZWc5IE11 c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZ3V0aWxzLmNw cAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBl Z3V0aWxzLmNwcC5mZm1wZWc5CTIwMjYtMDctMDYgMDk6NTI6MzIuMDAwMDAwMDAwICswMjAwCisr KysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVndXRp bHMuY3BwCTIwMjYtMDktMDcgMTI6MjM6NDcuNjgxMjEyNjI4ICswMjAwCitAQCAtMjIsNiArMjIs OCBAQAorIAorICNpbmNsdWRlICJmZm1wZWd1dGlscy5oIgorIAorKyNpbmNsdWRlIDxhbGdvcml0 aG0+CisrCisgI2luY2x1ZGUgImlvL2ZpbGVpbmZvLmgiCisgI2luY2x1ZGUgImlvL3BhdGguaCIK KyAKK0BAIC03MSw3ICs3Myw3IEBAIGlvOjpwYXRoc190IGRlZmF1bHRTZWFyY2hQYXRocygpCisg ICAgIHJldHVybiBwYXRoczsKKyB9CisgCistc3RhdGljIEZGbXBlZ0xpYlBhdGhzIGxpYnJhcnlQ YXRoc0ZvclZlcnNpb24oaW50IGZmbXBlZ1ZlciwgY29uc3QgaW86OnBhdGhfdCYgc2VhcmNoRGly KQorK3N0YXRpYyBGRm1wZWdMaWJQYXRocyBsaWJyYXJ5UGF0aHNGb3JWZXJzaW9uKGludCBmZm1w ZWdWZXIsIGNvbnN0IGlvOjpwYXRoX3QmIHNlYXJjaERpciwgRkZtcGVnQ2FuZGlkYXRlT3JpZ2lu IG9yaWdpbikKKyB7CisgICAgIEZGbXBlZ1ZlcnNpb25JbmZvIGZmbXBlZ1ZlcnNpb25JbmZvOwor ICAgICBmb3IgKGNvbnN0IGF1dG8mIFtmZm1wZWdWZXJzaW9uLCBjb21wb25lbnRzVmVyc2lvbnNd IDogRkZNUEVHX0NPTVBPTkVOVFNfVkVSU0lPTlMpIHsKK0BAIC0xMTUsNiArMTE3LDkgQEAgc3Rh dGljIEZGbXBlZ0xpYlBhdGhzIGxpYnJhcnlQYXRoc0ZvclZlcgorICAgICBpZiAoaW86OkZpbGVJ bmZvOjpleGlzdHMoYXZ1dGlsUGF0aCkgJiYgaW86OkZpbGVJbmZvOjpleGlzdHMoYXZjb2RlY1Bh dGgpCisgICAgICAgICAmJiBpbzo6RmlsZUluZm86OmV4aXN0cyhhdmZvcm1hdFBhdGgpICYmIGlv OjpGaWxlSW5mbzo6ZXhpc3RzKHN3c2NhbGVQYXRoKQorICAgICAgICAgJiYgaW86OkZpbGVJbmZv OjpleGlzdHMoc3dyZXNhbXBsZVBhdGgpKSB7CisrICAgICAgICByZXN1bHQuZmZtcGVnVmVyc2lv biA9IGZmbXBlZ1ZlcjsKKysgICAgICAgIHJlc3VsdC5vcmlnaW4gPSBvcmlnaW47CisrICAgICAg ICByZXN1bHQuc2VhcmNoRGlyID0gc2VhcmNoRGlyOworICAgICAgICAgcmVzdWx0LmF2VXRpbFBh dGggPSBhdnV0aWxQYXRoOworICAgICAgICAgcmVzdWx0LmF2Q29kZWNQYXRoID0gYXZjb2RlY1Bh dGg7CisgICAgICAgICByZXN1bHQuYXZGb3JtYXRQYXRoID0gYXZmb3JtYXRQYXRoOworQEAgLTE3 MSwyOSArMTc2LDExNCBAQCBGRm1wZWdWZXJzaW9uIHZlcnNpb25Gcm9tQVZGb3JtYXRQYXRoKGNv CisgICAgIHJldHVybiBGRk1QRUdfSU5WQUxJRF9WRVJTSU9OOworIH0KKyAKKy1GRm1wZWdMaWJQ YXRocyBmaW5kTGlicmFyeVBhdGhzKGNvbnN0IGlvOjpwYXRoX3QmIGNvbmZpZ1BhdGgpCisrc3Rh dGljIGlvOjpwYXRoX3Qgbm9ybWFsaXplZFNlYXJjaFBhdGgoY29uc3QgaW86OnBhdGhfdCYgcGF0 aCkKKyB7CistICAgIEZGbXBlZ0xpYlBhdGhzIHJlc3VsdDsKKysgICAgY29uc3QgaW86OkZpbGVJ bmZvIGZpbGVJbmZvKHBhdGgpOworKyAgICBjb25zdCBTdHJpbmcgY2Fub25pY2FsUGF0aCA9IGZp bGVJbmZvLmNhbm9uaWNhbEZpbGVQYXRoKCk7CisrICAgIHJldHVybiBjYW5vbmljYWxQYXRoLmVt cHR5KCkgPyBpbzo6cGF0aF90KGZpbGVJbmZvLmFic29sdXRlRmlsZVBhdGgoKSkgOiBpbzo6cGF0 aF90KGNhbm9uaWNhbFBhdGgpOworK30KKyAKKy0gICAgaW86OnBhdGhzX3Qgc2VhcmNoUGF0aHM7 CistICAgIGlmICghY29uZmlnUGF0aC5lbXB0eSgpICYmIGlvOjpGaWxlSW5mbzo6ZXhpc3RzKGNv bmZpZ1BhdGgpKSB7CistICAgICAgICBzZWFyY2hQYXRocy5wdXNoX2JhY2soaW86OkZpbGVJbmZv KGNvbmZpZ1BhdGgpLmVudHJ5VHlwZSgpID09IGlvOjpFbnRyeVR5cGU6OkRpcgorLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgID8gY29uZmlnUGF0aCA6IGlvOjpkaXJwYXRoKGNvbmZpZ1Bh dGgpKTsKKytzdGF0aWMgU3RyaW5nIHNlYXJjaFBhdGhLZXkoY29uc3QgaW86OnBhdGhfdCYgcGF0 aCkKKyt7CisrI2lmIGRlZmluZWQoUV9PU19XSU4pCisrICAgIHJldHVybiBwYXRoLnRvU3RyaW5n KCkudG9Mb3dlcigpOworKyNlbHNlCisrICAgIHJldHVybiBwYXRoLnRvU3RyaW5nKCk7CisrI2Vu ZGlmCisrfQorKworK3N0YXRpYyBib29sIGNvbnRhaW5zU2VhcmNoUGF0aChjb25zdCBpbzo6cGF0 aHNfdCYgcGF0aHMsIGNvbnN0IGlvOjpwYXRoX3QmIHBhdGgpCisreworKyAgICBjb25zdCBTdHJp bmcgcGF0aEtleSA9IHNlYXJjaFBhdGhLZXkocGF0aCk7CisrICAgIHJldHVybiBzdGQ6OmZpbmRf aWYocGF0aHMuY2JlZ2luKCksIHBhdGhzLmNlbmQoKSwgWyZwYXRoS2V5XShjb25zdCBpbzo6cGF0 aF90JiBjYW5kaWRhdGUpIHsKKysgICAgICAgIHJldHVybiBzZWFyY2hQYXRoS2V5KGNhbmRpZGF0 ZSkgPT0gcGF0aEtleTsKKysgICAgfSkgIT0gcGF0aHMuY2VuZCgpOworK30KKysKKytzdGF0aWMg aW86OnBhdGhzX3Qgbm9ybWFsaXplZFNlYXJjaFBhdGhzKGNvbnN0IGlvOjpwYXRoc190JiBwYXRo cykKKyt7CisrICAgIGlvOjpwYXRoc190IHJlc3VsdDsKKysgICAgcmVzdWx0LnJlc2VydmUocGF0 aHMuc2l6ZSgpKTsKKysKKysgICAgZm9yIChjb25zdCBpbzo6cGF0aF90JiBwYXRoIDogcGF0aHMp IHsKKysgICAgICAgIGNvbnN0IGlvOjpwYXRoX3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVk U2VhcmNoUGF0aChwYXRoKTsKKysgICAgICAgIGlmIChub3JtYWxpemVkUGF0aC5lbXB0eSgpIHx8 IGNvbnRhaW5zU2VhcmNoUGF0aChyZXN1bHQsIG5vcm1hbGl6ZWRQYXRoKSkgeworKyAgICAgICAg ICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhu b3JtYWxpemVkUGF0aCk7CisgICAgIH0KKyAKKy0gICAgZm9yIChjb25zdCBpbzo6cGF0aF90JiBw IDogZGVmYXVsdFNlYXJjaFBhdGhzKCkpIHsKKy0gICAgICAgIHNlYXJjaFBhdGhzLnB1c2hfYmFj ayhwKTsKKysgICAgc3RkOjpzb3J0KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIFtdKGNv bnN0IGlvOjpwYXRoX3QmIGZpcnN0LCBjb25zdCBpbzo6cGF0aF90JiBzZWNvbmQpIHsKKysgICAg ICAgIHJldHVybiBzZWFyY2hQYXRoS2V5KGZpcnN0KSA8IHNlYXJjaFBhdGhLZXkoc2Vjb25kKTsK KysgICAgfSk7CisrICAgIHJldHVybiByZXN1bHQ7CisrfQorKworK3N0YXRpYyB2b2lkIGFwcGVu ZExpYnJhcnlQYXRoc0ZvckFsbFZlcnNpb25zKEZGbXBlZ0xpYlBhdGhzTGlzdCYgcmVzdWx0LCBj b25zdCBpbzo6cGF0aF90JiBzZWFyY2hQYXRoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZGbXBlZ0NhbmRpZGF0ZU9yaWdpbiBvcmlnaW4pCisreworKyAg ICBmb3IgKGNvbnN0IGF1dG8mIFtmZm1wZWdWZXJzaW9uLCBfXSA6IEZGTVBFR19DT01QT05FTlRT X1ZFUlNJT05TKSB7CisrICAgICAgICBGRm1wZWdMaWJQYXRocyBwYXRocyA9IGxpYnJhcnlQYXRo c0ZvclZlcnNpb24oZmZtcGVnVmVyc2lvbiwgc2VhcmNoUGF0aCwgb3JpZ2luKTsKKysgICAgICAg IGlmICghcGF0aHMuYXZGb3JtYXRQYXRoLmVtcHR5KCkpIHsKKysgICAgICAgICAgICByZXN1bHQu cHVzaF9iYWNrKHN0ZDo6bW92ZShwYXRocykpOworKyAgICAgICAgfQorICAgICB9CisrfQorIAor LSAgICBmb3IgKGNvbnN0IGlvOjpwYXRoX3QmIHBhdGggOiBzZWFyY2hQYXRocykgeworLSAgICAg ICAgZm9yIChjb25zdCBhdXRvJiBbZmZtcGVnVmVyLCBfXSA6IEZGTVBFR19DT01QT05FTlRTX1ZF UlNJT05TKSB7CistICAgICAgICAgICAgcmVzdWx0ID0gbGlicmFyeVBhdGhzRm9yVmVyc2lvbihm Zm1wZWdWZXIsIHBhdGgpOworLSAgICAgICAgICAgIGlmICghcmVzdWx0LmF2Rm9ybWF0UGF0aC5l bXB0eSgpKSB7CistICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CistICAgICAgICAgICAg fQorK0ZGbXBlZ0xpYlBhdGhzTGlzdCBmaW5kTGlicmFyeVBhdGhzKGNvbnN0IGlvOjpwYXRoX3Qm IGNvbmZpZ1BhdGgpCisreworKyAgICByZXR1cm4gZmluZExpYnJhcnlQYXRocyhjb25maWdQYXRo LCBkZWZhdWx0U2VhcmNoUGF0aHMoKSk7CisrfQorKworK0ZGbXBlZ0xpYlBhdGhzTGlzdCBmaW5k TGlicmFyeVBhdGhzKGNvbnN0IGlvOjpwYXRoX3QmIGNvbmZpZ1BhdGgsIGNvbnN0IGlvOjpwYXRo c190JiBkZWZhdWx0UGF0aHMpCisreworKyAgICBGRm1wZWdMaWJQYXRoc0xpc3QgcmVzdWx0Owor KyAgICBjb25zdCBpbzo6cGF0aHNfdCBhdXRvbWF0aWNTZWFyY2hQYXRocyA9IG5vcm1hbGl6ZWRT ZWFyY2hQYXRocyhkZWZhdWx0UGF0aHMpOworKworKyAgICBpZiAoIWNvbmZpZ1BhdGguZW1wdHko KSAmJiBpbzo6RmlsZUluZm86OmV4aXN0cyhjb25maWdQYXRoKSkgeworKyAgICAgICAgY29uc3Qg aW86OnBhdGhfdCBjb25maWd1cmVkU2VhcmNoUGF0aCA9IG5vcm1hbGl6ZWRTZWFyY2hQYXRoKAor KyAgICAgICAgICAgIGlvOjpGaWxlSW5mbyhjb25maWdQYXRoKS5lbnRyeVR5cGUoKSA9PSBpbzo6 RW50cnlUeXBlOjpEaXIgPyBjb25maWdQYXRoIDogaW86OmRpcnBhdGgoY29uZmlnUGF0aCkpOwor KworKyAgICAgICAgaWYgKCFjb250YWluc1NlYXJjaFBhdGgoYXV0b21hdGljU2VhcmNoUGF0aHMs IGNvbmZpZ3VyZWRTZWFyY2hQYXRoKSkgeworKyAgICAgICAgICAgIGFwcGVuZExpYnJhcnlQYXRo c0ZvckFsbFZlcnNpb25zKHJlc3VsdCwgY29uZmlndXJlZFNlYXJjaFBhdGgsIEZGbXBlZ0NhbmRp ZGF0ZU9yaWdpbjo6Q29uZmlndXJlZCk7CisgICAgICAgICB9CisgICAgIH0KKyAKKysgICAgRkZt cGVnTGliUGF0aHNMaXN0IGF1dG9tYXRpY0NhbmRpZGF0ZXM7CisrICAgIGZvciAoY29uc3QgaW86 OnBhdGhfdCYgcGF0aCA6IGF1dG9tYXRpY1NlYXJjaFBhdGhzKSB7CisrICAgICAgICBhcHBlbmRM aWJyYXJ5UGF0aHNGb3JBbGxWZXJzaW9ucyhhdXRvbWF0aWNDYW5kaWRhdGVzLCBwYXRoLCBGRm1w ZWdDYW5kaWRhdGVPcmlnaW46OkF1dG9tYXRpYyk7CisrICAgIH0KKysKKysgICAgc3RkOjpzb3J0 KGF1dG9tYXRpY0NhbmRpZGF0ZXMuYmVnaW4oKSwgYXV0b21hdGljQ2FuZGlkYXRlcy5lbmQoKSwg W10oY29uc3QgRkZtcGVnTGliUGF0aHMmIGZpcnN0LCBjb25zdCBGRm1wZWdMaWJQYXRocyYgc2Vj b25kKSB7CisrICAgICAgICBpZiAoZmlyc3QuZmZtcGVnVmVyc2lvbiAhPSBzZWNvbmQuZmZtcGVn VmVyc2lvbikgeworKyAgICAgICAgICAgIHJldHVybiBmaXJzdC5mZm1wZWdWZXJzaW9uID4gc2Vj b25kLmZmbXBlZ1ZlcnNpb247CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gc2VhcmNoUGF0 aEtleShmaXJzdC5zZWFyY2hEaXIpIDwgc2VhcmNoUGF0aEtleShzZWNvbmQuc2VhcmNoRGlyKTsK KysgICAgfSk7CisrCisrICAgIHJlc3VsdC5pbnNlcnQocmVzdWx0LmVuZCgpLCBhdXRvbWF0aWND YW5kaWRhdGVzLmNiZWdpbigpLCBhdXRvbWF0aWNDYW5kaWRhdGVzLmNlbmQoKSk7CisrCisgICAg IHJldHVybiByZXN1bHQ7CisgfQorKworK3N0ZDo6b3B0aW9uYWw8aW86OnBhdGhfdD4gY29uZmln dXJlZFBhdGhUb1BlcnNpc3QoY29uc3QgaW86OnBhdGhfdCYgcmVxdWVzdGVkUGF0aCwgY29uc3Qg RkZtcGVnTGliUGF0aHMmIGxvYWRlZENhbmRpZGF0ZSkKKyt7CisrICAgIGlmIChyZXF1ZXN0ZWRQ YXRoLmVtcHR5KCkpIHsKKysgICAgICAgIHJldHVybiBpbzo6cGF0aF90KCk7CisrICAgIH0KKysK KysgICAgY29uc3QgaW86OkZpbGVJbmZvIHJlcXVlc3RlZEZpbGVJbmZvKHJlcXVlc3RlZFBhdGgp OworKyAgICBpZiAoIXJlcXVlc3RlZEZpbGVJbmZvLmV4aXN0cygpKSB7CisrICAgICAgICByZXR1 cm4gc3RkOjpudWxsb3B0OworKyAgICB9CisrCisrICAgIGNvbnN0IGlvOjpwYXRoX3QgcmVxdWVz dGVkU2VhcmNoUGF0aCA9IG5vcm1hbGl6ZWRTZWFyY2hQYXRoKAorKyAgICAgICAgcmVxdWVzdGVk RmlsZUluZm8uZW50cnlUeXBlKCkgPT0gaW86OkVudHJ5VHlwZTo6RGlyID8gcmVxdWVzdGVkUGF0 aCA6IGlvOjpkaXJwYXRoKHJlcXVlc3RlZFBhdGgpKTsKKysgICAgaWYgKHNlYXJjaFBhdGhLZXko cmVxdWVzdGVkU2VhcmNoUGF0aCkgIT0gc2VhcmNoUGF0aEtleShsb2FkZWRDYW5kaWRhdGUuc2Vh cmNoRGlyKSkgeworKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKysgICAgfQorKworKyAg ICByZXR1cm4gcmVxdWVzdGVkU2VhcmNoUGF0aDsKKyt9CisgfQorZGlmZiAtdXAgTXVzZVNjb3Jl LTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVndXRpbHMuaC5mZm1wZWc5 IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZ3V0aWxz LmgKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1w ZWd1dGlscy5oLmZmbXBlZzkJMjAyNi0wNy0wNiAwOTo1MjozMi4wMDAwMDAwMDAgKzAyMDAKKysr KyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWd1dGls cy5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjgxMjc5OTUxICswMjAwCitAQCAtMjIsNiArMjIsNyBA QAorIAorICNwcmFnbWEgb25jZQorIAorKyNpbmNsdWRlIDxvcHRpb25hbD4KKyAjaW5jbHVkZSA8 dmVjdG9yPgorIAorICNpbmNsdWRlICJpby9wYXRoLmgiCitAQCAtMjksNiArMzAsNyBAQAorICNp bmNsdWRlICIuLi9tZWRpYXR5cGVzLmgiCisgCisgbmFtZXNwYWNlIG11c2U6Om1lZGlhIHsKKytz dGF0aWMgY29uc3QgRkZtcGVnVmVyc2lvbiBGRk1QRUdfVjkgPSA5OworIHN0YXRpYyBjb25zdCBG Rm1wZWdWZXJzaW9uIEZGTVBFR19WOCA9IDg7Cisgc3RhdGljIGNvbnN0IEZGbXBlZ1ZlcnNpb24g RkZNUEVHX1Y3ID0gNzsKKyBzdGF0aWMgY29uc3QgRkZtcGVnVmVyc2lvbiBGRk1QRUdfVjYgPSA2 OworQEAgLTUwLDYgKzUyLDcgQEAgc3RydWN0IEZGbXBlZ1ZlcnNpb25JbmZvIHsKKyAKKyBzdGF0 aWMgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGludCwgRkZtcGVnVmVyc2lvbkluZm8+ID4g RkZNUEVHX0NPTVBPTkVOVFNfVkVSU0lPTlMgPSB7CisgICAgIC8vIGZmbXBlZyAgICAgICAgICAg YXZGb3JtYXQgICAgYXZVdGlsICAgICAgYXZDb2RlYyAgICAgc3dTY2FsZSAgICBzd1Jlc2FtcGxl CisrICAgIHsgRkZNUEVHX1Y5LCAgICAgICAgeyA2MywgICAgICAgNjEsICAgICAgICAgNjMsICAg ICAgICAgMTAsICAgICAgICA3IH0gfSwKKyAgICAgeyBGRk1QRUdfVjgsICAgICAgICB7IDYyLCAg ICAgICA2MCwgICAgICAgICA2MiwgICAgICAgICA5LCAgICAgICAgIDYgfSB9LAorICAgICB7IEZG TVBFR19WNywgICAgICAgIHsgNjEsICAgICAgIDU5LCAgICAgICAgIDYxLCAgICAgICAgIDgsICAg ICAgICAgNSB9IH0sCisgICAgIHsgRkZNUEVHX1Y2LCAgICAgICAgeyA2MCwgICAgICAgNTgsICAg ICAgICAgNjAsICAgICAgICAgNywgICAgICAgICA0IH0gfSwKK0BAIC01Nyw3ICs2MCwxNSBAQCBz dGF0aWMgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGludCwKKyAgICAgeyBGRk1QRUdfVjQs ICAgICAgICB7IDU4LCAgICAgICA1NiwgICAgICAgICA1OCwgICAgICAgICA1LCAgICAgICAgIDMg fSB9LAorIH07CisgCisrZW51bSBjbGFzcyBGRm1wZWdDYW5kaWRhdGVPcmlnaW4geworKyAgICBB dXRvbWF0aWMsCisrICAgIENvbmZpZ3VyZWQKKyt9OworKworIHN0cnVjdCBGRm1wZWdMaWJQYXRo cyB7CisrICAgIEZGbXBlZ1ZlcnNpb24gZmZtcGVnVmVyc2lvbiA9IEZGTVBFR19JTlZBTElEX1ZF UlNJT047CisrICAgIEZGbXBlZ0NhbmRpZGF0ZU9yaWdpbiBvcmlnaW4gPSBGRm1wZWdDYW5kaWRh dGVPcmlnaW46OkF1dG9tYXRpYzsKKysgICAgaW86OnBhdGhfdCBzZWFyY2hEaXI7CisgICAgIGlv OjpwYXRoX3QgYXZVdGlsUGF0aDsKKyAgICAgaW86OnBhdGhfdCBhdkNvZGVjUGF0aDsKKyAgICAg aW86OnBhdGhfdCBhdkZvcm1hdFBhdGg7CitAQCAtNjUsOCArNzYsMTIgQEAgc3RydWN0IEZGbXBl Z0xpYlBhdGhzIHsKKyAgICAgaW86OnBhdGhfdCBzd1Jlc2FtcGxlUGF0aDsKKyB9OworIAorK3Vz aW5nIEZGbXBlZ0xpYlBhdGhzTGlzdCA9IHN0ZDo6dmVjdG9yPEZGbXBlZ0xpYlBhdGhzPjsKKysK KyBpbzo6cGF0aHNfdCBkZWZhdWx0U2VhcmNoUGF0aHMoKTsKKyAKKy1GRm1wZWdMaWJQYXRocyBm aW5kTGlicmFyeVBhdGhzKGNvbnN0IGlvOjpwYXRoX3QmIGZmbXBlZ0xpYnNEaXIpOworK0ZGbXBl Z0xpYlBhdGhzTGlzdCBmaW5kTGlicmFyeVBhdGhzKGNvbnN0IGlvOjpwYXRoX3QmIGZmbXBlZ0xp YnNEaXIpOworK0ZGbXBlZ0xpYlBhdGhzTGlzdCBmaW5kTGlicmFyeVBhdGhzKGNvbnN0IGlvOjpw YXRoX3QmIGZmbXBlZ0xpYnNEaXIsIGNvbnN0IGlvOjpwYXRoc190JiBkZWZhdWx0UGF0aHMpOwor K3N0ZDo6b3B0aW9uYWw8aW86OnBhdGhfdD4gY29uZmlndXJlZFBhdGhUb1BlcnNpc3QoY29uc3Qg aW86OnBhdGhfdCYgcmVxdWVzdGVkUGF0aCwgY29uc3QgRkZtcGVnTGliUGF0aHMmIGxvYWRlZENh bmRpZGF0ZSk7CisgRkZtcGVnVmVyc2lvbiB2ZXJzaW9uRnJvbUFWRm9ybWF0UGF0aChjb25zdCBp bzo6cGF0aF90JiBwYXRoKTsKKyB9CitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1l d29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjQvZmZtcGVnbGliaGFuZGxlci5jcHAuZmZtcGVn OSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjQv ZmZtcGVnbGliaGFuZGxlci5jcHAKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9t ZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjQvZmZtcGVnbGliaGFuZGxlci5jcHAuZmZtcGVnOQkyMDI2 LTA3LTA2IDA5OjUyOjMyLjAwMDAwMDAwMCArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMv ZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92NC9mZm1wZWdsaWJoYW5kbGVyLmNwcAky MDI2LTA5LTA3IDEyOjIzOjQ3LjY4MTUwNTU4OCArMDIwMAorQEAgLTIyLDEwICsyMiw2IEBACisg CisgI2luY2x1ZGUgImZmbXBlZ2xpYmhhbmRsZXIuaCIKKyAKKy0jaWYgIWRlZmluZWQoUV9PU19X SU4pCistI2luY2x1ZGUgPGRsZmNuLmg+CistI2VuZGlmCistCisgI2luY2x1ZGUgImlvL2ZpbGVp bmZvLmgiCisgI2luY2x1ZGUgImdsb2JhbC9kbGliLmgiCisgCitAQCAtMzQsMjEgKzMwLDIwIEBA CisgbmFtZXNwYWNlIG11c2U6Om1lZGlhOjpmZm1wZWc6OnY0IHsKKyAjZGVmaW5lIFJFU09MVkVf RlJPTShsaWIsIG5hbWUpIGRvIHsgXAorICAgICAgICAgbmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8 ZGVjbHR5cGUobmFtZSk+KGdldFN5bWJvbChsaWIsICNuYW1lKSk7IFwKKy0gICAgICAgIGlmICgh bmFtZSkgeyBMT0dXKCkgPDwgIkZGbXBlZzogbWlzc2luZyBzeW1ib2wgIiAjbmFtZTsgcmV0dXJu IGZhbHNlOyB9IFwKKysgICAgICAgIGlmICghbmFtZSkgeyBMT0dXKCkgPDwgIkZGbXBlZzogbWlz c2luZyBzeW1ib2wgIiAjbmFtZTsgY2xlYXJGdW5jdGlvbnMoKTsgcmV0dXJuIGZhbHNlOyB9IFwK KyB9IHdoaWxlICgwKQorIAorK0ZGbXBlZ0xpYkhhbmRsZXI6On5GRm1wZWdMaWJIYW5kbGVyKCkK Kyt7CisrICAgIHVubG9hZCgpOworK30KKysKKyB2b2lkKiBGRm1wZWdMaWJIYW5kbGVyOjpnZXRT eW1ib2wodm9pZCogbGliLCBjb25zdCBjaGFyKiBuYW1lKSBjb25zdAorIHsKKyAgICAgaWYgKCFs aWIpIHsKKyAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICB9CistICAgIHZvaWQqIHN5bSA9 IG11c2U6OmdldExpYkZ1bmMobGliLCBuYW1lKTsKKy0gICAgaWYgKCFzeW0pIHsKKy0jaWYgIWRl ZmluZWQoUV9PU19XSU4pCistICAgICAgICBzeW0gPSBkbHN5bShSVExEX0RFRkFVTFQsIG5hbWUp OworLSNlbmRpZgorLSAgICB9CistICAgIHJldHVybiBzeW07CisrICAgIHJldHVybiBtdXNlOjpn ZXRMaWJGdW5jKGxpYiwgbmFtZSk7CisgfQorIAorIGJvb2wgRkZtcGVnTGliSGFuZGxlcjo6bG9h ZEFwaSgpCitAQCAtMTIyLDYgKzExNyw3IEBAIGJvb2wgRkZtcGVnTGliSGFuZGxlcjo6bG9hZExp Yihjb25zdCBpbzoKKyAgICAgICAgIHx8ICF0cnlMb2FkUGF0aChtX3N3c1NjYWxlTGlicmFyeSwg c3dTY2FsZVBhdGgpCisgICAgICAgICB8fCAhdHJ5TG9hZFBhdGgobV9hdkNvZGVjTGlicmFyeSwg YXZDb2RlY1BhdGgpCisgICAgICAgICB8fCAhdHJ5TG9hZFBhdGgobV9hdkZvcm1hdExpYnJhcnks IGF2Rm9ybWF0UGF0aCkpIHsKKysgICAgICAgIHVubG9hZCgpOworICAgICAgICAgcmV0dXJuIGZh bHNlOworICAgICB9CisgCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9t ZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjQvZmZtcGVnbGliaGFuZGxlci5oLmZmbXBlZzkgTXVzZVNj b3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y0L2ZmbXBlZ2xp YmhhbmRsZXIuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVy bmFsL2ZmbXBlZy92NC9mZm1wZWdsaWJoYW5kbGVyLmguZmZtcGVnOQkyMDI2LTA3LTA2IDA5OjUy OjMyLjAwMDAwMDAwMCArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21l ZGlhL2ludGVybmFsL2ZmbXBlZy92NC9mZm1wZWdsaWJoYW5kbGVyLmgJMjAyNi0wOS0wNyAxMjoy Mzo0Ny42ODE1NTY3NjcgKzAyMDAKK0BAIC00NCw2ICs0NCw5IEBAIGNsYXNzIEZGbXBlZ0xpYkhh bmRsZXIKKyB7CisgcHVibGljOgorICAgICBGRm1wZWdMaWJIYW5kbGVyKCkgPSBkZWZhdWx0Owor KyAgICB+RkZtcGVnTGliSGFuZGxlcigpOworKyAgICBGRm1wZWdMaWJIYW5kbGVyKGNvbnN0IEZG bXBlZ0xpYkhhbmRsZXImKSA9IGRlbGV0ZTsKKysgICAgRkZtcGVnTGliSGFuZGxlciYgb3BlcmF0 b3I9KGNvbnN0IEZGbXBlZ0xpYkhhbmRsZXImKSA9IGRlbGV0ZTsKKyAKKyAgICAgYm9vbCBsb2Fk TGliKGNvbnN0IGlvOjpwYXRoX3QmIGF2VXRpbFBhdGgsIGNvbnN0IGlvOjpwYXRoX3QmIGF2Q29k ZWNQYXRoLCBjb25zdCBpbzo6cGF0aF90JiBhdkZvcm1hdFBhdGgsIGNvbnN0IGlvOjpwYXRoX3Qm IHN3U2NhbGVQYXRoLAorICAgICAgICAgICAgICAgICAgY29uc3QgaW86OnBhdGhfdCYgc3dSZXNh bXBsZVBhdGgpOworZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEv aW50ZXJuYWwvZmZtcGVnL3Y1L2ZmbXBlZ2xpYmhhbmRsZXIuY3BwLmZmbXBlZzkgTXVzZVNjb3Jl LTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y1L2ZmbXBlZ2xpYmhh bmRsZXIuY3BwCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJu YWwvZmZtcGVnL3Y1L2ZmbXBlZ2xpYmhhbmRsZXIuY3BwLmZmbXBlZzkJMjAyNi0wNy0wNiAwOTo1 MjozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9t ZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjUvZmZtcGVnbGliaGFuZGxlci5jcHAJMjAyNi0wOS0wNyAx MjoyMzo0Ny42ODE2MTAyNDMgKzAyMDAKK0BAIC0yMiwxMCArMjIsNiBAQAorIAorICNpbmNsdWRl ICJmZm1wZWdsaWJoYW5kbGVyLmgiCisgCistI2lmICFkZWZpbmVkKFFfT1NfV0lOKQorLSNpbmNs dWRlIDxkbGZjbi5oPgorLSNlbmRpZgorLQorICNpbmNsdWRlICJpby9maWxlaW5mby5oIgorICNp bmNsdWRlICJnbG9iYWwvZGxpYi5oIgorIAorQEAgLTM0LDIxICszMCwyMCBAQAorIG5hbWVzcGFj ZSBtdXNlOjptZWRpYTo6ZmZtcGVnOjp2NSB7CisgI2RlZmluZSBSRVNPTFZFX0ZST00obGliLCBu YW1lKSBkbyB7IFwKKyAgICAgICAgIG5hbWUgPSByZWludGVycHJldF9jYXN0PGRlY2x0eXBlKG5h bWUpPihnZXRTeW1ib2wobGliLCAjbmFtZSkpOyBcCistICAgICAgICBpZiAoIW5hbWUpIHsgTE9H VygpIDw8ICJGRm1wZWc6IG1pc3Npbmcgc3ltYm9sICIgI25hbWU7IHJldHVybiBmYWxzZTsgfSBc CisrICAgICAgICBpZiAoIW5hbWUpIHsgTE9HVygpIDw8ICJGRm1wZWc6IG1pc3Npbmcgc3ltYm9s ICIgI25hbWU7IGNsZWFyRnVuY3Rpb25zKCk7IHJldHVybiBmYWxzZTsgfSBcCisgfSB3aGlsZSAo MCkKKyAKKytGRm1wZWdMaWJIYW5kbGVyOjp+RkZtcGVnTGliSGFuZGxlcigpCisreworKyAgICB1 bmxvYWQoKTsKKyt9CisrCisgdm9pZCogRkZtcGVnTGliSGFuZGxlcjo6Z2V0U3ltYm9sKHZvaWQq IGxpYiwgY29uc3QgY2hhciogbmFtZSkgY29uc3QKKyB7CisgICAgIGlmICghbGliKSB7CisgICAg ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgfQorLSAgICB2b2lkKiBzeW0gPSBtdXNlOjpnZXRM aWJGdW5jKGxpYiwgbmFtZSk7CistICAgIGlmICghc3ltKSB7CistI2lmICFkZWZpbmVkKFFfT1Nf V0lOKQorLSAgICAgICAgc3ltID0gZGxzeW0oUlRMRF9ERUZBVUxULCBuYW1lKTsKKy0jZW5kaWYK Ky0gICAgfQorLSAgICByZXR1cm4gc3ltOworKyAgICByZXR1cm4gbXVzZTo6Z2V0TGliRnVuYyhs aWIsIG5hbWUpOworIH0KKyAKKyBib29sIEZGbXBlZ0xpYkhhbmRsZXI6OmxvYWRBcGkoKQorQEAg LTEyMiw2ICsxMTcsNyBAQCBib29sIEZGbXBlZ0xpYkhhbmRsZXI6OmxvYWRMaWIoY29uc3QgaW86 CisgICAgICAgICB8fCAhdHJ5TG9hZFBhdGgobV9zd3NTY2FsZUxpYnJhcnksIHN3U2NhbGVQYXRo KQorICAgICAgICAgfHwgIXRyeUxvYWRQYXRoKG1fYXZDb2RlY0xpYnJhcnksIGF2Q29kZWNQYXRo KQorICAgICAgICAgfHwgIXRyeUxvYWRQYXRoKG1fYXZGb3JtYXRMaWJyYXJ5LCBhdkZvcm1hdFBh dGgpKSB7CisrICAgICAgICB1bmxvYWQoKTsKKyAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg fQorIAorZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJu YWwvZmZtcGVnL3Y1L2ZmbXBlZ2xpYmhhbmRsZXIuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9z cmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92NS9mZm1wZWdsaWJoYW5kbGVyLmgK Ky0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcv djUvZmZtcGVnbGliaGFuZGxlci5oLmZmbXBlZzkJMjAyNi0wNy0wNiAwOTo1MjozMi4wMDAwMDAw MDAgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5h bC9mZm1wZWcvdjUvZmZtcGVnbGliaGFuZGxlci5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjgxNjYw Mjg2ICswMjAwCitAQCAtNDQsNiArNDQsOSBAQCBjbGFzcyBGRm1wZWdMaWJIYW5kbGVyCisgewor IHB1YmxpYzoKKyAgICAgRkZtcGVnTGliSGFuZGxlcigpID0gZGVmYXVsdDsKKysgICAgfkZGbXBl Z0xpYkhhbmRsZXIoKTsKKysgICAgRkZtcGVnTGliSGFuZGxlcihjb25zdCBGRm1wZWdMaWJIYW5k bGVyJikgPSBkZWxldGU7CisrICAgIEZGbXBlZ0xpYkhhbmRsZXImIG9wZXJhdG9yPShjb25zdCBG Rm1wZWdMaWJIYW5kbGVyJikgPSBkZWxldGU7CisgCisgICAgIGJvb2wgbG9hZExpYihjb25zdCBp bzo6cGF0aF90JiBhdlV0aWxQYXRoLCBjb25zdCBpbzo6cGF0aF90JiBhdkNvZGVjUGF0aCwgY29u c3QgaW86OnBhdGhfdCYgYXZGb3JtYXRQYXRoLCBjb25zdCBpbzo6cGF0aF90JiBzd1NjYWxlUGF0 aCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGlvOjpwYXRoX3QmIHN3UmVzYW1wbGVQYXRoKTsK K2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2Zm bXBlZy92Ni9mZm1wZWdsaWJoYW5kbGVyLmNwcC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMv ZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92Ni9mZm1wZWdsaWJoYW5kbGVyLmNwcAor LS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92 Ni9mZm1wZWdsaWJoYW5kbGVyLmNwcC5mZm1wZWc5CTIwMjYtMDctMDYgMDk6NTI6MzIuMDAwMDAw MDAwICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJu YWwvZmZtcGVnL3Y2L2ZmbXBlZ2xpYmhhbmRsZXIuY3BwCTIwMjYtMDktMDcgMTI6MjM6NDcuNjgx NzIzOTE5ICswMjAwCitAQCAtMjIsMTAgKzIyLDYgQEAKKyAKKyAjaW5jbHVkZSAiZmZtcGVnbGli aGFuZGxlci5oIgorIAorLSNpZiAhZGVmaW5lZChRX09TX1dJTikKKy0jaW5jbHVkZSA8ZGxmY24u aD4KKy0jZW5kaWYKKy0KKyAjaW5jbHVkZSAiaW8vZmlsZWluZm8uaCIKKyAjaW5jbHVkZSAiZ2xv YmFsL2RsaWIuaCIKKyAKK0BAIC0zNCwyMSArMzAsMjAgQEAKKyBuYW1lc3BhY2UgbXVzZTo6bWVk aWE6OmZmbXBlZzo6djYgeworICNkZWZpbmUgUkVTT0xWRV9GUk9NKGxpYiwgbmFtZSkgZG8geyBc CisgICAgICAgICBuYW1lID0gcmVpbnRlcnByZXRfY2FzdDxkZWNsdHlwZShuYW1lKT4oZ2V0U3lt Ym9sKGxpYiwgI25hbWUpKTsgXAorLSAgICAgICAgaWYgKCFuYW1lKSB7IExPR1coKSA8PCAiRkZt cGVnOiBtaXNzaW5nIHN5bWJvbCAiICNuYW1lOyByZXR1cm4gZmFsc2U7IH0gXAorKyAgICAgICAg aWYgKCFuYW1lKSB7IExPR1coKSA8PCAiRkZtcGVnOiBtaXNzaW5nIHN5bWJvbCAiICNuYW1lOyBj bGVhckZ1bmN0aW9ucygpOyByZXR1cm4gZmFsc2U7IH0gXAorIH0gd2hpbGUgKDApCisgCisrRkZt cGVnTGliSGFuZGxlcjo6fkZGbXBlZ0xpYkhhbmRsZXIoKQorK3sKKysgICAgdW5sb2FkKCk7Cisr fQorKworIHZvaWQqIEZGbXBlZ0xpYkhhbmRsZXI6OmdldFN5bWJvbCh2b2lkKiBsaWIsIGNvbnN0 IGNoYXIqIG5hbWUpIGNvbnN0CisgeworICAgICBpZiAoIWxpYikgeworICAgICAgICAgcmV0dXJu IG51bGxwdHI7CisgICAgIH0KKy0gICAgdm9pZCogc3ltID0gbXVzZTo6Z2V0TGliRnVuYyhsaWIs IG5hbWUpOworLSAgICBpZiAoIXN5bSkgeworLSNpZiAhZGVmaW5lZChRX09TX1dJTikKKy0gICAg ICAgIHN5bSA9IGRsc3ltKFJUTERfREVGQVVMVCwgbmFtZSk7CistI2VuZGlmCistICAgIH0KKy0g ICAgcmV0dXJuIHN5bTsKKysgICAgcmV0dXJuIG11c2U6OmdldExpYkZ1bmMobGliLCBuYW1lKTsK KyB9CisgCisgYm9vbCBGRm1wZWdMaWJIYW5kbGVyOjpsb2FkQXBpKCkKK0BAIC0xMjIsNiArMTE3 LDcgQEAgYm9vbCBGRm1wZWdMaWJIYW5kbGVyOjpsb2FkTGliKGNvbnN0IGlvOgorICAgICAgICAg fHwgIXRyeUxvYWRQYXRoKG1fc3dzU2NhbGVMaWJyYXJ5LCBzd1NjYWxlUGF0aCkKKyAgICAgICAg IHx8ICF0cnlMb2FkUGF0aChtX2F2Q29kZWNMaWJyYXJ5LCBhdkNvZGVjUGF0aCkKKyAgICAgICAg IHx8ICF0cnlMb2FkUGF0aChtX2F2Rm9ybWF0TGlicmFyeSwgYXZGb3JtYXRQYXRoKSkgeworKyAg ICAgICAgdW5sb2FkKCk7CisgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgIH0KKyAKK2RpZmYg LXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92 Ni9mZm1wZWdsaWJoYW5kbGVyLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29y ay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjYvZmZtcGVnbGliaGFuZGxlci5oCistLS0gTXVzZVNj b3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y2L2ZmbXBlZ2xp YmhhbmRsZXIuaC5mZm1wZWc5CTIwMjYtMDctMDYgMDk6NTI6MzIuMDAwMDAwMDAwICswMjAwCisr KysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y2 L2ZmbXBlZ2xpYmhhbmRsZXIuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY4MTc4MDc1MSArMDIwMAor QEAgLTQ0LDYgKzQ0LDkgQEAgY2xhc3MgRkZtcGVnTGliSGFuZGxlcgorIHsKKyBwdWJsaWM6Cisg ICAgIEZGbXBlZ0xpYkhhbmRsZXIoKSA9IGRlZmF1bHQ7CisrICAgIH5GRm1wZWdMaWJIYW5kbGVy KCk7CisrICAgIEZGbXBlZ0xpYkhhbmRsZXIoY29uc3QgRkZtcGVnTGliSGFuZGxlciYpID0gZGVs ZXRlOworKyAgICBGRm1wZWdMaWJIYW5kbGVyJiBvcGVyYXRvcj0oY29uc3QgRkZtcGVnTGliSGFu ZGxlciYpID0gZGVsZXRlOworIAorICAgICBib29sIGxvYWRMaWIoY29uc3QgaW86OnBhdGhfdCYg YXZVdGlsUGF0aCwgY29uc3QgaW86OnBhdGhfdCYgYXZDb2RlY1BhdGgsIGNvbnN0IGlvOjpwYXRo X3QmIGF2Rm9ybWF0UGF0aCwgY29uc3QgaW86OnBhdGhfdCYgc3dTY2FsZVBhdGgsCisgICAgICAg ICAgICAgICAgICBjb25zdCBpbzo6cGF0aF90JiBzd1Jlc2FtcGxlUGF0aCk7CitkaWZmIC11cCBN dXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjcvZmZt cGVnbGliaGFuZGxlci5jcHAuZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9t ZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjcvZmZtcGVnbGliaGFuZGxlci5jcHAKKy0tLSBNdXNlU2Nv cmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjcvZmZtcGVnbGli aGFuZGxlci5jcHAuZmZtcGVnOQkyMDI2LTA3LTA2IDA5OjUyOjMyLjAwMDAwMDAwMCArMDIwMAor KysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92 Ny9mZm1wZWdsaWJoYW5kbGVyLmNwcAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY4MTg0NzM4MCArMDIw MAorQEAgLTIyLDEwICsyMiw2IEBACisgCisgI2luY2x1ZGUgImZmbXBlZ2xpYmhhbmRsZXIuaCIK KyAKKy0jaWYgIWRlZmluZWQoUV9PU19XSU4pCistI2luY2x1ZGUgPGRsZmNuLmg+CistI2VuZGlm CistCisgI2luY2x1ZGUgImlvL2ZpbGVpbmZvLmgiCisgI2luY2x1ZGUgImdsb2JhbC9kbGliLmgi CisgCitAQCAtMzQsMjEgKzMwLDIwIEBACisgbmFtZXNwYWNlIG11c2U6Om1lZGlhOjpmZm1wZWc6 OnY3IHsKKyAjZGVmaW5lIFJFU09MVkVfRlJPTShsaWIsIG5hbWUpIGRvIHsgXAorICAgICAgICAg bmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZGVjbHR5cGUobmFtZSk+KGdldFN5bWJvbChsaWIsICNu YW1lKSk7IFwKKy0gICAgICAgIGlmICghbmFtZSkgeyBMT0dXKCkgPDwgIkZGbXBlZzogbWlzc2lu ZyBzeW1ib2wgIiAjbmFtZTsgcmV0dXJuIGZhbHNlOyB9IFwKKysgICAgICAgIGlmICghbmFtZSkg eyBMT0dXKCkgPDwgIkZGbXBlZzogbWlzc2luZyBzeW1ib2wgIiAjbmFtZTsgY2xlYXJGdW5jdGlv bnMoKTsgcmV0dXJuIGZhbHNlOyB9IFwKKyB9IHdoaWxlICgwKQorIAorK0ZGbXBlZ0xpYkhhbmRs ZXI6On5GRm1wZWdMaWJIYW5kbGVyKCkKKyt7CisrICAgIHVubG9hZCgpOworK30KKysKKyB2b2lk KiBGRm1wZWdMaWJIYW5kbGVyOjpnZXRTeW1ib2wodm9pZCogbGliLCBjb25zdCBjaGFyKiBuYW1l KSBjb25zdAorIHsKKyAgICAgaWYgKCFsaWIpIHsKKyAgICAgICAgIHJldHVybiBudWxscHRyOwor ICAgICB9CistICAgIHZvaWQqIHN5bSA9IG11c2U6OmdldExpYkZ1bmMobGliLCBuYW1lKTsKKy0g ICAgaWYgKCFzeW0pIHsKKy0jaWYgIWRlZmluZWQoUV9PU19XSU4pCistICAgICAgICBzeW0gPSBk bHN5bShSVExEX0RFRkFVTFQsIG5hbWUpOworLSNlbmRpZgorLSAgICB9CistICAgIHJldHVybiBz eW07CisrICAgIHJldHVybiBtdXNlOjpnZXRMaWJGdW5jKGxpYiwgbmFtZSk7CisgfQorIAorIGJv b2wgRkZtcGVnTGliSGFuZGxlcjo6bG9hZEFwaSgpCitAQCAtMTIyLDYgKzExNyw3IEBAIGJvb2wg RkZtcGVnTGliSGFuZGxlcjo6bG9hZExpYihjb25zdCBpbzoKKyAgICAgICAgIHx8ICF0cnlMb2Fk UGF0aChtX3N3c1NjYWxlTGlicmFyeSwgc3dTY2FsZVBhdGgpCisgICAgICAgICB8fCAhdHJ5TG9h ZFBhdGgobV9hdkNvZGVjTGlicmFyeSwgYXZDb2RlY1BhdGgpCisgICAgICAgICB8fCAhdHJ5TG9h ZFBhdGgobV9hdkZvcm1hdExpYnJhcnksIGF2Rm9ybWF0UGF0aCkpIHsKKysgICAgICAgIHVubG9h ZCgpOworICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICB9CisgCitkaWZmIC11cCBNdXNlU2Nv cmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjcvZmZtcGVnbGli aGFuZGxlci5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50 ZXJuYWwvZmZtcGVnL3Y3L2ZmbXBlZ2xpYmhhbmRsZXIuaAorLS0tIE11c2VTY29yZS00LjcuNC9z cmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92Ny9mZm1wZWdsaWJoYW5kbGVyLmgu ZmZtcGVnOQkyMDI2LTA3LTA2IDA5OjUyOjMyLjAwMDAwMDAwMCArMDIwMAorKysrIE11c2VTY29y ZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92Ny9mZm1wZWdsaWJo YW5kbGVyLmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42ODE4OTkxNzMgKzAyMDAKK0BAIC00NCw2ICs0 NCw5IEBAIGNsYXNzIEZGbXBlZ0xpYkhhbmRsZXIKKyB7CisgcHVibGljOgorICAgICBGRm1wZWdM aWJIYW5kbGVyKCkgPSBkZWZhdWx0OworKyAgICB+RkZtcGVnTGliSGFuZGxlcigpOworKyAgICBG Rm1wZWdMaWJIYW5kbGVyKGNvbnN0IEZGbXBlZ0xpYkhhbmRsZXImKSA9IGRlbGV0ZTsKKysgICAg RkZtcGVnTGliSGFuZGxlciYgb3BlcmF0b3I9KGNvbnN0IEZGbXBlZ0xpYkhhbmRsZXImKSA9IGRl bGV0ZTsKKyAKKyAgICAgYm9vbCBsb2FkTGliKGNvbnN0IGlvOjpwYXRoX3QmIGF2VXRpbFBhdGgs IGNvbnN0IGlvOjpwYXRoX3QmIGF2Q29kZWNQYXRoLCBjb25zdCBpbzo6cGF0aF90JiBhdkZvcm1h dFBhdGgsIGNvbnN0IGlvOjpwYXRoX3QmIHN3U2NhbGVQYXRoLAorICAgICAgICAgICAgICAgICAg Y29uc3QgaW86OnBhdGhfdCYgc3dSZXNhbXBsZVBhdGgpOworZGlmZiAtdXAgTXVzZVNjb3JlLTQu Ny40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y4L2ZmbXBlZ2xpYmhhbmRs ZXIuY3BwLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJu YWwvZmZtcGVnL3Y4L2ZmbXBlZ2xpYmhhbmRsZXIuY3BwCistLS0gTXVzZVNjb3JlLTQuNy40L3Ny Yy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y4L2ZmbXBlZ2xpYmhhbmRsZXIuY3Bw LmZmbXBlZzkJMjAyNi0wNy0wNiAwOTo1MjozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBNdXNlU2Nv cmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjgvZmZtcGVnbGli aGFuZGxlci5jcHAJMjAyNi0wOS0wNyAxMjoyMzo0Ny42ODE5NTk5MTAgKzAyMDAKK0BAIC0yMiwx MCArMjIsNiBAQAorIAorICNpbmNsdWRlICJmZm1wZWdsaWJoYW5kbGVyLmgiCisgCistI2lmICFk ZWZpbmVkKFFfT1NfV0lOKQorLSNpbmNsdWRlIDxkbGZjbi5oPgorLSNlbmRpZgorLQorICNpbmNs dWRlICJpby9maWxlaW5mby5oIgorICNpbmNsdWRlICJnbG9iYWwvZGxpYi5oIgorIAorQEAgLTM0 LDIxICszMCwyMCBAQAorIG5hbWVzcGFjZSBtdXNlOjptZWRpYTo6ZmZtcGVnOjp2OCB7CisgI2Rl ZmluZSBSRVNPTFZFX0ZST00obGliLCBuYW1lKSBkbyB7IFwKKyAgICAgICAgIG5hbWUgPSByZWlu dGVycHJldF9jYXN0PGRlY2x0eXBlKG5hbWUpPihnZXRTeW1ib2wobGliLCAjbmFtZSkpOyBcCist ICAgICAgICBpZiAoIW5hbWUpIHsgTE9HVygpIDw8ICJGRm1wZWc6IG1pc3Npbmcgc3ltYm9sICIg I25hbWU7IHJldHVybiBmYWxzZTsgfSBcCisrICAgICAgICBpZiAoIW5hbWUpIHsgTE9HVygpIDw8 ICJGRm1wZWc6IG1pc3Npbmcgc3ltYm9sICIgI25hbWU7IGNsZWFyRnVuY3Rpb25zKCk7IHJldHVy biBmYWxzZTsgfSBcCisgfSB3aGlsZSAoMCkKKyAKKytGRm1wZWdMaWJIYW5kbGVyOjp+RkZtcGVn TGliSGFuZGxlcigpCisreworKyAgICB1bmxvYWQoKTsKKyt9CisrCisgdm9pZCogRkZtcGVnTGli SGFuZGxlcjo6Z2V0U3ltYm9sKHZvaWQqIGxpYiwgY29uc3QgY2hhciogbmFtZSkgY29uc3QKKyB7 CisgICAgIGlmICghbGliKSB7CisgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgfQorLSAg ICB2b2lkKiBzeW0gPSBtdXNlOjpnZXRMaWJGdW5jKGxpYiwgbmFtZSk7CistICAgIGlmICghc3lt KSB7CistI2lmICFkZWZpbmVkKFFfT1NfV0lOKQorLSAgICAgICAgc3ltID0gZGxzeW0oUlRMRF9E RUZBVUxULCBuYW1lKTsKKy0jZW5kaWYKKy0gICAgfQorLSAgICByZXR1cm4gc3ltOworKyAgICBy ZXR1cm4gbXVzZTo6Z2V0TGliRnVuYyhsaWIsIG5hbWUpOworIH0KKyAKKyBib29sIEZGbXBlZ0xp YkhhbmRsZXI6OmxvYWRBcGkoKQorQEAgLTEyMiw2ICsxMTcsNyBAQCBib29sIEZGbXBlZ0xpYkhh bmRsZXI6OmxvYWRMaWIoY29uc3QgaW86CisgICAgICAgICB8fCAhdHJ5TG9hZFBhdGgobV9zd3NT Y2FsZUxpYnJhcnksIHN3U2NhbGVQYXRoKQorICAgICAgICAgfHwgIXRyeUxvYWRQYXRoKG1fYXZD b2RlY0xpYnJhcnksIGF2Q29kZWNQYXRoKQorICAgICAgICAgfHwgIXRyeUxvYWRQYXRoKG1fYXZG b3JtYXRMaWJyYXJ5LCBhdkZvcm1hdFBhdGgpKSB7CisrICAgICAgICB1bmxvYWQoKTsKKyAgICAg ICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQorIAorZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3Ny Yy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y4L2ZmbXBlZ2xpYmhhbmRsZXIuaC5m Zm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBl Zy92OC9mZm1wZWdsaWJoYW5kbGVyLmgKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29y ay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjgvZmZtcGVnbGliaGFuZGxlci5oLmZmbXBlZzkJMjAy Ni0wNy0wNiAwOTo1MjozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3Jj L2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1wZWcvdjgvZmZtcGVnbGliaGFuZGxlci5oCTIw MjYtMDktMDcgMTI6MjM6NDcuNjgyMDEyMjkwICswMjAwCitAQCAtNDQsNiArNDQsOSBAQCBjbGFz cyBGRm1wZWdMaWJIYW5kbGVyCisgeworIHB1YmxpYzoKKyAgICAgRkZtcGVnTGliSGFuZGxlcigp ID0gZGVmYXVsdDsKKysgICAgfkZGbXBlZ0xpYkhhbmRsZXIoKTsKKysgICAgRkZtcGVnTGliSGFu ZGxlcihjb25zdCBGRm1wZWdMaWJIYW5kbGVyJikgPSBkZWxldGU7CisrICAgIEZGbXBlZ0xpYkhh bmRsZXImIG9wZXJhdG9yPShjb25zdCBGRm1wZWdMaWJIYW5kbGVyJikgPSBkZWxldGU7CisgCisg ICAgIGJvb2wgbG9hZExpYihjb25zdCBpbzo6cGF0aF90JiBhdlV0aWxQYXRoLCBjb25zdCBpbzo6 cGF0aF90JiBhdkNvZGVjUGF0aCwgY29uc3QgaW86OnBhdGhfdCYgYXZGb3JtYXRQYXRoLCBjb25z dCBpbzo6cGF0aF90JiBzd1NjYWxlUGF0aCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGlvOjpw YXRoX3QmIHN3UmVzYW1wbGVQYXRoKTsKK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJh bWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92OS9mZm1wZWdsaWJoYW5kbGVyLmNwcC5mZm1w ZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92 OS9mZm1wZWdsaWJoYW5kbGVyLmNwcAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3Jr L21lZGlhL2ludGVybmFsL2ZmbXBlZy92OS9mZm1wZWdsaWJoYW5kbGVyLmNwcC5mZm1wZWc5CTIw MjYtMDktMDcgMTI6MjM6NDcuNjgwMjI1MzQzICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3Ny Yy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y5L2ZmbXBlZ2xpYmhhbmRsZXIuY3Bw CTIwMjYtMDktMDcgMTI6MjM6NDcuNjgyMDYzMzAxICswMjAwCitAQCAtMCwwICsxLDIyOSBAQAor Ky8qCisrICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0zLjAtb25seQorKyAqIE11c2VT Y29yZS1TdHVkaW8tQ0xBLWFwcGxpZXMKKysgKgorKyAqIE11c2VTY29yZSBTdHVkaW8KKysgKiBN dXNpYyBDb21wb3NpdGlvbiAmIE5vdGF0aW9uCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMjUg TXVzZVNjb3JlIExpbWl0ZWQKKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgYXMKKysg KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKysgKgorKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAqIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor KyAqLworKworKyNpbmNsdWRlICJmZm1wZWdsaWJoYW5kbGVyLmgiCisrCisrI2luY2x1ZGUgImlv L2ZpbGVpbmZvLmgiCisrI2luY2x1ZGUgImdsb2JhbC9kbGliLmgiCisrCisrI2luY2x1ZGUgImxv Zy5oIgorKworK25hbWVzcGFjZSBtdXNlOjptZWRpYTo6ZmZtcGVnOjp2OSB7CisrI2RlZmluZSBS RVNPTFZFX0ZST00obGliLCBuYW1lKSBkbyB7IFwKKysgICAgICAgIG5hbWUgPSByZWludGVycHJl dF9jYXN0PGRlY2x0eXBlKG5hbWUpPihnZXRTeW1ib2wobGliLCAjbmFtZSkpOyBcCisrICAgICAg ICBpZiAoIW5hbWUpIHsgTE9HVygpIDw8ICJGRm1wZWc6IG1pc3Npbmcgc3ltYm9sICIgI25hbWU7 IGNsZWFyRnVuY3Rpb25zKCk7IHJldHVybiBmYWxzZTsgfSBcCisrfSB3aGlsZSAoMCkKKysKKytG Rm1wZWdMaWJIYW5kbGVyOjp+RkZtcGVnTGliSGFuZGxlcigpCisreworKyAgICB1bmxvYWQoKTsK Kyt9CisrCisrdm9pZCogRkZtcGVnTGliSGFuZGxlcjo6Z2V0U3ltYm9sKHZvaWQqIGxpYiwgY29u c3QgY2hhciogbmFtZSkgY29uc3QKKyt7CisrICAgIGlmICghbGliKSB7CisrICAgICAgICByZXR1 cm4gbnVsbHB0cjsKKysgICAgfQorKyAgICByZXR1cm4gbXVzZTo6Z2V0TGliRnVuYyhsaWIsIG5h bWUpOworK30KKysKKytib29sIEZGbXBlZ0xpYkhhbmRsZXI6OmxvYWRBcGkoKQorK3sKKysgICAg aWYgKCFtX2F2VXRpbExpYnJhcnkgfHwgIW1fYXZDb2RlY0xpYnJhcnkgfHwgIW1fYXZGb3JtYXRM aWJyYXJ5IHx8ICFtX3N3c1NjYWxlTGlicmFyeSB8fCAhbV9zd1Jlc2FtcGxlTGlicmFyeSkgewor KyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGNsZWFyRnVuY3Rpb25zKCk7 CisrCisrICAgIC8vIGxpYmF2dXRpbAorKyAgICBSRVNPTFZFX0ZST00obV9hdlV0aWxMaWJyYXJ5 LCBhdl9yZXNjYWxlX3EpOworKyAgICBSRVNPTFZFX0ZST00obV9hdlV0aWxMaWJyYXJ5LCBhdl9p bWFnZV9maWxsX2FycmF5cyk7CisrICAgIFJFU09MVkVfRlJPTShtX2F2VXRpbExpYnJhcnksIGF2 X2ltYWdlX2dldF9idWZmZXJfc2l6ZSk7CisrICAgIFJFU09MVkVfRlJPTShtX2F2VXRpbExpYnJh cnksIGF2X29wdF9zZXRfaW50KTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZVdGlsTGlicmFyeSwg YXZfZnJhbWVfYWxsb2MpOworKyAgICBSRVNPTFZFX0ZST00obV9hdlV0aWxMaWJyYXJ5LCBhdl9m cmFtZV9mcmVlKTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZVdGlsTGlicmFyeSwgYXZfbWFsbG9j KTsKKysKKysgICAgLy8gbGliYXZmb3JtYXQKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZGb3JtYXRM aWJyYXJ5LCBhdl93cml0ZV90cmFpbGVyKTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZGb3JtYXRM aWJyYXJ5LCBhdl9pbnRlcmxlYXZlZF93cml0ZV9mcmFtZSk7CisrICAgIFJFU09MVkVfRlJPTSht X2F2Rm9ybWF0TGlicmFyeSwgYXZfcmVhZF9mcmFtZSk7CisrICAgIFJFU09MVkVfRlJPTShtX2F2 Rm9ybWF0TGlicmFyeSwgYXZpb19vcGVuKTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZGb3JtYXRM aWJyYXJ5LCBhdmlvX2Nsb3NlKTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZGb3JtYXRMaWJyYXJ5 LCBhdmZvcm1hdF9uZXdfc3RyZWFtKTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZGb3JtYXRMaWJy YXJ5LCBhdmZvcm1hdF93cml0ZV9oZWFkZXIpOworKyAgICBSRVNPTFZFX0ZST00obV9hdkZvcm1h dExpYnJhcnksIGF2Zm9ybWF0X29wZW5faW5wdXQpOworKyAgICBSRVNPTFZFX0ZST00obV9hdkZv cm1hdExpYnJhcnksIGF2Zm9ybWF0X2ZpbmRfc3RyZWFtX2luZm8pOworKyAgICBSRVNPTFZFX0ZS T00obV9hdkZvcm1hdExpYnJhcnksIGF2Zm9ybWF0X2Nsb3NlX2lucHV0KTsKKysgICAgUkVTT0xW RV9GUk9NKG1fYXZGb3JtYXRMaWJyYXJ5LCBhdmZvcm1hdF9mcmVlX2NvbnRleHQpOworKyAgICBS RVNPTFZFX0ZST00obV9hdkZvcm1hdExpYnJhcnksIGF2Zm9ybWF0X2FsbG9jX291dHB1dF9jb250 ZXh0Mik7CisrICAgIFJFU09MVkVfRlJPTShtX2F2Rm9ybWF0TGlicmFyeSwgYXZmb3JtYXRfYWxs b2NfY29udGV4dCk7CisrICAgIFJFU09MVkVfRlJPTShtX2F2Rm9ybWF0TGlicmFyeSwgYXZpb19h bGxvY19jb250ZXh0KTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZGb3JtYXRMaWJyYXJ5LCBhdmlv X2NvbnRleHRfZnJlZSk7CisrCisrICAgIC8vIGxpYmF2Y29kZWMKKysgICAgUkVTT0xWRV9GUk9N KG1fYXZDb2RlY0xpYnJhcnksIGF2X3BhY2tldF9hbGxvYyk7CisrICAgIFJFU09MVkVfRlJPTSht X2F2Q29kZWNMaWJyYXJ5LCBhdl9wYWNrZXRfZnJlZSk7CisrICAgIFJFU09MVkVfRlJPTShtX2F2 Q29kZWNMaWJyYXJ5LCBhdl9wYWNrZXRfdW5yZWYpOworKyAgICBSRVNPTFZFX0ZST00obV9hdkNv ZGVjTGlicmFyeSwgYXZfcGFja2V0X3Jlc2NhbGVfdHMpOworKyAgICBSRVNPTFZFX0ZST00obV9h dkNvZGVjTGlicmFyeSwgYXZjb2RlY19hbGxvY19jb250ZXh0Myk7CisrICAgIFJFU09MVkVfRlJP TShtX2F2Q29kZWNMaWJyYXJ5LCBhdmNvZGVjX2ZpbmRfZW5jb2Rlcik7CisrICAgIFJFU09MVkVf RlJPTShtX2F2Q29kZWNMaWJyYXJ5LCBhdmNvZGVjX2ZpbmRfZGVjb2Rlcik7CisrICAgIFJFU09M VkVfRlJPTShtX2F2Q29kZWNMaWJyYXJ5LCBhdmNvZGVjX2ZyZWVfY29udGV4dCk7CisrICAgIFJF U09MVkVfRlJPTShtX2F2Q29kZWNMaWJyYXJ5LCBhdmNvZGVjX29wZW4yKTsKKysgICAgUkVTT0xW RV9GUk9NKG1fYXZDb2RlY0xpYnJhcnksIGF2Y29kZWNfcGFyYW1ldGVyc19mcm9tX2NvbnRleHQp OworKyAgICBSRVNPTFZFX0ZST00obV9hdkNvZGVjTGlicmFyeSwgYXZjb2RlY19wYXJhbWV0ZXJz X3RvX2NvbnRleHQpOworKyAgICBSRVNPTFZFX0ZST00obV9hdkNvZGVjTGlicmFyeSwgYXZjb2Rl Y19wYXJhbWV0ZXJzX2NvcHkpOworKyAgICBSRVNPTFZFX0ZST00obV9hdkNvZGVjTGlicmFyeSwg YXZjb2RlY19zZW5kX2ZyYW1lKTsKKysgICAgUkVTT0xWRV9GUk9NKG1fYXZDb2RlY0xpYnJhcnks IGF2Y29kZWNfcmVjZWl2ZV9wYWNrZXQpOworKyAgICBSRVNPTFZFX0ZST00obV9hdkNvZGVjTGli cmFyeSwgYXZjb2RlY19zZW5kX3BhY2tldCk7CisrICAgIFJFU09MVkVfRlJPTShtX2F2Q29kZWNM aWJyYXJ5LCBhdmNvZGVjX3JlY2VpdmVfZnJhbWUpOworKworKyAgICAvLyBsaWJzd3NjYWxlCisr ICAgIFJFU09MVkVfRlJPTShtX3N3c1NjYWxlTGlicmFyeSwgc3dzX2dldENhY2hlZENvbnRleHQp OworKyAgICBSRVNPTFZFX0ZST00obV9zd3NTY2FsZUxpYnJhcnksIHN3c19zY2FsZSk7CisrICAg IFJFU09MVkVfRlJPTShtX3N3c1NjYWxlTGlicmFyeSwgc3dzX2ZyZWVDb250ZXh0KTsKKysKKysg ICAgcmV0dXJuIGZ1bmN0aW9uc1ZhbGlkKCk7CisrfQorKworK2Jvb2wgRkZtcGVnTGliSGFuZGxl cjo6bG9hZExpYihjb25zdCBpbzo6cGF0aF90JiBhdlV0aWxQYXRoLCBjb25zdCBpbzo6cGF0aF90 JiBhdkNvZGVjUGF0aCwgY29uc3QgaW86OnBhdGhfdCYgYXZGb3JtYXRQYXRoLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbzo6cGF0aF90JiBzd1NjYWxlUGF0aCwgY29u c3QgaW86OnBhdGhfdCYgc3dSZXNhbXBsZVBhdGgpCisreworKyAgICB1bmxvYWQoKTsKKysKKysg ICAgLy8gTG9hZCBhdnV0aWwgZmlyc3QsIHRoZW4gc3dyZXNhbXBsZSwgc3dzY2FsZSwgYXZjb2Rl YywgYXZmb3JtYXQgKGRlcGVuZGVuY3kgb3JkZXIpCisrICAgIGlmICghdHJ5TG9hZFBhdGgobV9h dlV0aWxMaWJyYXJ5LCBhdlV0aWxQYXRoKQorKyAgICAgICAgfHwgIXRyeUxvYWRQYXRoKG1fc3dS ZXNhbXBsZUxpYnJhcnksIHN3UmVzYW1wbGVQYXRoKQorKyAgICAgICAgfHwgIXRyeUxvYWRQYXRo KG1fc3dzU2NhbGVMaWJyYXJ5LCBzd1NjYWxlUGF0aCkKKysgICAgICAgIHx8ICF0cnlMb2FkUGF0 aChtX2F2Q29kZWNMaWJyYXJ5LCBhdkNvZGVjUGF0aCkKKysgICAgICAgIHx8ICF0cnlMb2FkUGF0 aChtX2F2Rm9ybWF0TGlicmFyeSwgYXZGb3JtYXRQYXRoKSkgeworKyAgICAgICAgdW5sb2FkKCk7 CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgTE9HSSgpIDw8ICJGRm1w ZWcgbG9hZGVkOiBhdnV0aWw9IiA8PCBhdlV0aWxQYXRoIDw8ICIsIGF2Y29kZWM9IiA8PCBhdkNv ZGVjUGF0aCA8PCAiLCBhdmZvcm1hdD0iIDw8IGF2Rm9ybWF0UGF0aAorKyAgICAgICAgICAgPDwg Iiwgc3dzY2FsZT0iIDw8IHN3U2NhbGVQYXRoIDw8ICIsIHN3cmVzYW1wbGU9IiA8PCBzd1Jlc2Ft cGxlUGF0aDsKKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK3ZvaWQgRkZtcGVnTGliSGFu ZGxlcjo6dW5sb2FkKCkKKyt7CisrICAgIGNsb3NlTGliKG1fYXZGb3JtYXRMaWJyYXJ5KTsKKysg ICAgY2xvc2VMaWIobV9zd1Jlc2FtcGxlTGlicmFyeSk7CisrICAgIGNsb3NlTGliKG1fc3dzU2Nh bGVMaWJyYXJ5KTsKKysgICAgY2xvc2VMaWIobV9hdkNvZGVjTGlicmFyeSk7CisrICAgIGNsb3Nl TGliKG1fYXZVdGlsTGlicmFyeSk7CisrCisrICAgIGNsZWFyRnVuY3Rpb25zKCk7CisrfQorKwor K3ZvaWQgRkZtcGVnTGliSGFuZGxlcjo6Y2xvc2VMaWIodm9pZComIGxpYikKKyt7CisrICAgIGlm IChsaWIpIHsKKysgICAgICAgIG11c2U6OmNsb3NlTGliKGxpYik7CisrICAgICAgICBsaWIgPSBu dWxscHRyOworKyAgICB9CisrfQorKworK2Jvb2wgRkZtcGVnTGliSGFuZGxlcjo6dHJ5TG9hZFBh dGgodm9pZComIGxpYiwgY29uc3QgaW86OnBhdGhfdCYgZnVsbFBhdGgpCisreworKyAgICBpZiAo IWlvOjpGaWxlSW5mbzo6ZXhpc3RzKGZ1bGxQYXRoKSkgeworKyAgICAgICAgcmV0dXJuIGZhbHNl OworKyAgICB9CisrCisrICAgIHZvaWQqIGxvYWRlZCA9IG11c2U6OmxvYWRMaWIoZnVsbFBhdGgp OworKyAgICBpZiAobG9hZGVkKSB7CisrICAgICAgICBsaWIgPSBsb2FkZWQ7CisrICAgICAgICBy ZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK2Jvb2wg RkZtcGVnTGliSGFuZGxlcjo6ZnVuY3Rpb25zVmFsaWQoKSBjb25zdAorK3sKKysgICAgcmV0dXJu IGF2X3Jlc2NhbGVfcQorKyAgICAgICAgICAgJiYgYXZfaW1hZ2VfZmlsbF9hcnJheXMgJiYgYXZf aW1hZ2VfZ2V0X2J1ZmZlcl9zaXplCisrICAgICAgICAgICAmJiBhdl9vcHRfc2V0X2ludAorKyAg ICAgICAgICAgJiYgYXZmb3JtYXRfbmV3X3N0cmVhbQorKyAgICAgICAgICAgJiYgYXZmb3JtYXRf d3JpdGVfaGVhZGVyICYmIGF2X3dyaXRlX3RyYWlsZXIKKysgICAgICAgICAgICYmIGF2aW9fb3Bl biAmJiBhdmlvX2Nsb3NlICYmIGF2X2ludGVybGVhdmVkX3dyaXRlX2ZyYW1lCisrICAgICAgICAg ICAmJiBhdmZvcm1hdF9vcGVuX2lucHV0ICYmIGF2Zm9ybWF0X2ZpbmRfc3RyZWFtX2luZm8KKysg ICAgICAgICAgICYmIGF2Zm9ybWF0X2Nsb3NlX2lucHV0ICYmIGF2Zm9ybWF0X2ZyZWVfY29udGV4 dAorKyAgICAgICAgICAgJiYgYXZmb3JtYXRfYWxsb2Nfb3V0cHV0X2NvbnRleHQyICYmIGF2X3Jl YWRfZnJhbWUKKysgICAgICAgICAgICYmIGF2Zm9ybWF0X2FsbG9jX2NvbnRleHQgJiYgYXZpb19h bGxvY19jb250ZXh0ICYmIGF2aW9fY29udGV4dF9mcmVlCisrICAgICAgICAgICAmJiBhdmNvZGVj X2FsbG9jX2NvbnRleHQzICYmIGF2Y29kZWNfZmluZF9lbmNvZGVyICYmIGF2Y29kZWNfZmluZF9k ZWNvZGVyICYmIGF2Y29kZWNfZnJlZV9jb250ZXh0CisrICAgICAgICAgICAmJiBhdmNvZGVjX29w ZW4yICYmIGF2Y29kZWNfcGFyYW1ldGVyc19mcm9tX2NvbnRleHQgJiYgYXZjb2RlY19wYXJhbWV0 ZXJzX3RvX2NvbnRleHQgJiYgYXZjb2RlY19wYXJhbWV0ZXJzX2NvcHkKKysgICAgICAgICAgICYm IGF2Y29kZWNfc2VuZF9mcmFtZSAmJiBhdmNvZGVjX3JlY2VpdmVfcGFja2V0ICYmIGF2Y29kZWNf c2VuZF9wYWNrZXQgJiYgYXZjb2RlY19yZWNlaXZlX2ZyYW1lCisrICAgICAgICAgICAmJiBhdl9m cmFtZV9hbGxvYyAmJiBhdl9mcmFtZV9mcmVlCisrICAgICAgICAgICAmJiBhdl9wYWNrZXRfYWxs b2MgJiYgYXZfcGFja2V0X2ZyZWUgJiYgYXZfcGFja2V0X3VucmVmICYmIGF2X3BhY2tldF9yZXNj YWxlX3RzCisrICAgICAgICAgICAmJiBhdl9tYWxsb2MKKysgICAgICAgICAgICYmIHN3c19nZXRD YWNoZWRDb250ZXh0ICYmIHN3c19zY2FsZSAmJiBzd3NfZnJlZUNvbnRleHQ7CisrfQorKworK3Zv aWQgRkZtcGVnTGliSGFuZGxlcjo6Y2xlYXJGdW5jdGlvbnMoKQorK3sKKysgICAgYXZfcmVzY2Fs ZV9xID0gbnVsbHB0cjsKKysgICAgYXZfaW1hZ2VfZmlsbF9hcnJheXMgPSBudWxscHRyOworKyAg ICBhdl9pbWFnZV9nZXRfYnVmZmVyX3NpemUgPSBudWxscHRyOworKyAgICBhdl9vcHRfc2V0X2lu dCA9IG51bGxwdHI7CisrICAgIGF2X21hbGxvYyA9IG51bGxwdHI7CisrICAgIGF2Zm9ybWF0X25l d19zdHJlYW0gPSBudWxscHRyOworKyAgICBhdmZvcm1hdF93cml0ZV9oZWFkZXIgPSBudWxscHRy OworKyAgICBhdl93cml0ZV90cmFpbGVyID0gbnVsbHB0cjsKKysgICAgYXZpb19vcGVuID0gbnVs bHB0cjsKKysgICAgYXZpb19jbG9zZSA9IG51bGxwdHI7CisrICAgIGF2X2ludGVybGVhdmVkX3dy aXRlX2ZyYW1lID0gbnVsbHB0cjsKKysgICAgYXZmb3JtYXRfb3Blbl9pbnB1dCA9IG51bGxwdHI7 CisrICAgIGF2Zm9ybWF0X2ZpbmRfc3RyZWFtX2luZm8gPSBudWxscHRyOworKyAgICBhdmZvcm1h dF9jbG9zZV9pbnB1dCA9IG51bGxwdHI7CisrICAgIGF2Zm9ybWF0X2ZyZWVfY29udGV4dCA9IG51 bGxwdHI7CisrICAgIGF2Zm9ybWF0X2FsbG9jX291dHB1dF9jb250ZXh0MiA9IG51bGxwdHI7Cisr ICAgIGF2X3JlYWRfZnJhbWUgPSBudWxscHRyOworKyAgICBhdmZvcm1hdF9hbGxvY19jb250ZXh0 ID0gbnVsbHB0cjsKKysgICAgYXZpb19hbGxvY19jb250ZXh0ID0gbnVsbHB0cjsKKysgICAgYXZp b19jb250ZXh0X2ZyZWUgPSBudWxscHRyOworKyAgICBhdmNvZGVjX2FsbG9jX2NvbnRleHQzID0g bnVsbHB0cjsKKysgICAgYXZjb2RlY19maW5kX2VuY29kZXIgPSBudWxscHRyOworKyAgICBhdmNv ZGVjX2ZpbmRfZGVjb2RlciA9IG51bGxwdHI7CisrICAgIGF2Y29kZWNfZnJlZV9jb250ZXh0ID0g bnVsbHB0cjsKKysgICAgYXZjb2RlY19vcGVuMiA9IG51bGxwdHI7CisrICAgIGF2Y29kZWNfcGFy YW1ldGVyc19mcm9tX2NvbnRleHQgPSBudWxscHRyOworKyAgICBhdmNvZGVjX3BhcmFtZXRlcnNf dG9fY29udGV4dCA9IG51bGxwdHI7CisrICAgIGF2Y29kZWNfcGFyYW1ldGVyc19jb3B5ID0gbnVs bHB0cjsKKysgICAgYXZjb2RlY19zZW5kX2ZyYW1lID0gbnVsbHB0cjsKKysgICAgYXZjb2RlY19y ZWNlaXZlX3BhY2tldCA9IG51bGxwdHI7CisrICAgIGF2Y29kZWNfc2VuZF9wYWNrZXQgPSBudWxs cHRyOworKyAgICBhdmNvZGVjX3JlY2VpdmVfZnJhbWUgPSBudWxscHRyOworKyAgICBhdl9mcmFt ZV9hbGxvYyA9IG51bGxwdHI7CisrICAgIGF2X2ZyYW1lX2ZyZWUgPSBudWxscHRyOworKyAgICBh dl9wYWNrZXRfYWxsb2MgPSBudWxscHRyOworKyAgICBhdl9wYWNrZXRfZnJlZSA9IG51bGxwdHI7 CisrICAgIGF2X3BhY2tldF91bnJlZiA9IG51bGxwdHI7CisrICAgIGF2X3BhY2tldF9yZXNjYWxl X3RzID0gbnVsbHB0cjsKKysgICAgc3dzX2dldENhY2hlZENvbnRleHQgPSBudWxscHRyOworKyAg ICBzd3Nfc2NhbGUgPSBudWxscHRyOworKyAgICBzd3NfZnJlZUNvbnRleHQgPSBudWxscHRyOwor K30KKyt9CitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRl cm5hbC9mZm1wZWcvdjkvZmZtcGVnbGliaGFuZGxlci5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40 L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y5L2ZmbXBlZ2xpYmhhbmRsZXIu aAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBl Zy92OS9mZm1wZWdsaWJoYW5kbGVyLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY4MDMw ODgxOSArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVy bmFsL2ZmbXBlZy92OS9mZm1wZWdsaWJoYW5kbGVyLmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42ODIx MTIzODIgKzAyMDAKK0BAIC0wLDAgKzEsMTI1IEBACisrLyoKKysgKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTMuMC1vbmx5CisrICogTXVzZVNjb3JlLVN0dWRpby1DTEEtYXBwbGllcwor KyAqCisrICogTXVzZVNjb3JlIFN0dWRpbworKyAqIE11c2ljIENvbXBvc2l0aW9uICYgTm90YXRp b24KKysgKgorKyAqIENvcHlyaWdodCAoQykgMjAyNSBNdXNlU2NvcmUgTGltaXRlZAorKyAqCisr ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKysgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyBhcworKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgorKyAqCisrICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisrICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgor KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisrICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxo dHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrICovCisrCisrI3ByYWdtYSBvbmNlCisr CisrI2lmIChkZWZpbmVkIChfTVNDVkVSKSB8fCBkZWZpbmVkIChfTVNDX1ZFUikpCisrI3ByYWdt YSB3YXJuaW5nKHB1c2gpCisrI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQyNDQpCisrI2VuZGlm CisrCisrZXh0ZXJuICJDIiB7CisrI2luY2x1ZGUgInRoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2 Y29kZWMvYXZjb2RlYy5oIgorKyNpbmNsdWRlICJ0aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmZv cm1hdC9hdmZvcm1hdC5oIgorKyNpbmNsdWRlICJ0aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJzd3Nj YWxlL3N3c2NhbGUuaCIKKyt9CisrCisrI2lmIChkZWZpbmVkIChfTVNDVkVSKSB8fCBkZWZpbmVk IChfTVNDX1ZFUikpCisrI3ByYWdtYSB3YXJuaW5nKHBvcCkKKysjZW5kaWYKKysKKysjaW5jbHVk ZSAiaW8vcGF0aC5oIgorKworK25hbWVzcGFjZSBtdXNlOjptZWRpYTo6ZmZtcGVnOjp2OSB7Cisr Y2xhc3MgRkZtcGVnTGliSGFuZGxlcgorK3sKKytwdWJsaWM6CisrICAgIEZGbXBlZ0xpYkhhbmRs ZXIoKSA9IGRlZmF1bHQ7CisrICAgIH5GRm1wZWdMaWJIYW5kbGVyKCk7CisrICAgIEZGbXBlZ0xp YkhhbmRsZXIoY29uc3QgRkZtcGVnTGliSGFuZGxlciYpID0gZGVsZXRlOworKyAgICBGRm1wZWdM aWJIYW5kbGVyJiBvcGVyYXRvcj0oY29uc3QgRkZtcGVnTGliSGFuZGxlciYpID0gZGVsZXRlOwor KworKyAgICBib29sIGxvYWRMaWIoY29uc3QgaW86OnBhdGhfdCYgYXZVdGlsUGF0aCwgY29uc3Qg aW86OnBhdGhfdCYgYXZDb2RlY1BhdGgsIGNvbnN0IGlvOjpwYXRoX3QmIGF2Rm9ybWF0UGF0aCwg Y29uc3QgaW86OnBhdGhfdCYgc3dTY2FsZVBhdGgsCisrICAgICAgICAgICAgICAgICBjb25zdCBp bzo6cGF0aF90JiBzd1Jlc2FtcGxlUGF0aCk7CisrICAgIGJvb2wgbG9hZEFwaSgpOworKyAgICB2 b2lkIHVubG9hZCgpOworKworKyAgICAvLyBsaWJhdnV0aWwKKysgICAgaW50NjRfdCAoKmF2X3Jl c2NhbGVfcSkoaW50NjRfdCBhLCBBVlJhdGlvbmFsIGJxLCBBVlJhdGlvbmFsIGNxKSA9IG51bGxw dHI7CisrICAgIGludCAoKmF2X2ltYWdlX2ZpbGxfYXJyYXlzKSh1aW50OF90KiBkc3RfZGF0YVs0 XSwgaW50IGRzdF9saW5lc2l6ZVs0XSwgY29uc3QgdWludDhfdCogc3JjLCBBVlBpeGVsRm9ybWF0 IHBpeF9mbXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBhbGlnbikgPSBudWxscHRyOworKyAgICBpbnQgKCphdl9pbWFnZV9nZXRf YnVmZmVyX3NpemUpKEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0 LCBpbnQgYWxpZ24pID0gbnVsbHB0cjsKKysgICAgaW50ICgqYXZfb3B0X3NldF9pbnQpKHZvaWQq IG9iaiwgY29uc3QgY2hhciogbmFtZSwgaW50NjRfdCB2YWwsIGludCBzZWFyY2hfZmxhZ3MpID0g bnVsbHB0cjsKKysgICAgdm9pZCooKmF2X21hbGxvYykoc2l6ZV90IHNpemUpID0gbnVsbHB0cjsK KysKKysgICAgLy8gbGliYXZmb3JtYXQKKysgICAgQVZTdHJlYW0qKCphdmZvcm1hdF9uZXdfc3Ry ZWFtKShBVkZvcm1hdENvbnRleHQqIHMsIGNvbnN0IEFWQ29kZWMqIGMpID0gbnVsbHB0cjsKKysg ICAgaW50ICgqYXZmb3JtYXRfd3JpdGVfaGVhZGVyKShBVkZvcm1hdENvbnRleHQqIHMsIEFWRGlj dGlvbmFyeSoqIG9wdGlvbnMpID0gbnVsbHB0cjsKKysgICAgaW50ICgqYXZfd3JpdGVfdHJhaWxl cikoQVZGb3JtYXRDb250ZXh0KiBzKSA9IG51bGxwdHI7CisrICAgIGludCAoKmF2aW9fb3Blbiko QVZJT0NvbnRleHQqKiBzLCBjb25zdCBjaGFyKiB1cmwsIGludCBmbGFncykgPSBudWxscHRyOwor KyAgICBpbnQgKCphdmlvX2Nsb3NlKShBVklPQ29udGV4dCogcykgPSBudWxscHRyOworKyAgICBp bnQgKCphdl9pbnRlcmxlYXZlZF93cml0ZV9mcmFtZSkoQVZGb3JtYXRDb250ZXh0KiBzLCBBVlBh Y2tldCogcGt0KSA9IG51bGxwdHI7CisrICAgIGludCAoKmF2Zm9ybWF0X29wZW5faW5wdXQpKEFW Rm9ybWF0Q29udGV4dCoqIGN0eCwgY29uc3QgY2hhciogdXJsLCBjb25zdCBBVklucHV0Rm9ybWF0 KiBmbXQsIEFWRGljdGlvbmFyeSoqIG9wdGlvbnMpID0gbnVsbHB0cjsKKysgICAgaW50ICgqYXZm b3JtYXRfZmluZF9zdHJlYW1faW5mbykoQVZGb3JtYXRDb250ZXh0KiBpYywgQVZEaWN0aW9uYXJ5 Kiogb3B0aW9ucykgPSBudWxscHRyOworKyAgICB2b2lkICgqYXZmb3JtYXRfY2xvc2VfaW5wdXQp KEFWRm9ybWF0Q29udGV4dCoqIHMpID0gbnVsbHB0cjsKKysgICAgdm9pZCAoKmF2Zm9ybWF0X2Zy ZWVfY29udGV4dCkoQVZGb3JtYXRDb250ZXh0KiBzKSA9IG51bGxwdHI7CisrICAgIGludCAoKmF2 Zm9ybWF0X2FsbG9jX291dHB1dF9jb250ZXh0MikoQVZGb3JtYXRDb250ZXh0KiogY3R4LCBjb25z dCBBVk91dHB1dEZvcm1hdCogb2Zvcm1hdCwgY29uc3QgY2hhciogZm9ybWF0X25hbWUsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlsZW5h bWUpID0gbnVsbHB0cjsKKysgICAgaW50ICgqYXZfcmVhZF9mcmFtZSkoQVZGb3JtYXRDb250ZXh0 KiBzLCBBVlBhY2tldCogcGt0KSA9IG51bGxwdHI7CisrICAgIEFWRm9ybWF0Q29udGV4dCooKmF2 Zm9ybWF0X2FsbG9jX2NvbnRleHQpKHZvaWQpID0gbnVsbHB0cjsKKysgICAgQVZJT0NvbnRleHQq KCphdmlvX2FsbG9jX2NvbnRleHQpKHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9z aXplLCBpbnQgd3JpdGVfZmxhZywgdm9pZCogb3BhcXVlLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICgqcmVhZF9wYWNrZXQpKHZvaWQqIG9wYXF1ZSwgdWludDhf dCogYnVmLCBpbnQgYnVmX3NpemUpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50ICgqd3JpdGVfcGFja2V0KSh2b2lkKiBvcGFxdWUsIGNvbnN0IHVpbnQ4X3QqIGJ1 ZiwgaW50IGJ1Zl9zaXplKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludDY0X3QgKCpzZWVrKSh2b2lkKiBvcGFxdWUsIGludDY0X3Qgb2Zmc2V0LCBpbnQgd2hlbmNl KSkgPSBudWxscHRyOworKyAgICB2b2lkICgqYXZpb19jb250ZXh0X2ZyZWUpKEFWSU9Db250ZXh0 KiogcykgPSBudWxscHRyOworKworKyAgICAvLyBsaWJhdmNvZGVjCisrICAgIEFWQ29kZWNDb250 ZXh0KigqYXZjb2RlY19hbGxvY19jb250ZXh0MykoY29uc3QgQVZDb2RlYyogY29kZWMpID0gbnVs bHB0cjsKKysgICAgY29uc3QgQVZDb2RlYyooKmF2Y29kZWNfZmluZF9lbmNvZGVyKShBVkNvZGVj SUQgaWQpID0gbnVsbHB0cjsKKysgICAgY29uc3QgQVZDb2RlYyooKmF2Y29kZWNfZmluZF9kZWNv ZGVyKShBVkNvZGVjSUQgaWQpID0gbnVsbHB0cjsKKysgICAgdm9pZCAoKmF2Y29kZWNfZnJlZV9j b250ZXh0KShBVkNvZGVjQ29udGV4dCoqIGF2Y3R4KSA9IG51bGxwdHI7CisrICAgIGludCAoKmF2 Y29kZWNfb3BlbjIpKEFWQ29kZWNDb250ZXh0KiBhdmN0eCwgY29uc3QgQVZDb2RlYyogY29kZWMs IEFWRGljdGlvbmFyeSoqIG9wdGlvbnMpID0gbnVsbHB0cjsKKysgICAgaW50ICgqYXZjb2RlY19w YXJhbWV0ZXJzX2Zyb21fY29udGV4dCkoQVZDb2RlY1BhcmFtZXRlcnMqIHBhciwgY29uc3QgQVZD b2RlY0NvbnRleHQqIGNvZGVjKSA9IG51bGxwdHI7CisrICAgIGludCAoKmF2Y29kZWNfcGFyYW1l dGVyc190b19jb250ZXh0KShBVkNvZGVjQ29udGV4dCogY29kZWMsIGNvbnN0IEFWQ29kZWNQYXJh bWV0ZXJzKiBwYXIpID0gbnVsbHB0cjsKKysgICAgaW50ICgqYXZjb2RlY19wYXJhbWV0ZXJzX2Nv cHkpKEFWQ29kZWNQYXJhbWV0ZXJzKiBkc3QsIGNvbnN0IEFWQ29kZWNQYXJhbWV0ZXJzKiBzcmMp ID0gbnVsbHB0cjsKKysgICAgaW50ICgqYXZjb2RlY19zZW5kX2ZyYW1lKShBVkNvZGVjQ29udGV4 dCogYXZjdHgsIGNvbnN0IEFWRnJhbWUqIGZyYW1lKSA9IG51bGxwdHI7CisrICAgIGludCAoKmF2 Y29kZWNfcmVjZWl2ZV9wYWNrZXQpKEFWQ29kZWNDb250ZXh0KiBhdmN0eCwgQVZQYWNrZXQqIGF2 cGt0KSA9IG51bGxwdHI7CisrICAgIGludCAoKmF2Y29kZWNfc2VuZF9wYWNrZXQpKEFWQ29kZWND b250ZXh0KiBhdmN0eCwgY29uc3QgQVZQYWNrZXQqIGF2cGt0KSA9IG51bGxwdHI7CisrICAgIGlu dCAoKmF2Y29kZWNfcmVjZWl2ZV9mcmFtZSkoQVZDb2RlY0NvbnRleHQqIGF2Y3R4LCBBVkZyYW1l KiBmcmFtZSkgPSBudWxscHRyOworKyAgICBBVkZyYW1lKigqYXZfZnJhbWVfYWxsb2MpKHZvaWQp ID0gbnVsbHB0cjsKKysgICAgdm9pZCAoKmF2X2ZyYW1lX2ZyZWUpKEFWRnJhbWUqKiBmcmFtZSkg PSBudWxscHRyOworKyAgICBBVlBhY2tldCooKmF2X3BhY2tldF9hbGxvYykodm9pZCkgPSBudWxs cHRyOworKyAgICB2b2lkICgqYXZfcGFja2V0X2ZyZWUpKEFWUGFja2V0KiogcGt0KSA9IG51bGxw dHI7CisrICAgIHZvaWQgKCphdl9wYWNrZXRfdW5yZWYpKEFWUGFja2V0KiBwa3QpID0gbnVsbHB0 cjsKKysgICAgdm9pZCAoKmF2X3BhY2tldF9yZXNjYWxlX3RzKShBVlBhY2tldCogcGt0LCBBVlJh dGlvbmFsIHRiX3NyYywgQVZSYXRpb25hbCB0Yl9kc3QpID0gbnVsbHB0cjsKKysKKysgICAgLy8g bGlic3dzY2FsZQorKyAgICBTd3NDb250ZXh0Kigqc3dzX2dldENhY2hlZENvbnRleHQpKFN3c0Nv bnRleHQqIGNvbnRleHQsIGludCBzcmNXLCBpbnQgc3JjSCwgQVZQaXhlbEZvcm1hdCBzcmNGb3Jt YXQsIGludCBkc3RXLCBpbnQgZHN0SCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBVlBpeGVsRm9ybWF0IGRzdEZvcm1hdCwgaW50IGZsYWdzLCBTd3NGaWx0ZXIqIHNy Y0ZpbHRlciwgU3dzRmlsdGVyKiBkc3RGaWx0ZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgZG91YmxlKiBwYXJhbSkgPSBudWxscHRyOworKyAgICBpbnQg KCpzd3Nfc2NhbGUpKHN0cnVjdCBTd3NDb250ZXh0KiBjLCBjb25zdCB1aW50OF90KiBjb25zdCBz cmNTbGljZVtdLCBjb25zdCBpbnQgc3JjU3RyaWRlW10sIGludCBzcmNTbGljZVksIGludCBzcmNT bGljZUgsCisrICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogY29uc3QgZHN0W10sIGNvbnN0 IGludCBkc3RTdHJpZGVbXSkgPSBudWxscHRyOworKyAgICB2b2lkICgqc3dzX2ZyZWVDb250ZXh0 KShTd3NDb250ZXh0KiBzd3NDb250ZXh0KSA9IG51bGxwdHI7CisrCisrcHJpdmF0ZTogdm9pZCog Z2V0U3ltYm9sKHZvaWQqIGxpYiwgY29uc3QgY2hhciogbmFtZSkgY29uc3Q7CisrICAgIGJvb2wg dHJ5TG9hZFBhdGgodm9pZComIGxpYiwgY29uc3QgaW86OnBhdGhfdCYgZnVsbFBhdGgpOworKyAg ICB2b2lkIGNsb3NlTGliKHZvaWQqJiBsaWIpOworKyAgICB2b2lkIGNsZWFyRnVuY3Rpb25zKCk7 CisrICAgIGJvb2wgZnVuY3Rpb25zVmFsaWQoKSBjb25zdDsKKysKKysgICAgdm9pZCogbV9hdlV0 aWxMaWJyYXJ5ID0gbnVsbHB0cjsKKysgICAgdm9pZCogbV9hdkNvZGVjTGlicmFyeSA9IG51bGxw dHI7CisrICAgIHZvaWQqIG1fYXZGb3JtYXRMaWJyYXJ5ID0gbnVsbHB0cjsKKysgICAgdm9pZCog bV9zd3NTY2FsZUxpYnJhcnkgPSBudWxscHRyOworKyAgICB2b2lkKiBtX3N3UmVzYW1wbGVMaWJy YXJ5ID0gbnVsbHB0cjsKKyt9OworK30KK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJh bWV3b3JrL21lZGlhL2ludGVybmFsL2ZmbXBlZy92OS92aWRlb2VuY29kZXIuY3BwLmZmbXBlZzkg TXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y5L3Zp ZGVvZW5jb2Rlci5jcHAKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9p bnRlcm5hbC9mZm1wZWcvdjkvdmlkZW9lbmNvZGVyLmNwcC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6 MjM6NDcuNjgwNDk2NTc1ICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsv bWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y5L3ZpZGVvZW5jb2Rlci5jcHAJMjAyNi0wOS0wNyAxMjoy Mzo0Ny42ODAzNTQ3NjUgKzAyMDAKK0BAIC0wLDAgKzEsNzg0IEBACisrLyoKKysgKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTMuMC1vbmx5CisrICogTXVzZVNjb3JlLVN0dWRpby1DTEEt YXBwbGllcworKyAqCisrICogTXVzZVNjb3JlIFN0dWRpbworKyAqIE11c2ljIENvbXBvc2l0aW9u ICYgTm90YXRpb24KKysgKgorKyAqIENvcHlyaWdodCAoQykgMjAyNSBNdXNlU2NvcmUgTGltaXRl ZAorKyAqCisrICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyBhcworKyAqIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKyAqCisrICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisrICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKyAqLworKyNpbmNsdWRl ICJ2aWRlb2VuY29kZXIuaCIKKysjaW5jbHVkZSAiZmZtcGVnbGliaGFuZGxlci5oIgorKworKyNp bmNsdWRlIDxhbGdvcml0aG0+CisrCisrI2luY2x1ZGUgImlvL2ZpbGUuaCIKKysjaW5jbHVkZSAi aW8vcGF0aC5oIgorKyNpbmNsdWRlICJkZWZlci5oIgorKyNpbmNsdWRlICJsb2cuaCIKKysKKytu YW1lc3BhY2UgbXVzZTo6bWVkaWE6OmZmbXBlZzo6djkgeworK3N0cnVjdCBNZW1vcnlSZWFkQ29u dGV4dCB7CisrICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEgPSBudWxscHRyOworKyAgICBpbnQ2NF90 IHNpemUgPSAwOworKyAgICBpbnQ2NF90IHBvcyA9IDA7CisrfTsKKysKKytzdGF0aWMgaW50IG1l bVJlYWRQYWNrZXQodm9pZCogb3BhcXVlLCB1aW50OF90KiBidWYsIGludCBidWZfc2l6ZSkKKyt7 CisrICAgIGF1dG8qIGN0eCA9IHN0YXRpY19jYXN0PE1lbW9yeVJlYWRDb250ZXh0Kj4ob3BhcXVl KTsKKysgICAgaW50NjRfdCByZW1haW5pbmcgPSBjdHgtPnNpemUgLSBjdHgtPnBvczsKKysgICAg aW50IHRvUmVhZCA9IHN0YXRpY19jYXN0PGludD4oc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50NjRf dD4oYnVmX3NpemUpLCByZW1haW5pbmcpKTsKKysgICAgaWYgKHRvUmVhZCA8PSAwKSB7CisrICAg ICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7CisrICAgIH0KKysgICAgbWVtY3B5KGJ1ZiwgY3R4LT5k YXRhICsgY3R4LT5wb3MsIHRvUmVhZCk7CisrICAgIGN0eC0+cG9zICs9IHRvUmVhZDsKKysgICAg cmV0dXJuIHRvUmVhZDsKKyt9CisrCisrc3RhdGljIGludDY0X3QgbWVtU2Vlayh2b2lkKiBvcGFx dWUsIGludDY0X3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQorK3sKKysgICAgYXV0byogY3R4ID0gc3Rh dGljX2Nhc3Q8TWVtb3J5UmVhZENvbnRleHQqPihvcGFxdWUpOworKyAgICBzd2l0Y2ggKHdoZW5j ZSkgeworKyAgICBjYXNlIFNFRUtfU0VUOiBjdHgtPnBvcyA9IG9mZnNldDsKKysgICAgICAgIGJy ZWFrOworKyAgICBjYXNlIFNFRUtfQ1VSOiBjdHgtPnBvcyArPSBvZmZzZXQ7CisrICAgICAgICBi cmVhazsKKysgICAgY2FzZSBTRUVLX0VORDogY3R4LT5wb3MgPSBjdHgtPnNpemUgKyBvZmZzZXQ7 CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSBBVlNFRUtfU0laRTogcmV0dXJuIGN0eC0+c2l6 ZTsKKysgICAgZGVmYXVsdDogcmV0dXJuIC0xOworKyAgICB9CisrICAgIGlmIChjdHgtPnBvcyA8 IDApIHsKKysgICAgICAgIGN0eC0+cG9zID0gMDsKKysgICAgfQorKyAgICBpZiAoY3R4LT5wb3Mg PiBjdHgtPnNpemUpIHsKKysgICAgICAgIGN0eC0+cG9zID0gY3R4LT5zaXplOworKyAgICB9Cisr ICAgIHJldHVybiBjdHgtPnBvczsKKyt9CisrCisrc3RydWN0IEZGbXBlZyB7CisrICAgIGludCB3 aWR0aCA9IDA7CisrICAgIGludCBoZWlnaHQgPSAwOworKyAgICB1bnNpZ25lZCBpbnQgcHRzQ291 bnRlciA9IDA7CisrCisrICAgIC8vIEZGbXBlZyBzdHVmZgorKyAgICBBVkZvcm1hdENvbnRleHQq IGZvcm1hdEN0eCA9IG51bGxwdHI7CisrICAgIEFWU3RyZWFtKiB2aWRlb1N0cmVhbSA9IG51bGxw dHI7CisrICAgIEFWQ29kZWNDb250ZXh0KiBjb2RlY0N0eCA9IG51bGxwdHI7CisrICAgIGNvbnN0 IEFWQ29kZWMqIGNvZGVjID0gbnVsbHB0cjsKKysgICAgLy8gRnJhbWUgZGF0YQorKyAgICBBVkZy YW1lKiBwcGljdHVyZSA9IG51bGxwdHI7CisrICAgIHVpbnQ4X3QqIHBpY3R1cmVfYnVmID0gbnVs bHB0cjsKKysgICAgLy8gQ29udmVyc2lvbgorKyAgICBTd3NDb250ZXh0KiBpbWdfY29udmVydF9j dHggPSBudWxscHRyOworKyAgICAvLyBQYWNrZXQKKysgICAgQVZQYWNrZXQqIHBrdDsKKysKKysg ICAgYm9vbCBvcGVuZWQgPSBmYWxzZTsKKysgICAgYm9vbCBmaW5pc2hlZCA9IGZhbHNlOworK307 CisrCisrVmlkZW9FbmNvZGVyOjpWaWRlb0VuY29kZXIoKQorK3sKKysgICAgbV9mZm1wZWcgPSBu ZXcgRkZtcGVnKCk7CisrfQorKworK1ZpZGVvRW5jb2Rlcjo6flZpZGVvRW5jb2RlcigpCisrewor KyAgICBkZWxldGUgbV9mZm1wZWc7CisrfQorKworK2Jvb2wgVmlkZW9FbmNvZGVyOjpsb2FkKGNv bnN0IEZGbXBlZ0xpYlBhdGhzJiBwYXRocykKKyt7CisrICAgIGF1dG8gaGFuZGxlciA9IHN0ZDo6 bWFrZV9zaGFyZWQ8RkZtcGVnTGliSGFuZGxlcj4oKTsKKysgICAgaWYgKCFoYW5kbGVyLT5sb2Fk TGliKHBhdGhzLmF2VXRpbFBhdGgsIHBhdGhzLmF2Q29kZWNQYXRoLCBwYXRocy5hdkZvcm1hdFBh dGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRocy5zd1NjYWxlUGF0aCwgcGF0aHMu c3dSZXNhbXBsZVBhdGgpCisrICAgICAgICB8fCAhaGFuZGxlci0+bG9hZEFwaSgpKSB7CisrICAg ICAgICBMT0dXKCkgPDwgIkZGbXBlZyBsaWJyYXJpZXMgbm90IGZvdW5kIjsKKysgICAgICAgIHJl dHVybiBmYWxzZTsKKysgICAgfQorKyAgICBtX2ZmbXBlZ0hhbmRsZXIgPSBzdGQ6Om1vdmUoaGFu ZGxlcik7CisrICAgIHJldHVybiB0cnVlOworK30KKysKKytib29sIFZpZGVvRW5jb2Rlcjo6b3Bl bihjb25zdCBtdXNlOjppbzo6cGF0aF90JiBmaWxlTmFtZSwgY29uc3QgT3B0aW9ucyYgb3B0aW9u cykKKyt7CisrICAgIG1fZmZtcGVnLT5wdHNDb3VudGVyID0gMDsKKysKKysgICAgbV9mZm1wZWct PndpZHRoID0gb3B0aW9ucy53aWR0aDsKKysgICAgbV9mZm1wZWctPmhlaWdodCA9IG9wdGlvbnMu aGVpZ2h0OworKworKyAgICBpZiAobV9mZm1wZWdIYW5kbGVyLT5hdmZvcm1hdF9hbGxvY19vdXRw dXRfY29udGV4dDIoJm1fZmZtcGVnLT5mb3JtYXRDdHgsIG51bGxwdHIsIG9wdGlvbnMuZm9ybWF0 LmNfc3RyKCksIGZpbGVOYW1lLmNfc3RyKCkpIDwgMAorKyAgICAgICAgfHwgIW1fZmZtcGVnLT5m b3JtYXRDdHgpIHsKKysgICAgICAgIExPR0UoKSA8PCAiZmFpbGVkIHRvIGFsbG9jYXRlIG91dHB1 dCBjb250ZXh0IjsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICAvLyBB ZGQgdGhlIHZpZGVvIHN0cmVhbQorKyAgICBtX2ZmbXBlZy0+dmlkZW9TdHJlYW0gPSBtX2ZmbXBl Z0hhbmRsZXItPmF2Zm9ybWF0X25ld19zdHJlYW0obV9mZm1wZWctPmZvcm1hdEN0eCwgbnVsbHB0 cik7CisrICAgIGlmICghbV9mZm1wZWctPnZpZGVvU3RyZWFtKSB7CisrICAgICAgICBMT0dFKCkg PDwgImZhaWxlZCBhbGxvY2F0ZSBzdHJlYW0iOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg ICB9CisrCisrICAgIG1fZmZtcGVnLT52aWRlb1N0cmVhbS0+dGltZV9iYXNlLmRlbiA9IG9wdGlv bnMuZnBzOworKyAgICBtX2ZmbXBlZy0+dmlkZW9TdHJlYW0tPnRpbWVfYmFzZS5udW0gPSAxOwor KworKyAgICAvLyBmaW5kIHRoZSB2aWRlbyBlbmNvZGVyCisrICAgIG1fZmZtcGVnLT5jb2RlYyA9 IG1fZmZtcGVnSGFuZGxlci0+YXZjb2RlY19maW5kX2VuY29kZXIoQVZfQ09ERUNfSURfSDI2NCk7 CisrICAgIGlmICghbV9mZm1wZWctPmNvZGVjKSB7CisrICAgICAgICBMT0dFKCkgPDwgIm5vdCBm b3VuZCBjb2RlYyI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgbV9mZm1w ZWctPmNvZGVjQ3R4ID0gbV9mZm1wZWdIYW5kbGVyLT5hdmNvZGVjX2FsbG9jX2NvbnRleHQzKG1f ZmZtcGVnLT5jb2RlYyk7CisrICAgIGlmIChtX2ZmbXBlZy0+Y29kZWNDdHggPT0gbnVsbHB0cikg eworKyAgICAgICAgTE9HRSgpIDw8ICJmYWlsZWQgdG8gYWxsb2NhdGUgQVYgY29udGV4dCI7Cisr ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgbV9mZm1wZWctPnZpZGVvU3Ry ZWFtLT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9WSURFTzsKKysgICAgbV9m Zm1wZWctPnZpZGVvU3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9IMjY0 OworKyAgICBtX2ZmbXBlZy0+dmlkZW9TdHJlYW0tPmNvZGVjcGFyLT53aWR0aCA9IG9wdGlvbnMu d2lkdGg7CisrICAgIG1fZmZtcGVnLT52aWRlb1N0cmVhbS0+Y29kZWNwYXItPmhlaWdodCA9IG9w dGlvbnMuaGVpZ2h0OworKyAgICBtX2ZmbXBlZy0+dmlkZW9TdHJlYW0tPmNvZGVjcGFyLT5mb3Jt YXQgPSBBVl9QSVhfRk1UX1lVVjQyMFA7CisrICAgIG1fZmZtcGVnLT52aWRlb1N0cmVhbS0+Y29k ZWNwYXItPmJpdF9yYXRlID0gb3B0aW9ucy5iaXRyYXRlOworKworKyAgICBpZiAobV9mZm1wZWdI YW5kbGVyLT5hdmNvZGVjX3BhcmFtZXRlcnNfdG9fY29udGV4dChtX2ZmbXBlZy0+Y29kZWNDdHgs IG1fZmZtcGVnLT52aWRlb1N0cmVhbS0+Y29kZWNwYXIpIDwgMCkgeworKyAgICAgICAgbV9mZm1w ZWdIYW5kbGVyLT5hdmNvZGVjX2ZyZWVfY29udGV4dCgmbV9mZm1wZWctPmNvZGVjQ3R4KTsKKysg ICAgICAgIExPR0UoKSA8PCAiZmFpbGVkIHRvIHNldCBjb2RlYyBwYXJhbWV0ZXJzIGZyb20gc3Ry ZWFtIjsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBtX2ZmbXBlZy0+ Y29kZWNDdHgtPnByb2ZpbGUgPSBBVl9QUk9GSUxFX0gyNjRfTUFJTjsKKysgICAgbV9mZm1wZWct PmNvZGVjQ3R4LT50aW1lX2Jhc2UuZGVuID0gb3B0aW9ucy5mcHM7CisrICAgIG1fZmZtcGVnLT5j b2RlY0N0eC0+dGltZV9iYXNlLm51bSA9IDE7CisrICAgIG1fZmZtcGVnLT5jb2RlY0N0eC0+Z29w X3NpemUgPSBvcHRpb25zLmdvcDsKKysgICAgbV9mZm1wZWctPmNvZGVjQ3R4LT50aHJlYWRfY291 bnQgPSAxMDsKKysgICAgbV9mZm1wZWctPmNvZGVjQ3R4LT5tYXhfYl9mcmFtZXMgPSAwOworKyAg ICBtX2ZmbXBlZ0hhbmRsZXItPmF2X29wdF9zZXRfaW50KG1fZmZtcGVnLT5jb2RlY0N0eCwgImJf c3RyYXRlZ3kiLCAxLCAwKTsKKysKKysgICAgbV9mZm1wZWctPmNvZGVjQ3R4LT5tZV9jbXAgPSAx OworKyAgICBtX2ZmbXBlZy0+Y29kZWNDdHgtPm1lX3JhbmdlID0gMTY7CisrICAgIG1fZmZtcGVn SGFuZGxlci0+YXZfb3B0X3NldF9pbnQobV9mZm1wZWctPmNvZGVjQ3R4LCAiaGV4IiwgMSwgMCk7 CisrCisrICAgIG1fZmZtcGVnLT5jb2RlY0N0eC0+cW1pbiA9IDEwOworKyAgICBtX2ZmbXBlZy0+ Y29kZWNDdHgtPnFtYXggPSA1MTsKKysgICAgbV9mZm1wZWdIYW5kbGVyLT5hdl9vcHRfc2V0X2lu dChtX2ZmbXBlZy0+Y29kZWNDdHgsICJzY190aHJlc2hvbGQiLCA0MCwgMCk7CisrICAgIG1fZmZt cGVnLT5jb2RlY0N0eC0+ZmxhZ3MgfD0gQVZfQ09ERUNfRkxBR19MT09QX0ZJTFRFUjsKKysgICAg bV9mZm1wZWctPmNvZGVjQ3R4LT5tZV9zdWJwZWxfcXVhbGl0eSA9IDU7CisrICAgIG1fZmZtcGVn LT5jb2RlY0N0eC0+aV9xdWFudF9mYWN0b3IgPSAwLjcxZjsKKysgICAgbV9mZm1wZWctPmNvZGVj Q3R4LT5xY29tcHJlc3MgPSAwLjZmOworKyAgICBtX2ZmbXBlZy0+Y29kZWNDdHgtPm1heF9xZGlm ZiA9IDQ7CisrCisrICAgIGlmIChtX2ZmbXBlZy0+Zm9ybWF0Q3R4LT5vZm9ybWF0LT5mbGFncyAm IEFWRk1UX0dMT0JBTEhFQURFUikgeworKyAgICAgICAgbV9mZm1wZWctPmNvZGVjQ3R4LT5mbGFn cyB8PSBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVI7CisrICAgIH0KKysKKysgICAgaWYgKG1f ZmZtcGVnSGFuZGxlci0+YXZjb2RlY19vcGVuMihtX2ZmbXBlZy0+Y29kZWNDdHgsIG1fZmZtcGVn LT5jb2RlYywgbnVsbHB0cikgPCAwKSB7CisrICAgICAgICBMT0dFKCkgPDwgImZhaWxlZCBvcGVu IGNvZGVjIjsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICAvLyBDb3B5 IGNvZGVjIHBhcmFtcyB0byBzdHJlYW0gQUZURVIgb3BlbiAtIGNvZGVjIGFkZHMgZXh0cmFkYXRh IChTUFMvUFBTKSBkdXJpbmcgb3BlbgorKyAgICBpZiAobV9mZm1wZWdIYW5kbGVyLT5hdmNvZGVj X3BhcmFtZXRlcnNfZnJvbV9jb250ZXh0KG1fZmZtcGVnLT52aWRlb1N0cmVhbS0+Y29kZWNwYXIs IG1fZmZtcGVnLT5jb2RlY0N0eCkgPCAwKSB7CisrICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2 Y29kZWNfZnJlZV9jb250ZXh0KCZtX2ZmbXBlZy0+Y29kZWNDdHgpOworKyAgICAgICAgTE9HRSgp IDw8ICJmYWlsZWQgdG8gY29weSBjb2RlYyBwYXJhbWV0ZXJzIHRvIHN0cmVhbSI7CisrICAgICAg ICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgLy8gQWxsb2NhdGUgdGhlIFlVViBmcmFt ZQorKyAgICBtX2ZmbXBlZy0+cHBpY3R1cmUgPSBtX2ZmbXBlZ0hhbmRsZXItPmF2X2ZyYW1lX2Fs bG9jKCk7CisrICAgIGlmICghbV9mZm1wZWctPnBwaWN0dXJlKSB7CisrICAgICAgICBMT0dFKCkg PDwgImZhaWxlZCBhbGxvY2F0ZSBmcmFtZSI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg IH0KKysKKysgICAgbV9mZm1wZWctPnBwaWN0dXJlLT53aWR0aCA9IG9wdGlvbnMud2lkdGg7Cisr ICAgIG1fZmZtcGVnLT5wcGljdHVyZS0+aGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQ7CisrICAgIG1f ZmZtcGVnLT5wcGljdHVyZS0+Zm9ybWF0ID0gQVZfUElYX0ZNVF9ZVVY0MjBQOworKworKyAgICBp bnQgc2l6ZSA9IG1fZmZtcGVnSGFuZGxlci0+YXZfaW1hZ2VfZ2V0X2J1ZmZlcl9zaXplKEFWX1BJ WF9GTVRfWVVWNDIwUCwgbV9mZm1wZWctPndpZHRoLCBtX2ZmbXBlZy0+aGVpZ2h0LCAxKTsKKysg ICAgbV9mZm1wZWctPnBpY3R1cmVfYnVmID0gbmV3IHVpbnQ4X3Rbc2l6ZV07CisrICAgIGlmICgh bV9mZm1wZWctPnBpY3R1cmVfYnVmKSB7CisrICAgICAgICBMT0dFKCkgPDwgImZhaWxlZCBhbGxv Y2F0ZSBmcmFtZSBidWYiOworKyAgICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdl9mcmFtZV9mcmVl KCZtX2ZmbXBlZy0+cHBpY3R1cmUpOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9Cisr CisrICAgIC8vIFNldHVwIHRoZSBwbGFuZXMKKysgICAgbV9mZm1wZWdIYW5kbGVyLT5hdl9pbWFn ZV9maWxsX2FycmF5cyhtX2ZmbXBlZy0+cHBpY3R1cmUtPmRhdGEsIG1fZmZtcGVnLT5wcGljdHVy ZS0+bGluZXNpemUsIG1fZmZtcGVnLT5waWN0dXJlX2J1ZiwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBVl9QSVhfRk1UX1lVVjQyMFAsIG1fZmZtcGVnLT53aWR0 aCwgbV9mZm1wZWctPmhlaWdodCwgMSk7CisrCisrICAgIGlmIChtX2ZmbXBlZ0hhbmRsZXItPmF2 aW9fb3BlbigmbV9mZm1wZWctPmZvcm1hdEN0eC0+cGIsIGZpbGVOYW1lLmNfc3RyKCksIEFWSU9f RkxBR19XUklURSkgPCAwKSB7CisrICAgICAgICBMT0dFKCkgPDwgImZhaWxlZCBvcGVuIGZpbGU6 ICIgPDwgZmlsZU5hbWU7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAg aW50IHJldCA9IG1fZmZtcGVnSGFuZGxlci0+YXZmb3JtYXRfd3JpdGVfaGVhZGVyKG1fZmZtcGVn LT5mb3JtYXRDdHgsIE5VTEwpOworKyAgICBpZiAocmV0IDwgMCkgeworKyAgICAgICAgTE9HRSgp IDw8ICJmYWlsZWQgd3JpdGUgQVYgaGVhZGVyIjsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysg ICAgfQorKworKyAgICAvL2F2X2R1bXBfZm9ybWF0KG1fZmZtcGVnLT5mb3JtYXRDdHgsIDAsIGZp bGVOYW1lLmNfc3RyKCksIDEpOworKworKyAgICBtX2ZmbXBlZy0+b3BlbmVkID0gdHJ1ZTsKKysg ICAgbV9vdXRwdXRQYXRoID0gZmlsZU5hbWU7CisrCisrICAgIHJldHVybiB0cnVlOworK30KKysK Kyt2b2lkIFZpZGVvRW5jb2Rlcjo6ZmluaXNoRW5jb2RlKCkKKyt7CisrICAgIGlmICghbV9mZm1w ZWctPm9wZW5lZCB8fCBtX2ZmbXBlZy0+ZmluaXNoZWQpIHsKKysgICAgICAgIHJldHVybjsKKysg ICAgfQorKworKyAgICBpbnQgcmV0ID0gbV9mZm1wZWdIYW5kbGVyLT5hdmNvZGVjX3NlbmRfZnJh bWUobV9mZm1wZWctPmNvZGVjQ3R4LCBOVUxMKTsKKysgICAgaWYgKHJldCA8IDApIHsKKysgICAg ICAgIExPR0UoKSA8PCAiZmFpbGVkIHRvIGZsdXNoIGVuY29kZXIgYnVmZmVyIjsKKysgICAgICAg IHJldHVybjsKKysgICAgfQorKworKyAgICB3aGlsZSAodHJ1ZSkgeworKyAgICAgICAgbV9mZm1w ZWctPnBrdCA9IG1fZmZtcGVnSGFuZGxlci0+YXZfcGFja2V0X2FsbG9jKCk7CisrICAgICAgICBy ZXQgPSBtX2ZmbXBlZ0hhbmRsZXItPmF2Y29kZWNfcmVjZWl2ZV9wYWNrZXQobV9mZm1wZWctPmNv ZGVjQ3R4LCBtX2ZmbXBlZy0+cGt0KTsKKysgICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUihFQUdB SU4pIHx8IHJldCA9PSBBVkVSUk9SX0VPRikgeworKyAgICAgICAgICAgIG1fZmZtcGVnSGFuZGxl ci0+YXZfcGFja2V0X2ZyZWUoJm1fZmZtcGVnLT5wa3QpOworKyAgICAgICAgICAgIGJyZWFrOwor KyAgICAgICAgfSBlbHNlIGlmIChyZXQgPCAwKSB7CisrICAgICAgICAgICAgbV9mZm1wZWdIYW5k bGVyLT5hdl9wYWNrZXRfZnJlZSgmbV9mZm1wZWctPnBrdCk7CisrICAgICAgICAgICAgTE9HRSgp IDw8ICJlcnJvciBkdXJpbmcgZW5jb2RpbmciOworKyAgICAgICAgICAgIHJldHVybjsKKysgICAg ICAgIH0KKysKKysgICAgICAgIG1fZmZtcGVnLT5wa3QtPnB0cyA9IG1fZmZtcGVnSGFuZGxlci0+ YXZfcmVzY2FsZV9xKG1fZmZtcGVnLT5wdHNDb3VudGVyLCBtX2ZmbXBlZy0+Y29kZWNDdHgtPnRp bWVfYmFzZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1fZmZtcGVnLT52aWRlb1N0cmVhbS0+dGltZV9iYXNlKTsKKysgICAgICAg IG1fZmZtcGVnLT5wa3QtPmR0cyA9IG1fZmZtcGVnSGFuZGxlci0+YXZfcmVzY2FsZV9xKG1fZmZt cGVnLT5wdHNDb3VudGVyLCBtX2ZmbXBlZy0+Y29kZWNDdHgtPnRpbWVfYmFzZSwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZmZt cGVnLT52aWRlb1N0cmVhbS0+dGltZV9iYXNlKTsKKysKKysgICAgICAgIG1fZmZtcGVnLT5wdHND b3VudGVyKys7CisrCisrICAgICAgICByZXQgPSBtX2ZmbXBlZ0hhbmRsZXItPmF2X2ludGVybGVh dmVkX3dyaXRlX2ZyYW1lKG1fZmZtcGVnLT5mb3JtYXRDdHgsIG1fZmZtcGVnLT5wa3QpOworKyAg ICAgICAgaWYgKHJldCA8IDApIHsKKysgICAgICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2X3Bh Y2tldF9mcmVlKCZtX2ZmbXBlZy0+cGt0KTsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAg ICB9CisrICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2X3BhY2tldF9mcmVlKCZtX2ZmbXBlZy0+ cGt0KTsKKysgICAgfQorKworKyAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2X3dyaXRlX3RyYWlsZXIo bV9mZm1wZWctPmZvcm1hdEN0eCk7CisrCisrICAgIGlmIChtX2ZmbXBlZy0+Zm9ybWF0Q3R4LT5w YikgeworKyAgICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdmlvX2Nsb3NlKG1fZmZtcGVnLT5mb3Jt YXRDdHgtPnBiKTsKKysgICAgICAgIG1fZmZtcGVnLT5mb3JtYXRDdHgtPnBiID0gbnVsbHB0cjsK KysgICAgfQorKworKyAgICBtX2ZmbXBlZy0+ZmluaXNoZWQgPSB0cnVlOworK30KKysKKyt2b2lk IFZpZGVvRW5jb2Rlcjo6Y2xvc2UoKQorK3sKKysgICAgaWYgKCFtX2ZmbXBlZy0+b3BlbmVkKSB7 CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgaWYgKCFtX2ZmbXBlZy0+ZmluaXNo ZWQpIHsKKysgICAgICAgIGZpbmlzaEVuY29kZSgpOworKyAgICB9CisrCisrICAgIG1fZmZtcGVn SGFuZGxlci0+YXZjb2RlY19mcmVlX2NvbnRleHQoJm1fZmZtcGVnLT5jb2RlY0N0eCk7CisrCisr ICAgIGlmIChtX2ZmbXBlZy0+cGljdHVyZV9idWYpIHsKKysgICAgICAgIGRlbGV0ZVtdIG1fZmZt cGVnLT5waWN0dXJlX2J1ZjsKKysgICAgICAgIG1fZmZtcGVnLT5waWN0dXJlX2J1ZiA9IDA7Cisr ICAgIH0KKysKKysgICAgaWYgKG1fZmZtcGVnLT5wcGljdHVyZSkgeworKyAgICAgICAgbV9mZm1w ZWdIYW5kbGVyLT5hdl9mcmFtZV9mcmVlKCZtX2ZmbXBlZy0+cHBpY3R1cmUpOworKyAgICAgICAg bV9mZm1wZWctPnBwaWN0dXJlID0gMDsKKysgICAgfQorKworKyAgICBpZiAobV9mZm1wZWctPmlt Z19jb252ZXJ0X2N0eCkgeworKyAgICAgICAgbV9mZm1wZWdIYW5kbGVyLT5zd3NfZnJlZUNvbnRl eHQobV9mZm1wZWctPmltZ19jb252ZXJ0X2N0eCk7CisrICAgICAgICBtX2ZmbXBlZy0+aW1nX2Nv bnZlcnRfY3R4ID0gbnVsbHB0cjsKKysgICAgfQorKworKyAgICBpZiAobV9mZm1wZWctPmZvcm1h dEN0eCkgeworKyAgICAgICAgaWYgKG1fZmZtcGVnLT5mb3JtYXRDdHgtPnBiKSB7CisrICAgICAg ICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdmlvX2Nsb3NlKG1fZmZtcGVnLT5mb3JtYXRDdHgtPnBi KTsKKysgICAgICAgICAgICBtX2ZmbXBlZy0+Zm9ybWF0Q3R4LT5wYiA9IG51bGxwdHI7CisrICAg ICAgICB9CisrICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2Zm9ybWF0X2ZyZWVfY29udGV4dCht X2ZmbXBlZy0+Zm9ybWF0Q3R4KTsKKysgICAgICAgIG1fZmZtcGVnLT5mb3JtYXRDdHggPSBudWxs cHRyOworKyAgICB9CisrICAgIG1fZmZtcGVnLT5vcGVuZWQgPSBmYWxzZTsKKysgICAgbV9mZm1w ZWctPmZpbmlzaGVkID0gZmFsc2U7CisrCisrICAgIG1fb3V0cHV0UGF0aCA9IGlvOjpwYXRoX3Qo KTsKKyt9CisrCisrYm9vbCBWaWRlb0VuY29kZXI6OmVuY29kZUltYWdlKGNvbnN0IFFJbWFnZSYg aW1nKQorK3sKKysgICAgaWYgKCFtX2ZmbXBlZy0+b3BlbmVkKSB7CisrICAgICAgICByZXR1cm4g ZmFsc2U7CisrICAgIH0KKysKKysgICAgY29udmVydEltYWdlX3N3cyhpbWcpOworKworKyAgICBt X2ZmbXBlZy0+cHBpY3R1cmUtPnB0cyA9IG1fZmZtcGVnSGFuZGxlci0+YXZfcmVzY2FsZV9xKG1f ZmZtcGVnLT5jb2RlY0N0eC0+ZnJhbWVfbnVtLCBtX2ZmbXBlZy0+Y29kZWNDdHgtPnRpbWVfYmFz ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtX2ZmbXBlZy0+dmlkZW9TdHJlYW0tPnRpbWVfYmFzZSk7CisrCisrICAgIGludCBy ZXQgPSBtX2ZmbXBlZ0hhbmRsZXItPmF2Y29kZWNfc2VuZF9mcmFtZShtX2ZmbXBlZy0+Y29kZWND dHgsIG1fZmZtcGVnLT5wcGljdHVyZSk7CisrICAgIGlmIChyZXQgPCAwKSB7CisrICAgICAgICBy ZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgd2hpbGUgKHJldCA+PSAwKSB7CisrICAgICAg ICBtX2ZmbXBlZy0+cGt0ID0gbV9mZm1wZWdIYW5kbGVyLT5hdl9wYWNrZXRfYWxsb2MoKTsKKysg ICAgICAgIHJldCA9IG1fZmZtcGVnSGFuZGxlci0+YXZjb2RlY19yZWNlaXZlX3BhY2tldChtX2Zm bXBlZy0+Y29kZWNDdHgsIG1fZmZtcGVnLT5wa3QpOworKyAgICAgICAgaWYgKHJldCA9PSBBVkVS Uk9SKEVBR0FJTikgfHwgcmV0ID09IEFWRVJST1JfRU9GKSB7CisrICAgICAgICAgICAgbV9mZm1w ZWdIYW5kbGVyLT5hdl9wYWNrZXRfZnJlZSgmbV9mZm1wZWctPnBrdCk7CisrICAgICAgICAgICAg cmV0dXJuIHRydWU7CisrICAgICAgICB9IGVsc2UgaWYgKHJldCA8IDApIHsKKysgICAgICAgICAg ICBtX2ZmbXBlZ0hhbmRsZXItPmF2X3BhY2tldF9mcmVlKCZtX2ZmbXBlZy0+cGt0KTsKKysgICAg ICAgICAgICBMT0dFKCkgPDwgImVycm9yIGR1cmluZyBlbmNvZGluZyI7CisrICAgICAgICAgICAg cmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKworKyAgICAgICAgbV9mZm1wZWctPnBrdC0+cHRz ID0gbV9mZm1wZWdIYW5kbGVyLT5hdl9yZXNjYWxlX3EobV9mZm1wZWctPnB0c0NvdW50ZXIsIG1f ZmZtcGVnLT5jb2RlY0N0eC0+dGltZV9iYXNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mZm1wZWctPnZpZGVvU3RyZWFtLT50 aW1lX2Jhc2UpOworKyAgICAgICAgbV9mZm1wZWctPnBrdC0+ZHRzID0gbV9mZm1wZWdIYW5kbGVy LT5hdl9yZXNjYWxlX3EobV9mZm1wZWctPnB0c0NvdW50ZXIsIG1fZmZtcGVnLT5jb2RlY0N0eC0+ dGltZV9iYXNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbV9mZm1wZWctPnZpZGVvU3RyZWFtLT50aW1lX2Jhc2UpOworKworKyAg ICAgICAgbV9mZm1wZWctPnB0c0NvdW50ZXIrKzsKKysKKysgICAgICAgIHJldCA9IG1fZmZtcGVn SGFuZGxlci0+YXZfaW50ZXJsZWF2ZWRfd3JpdGVfZnJhbWUobV9mZm1wZWctPmZvcm1hdEN0eCwg bV9mZm1wZWctPnBrdCk7CisrICAgICAgICBpZiAocmV0IDwgMCkgeworKyAgICAgICAgICAgIG1f ZmZtcGVnSGFuZGxlci0+YXZfcGFja2V0X2ZyZWUoJm1fZmZtcGVnLT5wa3QpOworKyAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgICAgIG1fZmZtcGVnSGFuZGxlci0+ YXZfcGFja2V0X2ZyZWUoJm1fZmZtcGVnLT5wa3QpOworKyAgICB9CisrCisrICAgIHJldHVybiB0 cnVlOworK30KKysKKytib29sIFZpZGVvRW5jb2Rlcjo6ZW5jb2RlVmlkZW8oY29uc3QgQnl0ZUFy cmF5JiB2aWRlb0RhdGEsIGludCBtYXhGcmFtZXMpCisreworKyAgICBpZiAoIW1fZmZtcGVnLT5v cGVuZWQpIHsKKysgICAgICAgIExPR0UoKSA8PCAiZW5jb2RlVmlkZW86IGVuY29kZXIgbm90IG9w ZW5lZCI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgTWVtb3J5UmVh ZENvbnRleHQgbWVtQ3R4OworKyAgICBtZW1DdHguZGF0YSA9IHZpZGVvRGF0YS5jb25zdERhdGEo KTsKKysgICAgbWVtQ3R4LnNpemUgPSBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2aWRlb0RhdGEuc2l6 ZSgpKTsKKysgICAgbWVtQ3R4LnBvcyA9IDA7CisrCisrICAgIHN0YXRpYyBjb25zdGV4cHIgaW50 IEFWSU9fQlVGX1NJWkUgPSA0MDk2OworKyAgICB1bnNpZ25lZCBjaGFyKiBhdmlvQnVmID0gc3Rh dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1fZmZtcGVnSGFuZGxlci0+YXZfbWFsbG9jKEFWSU9f QlVGX1NJWkUpKTsKKysgICAgaWYgKCFhdmlvQnVmKSB7CisrICAgICAgICBMT0dFKCkgPDwgImVu Y29kZVZpZGVvOiBmYWlsZWQgdG8gYWxsb2NhdGUgYXZpbyBidWZmZXIiOworKyAgICAgICAgcmV0 dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIEFWSU9Db250ZXh0KiBhdmlvQ3R4ID0gbV9mZm1w ZWdIYW5kbGVyLT5hdmlvX2FsbG9jX2NvbnRleHQoCisrICAgICAgICBhdmlvQnVmLCBBVklPX0JV Rl9TSVpFLCAwLCAmbWVtQ3R4LCBtZW1SZWFkUGFja2V0LCBudWxscHRyLCBtZW1TZWVrKTsKKysg ICAgaWYgKCFhdmlvQ3R4KSB7CisrICAgICAgICBMT0dFKCkgPDwgImVuY29kZVZpZGVvOiBmYWls ZWQgdG8gYWxsb2NhdGUgQVZJT0NvbnRleHQiOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg ICB9CisrCisrICAgIEFWRm9ybWF0Q29udGV4dCogaW5wdXRGbXRDdHggPSBtX2ZmbXBlZ0hhbmRs ZXItPmF2Zm9ybWF0X2FsbG9jX2NvbnRleHQoKTsKKysgICAgaWYgKCFpbnB1dEZtdEN0eCkgewor KyAgICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdmlvX2NvbnRleHRfZnJlZSgmYXZpb0N0eCk7Cisr ICAgICAgICBMT0dFKCkgPDwgImVuY29kZVZpZGVvOiBmYWlsZWQgdG8gYWxsb2NhdGUgZm9ybWF0 IGNvbnRleHQiOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIGlucHV0Rm10 Q3R4LT5wYiA9IGF2aW9DdHg7CisrCisrICAgIEFWQ29kZWNDb250ZXh0KiBkZWNvZGVDdHggPSBu dWxscHRyOworKyAgICBBVkZyYW1lKiBkZWNvZGVkRnJhbWUgPSBudWxscHRyOworKyAgICBBVlBh Y2tldCogcGFja2V0ID0gbnVsbHB0cjsKKysKKysgICAgU3dzQ29udGV4dCogZGVjU3dzQ3R4ID0g bnVsbHB0cjsKKysKKysgICAgREVGRVIgeworKyAgICAgICAgaWYgKGRlY1N3c0N0eCkgeworKyAg ICAgICAgICAgIG1fZmZtcGVnSGFuZGxlci0+c3dzX2ZyZWVDb250ZXh0KGRlY1N3c0N0eCk7Cisr ICAgICAgICB9CisrICAgICAgICBpZiAoaW5wdXRGbXRDdHgpIHsKKysgICAgICAgICAgICBtX2Zm bXBlZ0hhbmRsZXItPmF2Zm9ybWF0X2Nsb3NlX2lucHV0KCZpbnB1dEZtdEN0eCk7CisrICAgICAg ICB9CisrICAgICAgICBpZiAoYXZpb0N0eCkgeworKyAgICAgICAgICAgIG1fZmZtcGVnSGFuZGxl ci0+YXZpb19jb250ZXh0X2ZyZWUoJmF2aW9DdHgpOworKyAgICAgICAgfQorKyAgICAgICAgaWYg KGRlY29kZUN0eCkgeworKyAgICAgICAgICAgIG1fZmZtcGVnSGFuZGxlci0+YXZjb2RlY19mcmVl X2NvbnRleHQoJmRlY29kZUN0eCk7CisrICAgICAgICB9CisrICAgICAgICBpZiAoZGVjb2RlZEZy YW1lKSB7CisrICAgICAgICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdl9mcmFtZV9mcmVlKCZkZWNv ZGVkRnJhbWUpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKHBhY2tldCkgeworKyAgICAgICAg ICAgIG1fZmZtcGVnSGFuZGxlci0+YXZfcGFja2V0X2ZyZWUoJnBhY2tldCk7CisrICAgICAgICB9 CisrICAgIH07CisrCisrICAgIGlmIChtX2ZmbXBlZ0hhbmRsZXItPmF2Zm9ybWF0X29wZW5faW5w dXQoJmlucHV0Rm10Q3R4LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKSA8IDApIHsKKysgICAg ICAgIExPR0UoKSA8PCAiZW5jb2RlVmlkZW86IGZhaWxlZCB0byBvcGVuIGlucHV0IGZyb20gbWVt b3J5IjsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBpZiAobV9mZm1w ZWdIYW5kbGVyLT5hdmZvcm1hdF9maW5kX3N0cmVhbV9pbmZvKGlucHV0Rm10Q3R4LCBudWxscHRy KSA8IDApIHsKKysgICAgICAgIExPR0UoKSA8PCAiZW5jb2RlVmlkZW86IGZhaWxlZCB0byBmaW5k IHN0cmVhbSBpbmZvIjsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBp bnQgdmlkZW9TdHJlYW1JZHggPSAtMTsKKysgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlu cHV0Rm10Q3R4LT5uYl9zdHJlYW1zOyBpKyspIHsKKysgICAgICAgIGlmIChpbnB1dEZtdEN0eC0+ c3RyZWFtc1tpXS0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPT0gQVZNRURJQV9UWVBFX1ZJREVPKSB7 CisrICAgICAgICAgICAgdmlkZW9TdHJlYW1JZHggPSBzdGF0aWNfY2FzdDxpbnQ+KGkpOworKyAg ICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGlmICh2aWRlb1N0 cmVhbUlkeCA8IDApIHsKKysgICAgICAgIExPR0UoKSA8PCAiZW5jb2RlVmlkZW86IG5vIHZpZGVv IHN0cmVhbSBmb3VuZCI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAg QVZDb2RlY1BhcmFtZXRlcnMqIGNvZGVjUGFyID0gaW5wdXRGbXRDdHgtPnN0cmVhbXNbdmlkZW9T dHJlYW1JZHhdLT5jb2RlY3BhcjsKKysKKysgICAgY29uc3QgQVZDb2RlYyogZGVjb2RlciA9IG1f ZmZtcGVnSGFuZGxlci0+YXZjb2RlY19maW5kX2RlY29kZXIoY29kZWNQYXItPmNvZGVjX2lkKTsK KysgICAgaWYgKCFkZWNvZGVyKSB7CisrICAgICAgICBMT0dFKCkgPDwgImVuY29kZVZpZGVvOiBk ZWNvZGVyIG5vdCBmb3VuZCBmb3IgY29kZWNfaWQgIiA8PCBjb2RlY1Bhci0+Y29kZWNfaWQ7Cisr ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgZGVjb2RlQ3R4ID0gbV9mZm1w ZWdIYW5kbGVyLT5hdmNvZGVjX2FsbG9jX2NvbnRleHQzKGRlY29kZXIpOworKyAgICBpZiAoIWRl Y29kZUN0eCkgeworKyAgICAgICAgTE9HRSgpIDw8ICJlbmNvZGVWaWRlbzogZmFpbGVkIHRvIGFs bG9jYXRlIGRlY29kZXIgY29udGV4dCI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K KysKKysgICAgbV9mZm1wZWdIYW5kbGVyLT5hdmNvZGVjX3BhcmFtZXRlcnNfdG9fY29udGV4dChk ZWNvZGVDdHgsIGNvZGVjUGFyKTsKKysKKysgICAgaWYgKG1fZmZtcGVnSGFuZGxlci0+YXZjb2Rl Y19vcGVuMihkZWNvZGVDdHgsIGRlY29kZXIsIG51bGxwdHIpIDwgMCkgeworKyAgICAgICAgTE9H RSgpIDw8ICJlbmNvZGVWaWRlbzogZmFpbGVkIHRvIG9wZW4gZGVjb2RlciI7CisrICAgICAgICBy ZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgZGVjU3dzQ3R4ID0gbV9mZm1wZWdIYW5kbGVy LT5zd3NfZ2V0Q2FjaGVkQ29udGV4dCgKKysgICAgICAgIG51bGxwdHIsCisrICAgICAgICBkZWNv ZGVDdHgtPndpZHRoLCBkZWNvZGVDdHgtPmhlaWdodCwgZGVjb2RlQ3R4LT5waXhfZm10LAorKyAg ICAgICAgbV9mZm1wZWctPndpZHRoLCBtX2ZmbXBlZy0+aGVpZ2h0LCBBVl9QSVhfRk1UX1lVVjQy MFAsCisrICAgICAgICBTV1NfQklDVUJJQywgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7Cisr CisrICAgIGlmICghZGVjU3dzQ3R4KSB7CisrICAgICAgICBMT0dFKCkgPDwgImVuY29kZVZpZGVv OiBmYWlsZWQgdG8gY3JlYXRlIHN3cyBjb250ZXh0IjsKKysgICAgICAgIHJldHVybiBmYWxzZTsK KysgICAgfQorKworKyAgICBkZWNvZGVkRnJhbWUgPSBtX2ZmbXBlZ0hhbmRsZXItPmF2X2ZyYW1l X2FsbG9jKCk7CisrICAgIHBhY2tldCA9IG1fZmZtcGVnSGFuZGxlci0+YXZfcGFja2V0X2FsbG9j KCk7CisrCisrICAgIGludCBmcmFtZXNFbmNvZGVkID0gMDsKKysgICAgYm9vbCBkb25lID0gZmFs c2U7CisrCisrICAgIGF1dG8gZW5jb2RlRGVjb2RlZEZyYW1lID0gWyZdKCkgLT4gYm9vbCB7Cisr ICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPnN3c19zY2FsZShkZWNTd3NDdHgsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkRnJhbWUtPmRhdGEsIGRlY29kZWRGcmFt ZS0+bGluZXNpemUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBkZWNv ZGVkRnJhbWUtPmhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f ZmZtcGVnLT5wcGljdHVyZS0+ZGF0YSwgbV9mZm1wZWctPnBwaWN0dXJlLT5saW5lc2l6ZSk7Cisr CisrICAgICAgICBtX2ZmbXBlZy0+cHBpY3R1cmUtPnB0cyA9IG1fZmZtcGVnSGFuZGxlci0+YXZf cmVzY2FsZV9xKAorKyAgICAgICAgICAgIG1fZmZtcGVnLT5jb2RlY0N0eC0+ZnJhbWVfbnVtLCBt X2ZmbXBlZy0+Y29kZWNDdHgtPnRpbWVfYmFzZSwgbV9mZm1wZWctPnZpZGVvU3RyZWFtLT50aW1l X2Jhc2UpOworKworKyAgICAgICAgaW50IHJldCA9IG1fZmZtcGVnSGFuZGxlci0+YXZjb2RlY19z ZW5kX2ZyYW1lKG1fZmZtcGVnLT5jb2RlY0N0eCwgbV9mZm1wZWctPnBwaWN0dXJlKTsKKysgICAg ICAgIGlmIChyZXQgPCAwKSB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAg fQorKworKyAgICAgICAgd2hpbGUgKHJldCA+PSAwKSB7CisrICAgICAgICAgICAgQVZQYWNrZXQq IG91dFBrdCA9IG1fZmZtcGVnSGFuZGxlci0+YXZfcGFja2V0X2FsbG9jKCk7CisrICAgICAgICAg ICAgcmV0ID0gbV9mZm1wZWdIYW5kbGVyLT5hdmNvZGVjX3JlY2VpdmVfcGFja2V0KG1fZmZtcGVn LT5jb2RlY0N0eCwgb3V0UGt0KTsKKysgICAgICAgICAgICBpZiAocmV0ID09IEFWRVJST1IoRUFH QUlOKSB8fCByZXQgPT0gQVZFUlJPUl9FT0YpIHsKKysgICAgICAgICAgICAgICAgbV9mZm1wZWdI YW5kbGVyLT5hdl9wYWNrZXRfZnJlZSgmb3V0UGt0KTsKKysgICAgICAgICAgICAgICAgYnJlYWs7 CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CisrICAgICAgICAg ICAgICAgIG1fZmZtcGVnSGFuZGxlci0+YXZfcGFja2V0X2ZyZWUoJm91dFBrdCk7CisrICAgICAg ICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAg b3V0UGt0LT5wdHMgPSBtX2ZmbXBlZ0hhbmRsZXItPmF2X3Jlc2NhbGVfcShtX2ZmbXBlZy0+cHRz Q291bnRlciwgbV9mZm1wZWctPmNvZGVjQ3R4LT50aW1lX2Jhc2UsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZmbXBlZy0+dmlkZW9T dHJlYW0tPnRpbWVfYmFzZSk7CisrICAgICAgICAgICAgb3V0UGt0LT5kdHMgPSBtX2ZmbXBlZ0hh bmRsZXItPmF2X3Jlc2NhbGVfcShtX2ZmbXBlZy0+cHRzQ291bnRlciwgbV9mZm1wZWctPmNvZGVj Q3R4LT50aW1lX2Jhc2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtX2ZmbXBlZy0+dmlkZW9TdHJlYW0tPnRpbWVfYmFzZSk7CisrICAg ICAgICAgICAgbV9mZm1wZWctPnB0c0NvdW50ZXIrKzsKKysKKysgICAgICAgICAgICBtX2ZmbXBl Z0hhbmRsZXItPmF2X2ludGVybGVhdmVkX3dyaXRlX2ZyYW1lKG1fZmZtcGVnLT5mb3JtYXRDdHgs IG91dFBrdCk7CisrICAgICAgICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdl9wYWNrZXRfZnJlZSgm b3V0UGt0KTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGZyYW1lc0VuY29kZWQrKzsKKysgICAg ICAgIGlmIChtYXhGcmFtZXMgPiAwICYmIGZyYW1lc0VuY29kZWQgPj0gbWF4RnJhbWVzKSB7Cisr ICAgICAgICAgICAgZG9uZSA9IHRydWU7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4g dHJ1ZTsKKysgICAgfTsKKysKKysgICAgd2hpbGUgKCFkb25lICYmIG1fZmZtcGVnSGFuZGxlci0+ YXZfcmVhZF9mcmFtZShpbnB1dEZtdEN0eCwgcGFja2V0KSA+PSAwKSB7CisrICAgICAgICBpZiAo cGFja2V0LT5zdHJlYW1faW5kZXggIT0gdmlkZW9TdHJlYW1JZHgpIHsKKysgICAgICAgICAgICBt X2ZmbXBlZ0hhbmRsZXItPmF2X3BhY2tldF91bnJlZihwYWNrZXQpOworKyAgICAgICAgICAgIGNv bnRpbnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgaW50IHJldCA9IG1fZmZtcGVnSGFuZGxl ci0+YXZjb2RlY19zZW5kX3BhY2tldChkZWNvZGVDdHgsIHBhY2tldCk7CisrICAgICAgICBtX2Zm bXBlZ0hhbmRsZXItPmF2X3BhY2tldF91bnJlZihwYWNrZXQpOworKworKyAgICAgICAgd2hpbGUg KCFkb25lICYmIHJldCA+PSAwKSB7CisrICAgICAgICAgICAgcmV0ID0gbV9mZm1wZWdIYW5kbGVy LT5hdmNvZGVjX3JlY2VpdmVfZnJhbWUoZGVjb2RlQ3R4LCBkZWNvZGVkRnJhbWUpOworKyAgICAg ICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUihFQUdBSU4pIHx8IHJldCA9PSBBVkVSUk9SX0VPRikg eworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAg aWYgKHJldCA8IDApIHsKKysgICAgICAgICAgICAgICAgTE9HRSgpIDw8ICJlbmNvZGVWaWRlbzog ZXJyb3IgcmVjZWl2aW5nIGRlY29kZWQgZnJhbWUiOworKyAgICAgICAgICAgICAgICByZXR1cm4g ZmFsc2U7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIGlmICghZW5jb2RlRGVjb2Rl ZEZyYW1lKCkpIHsKKysgICAgICAgICAgICAgICAgTE9HRSgpIDw8ICJlbmNvZGVWaWRlbzogZXJy b3IgZW5jb2RpbmcgZnJhbWUiOworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg ICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGlmICghZG9uZSkgeworKyAg ICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdmNvZGVjX3NlbmRfcGFja2V0KGRlY29kZUN0eCwgbnVs bHB0cik7CisrICAgICAgICB3aGlsZSAodHJ1ZSkgeworKyAgICAgICAgICAgIGludCByZXQgPSBt X2ZmbXBlZ0hhbmRsZXItPmF2Y29kZWNfcmVjZWl2ZV9mcmFtZShkZWNvZGVDdHgsIGRlY29kZWRG cmFtZSk7CisrICAgICAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9SKEVBR0FJTikgfHwgcmV0ID09 IEFWRVJST1JfRU9GKSB7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0K KysgICAgICAgICAgICBpZiAocmV0IDwgMCB8fCAhZW5jb2RlRGVjb2RlZEZyYW1lKCkgfHwgZG9u ZSkgeworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICB9 CisrICAgIH0KKysKKysgICAgTE9HSSgpIDw8ICJlbmNvZGVWaWRlbzogZW5jb2RlZCAiIDw8IGZy YW1lc0VuY29kZWQgPDwgIiBmcmFtZXMgZnJvbSBtZW1vcnkgYnVmZmVyIjsKKysgICAgcmV0dXJu IHRydWU7CisrfQorKworK2Jvb2wgVmlkZW9FbmNvZGVyOjphZGRBdWRpbyhjb25zdCBpbzo6cGF0 aF90JiBhdWRpb1BhdGgpCisreworKyAgICBpZiAobV9vdXRwdXRQYXRoLmVtcHR5KCkpIHsKKysg ICAgICAgIExPR0UoKSA8PCAiYWRkQXVkaW86IGVuY29kZXIgd2FzIG5vdCBvcGVuZWQgb3IgcGF0 aCBub3Qgc2V0IjsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBjb25z dCBpbzo6cGF0aF90IHZpZGVvUGF0aCA9IG1fb3V0cHV0UGF0aDsKKysgICAgY29uc3QgaW86OnBh dGhfdCB0bXBQYXRoID0gbV9vdXRwdXRQYXRoICsgIi50bXAiOworKworKyAgICBBVkZvcm1hdENv bnRleHQqIHZpZGVvRm10Q3R4ID0gbnVsbHB0cjsKKysgICAgQVZGb3JtYXRDb250ZXh0KiBhdWRp b0ZtdEN0eCA9IG51bGxwdHI7CisrICAgIEFWRm9ybWF0Q29udGV4dCogb3V0cHV0Rm10Q3R4ID0g bnVsbHB0cjsKKysKKysgICAgYm9vbCBjbGVhbmVkID0gZmFsc2U7CisrICAgIGF1dG8gY2xlYW51 cCA9IFsmXSgpIHsKKysgICAgICAgIGlmIChjbGVhbmVkKSB7CisrICAgICAgICAgICAgcmV0dXJu OworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHZpZGVvRm10Q3R4KSB7CisrICAgICAgICAg ICAgbV9mZm1wZWdIYW5kbGVyLT5hdmZvcm1hdF9jbG9zZV9pbnB1dCgmdmlkZW9GbXRDdHgpOwor KyAgICAgICAgfQorKyAgICAgICAgaWYgKGF1ZGlvRm10Q3R4KSB7CisrICAgICAgICAgICAgbV9m Zm1wZWdIYW5kbGVyLT5hdmZvcm1hdF9jbG9zZV9pbnB1dCgmYXVkaW9GbXRDdHgpOworKyAgICAg ICAgfQorKyAgICAgICAgaWYgKG91dHB1dEZtdEN0eCkgeworKyAgICAgICAgICAgIGlmIChvdXRw dXRGbXRDdHgtPnBiKSB7CisrICAgICAgICAgICAgICAgIG1fZmZtcGVnSGFuZGxlci0+YXZpb19j bG9zZShvdXRwdXRGbXRDdHgtPnBiKTsKKysgICAgICAgICAgICAgICAgb3V0cHV0Rm10Q3R4LT5w YiA9IG51bGxwdHI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIG1fZmZtcGVnSGFuZGxl ci0+YXZmb3JtYXRfZnJlZV9jb250ZXh0KG91dHB1dEZtdEN0eCk7CisrICAgICAgICB9CisrCisr ICAgICAgICBjbGVhbmVkID0gdHJ1ZTsKKysgICAgfTsKKysKKysgICAgREVGRVIgeworKyAgICAg ICAgY2xlYW51cCgpOworKyAgICB9OworKworKyAgICBpZiAobV9mZm1wZWdIYW5kbGVyLT5hdmZv cm1hdF9vcGVuX2lucHV0KCZ2aWRlb0ZtdEN0eCwgdmlkZW9QYXRoLmNfc3RyKCksIG51bGxwdHIs IG51bGxwdHIpIDwgMCkgeworKyAgICAgICAgTE9HRSgpIDw8ICJhZGRBdWRpbzogZmFpbGVkIHRv IG9wZW4gdmlkZW8gaW5wdXQ6ICIgPDwgdmlkZW9QYXRoOworKyAgICAgICAgcmV0dXJuIGZhbHNl OworKyAgICB9CisrICAgIGlmIChtX2ZmbXBlZ0hhbmRsZXItPmF2Zm9ybWF0X2ZpbmRfc3RyZWFt X2luZm8odmlkZW9GbXRDdHgsIG51bGxwdHIpIDwgMCkgeworKyAgICAgICAgTE9HRSgpIDw8ICJh ZGRBdWRpbzogZmFpbGVkIHRvIGZpbmQgdmlkZW8gc3RyZWFtIGluZm8iOworKyAgICAgICAgcmV0 dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlmIChtX2ZmbXBlZ0hhbmRsZXItPmF2Zm9ybWF0 X29wZW5faW5wdXQoJmF1ZGlvRm10Q3R4LCBhdWRpb1BhdGguY19zdHIoKSwgbnVsbHB0ciwgbnVs bHB0cikgPCAwKSB7CisrICAgICAgICBMT0dFKCkgPDwgImFkZEF1ZGlvOiBmYWlsZWQgdG8gb3Bl biBhdWRpbyBpbnB1dDogIiA8PCBhdWRpb1BhdGg7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr ICAgIH0KKysgICAgaWYgKG1fZmZtcGVnSGFuZGxlci0+YXZmb3JtYXRfZmluZF9zdHJlYW1faW5m byhhdWRpb0ZtdEN0eCwgbnVsbHB0cikgPCAwKSB7CisrICAgICAgICBMT0dFKCkgPDwgImFkZEF1 ZGlvOiBmYWlsZWQgdG8gZmluZCBhdWRpbyBzdHJlYW0gaW5mbyI7CisrICAgICAgICByZXR1cm4g ZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKG1fZmZtcGVnSGFuZGxlci0+YXZmb3JtYXRfYWxs b2Nfb3V0cHV0X2NvbnRleHQyKCZvdXRwdXRGbXRDdHgsIG51bGxwdHIsICJtcDQiLCB0bXBQYXRo LmNfc3RyKCkpIDwgMCB8fCAhb3V0cHV0Rm10Q3R4KSB7CisrICAgICAgICBMT0dFKCkgPDwgImFk ZEF1ZGlvOiBmYWlsZWQgdG8gYWxsb2NhdGUgb3V0cHV0IGNvbnRleHQiOworKyAgICAgICAgcmV0 dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGludCB2aWRlb0luSWR4ID0gLTE7CisrICAgIGlu dCBhdWRpb0luSWR4ID0gLTE7CisrICAgIGludCBvdXRWaWRlb0lkeCA9IC0xOworKyAgICBpbnQg b3V0QXVkaW9JZHggPSAtMTsKKysKKysgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZpZGVv Rm10Q3R4LT5uYl9zdHJlYW1zOyBpKyspIHsKKysgICAgICAgIGlmICh2aWRlb0ZtdEN0eC0+c3Ry ZWFtc1tpXS0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPT0gQVZNRURJQV9UWVBFX1ZJREVPKSB7Cisr ICAgICAgICAgICAgdmlkZW9JbklkeCA9IHN0YXRpY19jYXN0PGludD4oaSk7CisrICAgICAgICAg ICAgQVZTdHJlYW0qIG91dFN0cmVhbSA9IG1fZmZtcGVnSGFuZGxlci0+YXZmb3JtYXRfbmV3X3N0 cmVhbShvdXRwdXRGbXRDdHgsIG51bGxwdHIpOworKyAgICAgICAgICAgIGlmICghb3V0U3RyZWFt KSB7CisrICAgICAgICAgICAgICAgIExPR0UoKSA8PCAiYWRkQXVkaW86IGZhaWxlZCB0byBjcmVh dGUgb3V0cHV0IHZpZGVvIHN0cmVhbSI7CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK KysgICAgICAgICAgICB9CisrICAgICAgICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdmNvZGVjX3Bh cmFtZXRlcnNfY29weShvdXRTdHJlYW0tPmNvZGVjcGFyLCB2aWRlb0ZtdEN0eC0+c3RyZWFtc1tp XS0+Y29kZWNwYXIpOworKyAgICAgICAgICAgIG91dFN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX3Rh ZyA9IDA7CisrICAgICAgICAgICAgb3V0U3RyZWFtLT50aW1lX2Jhc2UgPSB2aWRlb0ZtdEN0eC0+ c3RyZWFtc1tpXS0+dGltZV9iYXNlOworKyAgICAgICAgICAgIG91dFZpZGVvSWR4ID0gb3V0U3Ry ZWFtLT5pbmRleDsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgfQorKwor KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXVkaW9GbXRDdHgtPm5iX3N0cmVhbXM7IGkr KykgeworKyAgICAgICAgaWYgKGF1ZGlvRm10Q3R4LT5zdHJlYW1zW2ldLT5jb2RlY3Bhci0+Y29k ZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVfQVVESU8pIHsKKysgICAgICAgICAgICBhdWRpb0luSWR4 ID0gc3RhdGljX2Nhc3Q8aW50PihpKTsKKysgICAgICAgICAgICBBVlN0cmVhbSogb3V0U3RyZWFt ID0gbV9mZm1wZWdIYW5kbGVyLT5hdmZvcm1hdF9uZXdfc3RyZWFtKG91dHB1dEZtdEN0eCwgbnVs bHB0cik7CisrICAgICAgICAgICAgaWYgKCFvdXRTdHJlYW0pIHsKKysgICAgICAgICAgICAgICAg TE9HRSgpIDw8ICJhZGRBdWRpbzogZmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgYXVkaW8gc3RyZWFt IjsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysgICAg ICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2Y29kZWNfcGFyYW1ldGVyc19jb3B5KG91dFN0cmVh bS0+Y29kZWNwYXIsIGF1ZGlvRm10Q3R4LT5zdHJlYW1zW2ldLT5jb2RlY3Bhcik7CisrICAgICAg ICAgICAgb3V0U3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdGFnID0gMDsKKysgICAgICAgICAgICBv dXRTdHJlYW0tPnRpbWVfYmFzZSA9IGF1ZGlvRm10Q3R4LT5zdHJlYW1zW2ldLT50aW1lX2Jhc2U7 CisrICAgICAgICAgICAgb3V0QXVkaW9JZHggPSBvdXRTdHJlYW0tPmluZGV4OworKyAgICAgICAg ICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGlmICh2aWRlb0luSWR4IDwg MCB8fCBhdWRpb0luSWR4IDwgMCkgeworKyAgICAgICAgTE9HRSgpIDw8ICJhZGRBdWRpbzogY291 bGQgbm90IGZpbmQgdmlkZW8gb3IgYXVkaW8gc3RyZWFtIjsKKysgICAgICAgIHJldHVybiBmYWxz ZTsKKysgICAgfQorKworKyAgICBpZiAobV9mZm1wZWdIYW5kbGVyLT5hdmlvX29wZW4oJm91dHB1 dEZtdEN0eC0+cGIsIHRtcFBhdGguY19zdHIoKSwgQVZJT19GTEFHX1dSSVRFKSA8IDApIHsKKysg ICAgICAgIExPR0UoKSA8PCAiYWRkQXVkaW86IGZhaWxlZCB0byBvcGVuIG91dHB1dCBmaWxlOiAi IDw8IHRtcFBhdGg7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYg KG1fZmZtcGVnSGFuZGxlci0+YXZmb3JtYXRfd3JpdGVfaGVhZGVyKG91dHB1dEZtdEN0eCwgbnVs bHB0cikgPCAwKSB7CisrICAgICAgICBMT0dFKCkgPDwgImFkZEF1ZGlvOiBmYWlsZWQgdG8gd3Jp dGUgaGVhZGVyIjsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBBVlBh Y2tldCogcGt0ID0gbV9mZm1wZWdIYW5kbGVyLT5hdl9wYWNrZXRfYWxsb2MoKTsKKysKKysgICAg d2hpbGUgKG1fZmZtcGVnSGFuZGxlci0+YXZfcmVhZF9mcmFtZSh2aWRlb0ZtdEN0eCwgcGt0KSA+ PSAwKSB7CisrICAgICAgICBpZiAocGt0LT5zdHJlYW1faW5kZXggPT0gdmlkZW9JbklkeCkgewor KyAgICAgICAgICAgIHBrdC0+c3RyZWFtX2luZGV4ID0gb3V0VmlkZW9JZHg7CisrICAgICAgICAg ICAgbV9mZm1wZWdIYW5kbGVyLT5hdl9wYWNrZXRfcmVzY2FsZV90cyhwa3QsIHZpZGVvRm10Q3R4 LT5zdHJlYW1zW3ZpZGVvSW5JZHhdLT50aW1lX2Jhc2UsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRGbXRDdHgtPnN0cmVhbXNbb3V0Vmlk ZW9JZHhdLT50aW1lX2Jhc2UpOworKyAgICAgICAgICAgIHBrdC0+cG9zID0gLTE7CisrICAgICAg ICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdl9pbnRlcmxlYXZlZF93cml0ZV9mcmFtZShvdXRwdXRG bXRDdHgsIHBrdCk7CisrICAgICAgICB9CisrICAgICAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2X3Bh Y2tldF91bnJlZihwa3QpOworKyAgICB9CisrCisrICAgIHdoaWxlIChtX2ZmbXBlZ0hhbmRsZXIt PmF2X3JlYWRfZnJhbWUoYXVkaW9GbXRDdHgsIHBrdCkgPj0gMCkgeworKyAgICAgICAgaWYgKHBr dC0+c3RyZWFtX2luZGV4ID09IGF1ZGlvSW5JZHgpIHsKKysgICAgICAgICAgICBwa3QtPnN0cmVh bV9pbmRleCA9IG91dEF1ZGlvSWR4OworKyAgICAgICAgICAgIG1fZmZtcGVnSGFuZGxlci0+YXZf cGFja2V0X3Jlc2NhbGVfdHMocGt0LCBhdWRpb0ZtdEN0eC0+c3RyZWFtc1thdWRpb0luSWR4XS0+ dGltZV9iYXNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb3V0cHV0Rm10Q3R4LT5zdHJlYW1zW291dEF1ZGlvSWR4XS0+dGltZV9iYXNlKTsKKysg ICAgICAgICAgICBwa3QtPnBvcyA9IC0xOworKyAgICAgICAgICAgIG1fZmZtcGVnSGFuZGxlci0+ YXZfaW50ZXJsZWF2ZWRfd3JpdGVfZnJhbWUob3V0cHV0Rm10Q3R4LCBwa3QpOworKyAgICAgICAg fQorKyAgICAgICAgbV9mZm1wZWdIYW5kbGVyLT5hdl9wYWNrZXRfdW5yZWYocGt0KTsKKysgICAg fQorKworKyAgICBtX2ZmbXBlZ0hhbmRsZXItPmF2X3BhY2tldF9mcmVlKCZwa3QpOworKyAgICBt X2ZmbXBlZ0hhbmRsZXItPmF2X3dyaXRlX3RyYWlsZXIob3V0cHV0Rm10Q3R4KTsKKysKKysgICAg Y2xlYW51cCgpOworKworKyAgICBpZiAoIWlvOjpGaWxlOjpjb3B5KHRtcFBhdGgsIHZpZGVvUGF0 aCwgdHJ1ZSkpIHsKKysgICAgICAgIExPR0UoKSA8PCAiYWRkQXVkaW86IGZhaWxlZCB0byByZXBs YWNlIHdpdGggbXV4ZWQgZmlsZSI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysK KysgICAgaW86OkZpbGU6OnJlbW92ZSh0bXBQYXRoKTsKKysKKysgICAgcmV0dXJuIHRydWU7Cisr fQorKworK2Jvb2wgVmlkZW9FbmNvZGVyOjpjb252ZXJ0SW1hZ2Vfc3dzKGNvbnN0IFFJbWFnZSYg aW1nKQorK3sKKysgICAgLy8gQ2hlY2sgaWYgdGhlIGltYWdlIG1hdGNoZXMgdGhlIHNpemUKKysg ICAgaWYgKGltZy53aWR0aCgpICE9IG1fZmZtcGVnLT53aWR0aCB8fCBpbWcuaGVpZ2h0KCkgIT0g bV9mZm1wZWctPmhlaWdodCkgeworKyAgICAgICAgTE9HRSgpIDw8ICJ3cm9uZyBpbWFnZSBzaXpl ISI7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKGltZy5mb3Jt YXQoKSAhPSBRSW1hZ2U6OkZvcm1hdF9SR0IzMiAmJiBpbWcuZm9ybWF0KCkgIT0gUUltYWdlOjpG b3JtYXRfQVJHQjMyKSB7CisrICAgICAgICBMT0dFKCkgPDwgIndyb25nIGltYWdlIGZvcm1hdCI7 CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgbV9mZm1wZWctPmltZ19j b252ZXJ0X2N0eCA9IG1fZmZtcGVnSGFuZGxlci0+c3dzX2dldENhY2hlZENvbnRleHQobV9mZm1w ZWctPmltZ19jb252ZXJ0X2N0eCwgbV9mZm1wZWctPndpZHRoLCBtX2ZmbXBlZy0+aGVpZ2h0LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBVl9QSVhfRk1UX0JHUkEsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZmZtcGVnLT53 aWR0aCwgbV9mZm1wZWctPmhlaWdodCwgQVZfUElYX0ZNVF9ZVVY0MjBQLCBTV1NfQklDVUJJQywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7CisrCisrICAgIGlmICghbV9mZm1wZWct PmltZ19jb252ZXJ0X2N0eCkgeworKyAgICAgICAgTE9HRSgpIDw8ICJmYWlsZWQgaW5pdGlhbGl6 ZSB0aGUgY29udmVyc2lvbiBjb250ZXh0IjsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg fQorKworKyAgICB1aW50OF90KiBzcmNwbGFuZXNbM107CisrICAgIHNyY3BsYW5lc1swXSA9ICh1 aW50OF90KilpbWcuYml0cygpOworKyAgICBzcmNwbGFuZXNbMV0gPSAwOworKyAgICBzcmNwbGFu ZXNbMl0gPSAwOworKworKyAgICBpbnQgc3Jjc3RyaWRlWzNdOworKyAgICBzcmNzdHJpZGVbMF0g PSBpbWcuYnl0ZXNQZXJMaW5lKCk7CisrICAgIHNyY3N0cmlkZVsxXSA9IDA7CisrICAgIHNyY3N0 cmlkZVsyIF09IDA7CisrCisrICAgIG1fZmZtcGVnSGFuZGxlci0+c3dzX3NjYWxlKG1fZmZtcGVn LT5pbWdfY29udmVydF9jdHgsIHNyY3BsYW5lcywgc3Jjc3RyaWRlLCAwLCBtX2ZmbXBlZy0+aGVp Z2h0LCBtX2ZmbXBlZy0+cHBpY3R1cmUtPmRhdGEsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1fZmZtcGVnLT5wcGljdHVyZS0+bGluZXNpemUpOworKworKyAgICByZXR1cm4gdHJ1 ZTsKKyt9CisrfQorZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEv aW50ZXJuYWwvZmZtcGVnL3Y5L3ZpZGVvZW5jb2Rlci5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40 L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y5L3ZpZGVvZW5jb2Rlci5oCist LS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvZmZtcGVnL3Y5 L3ZpZGVvZW5jb2Rlci5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42ODA1NjAxNDQgKzAy MDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC9mZm1w ZWcvdjkvdmlkZW9lbmNvZGVyLmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42ODA1NDI0MjQgKzAyMDAK K0BAIC0wLDAgKzEsNTcgQEAKKysvKgorKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt My4wLW9ubHkKKysgKiBNdXNlU2NvcmUtU3R1ZGlvLUNMQS1hcHBsaWVzCisrICoKKysgKiBNdXNl U2NvcmUgU3R1ZGlvCisrICogTXVzaWMgQ29tcG9zaXRpb24gJiBOb3RhdGlvbgorKyAqCisrICog Q29weXJpZ2h0IChDKSAyMDI1IE11c2VTY29yZSBMaW1pdGVkCisrICoKKysgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAzIGFzCisrICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCisrICoKKysgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KysgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisrICovCisrCisrI3ByYWdtYSBvbmNlCisrCisrI2luY2x1ZGUg Im1lZGlhL2l2aWRlb2VuY29kZXIuaCIKKysKKysjaW5jbHVkZSAiaW50ZXJuYWwvZmZtcGVndXRp bHMuaCIKKysKKytuYW1lc3BhY2UgbXVzZTo6bWVkaWE6OmZmbXBlZzo6djkgeworK2NsYXNzIEZG bXBlZ0xpYkhhbmRsZXI7Cisrc3RydWN0IEZGbXBlZzsKKytjbGFzcyBWaWRlb0VuY29kZXIgOiBw dWJsaWMgSVZpZGVvRW5jb2RlcgorK3sKKytwdWJsaWM6CisrICAgIFZpZGVvRW5jb2RlcigpOwor KyAgICB+VmlkZW9FbmNvZGVyKCkgb3ZlcnJpZGU7CisrCisrICAgIGJvb2wgbG9hZChjb25zdCBG Rm1wZWdMaWJQYXRocyYgcGF0aHMpOworKworKyAgICBib29sIG9wZW4oY29uc3QgbXVzZTo6aW86 OnBhdGhfdCYgZmlsZU5hbWUsIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlOworKyAg ICB2b2lkIGNsb3NlKCkgb3ZlcnJpZGU7CisrCisrICAgIGJvb2wgZW5jb2RlSW1hZ2UoY29uc3Qg UUltYWdlJiBpbWcpIG92ZXJyaWRlOworKyAgICB2b2lkIGZpbmlzaEVuY29kZSgpIG92ZXJyaWRl OworKworKyAgICBib29sIGVuY29kZVZpZGVvKGNvbnN0IG11c2U6OkJ5dGVBcnJheSYgdmlkZW9E YXRhLCBpbnQgbWF4RnJhbWVzID0gLTEpIG92ZXJyaWRlOworKworKyAgICBib29sIGFkZEF1ZGlv KGNvbnN0IG11c2U6OmlvOjpwYXRoX3QmIGF1ZGlvUGF0aCkgb3ZlcnJpZGU7CisrCisrcHJpdmF0 ZToKKysgICAgYm9vbCBjb252ZXJ0SW1hZ2Vfc3dzKGNvbnN0IFFJbWFnZSYgaW1nKTsKKysKKysg ICAgc3RkOjpzaGFyZWRfcHRyPEZGbXBlZ0xpYkhhbmRsZXI+IG1fZmZtcGVnSGFuZGxlciA9IG51 bGxwdHI7CisrICAgIEZGbXBlZyogbV9mZm1wZWcgPSBudWxscHRyOworKyAgICBtdXNlOjppbzo6 cGF0aF90IG1fb3V0cHV0UGF0aDsKKyt9OworK30KK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9z cmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL3ZpZGVvZW5jb2RlcnJlc29sdmVyLmNwcC5mZm1w ZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL2ludGVybmFsL3ZpZGVvZW5j b2RlcnJlc29sdmVyLmNwcAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlh L2ludGVybmFsL3ZpZGVvZW5jb2RlcnJlc29sdmVyLmNwcC5mZm1wZWc5CTIwMjYtMDctMDYgMDk6 NTI6MzIuMDAwMDAwMDAwICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsv bWVkaWEvaW50ZXJuYWwvdmlkZW9lbmNvZGVycmVzb2x2ZXIuY3BwCTIwMjYtMDktMDcgMTI6MjM6 NDcuNjgxMzQxMzU4ICswMjAwCitAQCAtMjYsNiArMjYsNyBAQAorICNpbmNsdWRlICJpby9wYXRo LmgiCisgI2luY2x1ZGUgImxvZy5oIgorIAorKyNpbmNsdWRlICJpbnRlcm5hbC9mZm1wZWcvdjkv dmlkZW9lbmNvZGVyLmgiCisgI2luY2x1ZGUgImludGVybmFsL2ZmbXBlZy92OC92aWRlb2VuY29k ZXIuaCIKKyAjaW5jbHVkZSAiaW50ZXJuYWwvZmZtcGVnL3Y3L3ZpZGVvZW5jb2Rlci5oIgorICNp bmNsdWRlICJpbnRlcm5hbC9mZm1wZWcvdjYvdmlkZW9lbmNvZGVyLmgiCitAQCAtMzgsMTMgKzM5 LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBtdXNlOjptZWRpYTsKKyAKKyB2b2lkIFZpZGVvRW5jb2Rl clJlc29sdmVyOjppbml0KCkKKyB7CistICAgIGxvYWRGRm1wZWcoY29uZmlndXJhdGlvbigpLT5m Zm1wZWdMaWJzRGlyKCkpOworKyAgICBsb2FkRkZtcGVnKGNvbmZpZ3VyYXRpb24oKS0+ZmZtcGVn TGlic0RpcigpLCBmYWxzZSk7CisgCisgICAgIC8vISBOT1RFOiBXZSBuZWVkIHRvIHNlYXJjaCBm b3IgYW5kIHJlbG9hZCB0aGUgRkZtcGVnIGxpYnJhcmllcyB3aXRoIGEgZGVsYXksCisgICAgIC8v ISAgICAgICBiZWNhdXNlIHRoaXMgaXMgYSByZXNvdXJjZS1pbnRlbnNpdmUgb3BlcmF0aW9uLgor ICAgICBtX3JlbG9hZEZmbXBlZ1RpbWVyID0gc3RkOjptYWtlX3NoYXJlZDxUaW1lcj4oc3RkOjpj aHJvbm86OnNlY29uZHMoMSkpOworICAgICBtX3JlbG9hZEZmbXBlZ1RpbWVyLT5vblRpbWVvdXQo dGhpcywgW3RoaXNdKCl7CistICAgICAgICBsb2FkRkZtcGVnKGNvbmZpZ3VyYXRpb24oKS0+ZmZt cGVnTGlic0RpcigpKTsKKysgICAgICAgIGxvYWRGRm1wZWcoY29uZmlndXJhdGlvbigpLT5mZm1w ZWdMaWJzRGlyKCksIGZhbHNlKTsKKyAKKyAgICAgICAgIG1fcmVsb2FkRmZtcGVnVGltZXItPnN0 b3AoKTsKKyAgICAgfSk7CitAQCAtNjcsMjQgKzY4LDM3IEBAIHZvaWQgVmlkZW9FbmNvZGVyUmVz b2x2ZXI6OmRlaW5pdCgpCisgCisgdm9pZCBWaWRlb0VuY29kZXJSZXNvbHZlcjo6bG9hZEZGbXBl Zyhjb25zdCBpbzo6cGF0aF90JiBmZm1wZWdMaWJzRGlyKQorIHsKKy0gICAgY29uc3QgRkZtcGVn TGliUGF0aHMgcGF0aHMgPSBmaW5kTGlicmFyeVBhdGhzKGZmbXBlZ0xpYnNEaXIpOworLSAgICBp ZiAocGF0aHMuYXZGb3JtYXRQYXRoLmVtcHR5KCkpIHsKKy0gICAgICAgIHJlc2V0RkZtcGVnU2V0 dGluZ3MoKTsKKy0gICAgICAgIHJldHVybjsKKy0gICAgfQorKyAgICBsb2FkRkZtcGVnKGZmbXBl Z0xpYnNEaXIsIHRydWUpOworK30KKyAKKy0gICAgRW5jb2RlckluZm8gZW5jb2RlckluZm8gPSBt YWtlRW5jb2RlcihwYXRocyk7CistICAgIGlmICghZW5jb2RlckluZm8uZW5jb2RlcikgeworLSAg ICAgICAgcmVzZXRGRm1wZWdTZXR0aW5ncygpOworLSAgICAgICAgcmV0dXJuOworLSAgICB9Cisr dm9pZCBWaWRlb0VuY29kZXJSZXNvbHZlcjo6bG9hZEZGbXBlZyhjb25zdCBpbzo6cGF0aF90JiBm Zm1wZWdMaWJzRGlyLCBib29sIHBlcnNpc3RSZXF1ZXN0ZWRQYXRoKQorK3sKKysgICAgY29uc3Qg RkZtcGVnTGliUGF0aHNMaXN0IGxpYnJhcnlQYXRocyA9IGZpbmRMaWJyYXJ5UGF0aHMoZmZtcGVn TGlic0Rpcik7CisrICAgIGZvciAoY29uc3QgRkZtcGVnTGliUGF0aHMmIHBhdGhzIDogbGlicmFy eVBhdGhzKSB7CisrICAgICAgICBFbmNvZGVySW5mbyBlbmNvZGVySW5mbyA9IG1ha2VFbmNvZGVy KHBhdGhzKTsKKysgICAgICAgIGlmICghZW5jb2RlckluZm8uZW5jb2RlcikgeworKyAgICAgICAg ICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorIAorLSAgICBzZXRDdXJyZW50VmlkZW9FbmNvZGVy KGVuY29kZXJJbmZvLmVuY29kZXIpOworKyAgICAgICAgc2V0Q3VycmVudFZpZGVvRW5jb2Rlcihl bmNvZGVySW5mby5lbmNvZGVyKTsKKysgICAgICAgIG1fbG9hZGVkRkZtcGVnRGlyID0gZW5jb2Rl ckluZm8uZmZtcGVnTGlic0RpcjsKKysgICAgICAgIG1fY3VycmVudEVuY29kZXJGRm1wZWdWZXJz aW9uID0gZW5jb2RlckluZm8uZmZtcGVnVmVyc2lvbjsKKysKKysgICAgICAgIGlmIChwZXJzaXN0 UmVxdWVzdGVkUGF0aCkgeworKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8aW86OnBh dGhfdD4gcGF0aFRvUGVyc2lzdCA9IGNvbmZpZ3VyZWRQYXRoVG9QZXJzaXN0KGZmbXBlZ0xpYnNE aXIsIHBhdGhzKTsKKysgICAgICAgICAgICBpZiAocGF0aFRvUGVyc2lzdC5oYXNfdmFsdWUoKSkg eworKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uKCktPnNldEZGbXBlZ0xpYnNEaXIocGF0 aFRvUGVyc2lzdC52YWx1ZSgpKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisgCistICAg IGNvbmZpZ3VyYXRpb24oKS0+c2V0RkZtcGVnTGlic0RpcihlbmNvZGVySW5mby5mZm1wZWdMaWJz RGlyKTsKKysgICAgICAgIG1fbG9hZGVkRkZtcGVnQ2hhbmdlZC5ub3RpZnkoKTsKKysgICAgICAg IHJldHVybjsKKysgICAgfQorIAorLSAgICBtX2N1cnJlbnRFbmNvZGVyRkZtcGVnVmVyc2lvbiA9 IGVuY29kZXJJbmZvLmZmbXBlZ1ZlcnNpb247CistICAgIG1fbG9hZGVkRkZtcGVnQ2hhbmdlZC5u b3RpZnkoKTsKKysgICAgaWYgKHBlcnNpc3RSZXF1ZXN0ZWRQYXRoICYmIGZmbXBlZ0xpYnNEaXIu ZW1wdHkoKSkgeworKyAgICAgICAgY29uZmlndXJhdGlvbigpLT5zZXRGRm1wZWdMaWJzRGlyKHt9 KTsKKysgICAgfQorKyAgICByZXNldEZGbXBlZ1NldHRpbmdzKCk7CisgfQorIAorIHZvaWQgVmlk ZW9FbmNvZGVyUmVzb2x2ZXI6OnNldElzU2V0dGluZ01vZGUoYm9vbCBhcmcpCitAQCAtMTEyLDcg KzEyNiw3IEBAIHZvaWQgVmlkZW9FbmNvZGVyUmVzb2x2ZXI6OnN0YXJ0V2F0Y2hpbmcKKyAKKyBt dXNlOjppbzo6cGF0aF90IFZpZGVvRW5jb2RlclJlc29sdmVyOjpsb2FkZWRGRm1wZWdEaXIoKSBj b25zdAorIHsKKy0gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb24oKS0+ZmZtcGVnTGlic0RpcigpOwor KyAgICByZXR1cm4gbV9sb2FkZWRGRm1wZWdEaXI7CisgfQorIAorIEZGbXBlZ1ZlcnNpb24gVmlk ZW9FbmNvZGVyUmVzb2x2ZXI6OmxvYWRlZEZGbXBlZ1ZlcnNpb24oKSBjb25zdAorQEAgLTEzNyw4 ICsxNTEsOSBAQCB2b2lkIFZpZGVvRW5jb2RlclJlc29sdmVyOjpzZXRDdXJyZW50VmlkCisgCisg dm9pZCBWaWRlb0VuY29kZXJSZXNvbHZlcjo6cmVzZXRGRm1wZWdTZXR0aW5ncygpCisgeworKyAg ICBzZXRDdXJyZW50VmlkZW9FbmNvZGVyKG51bGxwdHIpOworICAgICBtX2N1cnJlbnRFbmNvZGVy RkZtcGVnVmVyc2lvbiA9IEZGTVBFR19JTlZBTElEX1ZFUlNJT047CistICAgIGNvbmZpZ3VyYXRp b24oKS0+c2V0RkZtcGVnTGlic0Rpcih7fSk7CisrICAgIG1fbG9hZGVkRkZtcGVnRGlyID0gaW86 OnBhdGhfdCgpOworIAorICAgICBtX2xvYWRlZEZGbXBlZ0NoYW5nZWQubm90aWZ5KCk7CisgfQor QEAgLTE1Nyw4ICsxNzIsMTEgQEAgVmlkZW9FbmNvZGVyUmVzb2x2ZXI6OkVuY29kZXJJbmZvIFZp ZGVvRQorIHsKKyAgICAgRW5jb2RlckluZm8gcmVzdWx0OworIAorLSAgICBjb25zdCBGRm1wZWdW ZXJzaW9uIHZlcnNpb24gPSB2ZXJzaW9uRnJvbUFWRm9ybWF0UGF0aChmZm1wZWdMaWJzUGF0aHMu YXZGb3JtYXRQYXRoKTsKKysgICAgY29uc3QgRkZtcGVnVmVyc2lvbiB2ZXJzaW9uID0gZmZtcGVn TGlic1BhdGhzLmZmbXBlZ1ZlcnNpb247CisgICAgIHN3aXRjaCAodmVyc2lvbikgeworKyAgICBj YXNlIEZGTVBFR19WOToKKysgICAgICAgIHJlc3VsdC5lbmNvZGVyID0gdHJ5Q3JlYXRlRW5jb2Rl cjxmZm1wZWc6OnY5OjpWaWRlb0VuY29kZXI+KGZmbXBlZ0xpYnNQYXRocyk7CisrICAgICAgICBi cmVhazsKKyAgICAgY2FzZSBGRk1QRUdfVjg6CisgICAgICAgICByZXN1bHQuZW5jb2RlciA9IHRy eUNyZWF0ZUVuY29kZXI8ZmZtcGVnOjp2ODo6VmlkZW9FbmNvZGVyPihmZm1wZWdMaWJzUGF0aHMp OworICAgICAgICAgYnJlYWs7CitAQCAtMTc5LDcgKzE5Nyw3IEBAIFZpZGVvRW5jb2RlclJlc29s dmVyOjpFbmNvZGVySW5mbyBWaWRlb0UKKyAgICAgfQorIAorICAgICBpZiAocmVzdWx0LmVuY29k ZXIpIHsKKy0gICAgICAgIHJlc3VsdC5mZm1wZWdMaWJzRGlyID0gaW86OmRpcnBhdGgoZmZtcGVn TGlic1BhdGhzLmF2Rm9ybWF0UGF0aCk7CisrICAgICAgICByZXN1bHQuZmZtcGVnTGlic0RpciA9 IGZmbXBlZ0xpYnNQYXRocy5zZWFyY2hEaXI7CisgICAgICAgICByZXN1bHQuZmZtcGVnVmVyc2lv biA9IHZlcnNpb247CisgCisgICAgICAgICBMT0dEKCkgPDwgIkZGbXBlZyBsb2FkZWQsIHZlcnNp b246ICIgPDwgdmVyc2lvbjsKK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3Jr L21lZGlhL2ludGVybmFsL3ZpZGVvZW5jb2RlcnJlc29sdmVyLmguZmZtcGVnOSBNdXNlU2NvcmUt NC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS9pbnRlcm5hbC92aWRlb2VuY29kZXJyZXNvbHZlci5o CistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvdmlkZW9l bmNvZGVycmVzb2x2ZXIuaC5mZm1wZWc5CTIwMjYtMDctMDYgMDk6NTI6MzIuMDAwMDAwMDAwICsw MjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvaW50ZXJuYWwvdmlk ZW9lbmNvZGVycmVzb2x2ZXIuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY4MTM5MTM0NSArMDIwMAor QEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgorICAgICB2b2lkIHNldElzU2V0dGluZ01vZGUoYm9v bCBhcmcpIG92ZXJyaWRlOworIAorIHByaXZhdGU6CisrICAgIHZvaWQgbG9hZEZGbXBlZyhjb25z dCBtdXNlOjppbzo6cGF0aF90JiBmZm1wZWdMaWJzRGlyLCBib29sIHBlcnNpc3RSZXF1ZXN0ZWRQ YXRoKTsKKyAgICAgdm9pZCByZXNldEZGbXBlZ1NldHRpbmdzKCk7CisgICAgIHZvaWQgc3RhcnRX YXRjaGluZ0ZmbXBlZ3NEaXJzKCk7CisgCitAQCAtNjgsNiArNjksNyBAQCBwcml2YXRlOgorIAor ICAgICBJVmlkZW9FbmNvZGVyUHRyIG1fZW5jb2RlcjsKKyAgICAgRkZtcGVnVmVyc2lvbiBtX2N1 cnJlbnRFbmNvZGVyRkZtcGVnVmVyc2lvbiA9IEZGTVBFR19JTlZBTElEX1ZFUlNJT047CisrICAg IGlvOjpwYXRoX3QgbV9sb2FkZWRGRm1wZWdEaXI7CisgCisgICAgIGFzeW5jOjpOb3RpZmljYXRp b24gbV9sb2FkZWRGRm1wZWdDaGFuZ2VkOworIAorZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3Ny Yy9mcmFtZXdvcmsvbWVkaWEvdGVzdHMvQ01ha2VMaXN0cy50eHQuZmZtcGVnOSBNdXNlU2NvcmUt NC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90ZXN0cy9DTWFrZUxpc3RzLnR4dAorLS0tIE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3Rlc3RzL0NNYWtlTGlzdHMudHh0LmZmbXBl ZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42ODA4NjAyOTMgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90ZXN0cy9DTWFrZUxpc3RzLnR4dAkyMDI2LTA5LTA3IDEy OjIzOjQ3LjY4MDg1Njc4MCArMDIwMAorQEAgLTAsMCArMSwzMSBAQAorKyMgU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0zLjAtb25seQorKyMgTXVzZVNjb3JlLVN0dWRpby1DTEEtYXBwbGll cworKyMKKysjIE11c2VTY29yZSBTdHVkaW8KKysjIE11c2ljIENvbXBvc2l0aW9uICYgTm90YXRp b24KKysjCisrIyBDb3B5cmlnaHQgKEMpIDIwMjYgTXVzZVNjb3JlIExpbWl0ZWQKKysjCisrIyBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDMgYXMKKysjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKysKKytzZXQoTU9EVUxFX1RFU1QgbXVzZV9tZWRpYV90ZXN0cykK KysKKytzZXQoTU9EVUxFX1RFU1RfU1JDCisrICAgICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0v ZmZtcGVndXRpbHNfdGVzdHMuY3BwCisrKQorKworK3NldChNT0RVTEVfVEVTVF9MSU5LCisrICAg IG11c2U6Om1lZGlhCisrKQorKworK2luY2x1ZGUoU2V0dXBHVGVzdCkKK2RpZmYgLXVwIE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3Rlc3RzL2ZmbXBlZ3V0aWxzX3Rlc3RzLmNw cC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3Rlc3RzL2ZmbXBl Z3V0aWxzX3Rlc3RzLmNwcAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlh L3Rlc3RzL2ZmbXBlZ3V0aWxzX3Rlc3RzLmNwcC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcu NjgwOTM5OTM1ICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEv dGVzdHMvZmZtcGVndXRpbHNfdGVzdHMuY3BwCTIwMjYtMDktMDcgMTI6MjM6NDcuNjgxNDM4NTEz ICswMjAwCitAQCAtMCwwICsxLDIwMSBAQAorKy8qCisrICogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0zLjAtb25seQorKyAqIE11c2VTY29yZS1TdHVkaW8tQ0xBLWFwcGxpZXMKKysgKgor KyAqIE11c2VTY29yZSBTdHVkaW8KKysgKiBNdXNpYyBDb21wb3NpdGlvbiAmIE5vdGF0aW9uCisr ICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMjYgTXVzZVNjb3JlIExpbWl0ZWQKKysgKgorKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisrICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDMgYXMKKysgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHBz Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysgKi8KKysKKysjaW5jbHVkZSA8Z3Rlc3QvZ3Rl c3QuaD4KKysKKysjaW5jbHVkZSA8YWxnb3JpdGhtPgorKworKyNpbmNsdWRlIDxRRGlyPgorKyNp bmNsdWRlIDxRRmlsZT4KKysjaW5jbHVkZSA8UUZpbGVJbmZvPgorKyNpbmNsdWRlIDxRVGVtcG9y YXJ5RGlyPgorKworKyNpbmNsdWRlICJtZWRpYS9pbnRlcm5hbC9mZm1wZWd1dGlscy5oIgorKwor K3VzaW5nIG5hbWVzcGFjZSBtdXNlOworK3VzaW5nIG5hbWVzcGFjZSBtdXNlOjptZWRpYTsKKysK KytuYW1lc3BhY2UgeworK1FTdHJpbmcgbGlicmFyeUZpbGVOYW1lKGNvbnN0IFFTdHJpbmcmIGNv bXBvbmVudCwgaW50IHZlcnNpb24pCisreworKyNpZiBkZWZpbmVkKFFfT1NfTUFDKQorKyAgICBy ZXR1cm4gUVN0cmluZ0xpdGVyYWwoImxpYiUxLiUyLmR5bGliIikuYXJnKGNvbXBvbmVudCkuYXJn KHZlcnNpb24pOworKyNlbGlmIGRlZmluZWQoUV9PU19MSU5VWCkgfHwgZGVmaW5lZChRX09TX0ZS RUVCU0QpCisrICAgIHJldHVybiBRU3RyaW5nTGl0ZXJhbCgibGliJTEuc28uJTIiKS5hcmcoY29t cG9uZW50KS5hcmcodmVyc2lvbik7CisrI2VsaWYgZGVmaW5lZChRX09TX1dJTikKKysgICAgcmV0 dXJuIFFTdHJpbmdMaXRlcmFsKCIlMS0lMi5kbGwiKS5hcmcoY29tcG9uZW50KS5hcmcodmVyc2lv bik7CisrI2VuZGlmCisrfQorKworK3ZvaWQgY3JlYXRlRmlsZShjb25zdCBRU3RyaW5nJiBwYXRo KQorK3sKKysgICAgUUZpbGUgZmlsZShwYXRoKTsKKysgICAgQVNTRVJUX1RSVUUoZmlsZS5vcGVu KFFJT0RldmljZTo6V3JpdGVPbmx5KSk7CisrICAgIGZpbGUuY2xvc2UoKTsKKyt9CisrCisrdm9p ZCBjcmVhdGVMaWJyYXJpZXMoY29uc3QgUVN0cmluZyYgZGlyUGF0aCwgRkZtcGVnVmVyc2lvbiB2 ZXJzaW9uLCBib29sIGNvbXBsZXRlID0gdHJ1ZSkKKyt7CisrICAgIEFTU0VSVF9UUlVFKFFEaXIo KS5ta3BhdGgoZGlyUGF0aCkpOworKworKyAgICBjb25zdCBhdXRvIHZlcnNpb25JdCA9IHN0ZDo6 ZmluZF9pZihGRk1QRUdfQ09NUE9ORU5UU19WRVJTSU9OUy5jYmVnaW4oKSwgRkZNUEVHX0NPTVBP TkVOVFNfVkVSU0lPTlMuY2VuZCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBbdmVyc2lvbl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5maXJzdCA9 PSB2ZXJzaW9uOyB9KTsKKysgICAgQVNTRVJUX05FKHZlcnNpb25JdCwgRkZNUEVHX0NPTVBPTkVO VFNfVkVSU0lPTlMuY2VuZCgpKTsKKysKKysgICAgY29uc3QgRkZtcGVnVmVyc2lvbkluZm8mIGNv bXBvbmVudHMgPSB2ZXJzaW9uSXQtPnNlY29uZDsKKysgICAgY29uc3QgUURpciBkaXIoZGlyUGF0 aCk7CisrICAgIGNyZWF0ZUZpbGUoZGlyLmZpbGVQYXRoKGxpYnJhcnlGaWxlTmFtZShRU3RyaW5n TGl0ZXJhbCgiYXZ1dGlsIiksIGNvbXBvbmVudHMuYXZVdGlsVmVyc2lvbikpKTsKKysgICAgY3Jl YXRlRmlsZShkaXIuZmlsZVBhdGgobGlicmFyeUZpbGVOYW1lKFFTdHJpbmdMaXRlcmFsKCJhdmNv ZGVjIiksIGNvbXBvbmVudHMuYXZDb2RlY1ZlcnNpb24pKSk7CisrICAgIGNyZWF0ZUZpbGUoZGly LmZpbGVQYXRoKGxpYnJhcnlGaWxlTmFtZShRU3RyaW5nTGl0ZXJhbCgiYXZmb3JtYXQiKSwgY29t cG9uZW50cy5hdkZvcm1hdFZlcnNpb24pKSk7CisrICAgIGNyZWF0ZUZpbGUoZGlyLmZpbGVQYXRo KGxpYnJhcnlGaWxlTmFtZShRU3RyaW5nTGl0ZXJhbCgic3dzY2FsZSIpLCBjb21wb25lbnRzLnN3 U2NhbGVWZXJzaW9uKSkpOworKyAgICBpZiAoY29tcGxldGUpIHsKKysgICAgICAgIGNyZWF0ZUZp bGUoZGlyLmZpbGVQYXRoKGxpYnJhcnlGaWxlTmFtZShRU3RyaW5nTGl0ZXJhbCgic3dyZXNhbXBs ZSIpLCBjb21wb25lbnRzLnN3UmVzYW1wbGVWZXJzaW9uKSkpOworKyAgICB9CisrfQorKworK1FT dHJpbmcgY2Fub25pY2FsUGF0aChjb25zdCBRU3RyaW5nJiBwYXRoKQorK3sKKysgICAgcmV0dXJu IFFGaWxlSW5mbyhwYXRoKS5jYW5vbmljYWxGaWxlUGF0aCgpOworK30KKyt9CisrCisrVEVTVChG Rm1wZWdVdGlsc1Rlc3RzLCBSZWNvZ25pemVzRkZtcGVnOUZyb21BVkZvcm1hdFBhdGgpCisrewor KyAgICBjb25zdCBRU3RyaW5nIGZpbGVOYW1lID0gbGlicmFyeUZpbGVOYW1lKFFTdHJpbmdMaXRl cmFsKCJhdmZvcm1hdCIpLCA2Myk7CisrICAgIEVYUEVDVF9FUSh2ZXJzaW9uRnJvbUFWRm9ybWF0 UGF0aChpbzo6cGF0aF90KGZpbGVOYW1lKSksIEZGTVBFR19WOSk7CisrfQorKworK1RFU1QoRkZt cGVnVXRpbHNUZXN0cywgQXV0b21hdGljQ2FuZGlkYXRlc1ByZWZlck5ld2VzdFZlcnNpb24pCisr eworKyAgICBRVGVtcG9yYXJ5RGlyIHRlbXBEaXI7CisrICAgIEFTU0VSVF9UUlVFKHRlbXBEaXIu aXNWYWxpZCgpKTsKKysgICAgY29uc3QgUVN0cmluZyBmZm1wZWc4RGlyID0gdGVtcERpci5maWxl UGF0aChRU3RyaW5nTGl0ZXJhbCgiZmZtcGVnOCIpKTsKKysgICAgY29uc3QgUVN0cmluZyBmZm1w ZWc5RGlyID0gdGVtcERpci5maWxlUGF0aChRU3RyaW5nTGl0ZXJhbCgiZmZtcGVnOSIpKTsKKysg ICAgY3JlYXRlTGlicmFyaWVzKGZmbXBlZzhEaXIsIEZGTVBFR19WOCk7CisrICAgIGNyZWF0ZUxp YnJhcmllcyhmZm1wZWc5RGlyLCBGRk1QRUdfVjkpOworKworKyAgICBjb25zdCBGRm1wZWdMaWJQ YXRoc0xpc3QgY2FuZGlkYXRlcyA9IGZpbmRMaWJyYXJ5UGF0aHMoe30sIHsgaW86OnBhdGhfdChm Zm1wZWc4RGlyKSwgaW86OnBhdGhfdChmZm1wZWc5RGlyKSB9KTsKKysKKysgICAgQVNTRVJUX0VR KGNhbmRpZGF0ZXMuc2l6ZSgpLCAydSk7CisrICAgIEVYUEVDVF9FUShjYW5kaWRhdGVzWzBdLmZm bXBlZ1ZlcnNpb24sIEZGTVBFR19WOSk7CisrICAgIEVYUEVDVF9FUShjYW5kaWRhdGVzWzBdLm9y aWdpbiwgRkZtcGVnQ2FuZGlkYXRlT3JpZ2luOjpBdXRvbWF0aWMpOworKyAgICBFWFBFQ1RfRVEo Y2FuZGlkYXRlc1sxXS5mZm1wZWdWZXJzaW9uLCBGRk1QRUdfVjgpOworKyAgICBFWFBFQ1RfRVEo Y2FuZGlkYXRlc1sxXS5vcmlnaW4sIEZGbXBlZ0NhbmRpZGF0ZU9yaWdpbjo6QXV0b21hdGljKTsK Kyt9CisrCisrVEVTVChGRm1wZWdVdGlsc1Rlc3RzLCBDdXN0b21QYXRoUmV0YWluc1ByaW9yaXR5 KQorK3sKKysgICAgUVRlbXBvcmFyeURpciB0ZW1wRGlyOworKyAgICBBU1NFUlRfVFJVRSh0ZW1w RGlyLmlzVmFsaWQoKSk7CisrICAgIGNvbnN0IFFTdHJpbmcgY3VzdG9tRGlyID0gdGVtcERpci5m aWxlUGF0aChRU3RyaW5nTGl0ZXJhbCgiY3VzdG9tIikpOworKyAgICBjb25zdCBRU3RyaW5nIGF1 dG9tYXRpY0RpciA9IHRlbXBEaXIuZmlsZVBhdGgoUVN0cmluZ0xpdGVyYWwoImF1dG9tYXRpYyIp KTsKKysgICAgY3JlYXRlTGlicmFyaWVzKGN1c3RvbURpciwgRkZNUEVHX1Y4KTsKKysgICAgY3Jl YXRlTGlicmFyaWVzKGF1dG9tYXRpY0RpciwgRkZNUEVHX1Y5KTsKKysKKysgICAgY29uc3QgRkZt cGVnTGliUGF0aHNMaXN0IGNhbmRpZGF0ZXMgPSBmaW5kTGlicmFyeVBhdGhzKGlvOjpwYXRoX3Qo Y3VzdG9tRGlyKSwgeyBpbzo6cGF0aF90KGF1dG9tYXRpY0RpcikgfSk7CisrCisrICAgIEFTU0VS VF9FUShjYW5kaWRhdGVzLnNpemUoKSwgMnUpOworKyAgICBFWFBFQ1RfRVEoY2FuZGlkYXRlc1sw XS5mZm1wZWdWZXJzaW9uLCBGRk1QRUdfVjgpOworKyAgICBFWFBFQ1RfRVEoY2FuZGlkYXRlc1sw XS5vcmlnaW4sIEZGbXBlZ0NhbmRpZGF0ZU9yaWdpbjo6Q29uZmlndXJlZCk7CisrICAgIEVYUEVD VF9FUShjYW5kaWRhdGVzWzBdLnNlYXJjaERpci50b1FTdHJpbmcoKSwgY2Fub25pY2FsUGF0aChj dXN0b21EaXIpKTsKKysgICAgRVhQRUNUX0VRKGNhbmRpZGF0ZXNbMV0uZmZtcGVnVmVyc2lvbiwg RkZNUEVHX1Y5KTsKKysgICAgRVhQRUNUX0VRKGNhbmRpZGF0ZXNbMV0ub3JpZ2luLCBGRm1wZWdD YW5kaWRhdGVPcmlnaW46OkF1dG9tYXRpYyk7CisrfQorKworK1RFU1QoRkZtcGVnVXRpbHNUZXN0 cywgUmVnaXN0ZXJlZENvbmZpZ3VyZWRQYXRoUmVtYWluc0F1dG9tYXRpYykKKyt7CisrICAgIFFU ZW1wb3JhcnlEaXIgdGVtcERpcjsKKysgICAgQVNTRVJUX1RSVUUodGVtcERpci5pc1ZhbGlkKCkp OworKyAgICBjb25zdCBRU3RyaW5nIGZmbXBlZzhEaXIgPSB0ZW1wRGlyLmZpbGVQYXRoKFFTdHJp bmdMaXRlcmFsKCJmZm1wZWc4IikpOworKyAgICBjb25zdCBRU3RyaW5nIGZmbXBlZzlEaXIgPSB0 ZW1wRGlyLmZpbGVQYXRoKFFTdHJpbmdMaXRlcmFsKCJmZm1wZWc5IikpOworKyAgICBjcmVhdGVM aWJyYXJpZXMoZmZtcGVnOERpciwgRkZNUEVHX1Y4KTsKKysgICAgY3JlYXRlTGlicmFyaWVzKGZm bXBlZzlEaXIsIEZGTVBFR19WOSk7CisrCisrICAgIGNvbnN0IEZGbXBlZ0xpYlBhdGhzTGlzdCBj YW5kaWRhdGVzID0gZmluZExpYnJhcnlQYXRocyhpbzo6cGF0aF90KGZmbXBlZzhEaXIpLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eyBpbzo6cGF0aF90KGZmbXBlZzhEaXIpLCBpbzo6cGF0aF90KGZmbXBlZzlEaXIpIH0pOworKwor KyAgICBBU1NFUlRfRVEoY2FuZGlkYXRlcy5zaXplKCksIDJ1KTsKKysgICAgRVhQRUNUX0VRKGNh bmRpZGF0ZXNbMF0uZmZtcGVnVmVyc2lvbiwgRkZNUEVHX1Y5KTsKKysgICAgRVhQRUNUX0VRKGNh bmRpZGF0ZXNbMF0ub3JpZ2luLCBGRm1wZWdDYW5kaWRhdGVPcmlnaW46OkF1dG9tYXRpYyk7Cisr ICAgIEVYUEVDVF9FUShjYW5kaWRhdGVzWzFdLmZmbXBlZ1ZlcnNpb24sIEZGTVBFR19WOCk7Cisr ICAgIEVYUEVDVF9FUShjYW5kaWRhdGVzWzFdLm9yaWdpbiwgRkZtcGVnQ2FuZGlkYXRlT3JpZ2lu OjpBdXRvbWF0aWMpOworK30KKysKKytURVNUKEZGbXBlZ1V0aWxzVGVzdHMsIEluY29tcGxldGVD YW5kaWRhdGVJc1NraXBwZWQpCisreworKyAgICBRVGVtcG9yYXJ5RGlyIHRlbXBEaXI7CisrICAg IEFTU0VSVF9UUlVFKHRlbXBEaXIuaXNWYWxpZCgpKTsKKysgICAgY29uc3QgUVN0cmluZyBpbmNv bXBsZXRlRGlyID0gdGVtcERpci5maWxlUGF0aChRU3RyaW5nTGl0ZXJhbCgiaW5jb21wbGV0ZSIp KTsKKysgICAgY29uc3QgUVN0cmluZyBjb21wbGV0ZURpciA9IHRlbXBEaXIuZmlsZVBhdGgoUVN0 cmluZ0xpdGVyYWwoImNvbXBsZXRlIikpOworKyAgICBjcmVhdGVMaWJyYXJpZXMoaW5jb21wbGV0 ZURpciwgRkZNUEVHX1Y5LCBmYWxzZSk7CisrICAgIGNyZWF0ZUxpYnJhcmllcyhjb21wbGV0ZURp ciwgRkZNUEVHX1Y4KTsKKysKKysgICAgY29uc3QgRkZtcGVnTGliUGF0aHNMaXN0IGNhbmRpZGF0 ZXMgPSBmaW5kTGlicmFyeVBhdGhzKHt9LCB7IGlvOjpwYXRoX3QoaW5jb21wbGV0ZURpciksIGlv OjpwYXRoX3QoY29tcGxldGVEaXIpIH0pOworKworKyAgICBBU1NFUlRfRVEoY2FuZGlkYXRlcy5z aXplKCksIDF1KTsKKysgICAgRVhQRUNUX0VRKGNhbmRpZGF0ZXNbMF0uZmZtcGVnVmVyc2lvbiwg RkZNUEVHX1Y4KTsKKyt9CisrCisrVEVTVChGRm1wZWdVdGlsc1Rlc3RzLCBTYW1lVmVyc2lvbkNh bmRpZGF0ZXNVc2VTdGFibGVQYXRoT3JkZXIpCisreworKyAgICBRVGVtcG9yYXJ5RGlyIHRlbXBE aXI7CisrICAgIEFTU0VSVF9UUlVFKHRlbXBEaXIuaXNWYWxpZCgpKTsKKysgICAgY29uc3QgUVN0 cmluZyBzZWNvbmREaXIgPSB0ZW1wRGlyLmZpbGVQYXRoKFFTdHJpbmdMaXRlcmFsKCJ6LXByb3Zp ZGVyIikpOworKyAgICBjb25zdCBRU3RyaW5nIGZpcnN0RGlyID0gdGVtcERpci5maWxlUGF0aChR U3RyaW5nTGl0ZXJhbCgiYS1wcm92aWRlciIpKTsKKysgICAgY3JlYXRlTGlicmFyaWVzKHNlY29u ZERpciwgRkZNUEVHX1Y5KTsKKysgICAgY3JlYXRlTGlicmFyaWVzKGZpcnN0RGlyLCBGRk1QRUdf VjkpOworKworKyAgICBjb25zdCBGRm1wZWdMaWJQYXRoc0xpc3QgY2FuZGlkYXRlcyA9IGZpbmRM aWJyYXJ5UGF0aHMoe30sIHsgaW86OnBhdGhfdChzZWNvbmREaXIpLCBpbzo6cGF0aF90KGZpcnN0 RGlyKSB9KTsKKysKKysgICAgQVNTRVJUX0VRKGNhbmRpZGF0ZXMuc2l6ZSgpLCAydSk7CisrICAg IEVYUEVDVF9FUShjYW5kaWRhdGVzWzBdLnNlYXJjaERpci50b1FTdHJpbmcoKSwgY2Fub25pY2Fs UGF0aChmaXJzdERpcikpOworKyAgICBFWFBFQ1RfRVEoY2FuZGlkYXRlc1sxXS5zZWFyY2hEaXIu dG9RU3RyaW5nKCksIGNhbm9uaWNhbFBhdGgoc2Vjb25kRGlyKSk7CisrfQorKworK1RFU1QoRkZt cGVnVXRpbHNUZXN0cywgUGVyc2lzdHNPbmx5UmVxdWVzdGVkTG9hZGVkUGF0aCkKKyt7CisrICAg IFFUZW1wb3JhcnlEaXIgdGVtcERpcjsKKysgICAgQVNTRVJUX1RSVUUodGVtcERpci5pc1ZhbGlk KCkpOworKyAgICBjb25zdCBRU3RyaW5nIHJlcXVlc3RlZERpciA9IHRlbXBEaXIuZmlsZVBhdGgo UVN0cmluZ0xpdGVyYWwoInJlcXVlc3RlZCIpKTsKKysgICAgY29uc3QgUVN0cmluZyBmYWxsYmFj a0RpciA9IHRlbXBEaXIuZmlsZVBhdGgoUVN0cmluZ0xpdGVyYWwoImZhbGxiYWNrIikpOworKyAg ICBjcmVhdGVMaWJyYXJpZXMocmVxdWVzdGVkRGlyLCBGRk1QRUdfVjgpOworKyAgICBjcmVhdGVM aWJyYXJpZXMoZmFsbGJhY2tEaXIsIEZGTVBFR19WOSk7CisrCisrICAgIGNvbnN0IEZGbXBlZ0xp YlBhdGhzTGlzdCBjYW5kaWRhdGVzID0gZmluZExpYnJhcnlQYXRocyhpbzo6cGF0aF90KHJlcXVl c3RlZERpciksIHsgaW86OnBhdGhfdChmYWxsYmFja0RpcikgfSk7CisrICAgIEFTU0VSVF9FUShj YW5kaWRhdGVzLnNpemUoKSwgMnUpOworKworKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPGlvOjpw YXRoX3Q+IHJlcXVlc3RlZFVwZGF0ZSA9IGNvbmZpZ3VyZWRQYXRoVG9QZXJzaXN0KGlvOjpwYXRo X3QocmVxdWVzdGVkRGlyKSwgY2FuZGlkYXRlc1swXSk7CisrICAgIEFTU0VSVF9UUlVFKHJlcXVl c3RlZFVwZGF0ZS5oYXNfdmFsdWUoKSk7CisrICAgIEVYUEVDVF9FUShyZXF1ZXN0ZWRVcGRhdGUt PnRvUVN0cmluZygpLCBjYW5vbmljYWxQYXRoKHJlcXVlc3RlZERpcikpOworKworKyAgICBFWFBF Q1RfRkFMU0UoY29uZmlndXJlZFBhdGhUb1BlcnNpc3QoaW86OnBhdGhfdChyZXF1ZXN0ZWREaXIp LCBjYW5kaWRhdGVzWzFdKS5oYXNfdmFsdWUoKSk7CisrfQorKworK1RFU1QoRkZtcGVnVXRpbHNU ZXN0cywgRW1wdHlSZXF1ZXN0ZWRQYXRoQ2xlYXJzQ29uZmlndXJhdGlvbikKKyt7CisrICAgIEZG bXBlZ0xpYlBhdGhzIGF1dG9tYXRpY0NhbmRpZGF0ZTsKKysgICAgYXV0b21hdGljQ2FuZGlkYXRl LnNlYXJjaERpciA9IGlvOjpwYXRoX3QoIi9hdXRvbWF0aWMiKTsKKysKKysgICAgY29uc3Qgc3Rk OjpvcHRpb25hbDxpbzo6cGF0aF90PiB1cGRhdGUgPSBjb25maWd1cmVkUGF0aFRvUGVyc2lzdCh7 fSwgYXV0b21hdGljQ2FuZGlkYXRlKTsKKysgICAgQVNTRVJUX1RSVUUodXBkYXRlLmhhc192YWx1 ZSgpKTsKKysgICAgRVhQRUNUX1RSVUUodXBkYXRlLT5lbXB0eSgpKTsKKyt9CitkaWZmIC11cCBN dXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy9kb3du bG9hZF9mZm1wZWdfaGVhZGVycy5zaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3 b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL2Rvd25sb2FkX2ZmbXBlZ19oZWFkZXJzLnNoCist LS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcv ZG93bmxvYWRfZmZtcGVnX2hlYWRlcnMuc2guZmZtcGVnOQkyMDI2LTA3LTA2IDA5OjUyOjMyLjAw MDAwMDAwMCArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3Ro aXJkcGFydHkvZmZtcGVnL2Rvd25sb2FkX2ZmbXBlZ19oZWFkZXJzLnNoCTIwMjYtMDktMDcgMTI6 MjM6NDcuNjY5NTQ3MTA3ICswMjAwCitAQCAtMSw1ICsxLDUgQEAKKyAjIS9iaW4vYmFzaAorLSMg RG93bmxvYWQgRkZtcGVnIGhlYWRlcnMgZm9yIE11c2VTY29yZSAodmVyc2lvbnMgNCwgNSwgNiwg NywgOCkKKysjIERvd25sb2FkIEZGbXBlZyBoZWFkZXJzIGZvciBNdXNlU2NvcmUgKHZlcnNpb25z IDQsIDUsIDYsIDcsIDgsIDkpCisgIyBSdW4gZnJvbSBNdXNlU2NvcmUgcmVwb3NpdG9yeSByb290 Cisgc2V0IC1lCisgCitAQCAtMTQsNiArMTQsNyBAQCBWRVJTSU9OUz0oCisgICAiNjpuNi4xIgor ICAgIjc6bjcuMCIKKyAgICI4Om44LjAiCisrICAiOTpuOS4wIgorICkKKyAKKyB3cml0ZV9hdmNv bmZpZygpIHsKK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3Ro aXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvYXZjb2RlYy5oLmZmbXBlZzkgTXVzZVNjb3Jl LTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZjb2Rl Yy9hdmNvZGVjLmgKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGly ZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL2F2Y29kZWMuaC5mZm1wZWc5CTIwMjYtMDktMDcg MTI6MjM6NDcuNjcyMDM0NzI1ICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdv cmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZjb2RlYy9hdmNvZGVjLmgJMjAyNi0w OS0wNyAxMjoyMzo0Ny42NzE1NDcxMTkgKzAyMDAKK0BAIC0wLDAgKzEsMjk2MSBAQAorKy8qCisr ICogY29weXJpZ2h0IChjKSAyMDAxIEZhYnJpY2UgQmVsbGFyZAorKyAqCisrICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9u IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAq IExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs b29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrI2lmbmRlZiBBVkNPREVD X0FWQ09ERUNfSAorKyNkZWZpbmUgQVZDT0RFQ19BVkNPREVDX0gKKysKKysvKioKKysgKiBAZmls ZQorKyAqIEBpbmdyb3VwIGxpYmF2YworKyAqIExpYmF2Y29kZWMgZXh0ZXJuYWwgQVBJIGhlYWRl cgorKyAqLworKworKyNpbmNsdWRlICJsaWJhdnV0aWwvc2FtcGxlZm10LmgiCisrI2luY2x1ZGUg ImxpYmF2dXRpbC9hdHRyaWJ1dGVzLmgiCisrI2luY2x1ZGUgImxpYmF2dXRpbC9hdnV0aWwuaCIK KysjaW5jbHVkZSAibGliYXZ1dGlsL2J1ZmZlci5oIgorKyNpbmNsdWRlICJsaWJhdnV0aWwvY2hh bm5lbF9sYXlvdXQuaCIKKysjaW5jbHVkZSAibGliYXZ1dGlsL2RpY3QuaCIKKysjaW5jbHVkZSAi bGliYXZ1dGlsL2ZyYW1lLmgiCisrI2luY2x1ZGUgImxpYmF2dXRpbC9sb2cuaCIKKysjaW5jbHVk ZSAibGliYXZ1dGlsL3BpeGZtdC5oIgorKyNpbmNsdWRlICJsaWJhdnV0aWwvcmF0aW9uYWwuaCIK KysKKysjaW5jbHVkZSAiY29kZWMuaCIKKysjaW5jbHVkZSAiY29kZWNfaWQuaCIKKysjaW5jbHVk ZSAiZGVmcy5oIgorKyNpbmNsdWRlICJwYWNrZXQuaCIKKysjaW5jbHVkZSAidmVyc2lvbl9tYWpv ci5oIgorKyNpZm5kZWYgSEFWRV9BVl9DT05GSUdfSAorKy8qIFdoZW4gaW5jbHVkZWQgYXMgcGFy dCBvZiB0aGUgZmZtcGVnIGJ1aWxkLCBvbmx5IGluY2x1ZGUgdGhlIG1ham9yIHZlcnNpb24KKysg KiB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWJ1aWxkcy4gV2hlbiBpbmNsdWRlZCBleHRlcm5hbGx5 LCBrZWVwIGluY2x1ZGluZworKyAqIHRoZSBmdWxsIHZlcnNpb24gaW5mb3JtYXRpb24uICovCisr I2luY2x1ZGUgInZlcnNpb24uaCIKKysKKysjaW5jbHVkZSAiY29kZWNfZGVzYy5oIgorKyNpbmNs dWRlICJjb2RlY19wYXIuaCIKKysjZW5kaWYKKysKKytzdHJ1Y3QgQVZDb2RlY1BhcmFtZXRlcnM7 CisrCisrLyoqCisrICogQGRlZmdyb3VwIGxpYmF2YyBsaWJhdmNvZGVjCisrICogRW5jb2Rpbmcv RGVjb2RpbmcgTGlicmFyeQorKyAqCisrICogQHsKKysgKgorKyAqIEBkZWZncm91cCBsYXZjX2Rl Y29kaW5nIERlY29kaW5nCisrICogQHsKKysgKiBAfQorKyAqCisrICogQGRlZmdyb3VwIGxhdmNf ZW5jb2RpbmcgRW5jb2RpbmcKKysgKiBAeworKyAqIEB9CisrICoKKysgKiBAZGVmZ3JvdXAgbGF2 Y19jb2RlYyBDb2RlY3MKKysgKiBAeworKyAqIEBkZWZncm91cCBsYXZjX2NvZGVjX25hdGl2ZSBO YXRpdmUgQ29kZWNzCisrICogQHsKKysgKiBAfQorKyAqIEBkZWZncm91cCBsYXZjX2NvZGVjX3dy YXBwZXJzIEV4dGVybmFsIGxpYnJhcnkgd3JhcHBlcnMKKysgKiBAeworKyAqIEB9CisrICogQGRl Zmdyb3VwIGxhdmNfY29kZWNfaHdhY2NlbCBIYXJkd2FyZSBBY2NlbGVyYXRvcnMgYnJpZGdlCisr ICogQHsKKysgKiBAfQorKyAqIEB9CisrICogQGRlZmdyb3VwIGxhdmNfaW50ZXJuYWwgSW50ZXJu YWwKKysgKiBAeworKyAqIEB9CisrICogQH0KKysgKi8KKysKKysvKioKKysgKiBAaW5ncm91cCBs aWJhdmMKKysgKiBAZGVmZ3JvdXAgbGF2Y19lbmNkZWMgc2VuZC9yZWNlaXZlIGVuY29kaW5nIGFu ZCBkZWNvZGluZyBBUEkgb3ZlcnZpZXcKKysgKiBAeworKyAqCisrICogVGhlIGF2Y29kZWNfc2Vu ZF9wYWNrZXQoKS9hdmNvZGVjX3JlY2VpdmVfZnJhbWUoKS9hdmNvZGVjX3NlbmRfZnJhbWUoKS8K KysgKiBhdmNvZGVjX3JlY2VpdmVfcGFja2V0KCkgZnVuY3Rpb25zIHByb3ZpZGUgYW4gZW5jb2Rl L2RlY29kZSBBUEksIHdoaWNoCisrICogZGVjb3VwbGVzIGlucHV0IGFuZCBvdXRwdXQuCisrICoK KysgKiBUaGUgQVBJIGlzIHZlcnkgc2ltaWxhciBmb3IgZW5jb2RpbmcvZGVjb2RpbmcgYW5kIGF1 ZGlvL3ZpZGVvLCBhbmQgd29ya3MgYXMKKysgKiBmb2xsb3dzOgorKyAqIC0gU2V0IHVwIGFuZCBv cGVuIHRoZSBBVkNvZGVjQ29udGV4dCBhcyB1c3VhbC4KKysgKiAtIFNlbmQgdmFsaWQgaW5wdXQ6 CisrICogICAtIEZvciBkZWNvZGluZywgY2FsbCBhdmNvZGVjX3NlbmRfcGFja2V0KCkgdG8gZ2l2 ZSB0aGUgZGVjb2RlciByYXcKKysgKiAgICAgY29tcHJlc3NlZCBkYXRhIGluIGFuIEFWUGFja2V0 LgorKyAqICAgLSBGb3IgZW5jb2RpbmcsIGNhbGwgYXZjb2RlY19zZW5kX2ZyYW1lKCkgdG8gZ2l2 ZSB0aGUgZW5jb2RlciBhbiBBVkZyYW1lCisrICogICAgIGNvbnRhaW5pbmcgdW5jb21wcmVzc2Vk IGF1ZGlvIG9yIHZpZGVvLgorKyAqCisrICogICBJbiBib3RoIGNhc2VzLCBpdCBpcyByZWNvbW1l bmRlZCB0aGF0IEFWUGFja2V0cyBhbmQgQVZGcmFtZXMgYXJlCisrICogICByZWZjb3VudGVkLCBv ciBsaWJhdmNvZGVjIG1pZ2h0IGhhdmUgdG8gY29weSB0aGUgaW5wdXQgZGF0YS4gKGxpYmF2Zm9y bWF0CisrICogICBhbHdheXMgcmV0dXJucyByZWZjb3VudGVkIEFWUGFja2V0cywgYW5kIGF2X2Zy YW1lX2dldF9idWZmZXIoKSBhbGxvY2F0ZXMKKysgKiAgIHJlZmNvdW50ZWQgQVZGcmFtZXMuKQor KyAqIC0gUmVjZWl2ZSBvdXRwdXQgaW4gYSBsb29wLiBQZXJpb2RpY2FsbHkgY2FsbCBvbmUgb2Yg dGhlIGF2Y29kZWNfcmVjZWl2ZV8qKCkKKysgKiAgIGZ1bmN0aW9ucyBhbmQgcHJvY2VzcyB0aGVp ciBvdXRwdXQ6CisrICogICAtIEZvciBkZWNvZGluZywgY2FsbCBhdmNvZGVjX3JlY2VpdmVfZnJh bWUoKS4gT24gc3VjY2VzcywgaXQgd2lsbCByZXR1cm4KKysgKiAgICAgYW4gQVZGcmFtZSBjb250 YWluaW5nIHVuY29tcHJlc3NlZCBhdWRpbyBvciB2aWRlbyBkYXRhLgorKyAqICAgLSBGb3IgZW5j b2RpbmcsIGNhbGwgYXZjb2RlY19yZWNlaXZlX3BhY2tldCgpLiBPbiBzdWNjZXNzLCBpdCB3aWxs IHJldHVybgorKyAqICAgICBhbiBBVlBhY2tldCB3aXRoIGEgY29tcHJlc3NlZCBmcmFtZS4KKysg KgorKyAqICAgUmVwZWF0IHRoaXMgY2FsbCB1bnRpbCBpdCByZXR1cm5zIEFWRVJST1IoRUFHQUlO KSBvciBhbiBlcnJvci4gVGhlCisrICogICBBVkVSUk9SKEVBR0FJTikgcmV0dXJuIHZhbHVlIG1l YW5zIHRoYXQgbmV3IGlucHV0IGRhdGEgaXMgcmVxdWlyZWQgdG8KKysgKiAgIHJldHVybiBuZXcg b3V0cHV0LiBJbiB0aGlzIGNhc2UsIGNvbnRpbnVlIHdpdGggc2VuZGluZyBpbnB1dC4gRm9yIGVh Y2gKKysgKiAgIGlucHV0IGZyYW1lL3BhY2tldCwgdGhlIGNvZGVjIHdpbGwgdHlwaWNhbGx5IHJl dHVybiAxIG91dHB1dCBmcmFtZS9wYWNrZXQsCisrICogICBidXQgaXQgY2FuIGFsc28gYmUgMCBv ciBtb3JlIHRoYW4gMS4KKysgKgorKyAqIEF0IHRoZSBiZWdpbm5pbmcgb2YgZGVjb2Rpbmcgb3Ig ZW5jb2RpbmcsIHRoZSBjb2RlYyBtaWdodCBhY2NlcHQgbXVsdGlwbGUKKysgKiBpbnB1dCBmcmFt ZXMvcGFja2V0cyB3aXRob3V0IHJldHVybmluZyBhIGZyYW1lLCB1bnRpbCBpdHMgaW50ZXJuYWwg YnVmZmVycworKyAqIGFyZSBmaWxsZWQuIFRoaXMgc2l0dWF0aW9uIGlzIGhhbmRsZWQgdHJhbnNw YXJlbnRseSBpZiB5b3UgZm9sbG93IHRoZSBzdGVwcworKyAqIG91dGxpbmVkIGFib3ZlLgorKyAq CisrICogSW4gdGhlb3J5LCBzZW5kaW5nIGlucHV0IGNhbiByZXN1bHQgaW4gRUFHQUlOIC0gdGhp cyBzaG91bGQgaGFwcGVuIG9ubHkgaWYKKysgKiBub3QgYWxsIG91dHB1dCB3YXMgcmVjZWl2ZWQu IFlvdSBjYW4gdXNlIHRoaXMgdG8gc3RydWN0dXJlIGFsdGVybmF0aXZlIGRlY29kZQorKyAqIG9y IGVuY29kZSBsb29wcyBvdGhlciB0aGFuIHRoZSBvbmUgc3VnZ2VzdGVkIGFib3ZlLiBGb3IgZXhh bXBsZSwgeW91IGNvdWxkCisrICogdHJ5IHNlbmRpbmcgbmV3IGlucHV0IG9uIGVhY2ggaXRlcmF0 aW9uLCBhbmQgdHJ5IHRvIHJlY2VpdmUgb3V0cHV0IGlmIHRoYXQKKysgKiByZXR1cm5zIEVBR0FJ Ti4KKysgKgorKyAqIEVuZCBvZiBzdHJlYW0gc2l0dWF0aW9ucy4gVGhlc2UgcmVxdWlyZSAiZmx1 c2hpbmciIChha2EgZHJhaW5pbmcpIHRoZSBjb2RlYywKKysgKiBhcyB0aGUgY29kZWMgbWlnaHQg YnVmZmVyIG11bHRpcGxlIGZyYW1lcyBvciBwYWNrZXRzIGludGVybmFsbHkgZm9yCisrICogcGVy Zm9ybWFuY2Ugb3Igb3V0IG9mIG5lY2Vzc2l0eSAoY29uc2lkZXIgQi1mcmFtZXMpLgorKyAqIFRo aXMgaXMgaGFuZGxlZCBhcyBmb2xsb3dzOgorKyAqIC0gSW5zdGVhZCBvZiB2YWxpZCBpbnB1dCwg c2VuZCBOVUxMIHRvIHRoZSBhdmNvZGVjX3NlbmRfcGFja2V0KCkgKGRlY29kaW5nKQorKyAqICAg b3IgYXZjb2RlY19zZW5kX2ZyYW1lKCkgKGVuY29kaW5nKSBmdW5jdGlvbnMuIFRoaXMgd2lsbCBl bnRlciBkcmFpbmluZworKyAqICAgbW9kZS4KKysgKiAtIENhbGwgYXZjb2RlY19yZWNlaXZlX2Zy YW1lKCkgKGRlY29kaW5nKSBvciBhdmNvZGVjX3JlY2VpdmVfcGFja2V0KCkKKysgKiAgIChlbmNv ZGluZykgaW4gYSBsb29wIHVudGlsIEFWRVJST1JfRU9GIGlzIHJldHVybmVkLiBUaGUgZnVuY3Rp b25zIHdpbGwKKysgKiAgIG5vdCByZXR1cm4gQVZFUlJPUihFQUdBSU4pLCB1bmxlc3MgeW91IGZv cmdvdCB0byBlbnRlciBkcmFpbmluZyBtb2RlLgorKyAqIC0gQmVmb3JlIGRlY29kaW5nIGNhbiBi ZSByZXN1bWVkIGFnYWluLCB0aGUgY29kZWMgaGFzIHRvIGJlIHJlc2V0IHdpdGgKKysgKiAgIGF2 Y29kZWNfZmx1c2hfYnVmZmVycygpLgorKyAqCisrICogVXNpbmcgdGhlIEFQSSBhcyBvdXRsaW5l ZCBhYm92ZSBpcyBoaWdobHkgcmVjb21tZW5kZWQuIEJ1dCBpdCBpcyBhbHNvCisrICogcG9zc2li bGUgdG8gY2FsbCBmdW5jdGlvbnMgb3V0c2lkZSBvZiB0aGlzIHJpZ2lkIHNjaGVtYS4gRm9yIGV4 YW1wbGUsIHlvdSBjYW4KKysgKiBjYWxsIGF2Y29kZWNfc2VuZF9wYWNrZXQoKSByZXBlYXRlZGx5 IHdpdGhvdXQgY2FsbGluZworKyAqIGF2Y29kZWNfcmVjZWl2ZV9mcmFtZSgpLiBJbiB0aGlzIGNh c2UsIGF2Y29kZWNfc2VuZF9wYWNrZXQoKSB3aWxsIHN1Y2NlZWQKKysgKiB1bnRpbCB0aGUgY29k ZWMncyBpbnRlcm5hbCBidWZmZXIgaGFzIGJlZW4gZmlsbGVkIHVwICh3aGljaCBpcyB0eXBpY2Fs bHkgb2YKKysgKiBzaXplIDEgcGVyIG91dHB1dCBmcmFtZSwgYWZ0ZXIgaW5pdGlhbCBpbnB1dCks IGFuZCB0aGVuIHJlamVjdCBpbnB1dCB3aXRoCisrICogQVZFUlJPUihFQUdBSU4pLiBPbmNlIGl0 IHN0YXJ0cyByZWplY3RpbmcgaW5wdXQsIHlvdSBoYXZlIG5vIGNob2ljZSBidXQgdG8KKysgKiBy ZWFkIGF0IGxlYXN0IHNvbWUgb3V0cHV0LgorKyAqCisrICogTm90IGFsbCBjb2RlY3Mgd2lsbCBm b2xsb3cgYSByaWdpZCBhbmQgcHJlZGljdGFibGUgZGF0YWZsb3c7IHRoZSBvbmx5CisrICogZ3Vh cmFudGVlIGlzIHRoYXQgYW4gQVZFUlJPUihFQUdBSU4pIHJldHVybiB2YWx1ZSBvbiBhIHNlbmQv cmVjZWl2ZSBjYWxsIG9uCisrICogb25lIGVuZCBpbXBsaWVzIHRoYXQgYSByZWNlaXZlL3NlbmQg Y2FsbCBvbiB0aGUgb3RoZXIgZW5kIHdpbGwgc3VjY2VlZCwgb3IKKysgKiBhdCBsZWFzdCB3aWxs IG5vdCBmYWlsIHdpdGggQVZFUlJPUihFQUdBSU4pLiBJbiBnZW5lcmFsLCBubyBjb2RlYyB3aWxs CisrICogcGVybWl0IHVubGltaXRlZCBidWZmZXJpbmcgb2YgaW5wdXQgb3Igb3V0cHV0LgorKyAq CisrICogQSBjb2RlYyBpcyBub3QgYWxsb3dlZCB0byByZXR1cm4gQVZFUlJPUihFQUdBSU4pIGZv ciBib3RoIHNlbmRpbmcgYW5kIHJlY2VpdmluZy4gVGhpcworKyAqIHdvdWxkIGJlIGFuIGludmFs aWQgc3RhdGUsIHdoaWNoIGNvdWxkIHB1dCB0aGUgY29kZWMgdXNlciBpbnRvIGFuIGVuZGxlc3MK KysgKiBsb29wLiBUaGUgQVBJIGhhcyBubyBjb25jZXB0IG9mIHRpbWUgZWl0aGVyOiBpdCBjYW5u b3QgaGFwcGVuIHRoYXQgdHJ5aW5nIHRvCisrICogZG8gYXZjb2RlY19zZW5kX3BhY2tldCgpIHJl c3VsdHMgaW4gQVZFUlJPUihFQUdBSU4pLCBidXQgYSByZXBlYXRlZCBjYWxsIDEgc2Vjb25kCisr ICogbGF0ZXIgYWNjZXB0cyB0aGUgcGFja2V0ICh3aXRoIG5vIG90aGVyIHJlY2VpdmUvZmx1c2gg QVBJIGNhbGxzIGludm9sdmVkKS4KKysgKiBUaGUgQVBJIGlzIGEgc3RyaWN0IHN0YXRlIG1hY2hp bmUsIGFuZCB0aGUgcGFzc2FnZSBvZiB0aW1lIGlzIG5vdCBzdXBwb3NlZAorKyAqIHRvIGluZmx1 ZW5jZSBpdC4gU29tZSB0aW1pbmctZGVwZW5kZW50IGJlaGF2aW9yIG1pZ2h0IHN0aWxsIGJlIGRl ZW1lZAorKyAqIGFjY2VwdGFibGUgaW4gY2VydGFpbiBjYXNlcy4gQnV0IGl0IG11c3QgbmV2ZXIg cmVzdWx0IGluIGJvdGggc2VuZC9yZWNlaXZlCisrICogcmV0dXJuaW5nIEVBR0FJTiBhdCB0aGUg c2FtZSB0aW1lIGF0IGFueSBwb2ludC4gSXQgbXVzdCBhbHNvIGFic29sdXRlbHkgYmUKKysgKiBh dm9pZGVkIHRoYXQgdGhlIGN1cnJlbnQgc3RhdGUgaXMgInVuc3RhYmxlIiBhbmQgY2FuICJmbGlw LWZsb3AiIGJldHdlZW4KKysgKiB0aGUgc2VuZC9yZWNlaXZlIEFQSXMgYWxsb3dpbmcgcHJvZ3Jl c3MuIEZvciBleGFtcGxlLCBpdCdzIG5vdCBhbGxvd2VkIHRoYXQKKysgKiB0aGUgY29kZWMgcmFu ZG9tbHkgZGVjaWRlcyB0aGF0IGl0IGFjdHVhbGx5IHdhbnRzIHRvIGNvbnN1bWUgYSBwYWNrZXQg bm93CisrICogaW5zdGVhZCBvZiByZXR1cm5pbmcgYSBmcmFtZSwgYWZ0ZXIgaXQganVzdCByZXR1 cm5lZCBBVkVSUk9SKEVBR0FJTikgb24gYW4KKysgKiBhdmNvZGVjX3NlbmRfcGFja2V0KCkgY2Fs bC4KKysgKiBAfQorKyAqLworKworKy8qKgorKyAqIEBkZWZncm91cCBsYXZjX2NvcmUgQ29yZSBm dW5jdGlvbnMvc3RydWN0dXJlcy4KKysgKiBAaW5ncm91cCBsaWJhdmMKKysgKgorKyAqIEJhc2lj IGRlZmluaXRpb25zLCBmdW5jdGlvbnMgZm9yIHF1ZXJ5aW5nIGxpYmF2Y29kZWMgY2FwYWJpbGl0 aWVzLAorKyAqIGFsbG9jYXRpbmcgY29yZSBzdHJ1Y3R1cmVzLCBldGMuCisrICogQHsKKysgKi8K KysKKysvKioKKysgKiBAaW5ncm91cCBsYXZjX2VuY29kaW5nCisrICovCisrdHlwZWRlZiBzdHJ1 Y3QgUmNPdmVycmlkZXsKKysgICAgaW50IHN0YXJ0X2ZyYW1lOworKyAgICBpbnQgZW5kX2ZyYW1l OworKyAgICBpbnQgcXNjYWxlOyAvLyBJZiB0aGlzIGlzIDAgdGhlbiBxdWFsaXR5X2ZhY3RvciB3 aWxsIGJlIHVzZWQgaW5zdGVhZC4KKysgICAgZmxvYXQgcXVhbGl0eV9mYWN0b3I7CisrfSBSY092 ZXJyaWRlOworKworKy8qIGVuY29kaW5nIHN1cHBvcnQKKysgICBUaGVzZSBmbGFncyBjYW4gYmUg cGFzc2VkIGluIEFWQ29kZWNDb250ZXh0LmZsYWdzIGJlZm9yZSBpbml0aWFsaXphdGlvbi4KKysg ICBOb3RlOiBOb3QgZXZlcnl0aGluZyBpcyBzdXBwb3J0ZWQgeWV0LgorKyovCisrCisrLyoqCisr ICogQWxsb3cgZGVjb2RlcnMgdG8gcHJvZHVjZSBmcmFtZXMgd2l0aCBkYXRhIHBsYW5lcyB0aGF0 IGFyZSBub3QgYWxpZ25lZAorKyAqIHRvIENQVSByZXF1aXJlbWVudHMgKGUuZy4gZHVlIHRvIGNy b3BwaW5nKS4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0ZMQUdfVU5BTElHTkVEICAgICAgICgx IDw8ICAwKQorKy8qKgorKyAqIFVzZSBmaXhlZCBxc2NhbGUuCisrICovCisrI2RlZmluZSBBVl9D T0RFQ19GTEFHX1FTQ0FMRSAgICAgICAgICAoMSA8PCAgMSkKKysvKioKKysgKiA0IE1WIHBlciBN QiBhbGxvd2VkIC8gYWR2YW5jZWQgcHJlZGljdGlvbiBmb3IgSC4yNjMuCisrICovCisrI2RlZmlu ZSBBVl9DT0RFQ19GTEFHXzRNViAgICAgICAgICAgICAoMSA8PCAgMikKKysvKioKKysgKiBPdXRw dXQgZXZlbiB0aG9zZSBmcmFtZXMgdGhhdCBtaWdodCBiZSBjb3JydXB0ZWQuCisrICovCisrI2Rl ZmluZSBBVl9DT0RFQ19GTEFHX09VVFBVVF9DT1JSVVBUICAoMSA8PCAgMykKKysvKioKKysgKiBV c2UgcXBlbCBNQy4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0ZMQUdfUVBFTCAgICAgICAgICAg ICgxIDw8ICA0KQorKy8qKgorKyAqIFJlcXVlc3QgdGhlIGVuY29kZXIgdG8gb3V0cHV0IHJlY29u c3RydWN0ZWQgZnJhbWVzLCBpLmUuXCBmcmFtZXMgdGhhdCB3b3VsZAorKyAqIGJlIHByb2R1Y2Vk IGJ5IGRlY29kaW5nIHRoZSBlbmNvZGVkIGJpdHN0cmVhbS4gVGhlc2UgZnJhbWVzIG1heSBiZSBy ZXRyaWV2ZWQKKysgKiBieSBjYWxsaW5nIGF2Y29kZWNfcmVjZWl2ZV9mcmFtZSgpIGltbWVkaWF0 ZWx5IGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvCisrICogYXZjb2RlY19yZWNlaXZlX3BhY2tl dCgpLgorKyAqCisrICogU2hvdWxkIG9ubHkgYmUgdXNlZCB3aXRoIGVuY29kZXJzIGZsYWdnZWQg d2l0aCB0aGUKKysgKiBAcmVmIEFWX0NPREVDX0NBUF9FTkNPREVSX1JFQ09OX0ZSQU1FIGNhcGFi aWxpdHkuCisrICoKKysgKiBAbm90ZQorKyAqIEVhY2ggcmVjb25zdHJ1Y3RlZCBmcmFtZSByZXR1 cm5lZCBieSB0aGUgZW5jb2RlciBjb3JyZXNwb25kcyB0byB0aGUgbGFzdAorKyAqIGVuY29kZWQg cGFja2V0LCBpLmUuIHRoZSBmcmFtZXMgYXJlIHJldHVybmVkIGluIGNvZGVkIG9yZGVyIHJhdGhl ciB0aGFuCisrICogcHJlc2VudGF0aW9uIG9yZGVyLgorKyAqCisrICogQG5vdGUKKysgKiBGcmFt ZSBwYXJhbWV0ZXJzIChsaWtlIHBpeGVsIGZvcm1hdCBvciBkaW1lbnNpb25zKSBkbyBub3QgaGF2 ZSB0byBtYXRjaCB0aGUKKysgKiBBVkNvZGVjQ29udGV4dCB2YWx1ZXMuIE1ha2Ugc3VyZSB0byB1 c2UgdGhlIHZhbHVlcyBmcm9tIHRoZSByZXR1cm5lZCBmcmFtZS4KKysgKi8KKysjZGVmaW5lIEFW X0NPREVDX0ZMQUdfUkVDT05fRlJBTUUgICAgICgxIDw8ICA2KQorKy8qKgorKyAqIEBwYXIgZGVj b2RpbmcKKysgKiBSZXF1ZXN0IHRoZSBkZWNvZGVyIHRvIHByb3BhZ2F0ZSBlYWNoIHBhY2tldCdz IEFWUGFja2V0Lm9wYXF1ZSBhbmQKKysgKiBBVlBhY2tldC5vcGFxdWVfcmVmIHRvIGl0cyBjb3Jy ZXNwb25kaW5nIG91dHB1dCBBVkZyYW1lLgorKyAqCisrICogQHBhciBlbmNvZGluZzoKKysgKiBS ZXF1ZXN0IHRoZSBlbmNvZGVyIHRvIHByb3BhZ2F0ZSBlYWNoIGZyYW1lJ3MgQVZGcmFtZS5vcGFx dWUgYW5kCisrICogQVZGcmFtZS5vcGFxdWVfcmVmIHZhbHVlcyB0byBpdHMgY29ycmVzcG9uZGlu ZyBvdXRwdXQgQVZQYWNrZXQuCisrICoKKysgKiBAcGFyCisrICogTWF5IG9ubHkgYmUgc2V0IG9u IGVuY29kZXJzIHRoYXQgaGF2ZSB0aGUKKysgKiBAcmVmIEFWX0NPREVDX0NBUF9FTkNPREVSX1JF T1JERVJFRF9PUEFRVUUgY2FwYWJpbGl0eSBmbGFnLgorKyAqCisrICogQG5vdGUKKysgKiBXaGls ZSBpbiB0eXBpY2FsIGNhc2VzIG9uZSBpbnB1dCBmcmFtZSBwcm9kdWNlcyBleGFjdGx5IG9uZSBv dXRwdXQgcGFja2V0CisrICogKHBlcmhhcHMgYWZ0ZXIgYSBkZWxheSksIGluIGdlbmVyYWwgdGhl IG1hcHBpbmcgb2YgZnJhbWVzIHRvIHBhY2tldHMgaXMKKysgKiBNLXRvLU4sIHNvCisrICogLSBB bnkgbnVtYmVyIG9mIGlucHV0IGZyYW1lcyBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIGFueSBnaXZl biBvdXRwdXQgcGFja2V0LgorKyAqICAgVGhpcyBpbmNsdWRlcyB6ZXJvIC0gZS5nLiBzb21lIGVu Y29kZXJzIG1heSBvdXRwdXQgcGFja2V0cyB0aGF0IGNhcnJ5IG9ubHkKKysgKiAgIG1ldGFkYXRh IGFib3V0IHRoZSB3aG9sZSBzdHJlYW0uCisrICogLSBBIGdpdmVuIGlucHV0IGZyYW1lIG1heSBi ZSBhc3NvY2lhdGVkIHdpdGggYW55IG51bWJlciBvZiBvdXRwdXQgcGFja2V0cy4KKysgKiAgIEFn YWluIHRoaXMgaW5jbHVkZXMgemVybyAtIGUuZy4gc29tZSBlbmNvZGVycyBtYXkgZHJvcCBmcmFt ZXMgdW5kZXIgY2VydGFpbgorKyAqICAgY29uZGl0aW9ucy4KKysgKiAuCisrICogVGhpcyBpbXBs aWVzIHRoYXQgd2hlbiB1c2luZyB0aGlzIGZsYWcsIHRoZSBjYWxsZXIgbXVzdCBOT1QgYXNzdW1l IHRoYXQKKysgKiAtIGEgZ2l2ZW4gaW5wdXQgZnJhbWUncyBvcGFxdWVzIHdpbGwgbmVjZXNzYXJp bHkgYXBwZWFyIG9uIHNvbWUgb3V0cHV0IHBhY2tldDsKKysgKiAtIGV2ZXJ5IG91dHB1dCBwYWNr ZXQgd2lsbCBoYXZlIHNvbWUgbm9uLU5VTEwgb3BhcXVlIHZhbHVlLgorKyAqIC4KKysgKiBXaGVu IGFuIG91dHB1dCBwYWNrZXQgY29udGFpbnMgbXVsdGlwbGUgZnJhbWVzLCB0aGUgb3BhcXVlIHZh bHVlcyB3aWxsIGJlCisrICogdGFrZW4gZnJvbSB0aGUgZmlyc3Qgb2YgdGhvc2UuCisrICoKKysg KiBAbm90ZQorKyAqIFRoZSBjb252ZXJzZSBob2xkcyBmb3IgZGVjb2RlcnMsIHdpdGggZnJhbWVz IGFuZCBwYWNrZXRzIHN3aXRjaGVkLgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfRkxBR19DT1BZ X09QQVFVRSAgICAgKDEgPDwgIDcpCisrLyoqCisrICogU2lnbmFsIHRvIHRoZSBlbmNvZGVyIHRo YXQgdGhlIHZhbHVlcyBvZiBBVkZyYW1lLmR1cmF0aW9uIGFyZSB2YWxpZCBhbmQKKysgKiBzaG91 bGQgYmUgdXNlZCAodHlwaWNhbGx5IGZvciB0cmFuc2ZlcnJpbmcgdGhlbSB0byBvdXRwdXQgcGFj a2V0cykuCisrICoKKysgKiBJZiB0aGlzIGZsYWcgaXMgbm90IHNldCwgZnJhbWUgZHVyYXRpb25z IGFyZSBpZ25vcmVkLgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfRkxBR19GUkFNRV9EVVJBVElP TiAgKDEgPDwgIDgpCisrLyoqCisrICogVXNlIGludGVybmFsIDJwYXNzIHJhdGVjb250cm9sIGlu IGZpcnN0IHBhc3MgbW9kZS4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0ZMQUdfUEFTUzEgICAg ICAgICAgICgxIDw8ICA5KQorKy8qKgorKyAqIFVzZSBpbnRlcm5hbCAycGFzcyByYXRlY29udHJv bCBpbiBzZWNvbmQgcGFzcyBtb2RlLgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfRkxBR19QQVNT MiAgICAgICAgICAgKDEgPDwgMTApCisrLyoqCisrICogbG9vcCBmaWx0ZXIuCisrICovCisrI2Rl ZmluZSBBVl9DT0RFQ19GTEFHX0xPT1BfRklMVEVSICAgICAoMSA8PCAxMSkKKysvKioKKysgKiBP bmx5IGRlY29kZS9lbmNvZGUgZ3JheXNjYWxlLgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfRkxB R19HUkFZICAgICAgICAgICAgKDEgPDwgMTMpCisrLyoqCisrICogZXJyb3JbP10gdmFyaWFibGVz IHdpbGwgYmUgc2V0IGR1cmluZyBlbmNvZGluZy4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0ZM QUdfUFNOUiAgICAgICAgICAgICgxIDw8IDE1KQorKy8qKgorKyAqIFVzZSBpbnRlcmxhY2VkIERD VC4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0ZMQUdfSU5URVJMQUNFRF9EQ1QgICgxIDw8IDE4 KQorKy8qKgorKyAqIEZvcmNlIGxvdyBkZWxheS4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0ZM QUdfTE9XX0RFTEFZICAgICAgICgxIDw8IDE5KQorKy8qKgorKyAqIFBsYWNlIGdsb2JhbCBoZWFk ZXJzIGluIGV4dHJhZGF0YSBpbnN0ZWFkIG9mIGV2ZXJ5IGtleWZyYW1lLgorKyAqLworKyNkZWZp bmUgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSICAgKDEgPDwgMjIpCisrLyoqCisrICogVXNl IG9ubHkgYml0ZXhhY3Qgc3R1ZmYgKGV4Y2VwdCAoSSlEQ1QpLgorKyAqLworKyNkZWZpbmUgQVZf Q09ERUNfRkxBR19CSVRFWEFDVCAgICAgICAgKDEgPDwgMjMpCisrLyogRnggOiBGbGFnIGZvciBI LjI2MysgZXh0cmEgb3B0aW9ucyAqLworKy8qKgorKyAqIEguMjYzIGFkdmFuY2VkIGludHJhIGNv ZGluZyAvIE1QRUctNCBBQyBwcmVkaWN0aW9uCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19GTEFH X0FDX1BSRUQgICAgICAgICAoMSA8PCAyNCkKKysvKioKKysgKiBpbnRlcmxhY2VkIG1vdGlvbiBl c3RpbWF0aW9uCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19GTEFHX0lOVEVSTEFDRURfTUUgICAo MSA8PCAyOSkKKysjZGVmaW5lIEFWX0NPREVDX0ZMQUdfQ0xPU0VEX0dPUCAgICAgICgxVSA8PCAz MSkKKysKKysvKioKKysgKiBBbGxvdyBub24gc3BlYyBjb21wbGlhbnQgc3BlZWR1cCB0cmlja3Mu CisrICovCisrI2RlZmluZSBBVl9DT0RFQ19GTEFHMl9GQVNUICAgICAgICAgICAoMSA8PCAgMCkK KysvKioKKysgKiBTa2lwIGJpdHN0cmVhbSBlbmNvZGluZy4KKysgKi8KKysjZGVmaW5lIEFWX0NP REVDX0ZMQUcyX05PX09VVFBVVCAgICAgICgxIDw8ICAyKQorKy8qKgorKyAqIFBsYWNlIGdsb2Jh bCBoZWFkZXJzIGF0IGV2ZXJ5IGtleWZyYW1lIGluc3RlYWQgb2YgaW4gZXh0cmFkYXRhLgorKyAq LworKyNkZWZpbmUgQVZfQ09ERUNfRkxBRzJfTE9DQUxfSEVBREVSICAgKDEgPDwgIDMpCisrCisr LyoqCisrICogSW5wdXQgYml0c3RyZWFtIG1pZ2h0IGJlIHRydW5jYXRlZCBhdCBhIHBhY2tldCBi b3VuZGFyaWVzCisrICogaW5zdGVhZCBvZiBvbmx5IGF0IGZyYW1lIGJvdW5kYXJpZXMuCisrICov CisrI2RlZmluZSBBVl9DT0RFQ19GTEFHMl9DSFVOS1MgICAgICAgICAoMSA8PCAxNSkKKysvKioK KysgKiBEaXNjYXJkIGNyb3BwaW5nIGluZm9ybWF0aW9uIGZyb20gU1BTLgorKyAqLworKyNkZWZp bmUgQVZfQ09ERUNfRkxBRzJfSUdOT1JFX0NST1AgICAgKDEgPDwgMTYpCisrLyoqCisrICogRm9y Y2UgYXVkaW8gZW5jb2RlcnMgdG8gdXNlIGEgZml4ZWQgZnJhbWUgc2l6ZS4KKysgKi8KKysjZGVm aW5lIEFWX0NPREVDX0ZMQUcyX0ZJWEVEX0ZSQU1FX1NJWkUgKDEgPDwgMTcpCisrCisrLyoqCisr ICogU2hvdyBhbGwgZnJhbWVzIGJlZm9yZSB0aGUgZmlyc3Qga2V5ZnJhbWUKKysgKi8KKysjZGVm aW5lIEFWX0NPREVDX0ZMQUcyX1NIT1dfQUxMICAgICAgICgxIDw8IDIyKQorKy8qKgorKyAqIEV4 cG9ydCBtb3Rpb24gdmVjdG9ycyB0aHJvdWdoIGZyYW1lIHNpZGUgZGF0YQorKyAqLworKyNkZWZp bmUgQVZfQ09ERUNfRkxBRzJfRVhQT1JUX01WUyAgICAgKDEgPDwgMjgpCisrLyoqCisrICogRG8g bm90IHNraXAgc2FtcGxlcyBhbmQgZXhwb3J0IHNraXAgaW5mb3JtYXRpb24gYXMgZnJhbWUgc2lk ZSBkYXRhCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19GTEFHMl9TS0lQX01BTlVBTCAgICAoMSA8 PCAyOSkKKysvKioKKysgKiBEbyBub3QgcmVzZXQgQVNTIFJlYWRPcmRlciBmaWVsZCBvbiBmbHVz aCAoc3VidGl0bGVzIGRlY29kaW5nKQorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfRkxBRzJfUk9f RkxVU0hfTk9PUCAgKDEgPDwgMzApCisrLyoqCisrICogR2VuZXJhdGUvcGFyc2UgSUNDIHByb2Zp bGVzIG9uIGVuY29kZS9kZWNvZGUsIGFzIGFwcHJvcHJpYXRlIGZvciB0aGUgdHlwZSBvZgorKyAq IGZpbGUuIE5vIGVmZmVjdCBvbiBjb2RlY3Mgd2hpY2ggY2Fubm90IGNvbnRhaW4gZW1iZWRkZWQg SUNDIHByb2ZpbGVzLCBvcgorKyAqIHdoZW4gY29tcGlsZWQgd2l0aG91dCBzdXBwb3J0IGZvciBs Y21zMi4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0ZMQUcyX0lDQ19QUk9GSUxFUyAgICgxVSA8 PCAzMSkKKysKKysvKiBFeHBvcnRlZCBzaWRlIGRhdGEuCisrICAgVGhlc2UgZmxhZ3MgY2FuIGJl IHBhc3NlZCBpbiBBVkNvZGVjQ29udGV4dC5leHBvcnRfc2lkZV9kYXRhIGJlZm9yZSBpbml0aWFs aXphdGlvbi4KKysqLworKy8qKgorKyAqIEV4cG9ydCBtb3Rpb24gdmVjdG9ycyB0aHJvdWdoIGZy YW1lIHNpZGUgZGF0YQorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfRVhQT1JUX0RBVEFfTVZTICAg ICAgICAgKDEgPDwgMCkKKysvKioKKysgKiBFeHBvcnQgZW5jb2RlciBQcm9kdWNlciBSZWZlcmVu Y2UgVGltZSB0aHJvdWdoIHBhY2tldCBzaWRlIGRhdGEKKysgKi8KKysjZGVmaW5lIEFWX0NPREVD X0VYUE9SVF9EQVRBX1BSRlQgICAgICAgICgxIDw8IDEpCisrLyoqCisrICogRGVjb2Rpbmcgb25s eS4KKysgKiBFeHBvcnQgdGhlIEFWVmlkZW9FbmNQYXJhbXMgc3RydWN0dXJlIHRocm91Z2ggZnJh bWUgc2lkZSBkYXRhLgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfRVhQT1JUX0RBVEFfVklERU9f RU5DX1BBUkFNUyAoMSA8PCAyKQorKy8qKgorKyAqIERlY29kaW5nIG9ubHkuCisrICogRG8gbm90 IGFwcGx5IGZpbG0gZ3JhaW4sIGV4cG9ydCBpdCBpbnN0ZWFkLgorKyAqLworKyNkZWZpbmUgQVZf Q09ERUNfRVhQT1JUX0RBVEFfRklMTV9HUkFJTiAoMSA8PCAzKQorKworKy8qKgorKyAqIERlY29k aW5nIG9ubHkuCisrICogRG8gbm90IGFwcGx5IHBpY3R1cmUgZW5oYW5jZW1lbnQgbGF5ZXJzLCBl eHBvcnQgdGhlbSBpbnN0ZWFkLgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfRVhQT1JUX0RBVEFf RU5IQU5DRU1FTlRTICgxIDw8IDQpCisrCisrLyoqCisrICogVGhlIGRlY29kZXIgd2lsbCBrZWVw IGEgcmVmZXJlbmNlIHRvIHRoZSBmcmFtZSBhbmQgbWF5IHJldXNlIGl0IGxhdGVyLgorKyAqLwor KyNkZWZpbmUgQVZfR0VUX0JVRkZFUl9GTEFHX1JFRiAoMSA8PCAwKQorKworKy8qKgorKyAqIFRo ZSBlbmNvZGVyIHdpbGwga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgcGFja2V0IGFuZCBtYXkgcmV1 c2UgaXQgbGF0ZXIuCisrICovCisrI2RlZmluZSBBVl9HRVRfRU5DT0RFX0JVRkZFUl9GTEFHX1JF RiAoMSA8PCAwKQorKworKy8qKgorKyAqIFRoZSBkZWNvZGVyIHdpbGwgYnlwYXNzIGZyYW1lIHRo cmVhZGluZyBhbmQgcmV0dXJuIHRoZSBuZXh0IGZyYW1lIGFzIHNvb24gYXMKKysgKiBwb3NzaWJs ZS4gTm90ZSB0aGF0IHRoaXMgbWF5IGRlbGl2ZXIgZnJhbWVzIGVhcmxpZXIgdGhhbiB0aGUgYWR2 ZXJ0aXNlZAorKyAqIGBBVkNvZGVjQ29udGV4dC5kZWxheWAuIE5vIGVmZmVjdCB3aGVuIGZyYW1l IHRocmVhZGluZyBpcyBkaXNhYmxlZCwgb3Igb24KKysgKiBlbmNvZGluZy4KKysgKi8KKysjZGVm aW5lIEFWX0NPREVDX1JFQ0VJVkVfRlJBTUVfRkxBR19TWU5DSFJPTk9VUyAoMSA8PCAwKQorKwor Ky8qKgorKyAqIG1haW4gZXh0ZXJuYWwgQVBJIHN0cnVjdHVyZS4KKysgKiBOZXcgZmllbGRzIGNh biBiZSBhZGRlZCB0byB0aGUgZW5kIHdpdGggbWlub3IgdmVyc2lvbiBidW1wcy4KKysgKiBSZW1v dmFsLCByZW9yZGVyaW5nIGFuZCBjaGFuZ2VzIHRvIGV4aXN0aW5nIGZpZWxkcyByZXF1aXJlIGEg bWFqb3IKKysgKiB2ZXJzaW9uIGJ1bXAuCisrICogWW91IGNhbiB1c2UgQVZPcHRpb25zIChhdl9v cHQqIC8gYXZfc2V0L2dldCooKSkgdG8gYWNjZXNzIHRoZXNlIGZpZWxkcyBmcm9tIHVzZXIKKysg KiBhcHBsaWNhdGlvbnMuCisrICogVGhlIG5hbWUgc3RyaW5nIGZvciBBVk9wdGlvbnMgb3B0aW9u cyBtYXRjaGVzIHRoZSBhc3NvY2lhdGVkIGNvbW1hbmQgbGluZQorKyAqIHBhcmFtZXRlciBuYW1l IGFuZCBjYW4gYmUgZm91bmQgaW4gbGliYXZjb2RlYy9vcHRpb25zX3RhYmxlLmgKKysgKiBUaGUg QVZPcHRpb24vY29tbWFuZCBsaW5lIHBhcmFtZXRlciBuYW1lcyBkaWZmZXIgaW4gc29tZSBjYXNl cyBmcm9tIHRoZSBDCisrICogc3RydWN0dXJlIGZpZWxkIG5hbWVzIGZvciBoaXN0b3JpYyByZWFz b25zIG9yIGJyZXZpdHkuCisrICogc2l6ZW9mKEFWQ29kZWNDb250ZXh0KSBtdXN0IG5vdCBiZSB1 c2VkIG91dHNpZGUgbGliYXYqLgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWQ29kZWNDb250ZXh0 IHsKKysgICAgLyoqCisrICAgICAqIGluZm9ybWF0aW9uIG9uIHN0cnVjdCBmb3IgYXZfbG9nCisr ICAgICAqIC0gc2V0IGJ5IGF2Y29kZWNfYWxsb2NfY29udGV4dDMKKysgICAgICovCisrICAgIGNv bnN0IEFWQ2xhc3MgKmF2X2NsYXNzOworKyAgICBpbnQgbG9nX2xldmVsX29mZnNldDsKKysKKysg ICAgZW51bSBBVk1lZGlhVHlwZSBjb2RlY190eXBlOyAvKiBzZWUgQVZNRURJQV9UWVBFX3h4eCAq LworKyAgICBjb25zdCBzdHJ1Y3QgQVZDb2RlYyAgKmNvZGVjOworKyAgICBlbnVtIEFWQ29kZWNJ RCAgICAgY29kZWNfaWQ7IC8qIHNlZSBBVl9DT0RFQ19JRF94eHggKi8KKysKKysgICAgLyoqCisr ICAgICAqIGZvdXJjYyAoTFNCIGZpcnN0LCBzbyAiQUJDRCIgLT4gKCdEJzw8MjQpICsgKCdDJzw8 MTYpICsgKCdCJzw8OCkgKyAnQScpLgorKyAgICAgKiBUaGlzIGlzIHVzZWQgdG8gd29yayBhcm91 bmQgc29tZSBlbmNvZGVyIGJ1Z3MuCisrICAgICAqIEEgZGVtdXhlciBzaG91bGQgc2V0IHRoaXMg dG8gd2hhdCBpcyBzdG9yZWQgaW4gdGhlIGZpZWxkIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNvZGVj LgorKyAgICAgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3VjaCBmaWVsZHMgaW4gYSBjb250YWlu ZXIgdGhlbiB0aGUgZGVtdXhlciBzaG91bGQgY2hvb3NlIHRoZSBvbmUKKysgICAgICogd2hpY2gg bWF4aW1pemVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlZCBjb2RlYy4KKysgICAgICog SWYgdGhlIGNvZGVjIHRhZyBmaWVsZCBpbiBhIGNvbnRhaW5lciBpcyBsYXJnZXIgdGhhbiAzMiBi aXRzIHRoZW4gdGhlIGRlbXV4ZXIgc2hvdWxkCisrICAgICAqIHJlbWFwIHRoZSBsb25nZXIgSUQg dG8gMzIgYml0cyB3aXRoIGEgdGFibGUgb3Igb3RoZXIgc3RydWN0dXJlLiBBbHRlcm5hdGl2ZWx5 IGEgbmV3CisrICAgICAqIGV4dHJhX2NvZGVjX3RhZyArIHNpemUgY291bGQgYmUgYWRkZWQgYnV0 IGZvciB0aGlzIGEgY2xlYXIgYWR2YW50YWdlIG11c3QgYmUgZGVtb25zdHJhdGVkCisrICAgICAq IGZpcnN0LgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlciwgaWYgbm90IHRoZW4gdGhl IGRlZmF1bHQgYmFzZWQgb24gY29kZWNfaWQgd2lsbCBiZSB1c2VkLgorKyAgICAgKiAtIGRlY29k aW5nOiBTZXQgYnkgdXNlciwgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlIGJ5IGxpYmF2 Y29kZWMgZHVyaW5nIGluaXQuCisrICAgICAqLworKyAgICB1bnNpZ25lZCBpbnQgY29kZWNfdGFn OworKworKyAgICB2b2lkICpwcml2X2RhdGE7CisrCisrICAgIC8qKgorKyAgICAgKiBQcml2YXRl IGNvbnRleHQgdXNlZCBmb3IgaW50ZXJuYWwgZGF0YS4KKysgICAgICoKKysgICAgICogVW5saWtl IHByaXZfZGF0YSwgdGhpcyBpcyBub3QgY29kZWMtc3BlY2lmaWMuIEl0IGlzIHVzZWQgaW4gZ2Vu ZXJhbAorKyAgICAgKiBsaWJhdmNvZGVjIGZ1bmN0aW9ucy4KKysgICAgICovCisrICAgIHN0cnVj dCBBVkNvZGVjSW50ZXJuYWwgKmludGVybmFsOworKworKyAgICAvKioKKysgICAgICogUHJpdmF0 ZSBkYXRhIG9mIHRoZSB1c2VyLCBjYW4gYmUgdXNlZCB0byBjYXJyeSBhcHAgc3BlY2lmaWMgc3R1 ZmYuCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5n OiBTZXQgYnkgdXNlci4KKysgICAgICovCisrICAgIHZvaWQgKm9wYXF1ZTsKKysKKysgICAgLyoq CisrICAgICAqIHRoZSBhdmVyYWdlIGJpdHJhdGUKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5 IHVzZXI7IHVudXNlZCBmb3IgY29uc3RhbnQgcXVhbnRpemVyIGVuY29kaW5nLgorKyAgICAgKiAt IGRlY29kaW5nOiBTZXQgYnkgdXNlciwgbWF5IGJlIG92ZXJ3cml0dGVuIGJ5IGxpYmF2Y29kZWMK KysgICAgICogICAgICAgICAgICAgaWYgdGhpcyBpbmZvIGlzIGF2YWlsYWJsZSBpbiB0aGUgc3Ry ZWFtCisrICAgICAqLworKyAgICBpbnQ2NF90IGJpdF9yYXRlOworKworKyAgICAvKioKKysgICAg ICogQVZfQ09ERUNfRkxBR18qLgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysg ICAgICogLSBkZWNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqLworKyAgICBpbnQgZmxhZ3M7 CisrCisrICAgIC8qKgorKyAgICAgKiBBVl9DT0RFQ19GTEFHMl8qCisrICAgICAqIC0gZW5jb2Rp bmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAg ICovCisrICAgIGludCBmbGFnczI7CisrCisrICAgIC8qKgorKyAgICAgKiBPdXQtb2YtYmFuZCBn bG9iYWwgaGVhZGVycyB0aGF0IG1heSBiZSB1c2VkIGJ5IHNvbWUgY29kZWNzLgorKyAgICAgKgor KyAgICAgKiAtIGRlY29kaW5nOiBTaG91bGQgYmUgc2V0IGJ5IHRoZSBjYWxsZXIgd2hlbiBhdmFp bGFibGUgKHR5cGljYWxseSBmcm9tIGEKKysgICAgICogICBkZW11eGVyKSBiZWZvcmUgb3Blbmlu ZyB0aGUgZGVjb2Rlcjsgc29tZSBkZWNvZGVycyByZXF1aXJlIHRoaXMgdG8gYmUKKysgICAgICog ICBzZXQgYW5kIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIG90aGVyd2lzZS4KKysgICAgICoKKysg ICAgICogICBUaGUgYXJyYXkgbXVzdCBiZSBhbGxvY2F0ZWQgd2l0aCB0aGUgYXZfbWFsbG9jKCkg ZmFtaWx5IG9mIGZ1bmN0aW9uczsKKysgICAgICogICBhbGxvY2F0ZWQgc2l6ZSBtdXN0IGJlIGF0 IGxlYXN0IEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUgYnl0ZXMKKysgICAgICogICBsYXJn ZXIgdGhhbiBleHRyYWRhdGFfc2l6ZS4KKysgICAgICoKKysgICAgICogLSBlbmNvZGluZzogTWF5 IGJlIHNldCBieSB0aGUgZW5jb2RlciBpbiBhdmNvZGVjX29wZW4yKCkgKHBvc3NpYmx5CisrICAg ICAqICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURF UiBmbGFnIGlzIHNldCkuCisrICAgICAqCisrICAgICAqIEFmdGVyIGJlaW5nIHNldCwgdGhlIGFy cmF5IGlzIG93bmVkIGJ5IHRoZSBjb2RlYyBhbmQgZnJlZWQgaW4KKysgICAgICogYXZjb2RlY19m cmVlX2NvbnRleHQoKS4KKysgICAgICovCisrICAgIHVpbnQ4X3QgKmV4dHJhZGF0YTsKKysgICAg aW50IGV4dHJhZGF0YV9zaXplOworKworKyAgICAvKioKKysgICAgICogVGhpcyBpcyB0aGUgZnVu ZGFtZW50YWwgdW5pdCBvZiB0aW1lIChpbiBzZWNvbmRzKSBpbiB0ZXJtcworKyAgICAgKiBvZiB3 aGljaCBmcmFtZSB0aW1lc3RhbXBzIGFyZSByZXByZXNlbnRlZC4gRm9yIGZpeGVkLWZwcyBjb250 ZW50LAorKyAgICAgKiB0aW1lYmFzZSBzaG91bGQgYmUgMS9mcmFtZXJhdGUgYW5kIHRpbWVzdGFt cCBpbmNyZW1lbnRzIHNob3VsZCBiZQorKyAgICAgKiBpZGVudGljYWxseSAxLgorKyAgICAgKiBU aGlzIG9mdGVuLCBidXQgbm90IGFsd2F5cyBpcyB0aGUgaW52ZXJzZSBvZiB0aGUgZnJhbWUgcmF0 ZSBvciBmaWVsZCByYXRlCisrICAgICAqIGZvciB2aWRlby4gMS90aW1lX2Jhc2UgaXMgbm90IHRo ZSBhdmVyYWdlIGZyYW1lIHJhdGUgaWYgdGhlIGZyYW1lIHJhdGUgaXMgbm90CisrICAgICAqIGNv bnN0YW50LgorKyAgICAgKgorKyAgICAgKiBMaWtlIGNvbnRhaW5lcnMsIGVsZW1lbnRhcnkgc3Ry ZWFtcyBhbHNvIGNhbiBzdG9yZSB0aW1lc3RhbXBzLCAxL3RpbWVfYmFzZQorKyAgICAgKiBpcyB0 aGUgdW5pdCBpbiB3aGljaCB0aGVzZSB0aW1lc3RhbXBzIGFyZSBzcGVjaWZpZWQuCisrICAgICAq IEFzIGV4YW1wbGUgb2Ygc3VjaCBjb2RlYyB0aW1lIGJhc2Ugc2VlIElTTy9JRUMgMTQ0OTYtMjoy MDAxKEUpCisrICAgICAqIHZvcF90aW1lX2luY3JlbWVudF9yZXNvbHV0aW9uIGFuZCBmaXhlZF92 b3BfcmF0ZQorKyAgICAgKiAoZml4ZWRfdm9wX3JhdGUgPT0gMCBpbXBsaWVzIHRoYXQgaXQgaXMg ZGlmZmVyZW50IGZyb20gdGhlIGZyYW1lcmF0ZSkKKysgICAgICoKKysgICAgICogLSBlbmNvZGlu ZzogTVVTVCBiZSBzZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkLgorKyAg ICAgKi8KKysgICAgQVZSYXRpb25hbCB0aW1lX2Jhc2U7CisrCisrICAgIC8qKgorKyAgICAgKiBU aW1lYmFzZSBpbiB3aGljaCBwa3RfZHRzL3B0cyBhbmQgQVZQYWNrZXQuZHRzL3B0cyBhcmUgZXhw cmVzc2VkLgorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQuCisrICAgICAqIC0gZGVjb2Rpbmc6 IHNldCBieSB1c2VyLgorKyAgICAgKi8KKysgICAgQVZSYXRpb25hbCBwa3RfdGltZWJhc2U7Cisr CisrICAgIC8qKgorKyAgICAgKiAtIGRlY29kaW5nOiBGb3IgY29kZWNzIHRoYXQgc3RvcmUgYSBm cmFtZXJhdGUgdmFsdWUgaW4gdGhlIGNvbXByZXNzZWQKKysgICAgICogICAgICAgICAgICAgYml0 c3RyZWFtLCB0aGUgZGVjb2RlciBtYXkgZXhwb3J0IGl0IGhlcmUuIHsgMCwgMX0gd2hlbgorKyAg ICAgKiAgICAgICAgICAgICB1bmtub3duLgorKyAgICAgKiAtIGVuY29kaW5nOiBNYXkgYmUgdXNl ZCB0byBzaWduYWwgdGhlIGZyYW1lcmF0ZSBvZiBDRlIgY29udGVudCB0byBhbgorKyAgICAgKiAg ICAgICAgICAgICBlbmNvZGVyLgorKyAgICAgKi8KKysgICAgQVZSYXRpb25hbCBmcmFtZXJhdGU7 CisrCisrICAgIC8qKgorKyAgICAgKiBDb2RlYyBkZWxheS4KKysgICAgICoKKysgICAgICogRW5j b2Rpbmc6IE51bWJlciBvZiBmcmFtZXMgZGVsYXkgdGhlcmUgd2lsbCBiZSBmcm9tIHRoZSBlbmNv ZGVyIGlucHV0IHRvCisrICAgICAqICAgICAgICAgICB0aGUgZGVjb2RlciBvdXRwdXQuICh3ZSBh c3N1bWUgdGhlIGRlY29kZXIgbWF0Y2hlcyB0aGUgc3BlYykKKysgICAgICogRGVjb2Rpbmc6IE51 bWJlciBvZiBmcmFtZXMgZGVsYXkgaW4gYWRkaXRpb24gdG8gd2hhdCBhIHN0YW5kYXJkIGRlY29k ZXIKKysgICAgICogICAgICAgICAgIGFzIHNwZWNpZmllZCBpbiB0aGUgc3BlYyB3b3VsZCBwcm9k dWNlLgorKyAgICAgKgorKyAgICAgKiBWaWRlbzoKKysgICAgICogICBOdW1iZXIgb2YgZnJhbWVz IHRoZSBkZWNvZGVkIG91dHB1dCB3aWxsIGJlIGRlbGF5ZWQgcmVsYXRpdmUgdG8gdGhlCisrICAg ICAqICAgZW5jb2RlZCBpbnB1dC4KKysgICAgICoKKysgICAgICogQXVkaW86CisrICAgICAqICAg Rm9yIGVuY29kaW5nLCB0aGlzIGZpZWxkIGlzIHVudXNlZCAoc2VlIGluaXRpYWxfcGFkZGluZyku CisrICAgICAqCisrICAgICAqICAgRm9yIGRlY29kaW5nLCB0aGlzIGlzIHRoZSBudW1iZXIgb2Yg c2FtcGxlcyB0aGUgZGVjb2RlciBuZWVkcyB0bworKyAgICAgKiAgIG91dHB1dCBiZWZvcmUgdGhl IGRlY29kZXIncyBvdXRwdXQgaXMgdmFsaWQuIFdoZW4gc2Vla2luZywgeW91IHNob3VsZAorKyAg ICAgKiAgIHN0YXJ0IGRlY29kaW5nIHRoaXMgbWFueSBzYW1wbGVzIHByaW9yIHRvIHlvdXIgZGVz aXJlZCBzZWVrIHBvaW50LgorKyAgICAgKgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgbGli YXZjb2RlYy4KKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMuCisrICAgICAq LworKyAgICBpbnQgZGVsYXk7CisrCisrCisrICAgIC8qIHZpZGVvIG9ubHkgKi8KKysgICAgLyoq CisrICAgICAqIHBpY3R1cmUgd2lkdGggLyBoZWlnaHQuCisrICAgICAqCisrICAgICAqIEBub3Rl IFRob3NlIGZpZWxkcyBtYXkgbm90IG1hdGNoIHRoZSB2YWx1ZXMgb2YgdGhlIGxhc3QKKysgICAg ICogQVZGcmFtZSBvdXRwdXQgYnkgYXZjb2RlY19yZWNlaXZlX2ZyYW1lKCkgZHVlIGZyYW1lCisr ICAgICAqIHJlb3JkZXJpbmcuCisrICAgICAqCisrICAgICAqIC0gZW5jb2Rpbmc6IE1VU1QgYmUg c2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IE1heSBiZSBzZXQgYnkgdGhlIHVzZXIg YmVmb3JlIG9wZW5pbmcgdGhlIGRlY29kZXIgaWYga25vd24gZS5nLgorKyAgICAgKiAgICAgICAg ICAgICBmcm9tIHRoZSBjb250YWluZXIuIFNvbWUgZGVjb2RlcnMgd2lsbCByZXF1aXJlIHRoZSBk aW1lbnNpb25zCisrICAgICAqICAgICAgICAgICAgIHRvIGJlIHNldCBieSB0aGUgY2FsbGVyLiBE dXJpbmcgZGVjb2RpbmcsIHRoZSBkZWNvZGVyIG1heQorKyAgICAgKiAgICAgICAgICAgICBvdmVy d3JpdGUgdGhvc2UgdmFsdWVzIGFzIHJlcXVpcmVkIHdoaWxlIHBhcnNpbmcgdGhlIGRhdGEuCisr ICAgICAqLworKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKysKKysgICAgLyoqCisrICAgICAqIEJp dHN0cmVhbSB3aWR0aCAvIGhlaWdodCwgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHdpZHRoL2hlaWdo dCBlLmcuIHdoZW4KKysgICAgICogdGhlIGRlY29kZWQgZnJhbWUgaXMgY3JvcHBlZCBiZWZvcmUg YmVpbmcgb3V0cHV0IG9yIGxvd3JlcyBpcyBlbmFibGVkLgorKyAgICAgKgorKyAgICAgKiBAbm90 ZSBUaG9zZSBmaWVsZCBtYXkgbm90IG1hdGNoIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdAorKyAgICAg KiBBVkZyYW1lIG91dHB1dCBieSBhdmNvZGVjX3JlY2VpdmVfZnJhbWUoKSBkdWUgZnJhbWUKKysg ICAgICogcmVvcmRlcmluZy4KKysgICAgICoKKysgICAgICogLSBlbmNvZGluZzogdW51c2VkCisr ICAgICAqIC0gZGVjb2Rpbmc6IE1heSBiZSBzZXQgYnkgdGhlIHVzZXIgYmVmb3JlIG9wZW5pbmcg dGhlIGRlY29kZXIgaWYga25vd24KKysgICAgICogICAgICAgICAgICAgZS5nLiBmcm9tIHRoZSBj b250YWluZXIuIER1cmluZyBkZWNvZGluZywgdGhlIGRlY29kZXIgbWF5CisrICAgICAqICAgICAg ICAgICAgIG92ZXJ3cml0ZSB0aG9zZSB2YWx1ZXMgYXMgcmVxdWlyZWQgd2hpbGUgcGFyc2luZyB0 aGUgZGF0YS4KKysgICAgICovCisrICAgIGludCBjb2RlZF93aWR0aCwgY29kZWRfaGVpZ2h0Owor KworKyAgICAvKioKKysgICAgICogc2FtcGxlIGFzcGVjdCByYXRpbyAoMCBpZiB1bmtub3duKQor KyAgICAgKiBUaGF0IGlzIHRoZSB3aWR0aCBvZiBhIHBpeGVsIGRpdmlkZWQgYnkgdGhlIGhlaWdo dCBvZiB0aGUgcGl4ZWwuCisrICAgICAqIE51bWVyYXRvciBhbmQgZGVub21pbmF0b3IgbXVzdCBi ZSByZWxhdGl2ZWx5IHByaW1lIGFuZCBzbWFsbGVyIHRoYW4gMjU2IGZvciBzb21lIHZpZGVvIHN0 YW5kYXJkcy4KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVj b2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjLgorKyAgICAgKi8KKysgICAgQVZSYXRpb25hbCBzYW1w bGVfYXNwZWN0X3JhdGlvOworKworKyAgICAvKioKKysgICAgICogUGl4ZWwgZm9ybWF0LCBzZWUg QVZfUElYX0ZNVF94eHguCisrICAgICAqIE1heSBiZSBzZXQgYnkgdGhlIGRlbXV4ZXIgaWYga25v d24gZnJvbSBoZWFkZXJzLgorKyAgICAgKiBNYXkgYmUgb3ZlcnJpZGRlbiBieSB0aGUgZGVjb2Rl ciBpZiBpdCBrbm93cyBiZXR0ZXIuCisrICAgICAqCisrICAgICAqIEBub3RlIFRoaXMgZmllbGQg bWF5IG5vdCBtYXRjaCB0aGUgdmFsdWUgb2YgdGhlIGxhc3QKKysgICAgICogQVZGcmFtZSBvdXRw dXQgYnkgYXZjb2RlY19yZWNlaXZlX2ZyYW1lKCkgZHVlIGZyYW1lCisrICAgICAqIHJlb3JkZXJp bmcuCisrICAgICAqCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAt IGRlY29kaW5nOiBTZXQgYnkgdXNlciBpZiBrbm93biwgb3ZlcnJpZGRlbiBieSBsaWJhdmNvZGVj IHdoaWxlCisrICAgICAqICAgICAgICAgICAgIHBhcnNpbmcgdGhlIGRhdGEuCisrICAgICAqLwor KyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdDsKKysKKysgICAgLyoqCisrICAgICAqIE5v bWluYWwgdW5hY2NlbGVyYXRlZCBwaXhlbCBmb3JtYXQsIHNlZSBBVl9QSVhfRk1UX3h4eC4KKysg ICAgICogLSBlbmNvZGluZzogdW51c2VkLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgbGli YXZjb2RlYyBiZWZvcmUgY2FsbGluZyBnZXRfZm9ybWF0KCkKKysgICAgICovCisrICAgIGVudW0g QVZQaXhlbEZvcm1hdCBzd19waXhfZm10OworKworKyAgICAvKioKKysgICAgICogQ2hyb21hdGlj aXR5IGNvb3JkaW5hdGVzIG9mIHRoZSBzb3VyY2UgcHJpbWFyaWVzLgorKyAgICAgKiAtIGVuY29k aW5nOiBTZXQgYnkgdXNlcgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgbGliYXZjb2RlYwor KyAgICAgKi8KKysgICAgZW51bSBBVkNvbG9yUHJpbWFyaWVzIGNvbG9yX3ByaW1hcmllczsKKysK KysgICAgLyoqCisrICAgICAqIENvbG9yIFRyYW5zZmVyIENoYXJhY3RlcmlzdGljLgorKyAgICAg KiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlcgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgbGli YXZjb2RlYworKyAgICAgKi8KKysgICAgZW51bSBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp YyBjb2xvcl90cmM7CisrCisrICAgIC8qKgorKyAgICAgKiBZVVYgY29sb3JzcGFjZSB0eXBlLgor KyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlcgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQg YnkgbGliYXZjb2RlYworKyAgICAgKi8KKysgICAgZW51bSBBVkNvbG9yU3BhY2UgY29sb3JzcGFj ZTsKKysKKysgICAgLyoqCisrICAgICAqIE1QRUcgdnMgSlBFRyBZVVYgcmFuZ2UuCisrICAgICAq IC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG91dHB1dCBj b2xvciByYW5nZSB2YWx1ZSwKKysgICAgICogICBJZiBub3Qgc3BlY2lmaWVkLCBsaWJhdmNvZGVj IHNldHMgdGhlIGNvbG9yIHJhbmdlIGRlcGVuZGluZyBvbiB0aGUKKysgICAgICogICBvdXRwdXQg Zm9ybWF0LgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgbGliYXZjb2RlYywgY2FuIGJlIHNl dCBieSB0aGUgdXNlciB0byBwcm9wYWdhdGUgdGhlCisrICAgICAqICAgY29sb3IgcmFuZ2UgdG8g Y29tcG9uZW50cyByZWFkaW5nIGZyb20gdGhlIGRlY29kZXIgY29udGV4dC4KKysgICAgICovCisr ICAgIGVudW0gQVZDb2xvclJhbmdlIGNvbG9yX3JhbmdlOworKworKyAgICAvKioKKysgICAgICog VGhpcyBkZWZpbmVzIHRoZSBsb2NhdGlvbiBvZiBjaHJvbWEgc2FtcGxlcy4KKysgICAgICogLSBl bmNvZGluZzogU2V0IGJ5IHVzZXIKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29k ZWMKKysgICAgICovCisrICAgIGVudW0gQVZDaHJvbWFMb2NhdGlvbiBjaHJvbWFfc2FtcGxlX2xv Y2F0aW9uOworKworKyAgICAvKiogRmllbGQgb3JkZXIKKysgICAgICogLSBlbmNvZGluZzogc2V0 IGJ5IGxpYmF2Y29kZWMKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAq LworKyAgICBlbnVtIEFWRmllbGRPcmRlciBmaWVsZF9vcmRlcjsKKysKKysgICAgLyoqCisrICAg ICAqIG51bWJlciBvZiByZWZlcmVuY2UgZnJhbWVzCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBi eSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgbGF2Yy4KKysgICAgICovCisrICAg IGludCByZWZzOworKworKyAgICAvKioKKysgICAgICogU2l6ZSBvZiB0aGUgZnJhbWUgcmVvcmRl cmluZyBidWZmZXIgaW4gdGhlIGRlY29kZXIuCisrICAgICAqIEZvciBNUEVHLTIgaXQgaXMgMSBJ UEIgb3IgMCBsb3cgZGVsYXkgSVAuCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSBsaWJhdmNv ZGVjLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgbGliYXZjb2RlYy4KKysgICAgICovCisr ICAgIGludCBoYXNfYl9mcmFtZXM7CisrCisrICAgIC8qKgorKyAgICAgKiBzbGljZSBmbGFncwor KyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IHVz ZXIuCisrICAgICAqLworKyAgICBpbnQgc2xpY2VfZmxhZ3M7CisrI2RlZmluZSBTTElDRV9GTEFH X0NPREVEX09SREVSICAgIDB4MDAwMSAvLy88IGRyYXdfaG9yaXpfYmFuZCgpIGlzIGNhbGxlZCBp biBjb2RlZCBvcmRlciBpbnN0ZWFkIG9mIGRpc3BsYXkKKysjZGVmaW5lIFNMSUNFX0ZMQUdfQUxM T1dfRklFTEQgICAgMHgwMDAyIC8vLzwgYWxsb3cgZHJhd19ob3Jpel9iYW5kKCkgd2l0aCBmaWVs ZCBzbGljZXMgKE1QRUctMiBmaWVsZCBwaWNzKQorKyNkZWZpbmUgU0xJQ0VfRkxBR19BTExPV19Q TEFORSAgICAweDAwMDQgLy8vPCBhbGxvdyBkcmF3X2hvcml6X2JhbmQoKSB3aXRoIDEgY29tcG9u ZW50IGF0IGEgdGltZSAoU1ZRMSkKKysKKysgICAgLyoqCisrICAgICAqIElmIG5vbiBOVUxMLCAn ZHJhd19ob3Jpel9iYW5kJyBpcyBjYWxsZWQgYnkgdGhlIGxpYmF2Y29kZWMKKysgICAgICogZGVj b2RlciB0byBkcmF3IGEgaG9yaXpvbnRhbCBiYW5kLiBJdCBpbXByb3ZlcyBjYWNoZSB1c2FnZS4g Tm90CisrICAgICAqIGFsbCBjb2RlY3MgY2FuIGRvIHRoYXQuIFlvdSBtdXN0IGNoZWNrIHRoZSBj b2RlYyBjYXBhYmlsaXRpZXMKKysgICAgICogYmVmb3JlaGFuZC4KKysgICAgICogV2hlbiBtdWx0 aXRocmVhZGluZyBpcyB1c2VkLCBpdCBtYXkgYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFk cworKyAgICAgKiBhdCB0aGUgc2FtZSB0aW1lOyB0aHJlYWRzIG1pZ2h0IGRyYXcgZGlmZmVyZW50 IHBhcnRzIG9mIHRoZSBzYW1lIEFWRnJhbWUsCisrICAgICAqIG9yIG11bHRpcGxlIEFWRnJhbWVz LCBhbmQgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgc2xpY2VzIHdpbGwgYmUgZHJhd24KKysg ICAgICogaW4gb3JkZXIuCisrICAgICAqIFRoZSBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgYnkgaGFy ZHdhcmUgYWNjZWxlcmF0aW9uIEFQSXMuCisrICAgICAqIEl0IGlzIGNhbGxlZCBhdCBsZWFzdCBv bmNlIGR1cmluZyBmcmFtZSBkZWNvZGluZyB0byBwYXNzCisrICAgICAqIHRoZSBkYXRhIG5lZWRl ZCBmb3IgaGFyZHdhcmUgcmVuZGVyLgorKyAgICAgKiBJbiB0aGF0IG1vZGUgaW5zdGVhZCBvZiBw aXhlbCBkYXRhLCBBVkZyYW1lIHBvaW50cyB0bworKyAgICAgKiBhIHN0cnVjdHVyZSBzcGVjaWZp YyB0byB0aGUgYWNjZWxlcmF0aW9uIEFQSS4gVGhlIGFwcGxpY2F0aW9uCisrICAgICAqIHJlYWRz IHRoZSBzdHJ1Y3R1cmUgYW5kIGNhbiBjaGFuZ2Ugc29tZSBmaWVsZHMgdG8gaW5kaWNhdGUgcHJv Z3Jlc3MKKysgICAgICogb3IgbWFyayBzdGF0ZS4KKysgICAgICogLSBlbmNvZGluZzogdW51c2Vk CisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiBAcGFyYW0gaGVpZ2h0 IHRoZSBoZWlnaHQgb2YgdGhlIHNsaWNlCisrICAgICAqIEBwYXJhbSB5IHRoZSB5IHBvc2l0aW9u IG9mIHRoZSBzbGljZQorKyAgICAgKiBAcGFyYW0gdHlwZSAxLT50b3AgZmllbGQsIDItPmJvdHRv bSBmaWVsZCwgMy0+ZnJhbWUKKysgICAgICogQHBhcmFtIG9mZnNldCBvZmZzZXQgaW50byB0aGUg QVZGcmFtZS5kYXRhIGZyb20gd2hpY2ggdGhlIHNsaWNlIHNob3VsZCBiZSByZWFkCisrICAgICAq LworKyAgICB2b2lkICgqZHJhd19ob3Jpel9iYW5kKShzdHJ1Y3QgQVZDb2RlY0NvbnRleHQgKnMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKnNyYywgaW50IG9m ZnNldFtBVl9OVU1fREFUQV9QT0lOVEVSU10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCB5LCBpbnQgdHlwZSwgaW50IGhlaWdodCk7CisrCisrICAgIC8qKgorKyAgICAgKiBDYWxs YmFjayB0byBuZWdvdGlhdGUgdGhlIHBpeGVsIGZvcm1hdC4gRGVjb2Rpbmcgb25seSwgbWF5IGJl IHNldCBieSB0aGUKKysgICAgICogY2FsbGVyIGJlZm9yZSBhdmNvZGVjX29wZW4yKCkuCisrICAg ICAqCisrICAgICAqIENhbGxlZCBieSBzb21lIGRlY29kZXJzIHRvIHNlbGVjdCB0aGUgcGl4ZWwg Zm9ybWF0IHRoYXQgd2lsbCBiZSB1c2VkIGZvcgorKyAgICAgKiB0aGUgb3V0cHV0IGZyYW1lcy4g VGhpcyBpcyBtYWlubHkgdXNlZCB0byBzZXQgdXAgaGFyZHdhcmUgYWNjZWxlcmF0aW9uLAorKyAg ICAgKiB0aGVuIHRoZSBwcm92aWRlZCBmb3JtYXQgbGlzdCBjb250YWlucyB0aGUgY29ycmVzcG9u ZGluZyBod2FjY2VsIHBpeGVsCisrICAgICAqIGZvcm1hdHMgYWxvbmdzaWRlIHRoZSAic29mdHdh cmUiIG9uZS4gVGhlIHNvZnR3YXJlIHBpeGVsIGZvcm1hdCBtYXkgYWxzbworKyAgICAgKiBiZSBy ZXRyaWV2ZWQgZnJvbSBccmVmIHN3X3BpeF9mbXQuCisrICAgICAqCisrICAgICAqIFRoaXMgY2Fs bGJhY2sgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgY29kZWQgZnJhbWUgcHJvcGVydGllcyAoc3Vj aCBhcworKyAgICAgKiByZXNvbHV0aW9uLCBwaXhlbCBmb3JtYXQsIGV0Yy4pIGNoYW5nZSBhbmQg bW9yZSB0aGFuIG9uZSBvdXRwdXQgZm9ybWF0IGlzCisrICAgICAqIHN1cHBvcnRlZCBmb3IgdGhv c2UgbmV3IHByb3BlcnRpZXMuIElmIGEgaGFyZHdhcmUgcGl4ZWwgZm9ybWF0IGlzIGNob3Nlbgor KyAgICAgKiBhbmQgaW5pdGlhbGl6YXRpb24gZm9yIGl0IGZhaWxzLCB0aGUgY2FsbGJhY2sgbWF5 IGJlIGNhbGxlZCBhZ2FpbgorKyAgICAgKiBpbW1lZGlhdGVseS4KKysgICAgICoKKysgICAgICog VGhpcyBjYWxsYmFjayBtYXkgYmUgY2FsbGVkIGZyb20gZGlmZmVyZW50IHRocmVhZHMgaWYgdGhl IGRlY29kZXIgaXMKKysgICAgICogbXVsdGktdGhyZWFkZWQsIGJ1dCBub3QgZnJvbSBtb3JlIHRo YW4gb25lIHRocmVhZCBzaW11bHRhbmVvdXNseS4KKysgICAgICoKKysgICAgICogQHBhcmFtIGZt dCBsaXN0IG9mIGZvcm1hdHMgd2hpY2ggbWF5IGJlIHVzZWQgaW4gdGhlIGN1cnJlbnQKKysgICAg ICogICAgICAgICAgICBjb25maWd1cmF0aW9uLCB0ZXJtaW5hdGVkIGJ5IEFWX1BJWF9GTVRfTk9O RS4KKysgICAgICogQHdhcm5pbmcgQmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmIHRoZSBjYWxsYmFj ayByZXR1cm5zIGEgdmFsdWUgb3RoZXIKKysgICAgICogICAgICAgICAgdGhhbiBvbmUgb2YgdGhl IGZvcm1hdHMgaW4gZm10IG9yIEFWX1BJWF9GTVRfTk9ORS4KKysgICAgICogQHJldHVybiB0aGUg Y2hvc2VuIGZvcm1hdCBvciBBVl9QSVhfRk1UX05PTkUKKysgICAgICovCisrICAgIGVudW0gQVZQ aXhlbEZvcm1hdCAoKmdldF9mb3JtYXQpKHN0cnVjdCBBVkNvZGVjQ29udGV4dCAqcywgY29uc3Qg ZW51bSBBVlBpeGVsRm9ybWF0ICogZm10KTsKKysKKysgICAgLyoqCisrICAgICAqIG1heGltdW0g bnVtYmVyIG9mIEItZnJhbWVzIGJldHdlZW4gbm9uLUItZnJhbWVzCisrICAgICAqIE5vdGU6IFRo ZSBvdXRwdXQgd2lsbCBiZSBkZWxheWVkIGJ5IG1heF9iX2ZyYW1lcysxIHJlbGF0aXZlIHRvIHRo ZSBpbnB1dC4KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVj b2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IG1heF9iX2ZyYW1lczsKKysKKysgICAg LyoqCisrICAgICAqIHFzY2FsZSBmYWN0b3IgYmV0d2VlbiBJUCBhbmQgQi1mcmFtZXMKKysgICAg ICogSWYgPiAwIHRoZW4gdGhlIGxhc3QgUC1mcmFtZSBxdWFudGl6ZXIgd2lsbCBiZSB1c2VkIChx PSBsYXN0cF9xKmZhY3RvcitvZmZzZXQpLgorKyAgICAgKiBJZiA8IDAgdGhlbiBub3JtYWwgcmF0 ZWNvbnRyb2wgd2lsbCBiZSBkb25lIChxPSAtbm9ybWFsX3EqZmFjdG9yK29mZnNldCkuCisrICAg ICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQK KysgICAgICovCisrICAgIGZsb2F0IGJfcXVhbnRfZmFjdG9yOworKworKyAgICAvKioKKysgICAg ICogcXNjYWxlIG9mZnNldCBiZXR3ZWVuIElQIGFuZCBCLWZyYW1lcworKyAgICAgKiAtIGVuY29k aW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLwor KyAgICBmbG9hdCBiX3F1YW50X29mZnNldDsKKysKKysgICAgLyoqCisrICAgICAqIHFzY2FsZSBm YWN0b3IgYmV0d2VlbiBQLSBhbmQgSS1mcmFtZXMKKysgICAgICogSWYgPiAwIHRoZW4gdGhlIGxh c3QgUC1mcmFtZSBxdWFudGl6ZXIgd2lsbCBiZSB1c2VkIChxID0gbGFzdHBfcSAqIGZhY3RvciAr IG9mZnNldCkuCisrICAgICAqIElmIDwgMCB0aGVuIG5vcm1hbCByYXRlY29udHJvbCB3aWxsIGJl IGRvbmUgKHE9IC1ub3JtYWxfcSpmYWN0b3Irb2Zmc2V0KS4KKysgICAgICogLSBlbmNvZGluZzog U2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAg ZmxvYXQgaV9xdWFudF9mYWN0b3I7CisrCisrICAgIC8qKgorKyAgICAgKiBxc2NhbGUgb2Zmc2V0 IGJldHdlZW4gUCBhbmQgSS1mcmFtZXMKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIu CisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgZmxvYXQgaV9xdWFu dF9vZmZzZXQ7CisrCisrICAgIC8qKgorKyAgICAgKiBsdW1pbmFuY2UgbWFza2luZyAoMC0+IGRp c2FibGVkKQorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNv ZGluZzogdW51c2VkCisrICAgICAqLworKyAgICBmbG9hdCBsdW1pX21hc2tpbmc7CisrCisrICAg IC8qKgorKyAgICAgKiB0ZW1wb3JhcnkgY29tcGxleGl0eSBtYXNraW5nICgwLT4gZGlzYWJsZWQp CisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1 bnVzZWQKKysgICAgICovCisrICAgIGZsb2F0IHRlbXBvcmFsX2NwbHhfbWFza2luZzsKKysKKysg ICAgLyoqCisrICAgICAqIHNwYXRpYWwgY29tcGxleGl0eSBtYXNraW5nICgwLT4gZGlzYWJsZWQp CisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1 bnVzZWQKKysgICAgICovCisrICAgIGZsb2F0IHNwYXRpYWxfY3BseF9tYXNraW5nOworKworKyAg ICAvKioKKysgICAgICogcCBibG9jayBtYXNraW5nICgwLT4gZGlzYWJsZWQpCisrICAgICAqIC0g ZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAg ICovCisrICAgIGZsb2F0IHBfbWFza2luZzsKKysKKysgICAgLyoqCisrICAgICAqIGRhcmtuZXNz IG1hc2tpbmcgKDAtPiBkaXNhYmxlZCkKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIu CisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgZmxvYXQgZGFya19t YXNraW5nOworKworKyAgICAvKioKKysgICAgICogbm9pc2UgdnMuIHNzZSB3ZWlnaHQgZm9yIHRo ZSBuc3NlIGNvbXBhcmlzb24gZnVuY3Rpb24KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVz ZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgIGludCBuc3Nl X3dlaWdodDsKKysKKysgICAgLyoqCisrICAgICAqIG1vdGlvbiBlc3RpbWF0aW9uIGNvbXBhcmlz b24gZnVuY3Rpb24KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0g ZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IG1lX2NtcDsKKysgICAgLyoqCisr ICAgICAqIHN1YnBpeGVsIG1vdGlvbiBlc3RpbWF0aW9uIGNvbXBhcmlzb24gZnVuY3Rpb24KKysg ICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNl ZAorKyAgICAgKi8KKysgICAgaW50IG1lX3N1Yl9jbXA7CisrICAgIC8qKgorKyAgICAgKiBtYWNy b2Jsb2NrIGNvbXBhcmlzb24gZnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgeWV0KQorKyAgICAgKiAt IGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAg ICAqLworKyAgICBpbnQgbWJfY21wOworKyAgICAvKioKKysgICAgICogaW50ZXJsYWNlZCBEQ1Qg Y29tcGFyaXNvbiBmdW5jdGlvbgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysg ICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgaWxkY3RfY21wOwor KyNkZWZpbmUgRkZfQ01QX1NBRCAgICAgICAgICAwCisrI2RlZmluZSBGRl9DTVBfU1NFICAgICAg ICAgIDEKKysjZGVmaW5lIEZGX0NNUF9TQVREICAgICAgICAgMgorKyNkZWZpbmUgRkZfQ01QX0RD VCAgICAgICAgICAzCisrI2RlZmluZSBGRl9DTVBfUFNOUiAgICAgICAgIDQKKysjZGVmaW5lIEZG X0NNUF9CSVQgICAgICAgICAgNQorKyNkZWZpbmUgRkZfQ01QX1JEICAgICAgICAgICA2CisrI2Rl ZmluZSBGRl9DTVBfWkVSTyAgICAgICAgIDcKKysjZGVmaW5lIEZGX0NNUF9WU0FEICAgICAgICAg OAorKyNkZWZpbmUgRkZfQ01QX1ZTU0UgICAgICAgICA5CisrI2RlZmluZSBGRl9DTVBfTlNTRSAg ICAgICAgIDEwCisrI2RlZmluZSBGRl9DTVBfVzUzICAgICAgICAgIDExCisrI2RlZmluZSBGRl9D TVBfVzk3ICAgICAgICAgIDEyCisrI2RlZmluZSBGRl9DTVBfRENUTUFYICAgICAgIDEzCisrI2Rl ZmluZSBGRl9DTVBfRENUMjY0ICAgICAgIDE0CisrI2RlZmluZSBGRl9DTVBfTUVESUFOX1NBRCAg IDE1CisrI2RlZmluZSBGRl9DTVBfQ0hST01BICAgICAgIDI1NgorKworKyAgICAvKioKKysgICAg ICogTUUgZGlhbW9uZCBzaXplICYgc2hhcGUKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVz ZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IGRpYV9z aXplOworKworKyAgICAvKioKKysgICAgICogYW1vdW50IG9mIHByZXZpb3VzIE1WIHByZWRpY3Rv cnMgKDJhKzEgeCAyYSsxIHNxdWFyZSkKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIu CisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IGxhc3RfcHJl ZGljdG9yX2NvdW50OworKworKyAgICAvKioKKysgICAgICogbW90aW9uIGVzdGltYXRpb24gcHJl cGFzcyBjb21wYXJpc29uIGZ1bmN0aW9uCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2Vy LgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGludCBtZV9wcmVf Y21wOworKworKyAgICAvKioKKysgICAgICogTUUgcHJlcGFzcyBkaWFtb25kIHNpemUgJiBzaGFw ZQorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzog dW51c2VkCisrICAgICAqLworKyAgICBpbnQgcHJlX2RpYV9zaXplOworKworKyAgICAvKioKKysg ICAgICogc3VicGVsIE1FIHF1YWxpdHkKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIu CisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IG1lX3N1YnBl bF9xdWFsaXR5OworKworKyAgICAvKioKKysgICAgICogbWF4aW11bSBtb3Rpb24gZXN0aW1hdGlv biBzZWFyY2ggcmFuZ2UgaW4gc3VicGVsIHVuaXRzCisrICAgICAqIElmIDAgdGhlbiBubyBsaW1p dC4KKysgICAgICoKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0g ZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IG1lX3JhbmdlOworKworKyAgICAv KioKKysgICAgICogbWFjcm9ibG9jayBkZWNpc2lvbiBtb2RlCisrICAgICAqIC0gZW5jb2Rpbmc6 IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAg IGludCBtYl9kZWNpc2lvbjsKKysjZGVmaW5lIEZGX01CX0RFQ0lTSU9OX1NJTVBMRSAwICAgICAg ICAvLy88IHVzZXMgbWJfY21wCisrI2RlZmluZSBGRl9NQl9ERUNJU0lPTl9CSVRTICAgMSAgICAg ICAgLy8vPCBjaG9vc2VzIHRoZSBvbmUgd2hpY2ggbmVlZHMgdGhlIGZld2VzdCBiaXRzCisrI2Rl ZmluZSBGRl9NQl9ERUNJU0lPTl9SRCAgICAgMiAgICAgICAgLy8vPCByYXRlIGRpc3RvcnRpb24K KysKKysgICAgLyoqCisrICAgICAqIGN1c3RvbSBpbnRyYSBxdWFudGl6YXRpb24gbWF0cml4Cisr ICAgICAqIE11c3QgYmUgYWxsb2NhdGVkIHdpdGggdGhlIGF2X21hbGxvYygpIGZhbWlseSBvZiBm dW5jdGlvbnMsIGFuZCB3aWxsIGJlIGZyZWVkIGluCisrICAgICAqIGF2Y29kZWNfZnJlZV9jb250 ZXh0KCkuCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldC9hbGxvY2F0ZWQgYnkgdXNlciwgZnJlZWQg YnkgbGliYXZjb2RlYy4gQ2FuIGJlIE5VTEwuCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldC9hbGxv Y2F0ZWQvZnJlZWQgYnkgbGliYXZjb2RlYy4KKysgICAgICovCisrICAgIHVpbnQxNl90ICppbnRy YV9tYXRyaXg7CisrCisrICAgIC8qKgorKyAgICAgKiBjdXN0b20gaW50ZXIgcXVhbnRpemF0aW9u IG1hdHJpeAorKyAgICAgKiBNdXN0IGJlIGFsbG9jYXRlZCB3aXRoIHRoZSBhdl9tYWxsb2MoKSBm YW1pbHkgb2YgZnVuY3Rpb25zLCBhbmQgd2lsbCBiZSBmcmVlZCBpbgorKyAgICAgKiBhdmNvZGVj X2ZyZWVfY29udGV4dCgpLgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQvYWxsb2NhdGVkIGJ5IHVz ZXIsIGZyZWVkIGJ5IGxpYmF2Y29kZWMuIENhbiBiZSBOVUxMLgorKyAgICAgKiAtIGRlY29kaW5n OiBTZXQvYWxsb2NhdGVkL2ZyZWVkIGJ5IGxpYmF2Y29kZWMuCisrICAgICAqLworKyAgICB1aW50 MTZfdCAqaW50ZXJfbWF0cml4OworKworKyAgICAvKioKKysgICAgICogY3VzdG9tIGludHJhIHF1 YW50aXphdGlvbiBtYXRyaXgKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIsIGNhbiBi ZSBOVUxMLgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQuCisrICAgICAqLworKyAgICB1aW50 MTZfdCAqY2hyb21hX2ludHJhX21hdHJpeDsKKysKKysjaWYgRkZfQVBJX0lOVFJBX0RDX1BSRUNJ U0lPTgorKyAgICAvKioKKysgICAgICogcHJlY2lzaW9uIG9mIHRoZSBpbnRyYSBEQyBjb2VmZmlj aWVudCAtIDgKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVj b2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjCisrICAgICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgTVBF Ry0yIGVuY29kZXIncyBwcml2YXRlIG9wdGlvbiAiaW50cmFfZGNfcHJlY2lzaW9uIiBpbnN0ZWFk LgorKyAgICAgKi8KKysgICAgYXR0cmlidXRlX2RlcHJlY2F0ZWQKKysgICAgaW50IGludHJhX2Rj X3ByZWNpc2lvbjsKKysjZW5kaWYKKysKKysgICAgLyoqCisrICAgICAqIG1pbmltdW0gTUIgTGFn cmFuZ2UgbXVsdGlwbGllcgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAg ICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgbWJfbG1pbjsKKysKKysg ICAgLyoqCisrICAgICAqIG1heGltdW0gTUIgTGFncmFuZ2UgbXVsdGlwbGllcgorKyAgICAgKiAt IGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAg ICAqLworKyAgICBpbnQgbWJfbG1heDsKKysKKysgICAgLyoqCisrICAgICAqIC0gZW5jb2Rpbmc6 IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAg IGludCBiaWRpcl9yZWZpbmU7CisrCisrICAgIC8qKgorKyAgICAgKiBtaW5pbXVtIEdPUCBzaXpl CisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1 bnVzZWQKKysgICAgICovCisrICAgIGludCBrZXlpbnRfbWluOworKworKyAgICAvKioKKysgICAg ICogdGhlIG51bWJlciBvZiBwaWN0dXJlcyBpbiBhIGdyb3VwIG9mIHBpY3R1cmVzLCBvciAwIGZv ciBpbnRyYV9vbmx5CisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAt IGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGludCBnb3Bfc2l6ZTsKKysKKysgICAg LyoqCisrICAgICAqIE5vdGU6IFZhbHVlIGRlcGVuZHMgdXBvbiB0aGUgY29tcGFyZSBmdW5jdGlv biB1c2VkIGZvciBmdWxscGVsIE1FLgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4K KysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgbXYwX3RocmVz aG9sZDsKKysKKysgICAgLyoqCisrICAgICAqIE51bWJlciBvZiBzbGljZXMuCisrICAgICAqIElu ZGljYXRlcyBudW1iZXIgb2YgcGljdHVyZSBzdWJkaXZpc2lvbnMuIFVzZWQgZm9yIHBhcmFsbGVs aXplZAorKyAgICAgKiBkZWNvZGluZy4KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIK KysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgc2xpY2VzOwor KworKyAgICAvKiBhdWRpbyBvbmx5ICovCisrICAgIGludCBzYW1wbGVfcmF0ZTsgLy8vPCBzYW1w bGVzIHBlciBzZWNvbmQKKysKKysgICAgLyoqCisrICAgICAqIGF1ZGlvIHNhbXBsZSBmb3JtYXQK KysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IFNl dCBieSBsaWJhdmNvZGVjLgorKyAgICAgKi8KKysgICAgZW51bSBBVlNhbXBsZUZvcm1hdCBzYW1w bGVfZm10OyAgLy8vPCBzYW1wbGUgZm9ybWF0CisrCisrICAgIC8qKgorKyAgICAgKiBBdWRpbyBj aGFubmVsIGxheW91dC4KKysgICAgICogLSBlbmNvZGluZzogbXVzdCBiZSBzZXQgYnkgdGhlIGNh bGxlciwgdG8gb25lIG9mIEFWQ29kZWMuY2hfbGF5b3V0cy4KKysgICAgICogLSBkZWNvZGluZzog bWF5IGJlIHNldCBieSB0aGUgY2FsbGVyIGlmIGtub3duIGUuZy4gZnJvbSB0aGUgY29udGFpbmVy LgorKyAgICAgKiAgICAgICAgICAgICBUaGUgZGVjb2RlciBjYW4gdGhlbiBvdmVycmlkZSBkdXJp bmcgZGVjb2RpbmcgYXMgbmVlZGVkLgorKyAgICAgKi8KKysgICAgQVZDaGFubmVsTGF5b3V0IGNo X2xheW91dDsKKysKKysgICAgLyoqCisrICAgICAqIE51bWJlciBvZiBzYW1wbGVzIHBlciBjaGFu bmVsIGluIGFuIGF1ZGlvIGZyYW1lLgorKyAgICAgKgorKyAgICAgKiAtIGVuY29kaW5nOiBtYXkg YmUgc2V0IGJ5IHRoZSB1c2VyIGJlZm9yZSBjYWxsaW5nIGF2Y29kZWNfb3BlbjIoKSwgYW5kCisr ICAgICAqICAgbGliYXZjb2RlYyBtYXkgdGhlbiBvdmVyd3JpdGUgaXQgaWYgbmVlZGVkLiBFYWNo IHN1Ym1pdHRlZCBmcmFtZQorKyAgICAgKiAgIGV4Y2VwdCB0aGUgbGFzdCBtdXN0IGNvbnRhaW4g ZXhhY3RseSBmcmFtZV9zaXplIHNhbXBsZXMgcGVyIGNoYW5uZWwuCisrICAgICAqICAgTWF5IGJl IDAgd2hlbiB0aGUgY29kZWMgaGFzIEFWX0NPREVDX0NBUF9WQVJJQUJMRV9GUkFNRV9TSVpFIHNl dCwgZXhjZXB0CisrICAgICAqICAgd2hlbiBBVl9DT0RFQ19GTEFHMl9GSVhFRF9GUkFNRV9TSVpF IGlzIHJlcXVlc3RlZCwgdGhlbiB0aGUKKysgICAgICogICBmcmFtZSBzaXplIGlzIG5vdCByZXN0 cmljdGVkLgorKyAgICAgKiAtIGRlY29kaW5nOiBtYXkgYmUgc2V0IGJ5IHNvbWUgZGVjb2RlcnMg dG8gaW5kaWNhdGUgY29uc3RhbnQgZnJhbWUgc2l6ZQorKyAgICAgKi8KKysgICAgaW50IGZyYW1l X3NpemU7CisrCisrICAgIC8qIFRoZSBmb2xsb3dpbmcgZGF0YSBzaG91bGQgbm90IGJlIGluaXRp YWxpemVkLiAqLworKyAgICAvKioKKysgICAgICogbnVtYmVyIG9mIGJ5dGVzIHBlciBwYWNrZXQg aWYgY29uc3RhbnQgYW5kIGtub3duIG9yIDAKKysgICAgICogVXNlZCBieSBzb21lIFdBViBiYXNl ZCBhdWRpbyBjb2RlY3MuCisrICAgICAqLworKyAgICBpbnQgYmxvY2tfYWxpZ247CisrCisrICAg IC8qKgorKyAgICAgKiBBdWRpbyBjdXRvZmYgYmFuZHdpZHRoICgwIG1lYW5zICJhdXRvbWF0aWMi KQorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzog dW51c2VkCisrICAgICAqLworKyAgICBpbnQgY3V0b2ZmOworKworKyAgICAvKioKKysgICAgICog VHlwZSBvZiBzZXJ2aWNlIHRoYXQgdGhlIGF1ZGlvIHN0cmVhbSBjb252ZXlzLgorKyAgICAgKiAt IGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2 Y29kZWMuCisrICAgICAqLworKyAgICBlbnVtIEFWQXVkaW9TZXJ2aWNlVHlwZSBhdWRpb19zZXJ2 aWNlX3R5cGU7CisrCisrICAgIC8qKgorKyAgICAgKiBkZXNpcmVkIHNhbXBsZSBmb3JtYXQKKysg ICAgICogLSBlbmNvZGluZzogTm90IHVzZWQuCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1 c2VyLgorKyAgICAgKiBEZWNvZGVyIHdpbGwgZGVjb2RlIHRvIHRoaXMgZm9ybWF0IGlmIGl0IGNh bi4KKysgICAgICovCisrICAgIGVudW0gQVZTYW1wbGVGb3JtYXQgcmVxdWVzdF9zYW1wbGVfZm10 OworKworKyAgICAvKioKKysgICAgICogQXVkaW8gb25seS4gVGhlIG51bWJlciBvZiAicHJpbWlu ZyIgc2FtcGxlcyAocGFkZGluZykgaW5zZXJ0ZWQgYnkgdGhlCisrICAgICAqIGVuY29kZXIgYXQg dGhlIGJlZ2lubmluZyBvZiB0aGUgYXVkaW8uIEkuZS4gdGhpcyBudW1iZXIgb2YgbGVhZGluZwor KyAgICAgKiBkZWNvZGVkIHNhbXBsZXMgbXVzdCBiZSBkaXNjYXJkZWQgYnkgdGhlIGNhbGxlciB0 byBnZXQgdGhlIG9yaWdpbmFsIGF1ZGlvCisrICAgICAqIHdpdGhvdXQgbGVhZGluZyBwYWRkaW5n LgorKyAgICAgKgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBlbmNvZGlu ZzogU2V0IGJ5IGxpYmF2Y29kZWMuIFRoZSB0aW1lc3RhbXBzIG9uIHRoZSBvdXRwdXQgcGFja2V0 cyBhcmUKKysgICAgICogICAgICAgICAgICAgYWRqdXN0ZWQgYnkgdGhlIGVuY29kZXIgc28gdGhh dCB0aGV5IGFsd2F5cyByZWZlciB0byB0aGUKKysgICAgICogICAgICAgICAgICAgZmlyc3Qgc2Ft cGxlIG9mIHRoZSBkYXRhIGFjdHVhbGx5IGNvbnRhaW5lZCBpbiB0aGUgcGFja2V0LAorKyAgICAg KiAgICAgICAgICAgICBpbmNsdWRpbmcgYW55IGFkZGVkIHBhZGRpbmcuICBFLmcuIGlmIHRoZSB0 aW1lYmFzZSBpcworKyAgICAgKiAgICAgICAgICAgICAxL3NhbXBsZXJhdGUgYW5kIHRoZSB0aW1l c3RhbXAgb2YgdGhlIGZpcnN0IGlucHV0IHNhbXBsZSBpcworKyAgICAgKiAgICAgICAgICAgICAw LCB0aGUgdGltZXN0YW1wIG9mIHRoZSBmaXJzdCBvdXRwdXQgcGFja2V0IHdpbGwgYmUKKysgICAg ICogICAgICAgICAgICAgLWluaXRpYWxfcGFkZGluZy4KKysgICAgICovCisrICAgIGludCBpbml0 aWFsX3BhZGRpbmc7CisrCisrICAgIC8qKgorKyAgICAgKiBBdWRpbyBvbmx5LiBUaGUgYW1vdW50 IG9mIHBhZGRpbmcgKGluIHNhbXBsZXMpIGFwcGVuZGVkIGJ5IHRoZSBlbmNvZGVyIHRvCisrICAg ICAqIHRoZSBlbmQgb2YgdGhlIGF1ZGlvLiBJLmUuIHRoaXMgbnVtYmVyIG9mIGRlY29kZWQgc2Ft cGxlcyBtdXN0IGJlCisrICAgICAqIGRpc2NhcmRlZCBieSB0aGUgY2FsbGVyIGZyb20gdGhlIGVu ZCBvZiB0aGUgc3RyZWFtIHRvIGdldCB0aGUgb3JpZ2luYWwKKysgICAgICogYXVkaW8gd2l0aG91 dCBhbnkgdHJhaWxpbmcgcGFkZGluZy4KKysgICAgICoKKysgICAgICogLSBkZWNvZGluZzogdW51 c2VkCisrICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IHRyYWls aW5nX3BhZGRpbmc7CisrCisrICAgIC8qKgorKyAgICAgKiBOdW1iZXIgb2Ygc2FtcGxlcyB0byBz a2lwIGFmdGVyIGEgZGlzY29udGludWl0eQorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysg ICAgICogLSBlbmNvZGluZzogc2V0IGJ5IGxpYmF2Y29kZWMKKysgICAgICovCisrICAgIGludCBz ZWVrX3ByZXJvbGw7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxl ZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggZnJhbWUgdG8gZ2V0IGRhdGEKKysgICAgICogYnVm ZmVyKHMpIGZvciBpdC4gVGhlcmUgbWF5IGJlIG9uZSBjb250aWd1b3VzIGJ1ZmZlciBmb3IgYWxs IHRoZSBkYXRhIG9yCisrICAgICAqIHRoZXJlIG1heSBiZSBhIGJ1ZmZlciBwZXIgZWFjaCBkYXRh IHBsYW5lIG9yIGFueXRoaW5nIGluIGJldHdlZW4uIFdoYXQKKysgICAgICogdGhpcyBtZWFucyBp cywgeW91IG1heSBzZXQgaG93ZXZlciBtYW55IGVudHJpZXMgaW4gYnVmW10geW91IGZlZWwgbmVj ZXNzYXJ5LgorKyAgICAgKiBFYWNoIGJ1ZmZlciBtdXN0IGJlIHJlZmVyZW5jZS1jb3VudGVkIHVz aW5nIHRoZSBBVkJ1ZmZlciBBUEkgKHNlZSBkZXNjcmlwdGlvbgorKyAgICAgKiBvZiBidWZbXSBi ZWxvdykuCisrICAgICAqCisrICAgICAqIFRoZSBmb2xsb3dpbmcgZmllbGRzIHdpbGwgYmUgc2V0 IGluIHRoZSBmcmFtZSBiZWZvcmUgdGhpcyBjYWxsYmFjayBpcworKyAgICAgKiBjYWxsZWQ6Cisr ICAgICAqIC0gZm9ybWF0CisrICAgICAqIC0gd2lkdGgsIGhlaWdodCAodmlkZW8gb25seSkKKysg ICAgICogLSBzYW1wbGVfcmF0ZSwgY2hhbm5lbF9sYXlvdXQsIG5iX3NhbXBsZXMgKGF1ZGlvIG9u bHkpCisrICAgICAqIFRoZWlyIHZhbHVlcyBtYXkgZGlmZmVyIGZyb20gdGhlIGNvcnJlc3BvbmRp bmcgdmFsdWVzIGluCisrICAgICAqIEFWQ29kZWNDb250ZXh0LiBUaGlzIGNhbGxiYWNrIG11c3Qg dXNlIHRoZSBmcmFtZSB2YWx1ZXMsIG5vdCB0aGUgY29kZWMKKysgICAgICogY29udGV4dCB2YWx1 ZXMsIHRvIGNhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUuCisrICAgICAqCisrICAg ICAqIFRoaXMgY2FsbGJhY2sgbXVzdCBmaWxsIHRoZSBmb2xsb3dpbmcgZmllbGRzIGluIHRoZSBm cmFtZToKKysgICAgICogLSBkYXRhW10KKysgICAgICogLSBsaW5lc2l6ZVtdCisrICAgICAqIC0g ZXh0ZW5kZWRfZGF0YToKKysgICAgICogICAqIGlmIHRoZSBkYXRhIGlzIHBsYW5hciBhdWRpbyB3 aXRoIG1vcmUgdGhhbiA4IGNoYW5uZWxzLCB0aGVuIHRoaXMKKysgICAgICogICAgIGNhbGxiYWNr IG11c3QgYWxsb2NhdGUgYW5kIGZpbGwgZXh0ZW5kZWRfZGF0YSB0byBjb250YWluIGFsbCBwb2lu dGVycworKyAgICAgKiAgICAgdG8gYWxsIGRhdGEgcGxhbmVzLiBkYXRhW10gbXVzdCBob2xkIGFz IG1hbnkgcG9pbnRlcnMgYXMgaXQgY2FuLgorKyAgICAgKiAgICAgZXh0ZW5kZWRfZGF0YSBtdXN0 IGJlIGFsbG9jYXRlZCB3aXRoIGF2X21hbGxvYygpIGFuZCB3aWxsIGJlIGZyZWVkIGluCisrICAg ICAqICAgICBhdl9mcmFtZV91bnJlZigpLgorKyAgICAgKiAgICogb3RoZXJ3aXNlIGV4dGVuZGVk X2RhdGEgbXVzdCBwb2ludCB0byBkYXRhCisrICAgICAqIC0gYnVmW10gbXVzdCBjb250YWluIG9u ZSBvciBtb3JlIHBvaW50ZXJzIHRvIEFWQnVmZmVyUmVmIHN0cnVjdHVyZXMuIEVhY2ggb2YKKysg ICAgICogICB0aGUgZnJhbWUncyBkYXRhIGFuZCBleHRlbmRlZF9kYXRhIHBvaW50ZXJzIG11c3Qg YmUgY29udGFpbmVkIGluIHRoZXNlLiBUaGF0CisrICAgICAqICAgaXMsIG9uZSBBVkJ1ZmZlclJl ZiBmb3IgZWFjaCBhbGxvY2F0ZWQgY2h1bmsgb2YgbWVtb3J5LCBub3QgbmVjZXNzYXJpbHkgb25l CisrICAgICAqICAgQVZCdWZmZXJSZWYgcGVyIGRhdGFbXSBlbnRyeS4gU2VlOiBhdl9idWZmZXJf Y3JlYXRlKCksIGF2X2J1ZmZlcl9hbGxvYygpLAorKyAgICAgKiAgIGFuZCBhdl9idWZmZXJfcmVm KCkuCisrICAgICAqIC0gZXh0ZW5kZWRfYnVmIGFuZCBuYl9leHRlbmRlZF9idWYgbXVzdCBiZSBh bGxvY2F0ZWQgd2l0aCBhdl9tYWxsb2MoKSBieQorKyAgICAgKiAgIHRoaXMgY2FsbGJhY2sgYW5k IGZpbGxlZCB3aXRoIHRoZSBleHRyYSBidWZmZXJzIGlmIHRoZXJlIGFyZSBtb3JlCisrICAgICAq ICAgYnVmZmVycyB0aGFuIGJ1ZltdIGNhbiBob2xkLiBleHRlbmRlZF9idWYgd2lsbCBiZSBmcmVl ZCBpbgorKyAgICAgKiAgIGF2X2ZyYW1lX3VucmVmKCkuCisrICAgICAqICAgRGVjb2RlcnMgd2ls bCBnZW5lcmFsbHkgaW5pdGlhbGl6ZSB0aGUgd2hvbGUgYnVmZmVyIGJlZm9yZSBpdCBpcyBvdXRw dXQKKysgICAgICogICBidXQgaXQgY2FuIGluIHJhcmUgZXJyb3IgY29uZGl0aW9ucyBoYXBwZW4g dGhhdCB1bmluaXRpYWxpemVkIGRhdGEgaXMgcGFzc2VkCisrICAgICAqICAgdGhyb3VnaC4gXGlt cG9ydGFudCBUaGUgYnVmZmVycyByZXR1cm5lZCBieSBnZXRfYnVmZmVyKiBzaG91bGQgdGh1cyBu b3QgY29udGFpbiBzZW5zaXRpdmUKKysgICAgICogICBkYXRhLgorKyAgICAgKgorKyAgICAgKiBJ ZiBBVl9DT0RFQ19DQVBfRFIxIGlzIG5vdCBzZXQgdGhlbiBnZXRfYnVmZmVyMigpIG11c3QgY2Fs bAorKyAgICAgKiBhdmNvZGVjX2RlZmF1bHRfZ2V0X2J1ZmZlcjIoKSBpbnN0ZWFkIG9mIHByb3Zp ZGluZyBidWZmZXJzIGFsbG9jYXRlZCBieQorKyAgICAgKiBzb21lIG90aGVyIG1lYW5zLgorKyAg ICAgKgorKyAgICAgKiBFYWNoIGRhdGEgcGxhbmUgbXVzdCBiZSBhbGlnbmVkIHRvIHRoZSBtYXhp bXVtIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQKKysgICAgICogQ1BVLgorKyAgICAgKgorKyAgICAg KiBAc2VlIGF2Y29kZWNfZGVmYXVsdF9nZXRfYnVmZmVyMigpCisrICAgICAqCisrICAgICAqIFZp ZGVvOgorKyAgICAgKgorKyAgICAgKiBJZiBBVl9HRVRfQlVGRkVSX0ZMQUdfUkVGIGlzIHNldCBp biBmbGFncyB0aGVuIHRoZSBmcmFtZSBtYXkgYmUgcmV1c2VkCisrICAgICAqIChyZWFkIGFuZC9v ciB3cml0dGVuIHRvIGlmIGl0IGlzIHdyaXRhYmxlKSBsYXRlciBieSBsaWJhdmNvZGVjLgorKyAg ICAgKgorKyAgICAgKiBhdmNvZGVjX2FsaWduX2RpbWVuc2lvbnMyKCkgc2hvdWxkIGJlIHVzZWQg dG8gZmluZCB0aGUgcmVxdWlyZWQgd2lkdGggYW5kCisrICAgICAqIGhlaWdodCwgYXMgdGhleSBu b3JtYWxseSBuZWVkIHRvIGJlIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgMTYu CisrICAgICAqCisrICAgICAqIFNvbWUgZGVjb2RlcnMgZG8gbm90IHN1cHBvcnQgbGluZXNpemVz IGNoYW5naW5nIGJldHdlZW4gZnJhbWVzLgorKyAgICAgKgorKyAgICAgKiBJZiBmcmFtZSBtdWx0 aXRocmVhZGluZyBpcyB1c2VkLCB0aGlzIGNhbGxiYWNrIG1heSBiZSBjYWxsZWQgZnJvbSBhCisr ICAgICAqIGRpZmZlcmVudCB0aHJlYWQsIGJ1dCBub3QgZnJvbSBtb3JlIHRoYW4gb25lIGF0IG9u Y2UuIERvZXMgbm90IG5lZWQgdG8gYmUKKysgICAgICogcmVlbnRyYW50LgorKyAgICAgKgorKyAg ICAgKiBAc2VlIGF2Y29kZWNfYWxpZ25fZGltZW5zaW9uczIoKQorKyAgICAgKgorKyAgICAgKiBB dWRpbzoKKysgICAgICoKKysgICAgICogRGVjb2RlcnMgcmVxdWVzdCBhIGJ1ZmZlciBvZiBhIHBh cnRpY3VsYXIgc2l6ZSBieSBzZXR0aW5nCisrICAgICAqIEFWRnJhbWUubmJfc2FtcGxlcyBwcmlv ciB0byBjYWxsaW5nIGdldF9idWZmZXIyKCkuIFRoZSBkZWNvZGVyIG1heSwKKysgICAgICogaG93 ZXZlciwgdXRpbGl6ZSBvbmx5IHBhcnQgb2YgdGhlIGJ1ZmZlciBieSBzZXR0aW5nIEFWRnJhbWUu bmJfc2FtcGxlcworKyAgICAgKiB0byBhIHNtYWxsZXIgdmFsdWUgaW4gdGhlIG91dHB1dCBmcmFt ZS4KKysgICAgICoKKysgICAgICogQXMgYSBjb252ZW5pZW5jZSwgYXZfc2FtcGxlc19nZXRfYnVm ZmVyX3NpemUoKSBhbmQKKysgICAgICogYXZfc2FtcGxlc19maWxsX2FycmF5cygpIGluIGxpYmF2 dXRpbCBtYXkgYmUgdXNlZCBieSBjdXN0b20gZ2V0X2J1ZmZlcjIoKQorKyAgICAgKiBmdW5jdGlv bnMgdG8gZmluZCB0aGUgcmVxdWlyZWQgZGF0YSBzaXplIGFuZCB0byBmaWxsIGRhdGEgcG9pbnRl cnMgYW5kCisrICAgICAqIGxpbmVzaXplLiBJbiBBVkZyYW1lLmxpbmVzaXplLCBvbmx5IGxpbmVz aXplWzBdIG1heSBiZSBzZXQgZm9yIGF1ZGlvCisrICAgICAqIHNpbmNlIGFsbCBwbGFuZXMgbXVz dCBiZSB0aGUgc2FtZSBzaXplLgorKyAgICAgKgorKyAgICAgKiBAc2VlIGF2X3NhbXBsZXNfZ2V0 X2J1ZmZlcl9zaXplKCksIGF2X3NhbXBsZXNfZmlsbF9hcnJheXMoKQorKyAgICAgKgorKyAgICAg KiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29k ZWMsIHVzZXIgY2FuIG92ZXJyaWRlLgorKyAgICAgKi8KKysgICAgaW50ICgqZ2V0X2J1ZmZlcjIp KHN0cnVjdCBBVkNvZGVjQ29udGV4dCAqcywgQVZGcmFtZSAqZnJhbWUsIGludCBmbGFncyk7Cisr CisrICAgIC8qIC0gZW5jb2RpbmcgcGFyYW1ldGVycyAqLworKyAgICAvKioKKysgICAgICogbnVt YmVyIG9mIGJpdHMgdGhlIGJpdHN0cmVhbSBpcyBhbGxvd2VkIHRvIGRpdmVyZ2UgZnJvbSB0aGUg cmVmZXJlbmNlLgorKyAgICAgKiAgICAgICAgICAgdGhlIHJlZmVyZW5jZSBjYW4gYmUgQ0JSIChm b3IgQ0JSIHBhc3MxKSBvciBWQlIgKGZvciBwYXNzMikKKysgICAgICogLSBlbmNvZGluZzogU2V0 IGJ5IHVzZXI7IHVudXNlZCBmb3IgY29uc3RhbnQgcXVhbnRpemVyIGVuY29kaW5nLgorKyAgICAg KiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGludCBiaXRfcmF0ZV90b2xlcmFu Y2U7CisrCisrICAgIC8qKgorKyAgICAgKiBHbG9iYWwgcXVhbGl0eSBmb3IgY29kZWNzIHdoaWNo IGNhbm5vdCBjaGFuZ2UgaXQgcGVyIGZyYW1lLgorKyAgICAgKiBUaGlzIHNob3VsZCBiZSBwcm9w b3J0aW9uYWwgdG8gTVBFRy0xLzIvNCBxc2NhbGUuCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBi eSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGludCBn bG9iYWxfcXVhbGl0eTsKKysKKysgICAgLyoqCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1 c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGludCBjb21w cmVzc2lvbl9sZXZlbDsKKysjZGVmaW5lIEZGX0NPTVBSRVNTSU9OX0RFRkFVTFQgLTEKKysKKysg ICAgZmxvYXQgcWNvbXByZXNzOyAgLy8vPCBhbW91bnQgb2YgcXNjYWxlIGNoYW5nZSBiZXR3ZWVu IGVhc3kgJiBoYXJkIHNjZW5lcyAoMC4wLTEuMCkKKysgICAgZmxvYXQgcWJsdXI7ICAgICAgLy8v PCBhbW91bnQgb2YgcXNjYWxlIHNtb290aGluZyBvdmVyIHRpbWUgKDAuMC0xLjApCisrCisrICAg IC8qKgorKyAgICAgKiBtaW5pbXVtIHF1YW50aXplcgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQg YnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQg cW1pbjsKKysKKysgICAgLyoqCisrICAgICAqIG1heGltdW0gcXVhbnRpemVyCisrICAgICAqIC0g ZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAg ICovCisrICAgIGludCBxbWF4OworKworKyAgICAvKioKKysgICAgICogbWF4aW11bSBxdWFudGl6 ZXIgZGlmZmVyZW5jZSBiZXR3ZWVuIGZyYW1lcworKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkg dXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgbWF4 X3FkaWZmOworKworKyAgICAvKioKKysgICAgICogZGVjb2RlciBiaXRzdHJlYW0gYnVmZmVyIHNp emUKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6 IE1heSBiZSBzZXQgYnkgbGliYXZjb2RlYy4KKysgICAgICovCisrICAgIGludCByY19idWZmZXJf c2l6ZTsKKysKKysgICAgLyoqCisrICAgICAqIHJhdGVjb250cm9sIG92ZXJyaWRlLCBzZWUgUmNP dmVycmlkZQorKyAgICAgKiAtIGVuY29kaW5nOiBBbGxvY2F0ZWQvc2V0L2ZyZWVkIGJ5IHVzZXIu CisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50IHJjX292ZXJy aWRlX2NvdW50OworKyAgICBSY092ZXJyaWRlICpyY19vdmVycmlkZTsKKysKKysgICAgLyoqCisr ICAgICAqIG1heGltdW0gYml0cmF0ZQorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4K KysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IHVzZXIsIG1heSBiZSBvdmVyd3JpdHRlbiBieSBs aWJhdmNvZGVjLgorKyAgICAgKi8KKysgICAgaW50NjRfdCByY19tYXhfcmF0ZTsKKysKKysgICAg LyoqCisrICAgICAqIG1pbmltdW0gYml0cmF0ZQorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkg dXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQ2NF90 IHJjX21pbl9yYXRlOworKworKyAgICAvKioKKysgICAgICogUmF0ZWNvbnRyb2wgYXR0ZW1wdCB0 byB1c2UsIGF0IG1heGltdW0sIDx2YWx1ZT4gb2Ygd2hhdCBjYW4gYmUgdXNlZCB3aXRob3V0IGFu IHVuZGVyZmxvdy4KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0g ZGVjb2Rpbmc6IHVudXNlZC4KKysgICAgICovCisrICAgIGZsb2F0IHJjX21heF9hdmFpbGFibGVf dmJ2X3VzZTsKKysKKysgICAgLyoqCisrICAgICAqIFJhdGVjb250cm9sIGF0dGVtcHQgdG8gdXNl LCBhdCBsZWFzdCwgPHZhbHVlPiB0aW1lcyB0aGUgYW1vdW50IG5lZWRlZCB0byBwcmV2ZW50IGEg dmJ2IG92ZXJmbG93LgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICog LSBkZWNvZGluZzogdW51c2VkLgorKyAgICAgKi8KKysgICAgZmxvYXQgcmNfbWluX3Zidl9vdmVy Zmxvd191c2U7CisrCisrICAgIC8qKgorKyAgICAgKiBOdW1iZXIgb2YgYml0cyB3aGljaCBzaG91 bGQgYmUgbG9hZGVkIGludG8gdGhlIHJjIGJ1ZmZlciBiZWZvcmUgZGVjb2Rpbmcgc3RhcnRzLgor KyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogdW51 c2VkCisrICAgICAqLworKyAgICBpbnQgcmNfaW5pdGlhbF9idWZmZXJfb2NjdXBhbmN5OworKwor KyAgICAvKioKKysgICAgICogdHJlbGxpcyBSRCBxdWFudGl6YXRpb24KKysgICAgICogLSBlbmNv ZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8K KysgICAgaW50IHRyZWxsaXM7CisrCisrICAgIC8qKgorKyAgICAgKiBwYXNzMSBlbmNvZGluZyBz dGF0aXN0aWNzIG91dHB1dCBidWZmZXIKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IGxpYmF2 Y29kZWMuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgY2hhciAq c3RhdHNfb3V0OworKworKyAgICAvKioKKysgICAgICogcGFzczIgZW5jb2Rpbmcgc3RhdGlzdGlj cyBpbnB1dCBidWZmZXIKKysgICAgICogQ29uY2F0ZW5hdGVkIHN0dWZmIGZyb20gc3RhdHNfb3V0 IG9mIHBhc3MxIHNob3VsZCBiZSBwbGFjZWQgaGVyZS4KKysgICAgICogLSBlbmNvZGluZzogQWxs b2NhdGVkL3NldC9mcmVlZCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysg ICAgICovCisrICAgIGNoYXIgKnN0YXRzX2luOworKworKyAgICAvKioKKysgICAgICogV29yayBh cm91bmQgYnVncyBpbiBlbmNvZGVycyB3aGljaCBzb21ldGltZXMgY2Fubm90IGJlIGRldGVjdGVk IGF1dG9tYXRpY2FsbHkuCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyCisrICAgICAq IC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyCisrICAgICAqLworKyAgICBpbnQgd29ya2Fyb3VuZF9i dWdzOworKyNkZWZpbmUgRkZfQlVHX0FVVE9ERVRFQ1QgICAgICAgMSAgLy8vPCBhdXRvZGV0ZWN0 aW9uCisrI2RlZmluZSBGRl9CVUdfWFZJRF9JTEFDRSAgICAgICA0CisrI2RlZmluZSBGRl9CVUdf VU1QNCAgICAgICAgICAgICA4CisrI2RlZmluZSBGRl9CVUdfTk9fUEFERElORyAgICAgICAxNgor KyNkZWZpbmUgRkZfQlVHX0FNViAgICAgICAgICAgICAgMzIKKysjZGVmaW5lIEZGX0JVR19RUEVM X0NIUk9NQSAgICAgIDY0CisrI2RlZmluZSBGRl9CVUdfU1REX1FQRUwgICAgICAgICAxMjgKKysj ZGVmaW5lIEZGX0JVR19RUEVMX0NIUk9NQTIgICAgIDI1NgorKyNkZWZpbmUgRkZfQlVHX0RJUkVD VF9CTE9DS1NJWkUgNTEyCisrI2RlZmluZSBGRl9CVUdfRURHRSAgICAgICAgICAgICAxMDI0Cisr I2RlZmluZSBGRl9CVUdfSFBFTF9DSFJPTUEgICAgICAyMDQ4CisrI2RlZmluZSBGRl9CVUdfRENf Q0xJUCAgICAgICAgICA0MDk2CisrI2RlZmluZSBGRl9CVUdfTVMgICAgICAgICAgICAgICA4MTky IC8vLzwgV29yayBhcm91bmQgdmFyaW91cyBidWdzIGluIE1pY3Jvc29mdCdzIGJyb2tlbiBkZWNv ZGVycy4KKysjZGVmaW5lIEZGX0JVR19UUlVOQ0FURUQgICAgICAgMTYzODQKKysjZGVmaW5lIEZG X0JVR19JRURHRSAgICAgICAgICAgMzI3NjgKKysKKysgICAgLyoqCisrICAgICAqIHN0cmljdGx5 IGZvbGxvdyB0aGUgc3RhbmRhcmQgKE1QRUctNCwgLi4uKS4KKysgICAgICogLSBlbmNvZGluZzog U2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiBT ZXR0aW5nIHRoaXMgdG8gU1RSSUNUIG9yIGhpZ2hlciBtZWFucyB0aGUgZW5jb2RlciBhbmQgZGVj b2RlciB3aWxsCisrICAgICAqIGdlbmVyYWxseSBkbyBzdHVwaWQgdGhpbmdzLCB3aGVyZWFzIHNl dHRpbmcgaXQgdG8gdW5vZmZpY2lhbCBvciBsb3dlcgorKyAgICAgKiB3aWxsIG1lYW4gdGhlIGVu Y29kZXIgbWlnaHQgcHJvZHVjZSBvdXRwdXQgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFsbAor KyAgICAgKiBzcGVjLWNvbXBsaWFudCBkZWNvZGVycy4gRGVjb2RlcnMgZG9uJ3QgZGlmZmVyZW50 aWF0ZSBiZXR3ZWVuIG5vcm1hbCwKKysgICAgICogdW5vZmZpY2lhbCBhbmQgZXhwZXJpbWVudGFs ICh0aGF0IGlzLCB0aGV5IGFsd2F5cyB0cnkgdG8gZGVjb2RlIHRoaW5ncworKyAgICAgKiB3aGVu IHRoZXkgY2FuKSB1bmxlc3MgdGhleSBhcmUgZXhwbGljaXRseSBhc2tlZCB0byBiZWhhdmUgc3R1 cGlkbHkKKysgICAgICogKD1zdHJpY3RseSBjb25mb3JtIHRvIHRoZSBzcGVjcykKKysgICAgICog VGhpcyBtYXkgb25seSBiZSBzZXQgdG8gb25lIG9mIHRoZSBGRl9DT01QTElBTkNFXyogdmFsdWVz IGluIGRlZnMuaC4KKysgICAgICovCisrICAgIGludCBzdHJpY3Rfc3RkX2NvbXBsaWFuY2U7Cisr CisrICAgIC8qKgorKyAgICAgKiBlcnJvciBjb25jZWFsbWVudCBmbGFncworKyAgICAgKiAtIGVu Y29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAq LworKyAgICBpbnQgZXJyb3JfY29uY2VhbG1lbnQ7CisrI2RlZmluZSBGRl9FQ19HVUVTU19NVlMg ICAxCisrI2RlZmluZSBGRl9FQ19ERUJMT0NLICAgICAyCisrI2RlZmluZSBGRl9FQ19GQVZPUl9J TlRFUiAyNTYKKysKKysgICAgLyoqCisrICAgICAqIGRlYnVnCisrICAgICAqIC0gZW5jb2Rpbmc6 IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICov CisrICAgIGludCBkZWJ1ZzsKKysjZGVmaW5lIEZGX0RFQlVHX1BJQ1RfSU5GTyAgIDEKKysjZGVm aW5lIEZGX0RFQlVHX1JDICAgICAgICAgIDIKKysjZGVmaW5lIEZGX0RFQlVHX0JJVFNUUkVBTSAg IDQKKysjZGVmaW5lIEZGX0RFQlVHX01CX1RZUEUgICAgIDgKKysjZGVmaW5lIEZGX0RFQlVHX1FQ ICAgICAgICAgIDE2CisrI2RlZmluZSBGRl9ERUJVR19EQ1RfQ09FRkYgICAweDAwMDAwMDQwCisr I2RlZmluZSBGRl9ERUJVR19TS0lQICAgICAgICAweDAwMDAwMDgwCisrI2RlZmluZSBGRl9ERUJV R19TVEFSVENPREUgICAweDAwMDAwMTAwCisrI2RlZmluZSBGRl9ERUJVR19FUiAgICAgICAgICAw eDAwMDAwNDAwCisrI2RlZmluZSBGRl9ERUJVR19NTUNPICAgICAgICAweDAwMDAwODAwCisrI2Rl ZmluZSBGRl9ERUJVR19CVUdTICAgICAgICAweDAwMDAxMDAwCisrI2RlZmluZSBGRl9ERUJVR19C VUZGRVJTICAgICAweDAwMDA4MDAwCisrI2RlZmluZSBGRl9ERUJVR19USFJFQURTICAgICAweDAw MDEwMDAwCisrI2RlZmluZSBGRl9ERUJVR19HUkVFTl9NRCAgICAweDAwODAwMDAwCisrI2RlZmlu ZSBGRl9ERUJVR19OT01DICAgICAgICAweDAxMDAwMDAwCisrCisrICAgIC8qKgorKyAgICAgKiBF cnJvciByZWNvZ25pdGlvbjsgbWF5IG1pc2RldGVjdCBzb21lIG1vcmUgb3IgbGVzcyB2YWxpZCBw YXJ0cyBhcyBlcnJvcnMuCisrICAgICAqIFRoaXMgaXMgYSBiaXRmaWVsZCBvZiB0aGUgQVZfRUZf KiB2YWx1ZXMgZGVmaW5lZCBpbiBkZWZzLmguCisrICAgICAqCisrICAgICAqIC0gZW5jb2Rpbmc6 IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICov CisrICAgIGludCBlcnJfcmVjb2duaXRpb247CisrCisrICAgIC8qKgorKyAgICAgKiBIYXJkd2Fy ZSBhY2NlbGVyYXRvciBpbiB1c2UKKysgICAgICogLSBlbmNvZGluZzogdW51c2VkLgorKyAgICAg KiAtIGRlY29kaW5nOiBTZXQgYnkgbGliYXZjb2RlYworKyAgICAgKi8KKysgICAgY29uc3Qgc3Ry dWN0IEFWSFdBY2NlbCAqaHdhY2NlbDsKKysKKysgICAgLyoqCisrICAgICAqIExlZ2FjeSBoYXJk d2FyZSBhY2NlbGVyYXRvciBjb250ZXh0LgorKyAgICAgKgorKyAgICAgKiBGb3Igc29tZSBoYXJk d2FyZSBhY2NlbGVyYXRpb24gbWV0aG9kcywgdGhlIGNhbGxlciBtYXkgdXNlIHRoaXMgZmllbGQg dG8KKysgICAgICogc2lnbmFsIGh3YWNjZWwtc3BlY2lmaWMgZGF0YSB0byB0aGUgY29kZWMuIFRo ZSBzdHJ1Y3QgcG9pbnRlZCB0byBieSB0aGlzCisrICAgICAqIHBvaW50ZXIgaXMgaHdhY2NlbC1k ZXBlbmRlbnQgYW5kIGRlZmluZWQgaW4gdGhlIHJlc3BlY3RpdmUgaGVhZGVyLiBQbGVhc2UKKysg ICAgICogcmVmZXIgdG8gdGhlIEZGbXBlZyBIVyBhY2NlbGVyYXRvciBkb2N1bWVudGF0aW9uIHRv IGtub3cgaG93IHRvIGZpbGwKKysgICAgICogdGhpcy4KKysgICAgICoKKysgICAgICogSW4gbW9z dCBjYXNlcyB0aGlzIGZpZWxkIGlzIG9wdGlvbmFsIC0gdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlv biBtYXkgYWxzbworKyAgICAgKiBiZSBwcm92aWRlZCB0byBsaWJhdmNvZGVjIHRocm91Z2ggQHJl ZiBod19mcmFtZXNfY3R4IG9yIEByZWYKKysgICAgICogaHdfZGV2aWNlX2N0eCAoc2VlIGF2Y29k ZWNfZ2V0X2h3X2NvbmZpZygpKS4gSG93ZXZlciwgaW4gc29tZSBjYXNlcyBpdAorKyAgICAgKiBt YXkgYmUgdGhlIG9ubHkgbWV0aG9kIG9mIHNpZ25hbGxpbmcgc29tZSAob3B0aW9uYWwpIGluZm9y bWF0aW9uLgorKyAgICAgKgorKyAgICAgKiBUaGUgc3RydWN0IGFuZCBpdHMgY29udGVudHMgYXJl IG93bmVkIGJ5IHRoZSBjYWxsZXIuCisrICAgICAqCisrICAgICAqIC0gZW5jb2Rpbmc6IE1heSBi ZSBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgYXZjb2RlY19vcGVuMigpLiBNdXN0IHJlbWFpbgor KyAgICAgKiAgICAgICAgICAgICB2YWxpZCB1bnRpbCBhdmNvZGVjX2ZyZWVfY29udGV4dCgpLgor KyAgICAgKiAtIGRlY29kaW5nOiBNYXkgYmUgc2V0IGJ5IHRoZSBjYWxsZXIgaW4gdGhlIGdldF9m b3JtYXQoKSBjYWxsYmFjay4KKysgICAgICogICAgICAgICAgICAgTXVzdCByZW1haW4gdmFsaWQg dW50aWwgdGhlIG5leHQgZ2V0X2Zvcm1hdCgpIGNhbGwsCisrICAgICAqICAgICAgICAgICAgIG9y IGF2Y29kZWNfZnJlZV9jb250ZXh0KCkgKHdoaWNoZXZlciBjb21lcyBmaXJzdCkuCisrICAgICAq LworKyAgICB2b2lkICpod2FjY2VsX2NvbnRleHQ7CisrCisrICAgIC8qKgorKyAgICAgKiBBIHJl ZmVyZW5jZSB0byB0aGUgQVZIV0ZyYW1lc0NvbnRleHQgZGVzY3JpYmluZyB0aGUgaW5wdXQgKGZv ciBlbmNvZGluZykKKysgICAgICogb3Igb3V0cHV0IChkZWNvZGluZykgZnJhbWVzLiBUaGUgcmVm ZXJlbmNlIGlzIHNldCBieSB0aGUgY2FsbGVyIGFuZAorKyAgICAgKiBhZnRlcndhcmRzIG93bmVk IChhbmQgZnJlZWQpIGJ5IGxpYmF2Y29kZWMgLSBpdCBzaG91bGQgbmV2ZXIgYmUgcmVhZCBieQor KyAgICAgKiB0aGUgY2FsbGVyIGFmdGVyIGJlaW5nIHNldC4KKysgICAgICoKKysgICAgICogLSBk ZWNvZGluZzogVGhpcyBmaWVsZCBzaG91bGQgYmUgc2V0IGJ5IHRoZSBjYWxsZXIgZnJvbSB0aGUg Z2V0X2Zvcm1hdCgpCisrICAgICAqICAgICAgICAgICAgIGNhbGxiYWNrLiBUaGUgcHJldmlvdXMg cmVmZXJlbmNlIChpZiBhbnkpIHdpbGwgYWx3YXlzIGJlCisrICAgICAqICAgICAgICAgICAgIHVu cmVmZmVkIGJ5IGxpYmF2Y29kZWMgYmVmb3JlIHRoZSBnZXRfZm9ybWF0KCkgY2FsbC4KKysgICAg ICoKKysgICAgICogICAgICAgICAgICAgSWYgdGhlIGRlZmF1bHQgZ2V0X2J1ZmZlcjIoKSBpcyB1 c2VkIHdpdGggYSBod2FjY2VsIHBpeGVsCisrICAgICAqICAgICAgICAgICAgIGZvcm1hdCwgdGhl biB0aGlzIEFWSFdGcmFtZXNDb250ZXh0IHdpbGwgYmUgdXNlZCBmb3IKKysgICAgICogICAgICAg ICAgICAgYWxsb2NhdGluZyB0aGUgZnJhbWUgYnVmZmVycy4KKysgICAgICoKKysgICAgICogLSBl bmNvZGluZzogRm9yIGhhcmR3YXJlIGVuY29kZXJzIGNvbmZpZ3VyZWQgdG8gdXNlIGEgaHdhY2Nl bCBwaXhlbAorKyAgICAgKiAgICAgICAgICAgICBmb3JtYXQsIHRoaXMgZmllbGQgc2hvdWxkIGJl IHNldCBieSB0aGUgY2FsbGVyIHRvIGEgcmVmZXJlbmNlCisrICAgICAqICAgICAgICAgICAgIHRv IHRoZSBBVkhXRnJhbWVzQ29udGV4dCBkZXNjcmliaW5nIGlucHV0IGZyYW1lcy4KKysgICAgICog ICAgICAgICAgICAgQVZIV0ZyYW1lc0NvbnRleHQuZm9ybWF0IG11c3QgYmUgZXF1YWwgdG8KKysg ICAgICogICAgICAgICAgICAgQVZDb2RlY0NvbnRleHQucGl4X2ZtdC4KKysgICAgICoKKysgICAg ICogICAgICAgICAgICAgVGhpcyBmaWVsZCBzaG91bGQgYmUgc2V0IGJlZm9yZSBhdmNvZGVjX29w ZW4yKCkgaXMgY2FsbGVkLgorKyAgICAgKi8KKysgICAgQVZCdWZmZXJSZWYgKmh3X2ZyYW1lc19j dHg7CisrCisrICAgIC8qKgorKyAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgQVZIV0RldmljZUNv bnRleHQgZGVzY3JpYmluZyB0aGUgZGV2aWNlIHdoaWNoIHdpbGwKKysgICAgICogYmUgdXNlZCBi eSBhIGhhcmR3YXJlIGVuY29kZXIvZGVjb2Rlci4gIFRoZSByZWZlcmVuY2UgaXMgc2V0IGJ5IHRo ZQorKyAgICAgKiBjYWxsZXIgYW5kIGFmdGVyd2FyZHMgb3duZWQgKGFuZCBmcmVlZCkgYnkgbGli YXZjb2RlYy4KKysgICAgICoKKysgICAgICogVGhpcyBzaG91bGQgYmUgdXNlZCBpZiBlaXRoZXIg dGhlIGNvZGVjIGRldmljZSBkb2VzIG5vdCByZXF1aXJlCisrICAgICAqIGhhcmR3YXJlIGZyYW1l cyBvciBhbnkgdGhhdCBhcmUgdXNlZCBhcmUgdG8gYmUgYWxsb2NhdGVkIGludGVybmFsbHkgYnkK KysgICAgICogbGliYXZjb2RlYy4gIElmIHRoZSB1c2VyIHdpc2hlcyB0byBzdXBwbHkgYW55IG9m IHRoZSBmcmFtZXMgdXNlZCBhcworKyAgICAgKiBlbmNvZGVyIGlucHV0IG9yIGRlY29kZXIgb3V0 cHV0IHRoZW4gaHdfZnJhbWVzX2N0eCBzaG91bGQgYmUgdXNlZAorKyAgICAgKiBpbnN0ZWFkLiAg V2hlbiBod19mcmFtZXNfY3R4IGlzIHNldCBpbiBnZXRfZm9ybWF0KCkgZm9yIGEgZGVjb2Rlciwg dGhpcworKyAgICAgKiBmaWVsZCB3aWxsIGJlIGlnbm9yZWQgd2hpbGUgZGVjb2RpbmcgdGhlIGFz c29jaWF0ZWQgc3RyZWFtIHNlZ21lbnQsIGJ1dAorKyAgICAgKiBtYXkgYWdhaW4gYmUgdXNlZCBv biBhIGZvbGxvd2luZyBvbmUgYWZ0ZXIgYW5vdGhlciBnZXRfZm9ybWF0KCkgY2FsbC4KKysgICAg ICoKKysgICAgICogRm9yIGJvdGggZW5jb2RlcnMgYW5kIGRlY29kZXJzIHRoaXMgZmllbGQgc2hv dWxkIGJlIHNldCBiZWZvcmUKKysgICAgICogYXZjb2RlY19vcGVuMigpIGlzIGNhbGxlZCBhbmQg bXVzdCBub3QgYmUgd3JpdHRlbiB0byB0aGVyZWFmdGVyLgorKyAgICAgKgorKyAgICAgKiBOb3Rl IHRoYXQgc29tZSBkZWNvZGVycyBtYXkgcmVxdWlyZSB0aGlzIGZpZWxkIHRvIGJlIHNldCBpbml0 aWFsbHkgaW4KKysgICAgICogb3JkZXIgdG8gc3VwcG9ydCBod19mcmFtZXNfY3R4IGF0IGFsbCAt IGluIHRoYXQgY2FzZSwgYWxsIGZyYW1lcworKyAgICAgKiBjb250ZXh0cyB1c2VkIG11c3QgYmUg Y3JlYXRlZCBvbiB0aGUgc2FtZSBkZXZpY2UuCisrICAgICAqLworKyAgICBBVkJ1ZmZlclJlZiAq aHdfZGV2aWNlX2N0eDsKKysKKysgICAgLyoqCisrICAgICAqIEJpdCBzZXQgb2YgQVZfSFdBQ0NF TF9GTEFHXyogZmxhZ3MsIHdoaWNoIGFmZmVjdCBoYXJkd2FyZSBhY2NlbGVyYXRlZAorKyAgICAg KiBkZWNvZGluZyAoaWYgYWN0aXZlKS4KKysgICAgICogLSBlbmNvZGluZzogdW51c2VkCisrICAg ICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyIChlaXRoZXIgYmVmb3JlIGF2Y29kZWNfb3BlbjIo KSwgb3IgaW4gdGhlCisrICAgICAqICAgICAgICAgICAgIEFWQ29kZWNDb250ZXh0LmdldF9mb3Jt YXQgY2FsbGJhY2spCisrICAgICAqLworKyAgICBpbnQgaHdhY2NlbF9mbGFnczsKKysKKysgICAg LyoqCisrICAgICAqIFZpZGVvIGRlY29kaW5nIG9ubHkuICBTZXRzIHRoZSBudW1iZXIgb2YgZXh0 cmEgaGFyZHdhcmUgZnJhbWVzIHdoaWNoCisrICAgICAqIHRoZSBkZWNvZGVyIHdpbGwgYWxsb2Nh dGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyLiAgVGhpcyBtdXN0IGJlIHNldAorKyAgICAgKiBiZWZv cmUgYXZjb2RlY19vcGVuMigpIGlzIGNhbGxlZC4KKysgICAgICoKKysgICAgICogU29tZSBoYXJk d2FyZSBkZWNvZGVycyByZXF1aXJlIGFsbCBmcmFtZXMgdGhhdCB0aGV5IHdpbGwgdXNlIGZvcgor KyAgICAgKiBvdXRwdXQgdG8gYmUgZGVmaW5lZCBpbiBhZHZhbmNlIGJlZm9yZSBkZWNvZGluZyBz dGFydHMuICBGb3Igc3VjaAorKyAgICAgKiBkZWNvZGVycywgdGhlIGhhcmR3YXJlIGZyYW1lIHBv b2wgbXVzdCB0aGVyZWZvcmUgYmUgb2YgYSBmaXhlZCBzaXplLgorKyAgICAgKiBUaGUgZXh0cmEg ZnJhbWVzIHNldCBoZXJlIGFyZSBvbiB0b3Agb2YgYW55IG51bWJlciB0aGF0IHRoZSBkZWNvZGVy CisrICAgICAqIG5lZWRzIGludGVybmFsbHkgaW4gb3JkZXIgdG8gb3BlcmF0ZSBub3JtYWxseSAo Zm9yIGV4YW1wbGUsIGZyYW1lcworKyAgICAgKiB1c2VkIGFzIHJlZmVyZW5jZSBwaWN0dXJlcyku CisrICAgICAqLworKyAgICBpbnQgZXh0cmFfaHdfZnJhbWVzOworKworKyAgICAvKioKKysgICAg ICogZXJyb3IKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMgaWYgZmxhZ3Mg JiBBVl9DT0RFQ19GTEFHX1BTTlIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAg Ki8KKysgICAgdWludDY0X3QgZXJyb3JbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOworKworKyAgICAv KioKKysgICAgICogRENUIGFsZ29yaXRobSwgc2VlIEZGX0RDVF8qIGJlbG93CisrICAgICAqIC0g ZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAg ICovCisrICAgIGludCBkY3RfYWxnbzsKKysjZGVmaW5lIEZGX0RDVF9BVVRPICAgIDAKKysjZGVm aW5lIEZGX0RDVF9GQVNUSU5UIDEKKysjZGVmaW5lIEZGX0RDVF9JTlQgICAgIDIKKysjZGVmaW5l IEZGX0RDVF9NTVggICAgIDMKKysjZGVmaW5lIEZGX0RDVF9BTFRJVkVDIDUKKysjZGVmaW5lIEZG X0RDVF9GQUFOICAgIDYKKysjZGVmaW5lIEZGX0RDVF9ORU9OICAgIDcKKysKKysgICAgLyoqCisr ICAgICAqIElEQ1QgYWxnb3JpdGhtLCBzZWUgRkZfSURDVF8qIGJlbG93LgorKyAgICAgKiAtIGVu Y29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IHVzZXIuCisr ICAgICAqLworKyAgICBpbnQgaWRjdF9hbGdvOworKyNkZWZpbmUgRkZfSURDVF9BVVRPICAgICAg ICAgIDAKKysjZGVmaW5lIEZGX0lEQ1RfSU5UICAgICAgICAgICAxCisrI2RlZmluZSBGRl9JRENU X1NJTVBMRSAgICAgICAgMgorKyNkZWZpbmUgRkZfSURDVF9TSU1QTEVNTVggICAgIDMKKysjZGVm aW5lIEZGX0lEQ1RfQVJNICAgICAgICAgICA3CisrI2RlZmluZSBGRl9JRENUX0FMVElWRUMgICAg ICAgOAorKyNkZWZpbmUgRkZfSURDVF9TSU1QTEVBUk0gICAgIDEwCisrI2RlZmluZSBGRl9JRENU X1hWSUQgICAgICAgICAgMTQKKysjZGVmaW5lIEZGX0lEQ1RfU0lNUExFQVJNVjVURSAxNgorKyNk ZWZpbmUgRkZfSURDVF9TSU1QTEVBUk1WNiAgIDE3CisrI2RlZmluZSBGRl9JRENUX0ZBQU4gICAg ICAgICAgMjAKKysjZGVmaW5lIEZGX0lEQ1RfU0lNUExFTkVPTiAgICAyMgorKyNkZWZpbmUgRkZf SURDVF9TSU1QTEVBVVRPICAgIDEyOAorKworKyAgICAvKioKKysgICAgICogYml0cyBwZXIgc2Ft cGxlL3BpeGVsIGZyb20gdGhlIGRlbXV4ZXIgKG5lZWRlZCBmb3IgaHVmZnl1dikuCisrICAgICAq IC0gZW5jb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQg YnkgdXNlci4KKysgICAgICovCisrICAgICBpbnQgYml0c19wZXJfY29kZWRfc2FtcGxlOworKwor KyAgICAvKioKKysgICAgICogQml0cyBwZXIgc2FtcGxlL3BpeGVsIG9mIGludGVybmFsIGxpYmF2 Y29kZWMgcGl4ZWwvc2FtcGxlIGZvcm1hdC4KKysgICAgICogLSBlbmNvZGluZzogc2V0IGJ5IHVz ZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IHNldCBieSBsaWJhdmNvZGVjLgorKyAgICAgKi8KKysg ICAgaW50IGJpdHNfcGVyX3Jhd19zYW1wbGU7CisrCisrICAgIC8qKgorKyAgICAgKiB0aHJlYWQg Y291bnQKKysgICAgICogaXMgdXNlZCB0byBkZWNpZGUgaG93IG1hbnkgaW5kZXBlbmRlbnQgdGFz a3Mgc2hvdWxkIGJlIHBhc3NlZCB0byBleGVjdXRlKCkKKysgICAgICogLSBlbmNvZGluZzogU2V0 IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKi8KKysg ICAgaW50IHRocmVhZF9jb3VudDsKKysKKysgICAgLyoqCisrICAgICAqIFdoaWNoIG11bHRpdGhy ZWFkaW5nIG1ldGhvZHMgdG8gdXNlLgorKyAgICAgKiBVc2Ugb2YgRkZfVEhSRUFEX0ZSQU1FIHdp bGwgaW5jcmVhc2UgZGVjb2RpbmcgZGVsYXkgYnkgb25lIGZyYW1lIHBlciB0aHJlYWQsCisrICAg ICAqIHNvIGNsaWVudHMgd2hpY2ggY2Fubm90IHByb3ZpZGUgZnV0dXJlIGZyYW1lcyBzaG91bGQg bm90IHVzZSBpdC4KKysgICAgICoKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIsIG90 aGVyd2lzZSB0aGUgZGVmYXVsdCBpcyB1c2VkLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkg dXNlciwgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IGlzIHVzZWQuCisrICAgICAqLworKyAgICBpbnQg dGhyZWFkX3R5cGU7CisrI2RlZmluZSBGRl9USFJFQURfRlJBTUUgICAxIC8vLzwgRGVjb2RlIG1v cmUgdGhhbiBvbmUgZnJhbWUgYXQgb25jZQorKyNkZWZpbmUgRkZfVEhSRUFEX1NMSUNFICAgMiAv Ly88IERlY29kZSBtb3JlIHRoYW4gb25lIHBhcnQgb2YgYSBzaW5nbGUgZnJhbWUgYXQgb25jZQor KworKyAgICAvKioKKysgICAgICogV2hpY2ggbXVsdGl0aHJlYWRpbmcgbWV0aG9kcyBhcmUgaW4g dXNlIGJ5IHRoZSBjb2RlYy4KKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMu CisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjLgorKyAgICAgKi8KKysgICAg aW50IGFjdGl2ZV90aHJlYWRfdHlwZTsKKysKKysgICAgLyoqCisrICAgICAqIFRoZSBjb2RlYyBt YXkgY2FsbCB0aGlzIHRvIGV4ZWN1dGUgc2V2ZXJhbCBpbmRlcGVuZGVudCB0aGluZ3MuCisrICAg ICAqIEl0IHdpbGwgcmV0dXJuIG9ubHkgYWZ0ZXIgZmluaXNoaW5nIGFsbCB0YXNrcy4KKysgICAg ICogVGhlIHVzZXIgbWF5IHJlcGxhY2UgdGhpcyB3aXRoIHNvbWUgbXVsdGl0aHJlYWRlZCBpbXBs ZW1lbnRhdGlvbiwKKysgICAgICogdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBleGVj dXRlIHRoZSBwYXJ0cyBzZXJpYWxseS4KKysgICAgICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIg b2YgdGhpbmdzIHRvIGV4ZWN1dGUKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IGxpYmF2Y29k ZWMsIHVzZXIgY2FuIG92ZXJyaWRlLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgbGliYXZj b2RlYywgdXNlciBjYW4gb3ZlcnJpZGUuCisrICAgICAqLworKyAgICBpbnQgKCpleGVjdXRlKShz dHJ1Y3QgQVZDb2RlY0NvbnRleHQgKmMsIGludCAoKmZ1bmMpKHN0cnVjdCBBVkNvZGVjQ29udGV4 dCAqYzIsIHZvaWQgKmFyZyksIHZvaWQgKmFyZzIsIGludCAqcmV0LCBpbnQgY291bnQsIGludCBz aXplKTsKKysKKysgICAgLyoqCisrICAgICAqIFRoZSBjb2RlYyBtYXkgY2FsbCB0aGlzIHRvIGV4 ZWN1dGUgc2V2ZXJhbCBpbmRlcGVuZGVudCB0aGluZ3MuCisrICAgICAqIEl0IHdpbGwgcmV0dXJu IG9ubHkgYWZ0ZXIgZmluaXNoaW5nIGFsbCB0YXNrcy4KKysgICAgICogVGhlIHVzZXIgbWF5IHJl cGxhY2UgdGhpcyB3aXRoIHNvbWUgbXVsdGl0aHJlYWRlZCBpbXBsZW1lbnRhdGlvbiwKKysgICAg ICogdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBleGVjdXRlIHRoZSBwYXJ0cyBzZXJp YWxseS4KKysgICAgICogQHBhcmFtIGMgY29udGV4dCBwYXNzZWQgYWxzbyB0byBmdW5jCisrICAg ICAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRoaW5ncyB0byBleGVjdXRlCisrICAgICAq IEBwYXJhbSBhcmcyIGFyZ3VtZW50IHBhc3NlZCB1bmNoYW5nZWQgdG8gZnVuYworKyAgICAgKiBA cGFyYW0gcmV0IHJldHVybiB2YWx1ZXMgb2YgZXhlY3V0ZWQgZnVuY3Rpb25zLCBtdXN0IGhhdmUg c3BhY2UgZm9yICJjb3VudCIgdmFsdWVzLiBNYXkgYmUgTlVMTC4KKysgICAgICogQHBhcmFtIGZ1 bmMgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBjb3VudCB0aW1lcywgd2l0aCBqb2JuciBm cm9tIDAgdG8gY291bnQtMS4KKysgICAgICogICAgICAgICAgICAgdGhyZWFkbnIgd2lsbCBiZSBp biB0aGUgcmFuZ2UgMCB0byBjLT50aHJlYWRfY291bnQtMSA8IE1BWF9USFJFQURTIGFuZCBzbyB0 aGF0IG5vCisrICAgICAqICAgICAgICAgICAgIHR3byBpbnN0YW5jZXMgb2YgZnVuYyBleGVjdXRp bmcgYXQgdGhlIHNhbWUgdGltZSB3aWxsIGhhdmUgdGhlIHNhbWUgdGhyZWFkbnIuCisrICAgICAq IEByZXR1cm4gYWx3YXlzIDAgY3VycmVudGx5LCBidXQgY29kZSBzaG91bGQgaGFuZGxlIGEgZnV0 dXJlIGltcHJvdmVtZW50IHdoZXJlIHdoZW4gYW55IGNhbGwgdG8gZnVuYworKyAgICAgKiAgICAg ICAgIHJldHVybnMgPCAwIG5vIGZ1cnRoZXIgY2FsbHMgdG8gZnVuYyBtYXkgYmUgZG9uZSBhbmQg PCAwIGlzIHJldHVybmVkLgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgbGliYXZjb2RlYywg dXNlciBjYW4gb3ZlcnJpZGUuCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVj LCB1c2VyIGNhbiBvdmVycmlkZS4KKysgICAgICovCisrICAgIGludCAoKmV4ZWN1dGUyKShzdHJ1 Y3QgQVZDb2RlY0NvbnRleHQgKmMsIGludCAoKmZ1bmMpKHN0cnVjdCBBVkNvZGVjQ29udGV4dCAq YzIsIHZvaWQgKmFyZywgaW50IGpvYm5yLCBpbnQgdGhyZWFkbnIpLCB2b2lkICphcmcyLCBpbnQg KnJldCwgaW50IGNvdW50KTsKKysKKysgICAgLyoqCisrICAgICAqIHByb2ZpbGUKKysgICAgICog LSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSBsaWJh dmNvZGVjLgorKyAgICAgKiBTZWUgdGhlIEFWX1BST0ZJTEVfKiBkZWZpbmVzIGluIGRlZnMuaC4K KysgICAgICovCisrICAgICBpbnQgcHJvZmlsZTsKKysKKysgICAgLyoqCisrICAgICAqIEVuY29k aW5nIGxldmVsIGRlc2NyaXB0b3IuCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLCBj b3JyZXNwb25kcyB0byBhIHNwZWNpZmljIGxldmVsIGRlZmluZWQgYnkgdGhlCisrICAgICAqICAg Y29kZWMsIHVzdWFsbHkgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvZmlsZSBsZXZlbCwgaWYgbm90 IHNwZWNpZmllZCBpdAorKyAgICAgKiAgIGlzIHNldCB0byBBVl9MRVZFTF9VTktOT1dOLgorKyAg ICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgbGliYXZjb2RlYy4KKysgICAgICogU2VlIEFWX0xFVkVM XyogaW4gZGVmcy5oLgorKyAgICAgKi8KKysgICAgIGludCBsZXZlbDsKKysKKysgICAgLyoqCisr ICAgICAqIFNraXAgbG9vcCBmaWx0ZXJpbmcgZm9yIHNlbGVjdGVkIGZyYW1lcy4KKysgICAgICog LSBlbmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyLgorKyAg ICAgKi8KKysgICAgZW51bSBBVkRpc2NhcmQgc2tpcF9sb29wX2ZpbHRlcjsKKysKKysgICAgLyoq CisrICAgICAqIFNraXAgSURDVC9kZXF1YW50aXphdGlvbiBmb3Igc2VsZWN0ZWQgZnJhbWVzLgor KyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IHVz ZXIuCisrICAgICAqLworKyAgICBlbnVtIEFWRGlzY2FyZCBza2lwX2lkY3Q7CisrCisrICAgIC8q KgorKyAgICAgKiBTa2lwIGRlY29kaW5nIGZvciBzZWxlY3RlZCBmcmFtZXMuCisrICAgICAqIC0g ZW5jb2Rpbmc6IHVudXNlZAorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAg ICovCisrICAgIGVudW0gQVZEaXNjYXJkIHNraXBfZnJhbWU7CisrCisrICAgIC8qKgorKyAgICAg KiBTa2lwIHByb2Nlc3NpbmcgYWxwaGEgaWYgc3VwcG9ydGVkIGJ5IGNvZGVjLgorKyAgICAgKiBO b3RlIHRoYXQgaWYgdGhlIGZvcm1hdCB1c2VzIHByZS1tdWx0aXBsaWVkIGFscGhhIChjb21tb24g d2l0aCBWUDYsCisrICAgICAqIGFuZCByZWNvbW1lbmRlZCBkdWUgdG8gYmV0dGVyIHZpZGVvIHF1 YWxpdHkvY29tcHJlc3Npb24pCisrICAgICAqIHRoZSBpbWFnZSB3aWxsIGxvb2sgYXMgaWYgYWxw aGEtYmxlbmRlZCBvbnRvIGEgYmxhY2sgYmFja2dyb3VuZC4KKysgICAgICogSG93ZXZlciBmb3Ig Zm9ybWF0cyB0aGF0IGRvIG5vdCB1c2UgcHJlLW11bHRpcGxpZWQgYWxwaGEKKysgICAgICogdGhl cmUgbWlnaHQgYmUgc2VyaW91cyBhcnRlZmFjdHMgKHRob3VnaCBlLmcuIGxpYnN3c2NhbGUgY3Vy cmVudGx5CisrICAgICAqIGFzc3VtZXMgcHJlLW11bHRpcGxpZWQgYWxwaGEgYW55d2F5KS4KKysg ICAgICoKKysgICAgICogLSBkZWNvZGluZzogc2V0IGJ5IHVzZXIKKysgICAgICogLSBlbmNvZGlu ZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgc2tpcF9hbHBoYTsKKysKKysgICAgLyoqCisr ICAgICAqIE51bWJlciBvZiBtYWNyb2Jsb2NrIHJvd3MgYXQgdGhlIHRvcCB3aGljaCBhcmUgc2tp cHBlZC4KKysgICAgICogLSBlbmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IFNl dCBieSB1c2VyLgorKyAgICAgKi8KKysgICAgaW50IHNraXBfdG9wOworKworKyAgICAvKioKKysg ICAgICogTnVtYmVyIG9mIG1hY3JvYmxvY2sgcm93cyBhdCB0aGUgYm90dG9tIHdoaWNoIGFyZSBz a2lwcGVkLgorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzog U2V0IGJ5IHVzZXIuCisrICAgICAqLworKyAgICBpbnQgc2tpcF9ib3R0b207CisrCisrICAgIC8q KgorKyAgICAgKiBsb3cgcmVzb2x1dGlvbiBkZWNvZGluZywgMS0+IDEvMiBzaXplLCAyLT4xLzQg c2l6ZQorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzogU2V0 IGJ5IHVzZXIuCisrICAgICAqLworKyAgICAgaW50IGxvd3JlczsKKysKKysgICAgLyoqCisrICAg ICAqIEFWQ29kZWNEZXNjcmlwdG9yCisrICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZC4KKysgICAg ICogLSBkZWNvZGluZzogc2V0IGJ5IGxpYmF2Y29kZWMuCisrICAgICAqLworKyAgICBjb25zdCBz dHJ1Y3QgQVZDb2RlY0Rlc2NyaXB0b3IgKmNvZGVjX2Rlc2NyaXB0b3I7CisrCisrICAgIC8qKgor KyAgICAgKiBDaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgdGhlIGlucHV0IHN1YnRpdGxlcyBmaWxlLgor KyAgICAgKiAtIGRlY29kaW5nOiBzZXQgYnkgdXNlcgorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVz ZWQKKysgICAgICovCisrICAgIGNoYXIgKnN1Yl9jaGFyZW5jOworKworKyAgICAvKioKKysgICAg ICogU3VidGl0bGVzIGNoYXJhY3RlciBlbmNvZGluZyBtb2RlLiBGb3JtYXRzIG9yIGNvZGVjcyBt aWdodCBiZSBhZGp1c3RpbmcKKysgICAgICogdGhpcyBzZXR0aW5nIChpZiB0aGV5IGFyZSBkb2lu ZyB0aGUgY29udmVyc2lvbiB0aGVtc2VsdmVzIGZvciBpbnN0YW5jZSkuCisrICAgICAqIC0gZGVj b2Rpbmc6IHNldCBieSBsaWJhdmNvZGVjCisrICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZAorKyAg ICAgKi8KKysgICAgaW50IHN1Yl9jaGFyZW5jX21vZGU7CisrI2RlZmluZSBGRl9TVUJfQ0hBUkVO Q19NT0RFX0RPX05PVEhJTkcgIC0xICAvLy88IGRvIG5vdGhpbmcgKGRlbXV4ZXIgb3V0cHV0cyBh IHN0cmVhbSBzdXBwb3NlZCB0byBiZSBhbHJlYWR5IGluIFVURi04LCBvciB0aGUgY29kZWMgaXMg Yml0bWFwIGZvciBpbnN0YW5jZSkKKysjZGVmaW5lIEZGX1NVQl9DSEFSRU5DX01PREVfQVVUT01B VElDICAgIDAgIC8vLzwgbGliYXZjb2RlYyB3aWxsIHNlbGVjdCB0aGUgbW9kZSBpdHNlbGYKKysj ZGVmaW5lIEZGX1NVQl9DSEFSRU5DX01PREVfUFJFX0RFQ09ERVIgIDEgIC8vLzwgdGhlIEFWUGFj a2V0IGRhdGEgbmVlZHMgdG8gYmUgcmVjb2RlZCB0byBVVEYtOCBiZWZvcmUgYmVpbmcgZmVkIHRv IHRoZSBkZWNvZGVyLCByZXF1aXJlcyBpY29udgorKyNkZWZpbmUgRkZfU1VCX0NIQVJFTkNfTU9E RV9JR05PUkUgICAgICAgMiAgLy8vPCBuZWl0aGVyIGNvbnZlcnQgdGhlIHN1YnRpdGxlcywgbm9y IGNoZWNrIHRoZW0gZm9yIHZhbGlkIFVURi04CisrCisrICAgIC8qKgorKyAgICAgKiBIZWFkZXIg Y29udGFpbmluZyBzdHlsZSBpbmZvcm1hdGlvbiBmb3IgdGV4dCBzdWJ0aXRsZXMuCisrICAgICAq IEZvciBTVUJUSVRMRV9BU1Mgc3VidGl0bGUgdHlwZSwgaXQgc2hvdWxkIGNvbnRhaW4gdGhlIHdo b2xlIEFTUworKyAgICAgKiBbU2NyaXB0IEluZm9dIGFuZCBbVjQrIFN0eWxlc10gc2VjdGlvbiwg cGx1cyB0aGUgW0V2ZW50c10gbGluZSBhbmQKKysgICAgICogdGhlIEZvcm1hdCBsaW5lIGZvbGxv d2luZy4gSXQgc2hvdWxkbid0IGluY2x1ZGUgYW55IERpYWxvZ3VlIGxpbmUuCisrICAgICAqCisr ICAgICAqIC0gZW5jb2Rpbmc6IE1heSBiZSBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgYXZjb2Rl Y19vcGVuMigpIHRvIGFuIGFycmF5CisrICAgICAqICAgYWxsb2NhdGVkIHdpdGggdGhlIGF2X21h bGxvYygpIGZhbWlseSBvZiBmdW5jdGlvbnMuCisrICAgICAqIC0gZGVjb2Rpbmc6IE1heSBiZSBz ZXQgYnkgbGliYXZjb2RlYyBpbiBhdmNvZGVjX29wZW4yKCkuCisrICAgICAqCisrICAgICAqIEFm dGVyIGJlaW5nIHNldCwgdGhlIGFycmF5IGlzIG93bmVkIGJ5IHRoZSBjb2RlYyBhbmQgZnJlZWQg aW4KKysgICAgICogYXZjb2RlY19mcmVlX2NvbnRleHQoKS4KKysgICAgICovCisrICAgIGludCBz dWJ0aXRsZV9oZWFkZXJfc2l6ZTsKKysgICAgdWludDhfdCAqc3VidGl0bGVfaGVhZGVyOworKwor KyAgICAvKioKKysgICAgICogZHVtcCBmb3JtYXQgc2VwYXJhdG9yLgorKyAgICAgKiBjYW4gYmUg IiwgIiBvciAiXG4gICAgICAiIG9yIGFueXRoaW5nIGVsc2UKKysgICAgICogLSBlbmNvZGluZzog U2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKi8K KysgICAgdWludDhfdCAqZHVtcF9zZXBhcmF0b3I7CisrCisrICAgIC8qKgorKyAgICAgKiAnLCcg c2VwYXJhdGVkIGxpc3Qgb2YgYWxsb3dlZCBkZWNvZGVycy4KKysgICAgICogSWYgTlVMTCB0aGVu IGFsbCBhcmUgYWxsb3dlZAorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBk ZWNvZGluZzogc2V0IGJ5IHVzZXIKKysgICAgICovCisrICAgIGNoYXIgKmNvZGVjX3doaXRlbGlz dDsKKysKKysgICAgLyoqCisrICAgICAqIEFkZGl0aW9uYWwgZGF0YSBhc3NvY2lhdGVkIHdpdGgg dGhlIGVudGlyZSBjb2RlZCBzdHJlYW0uCisrICAgICAqCisrICAgICAqIC0gZGVjb2Rpbmc6IG1h eSBiZSBzZXQgYnkgdXNlciBiZWZvcmUgY2FsbGluZyBhdmNvZGVjX29wZW4yKCkuCisrICAgICAq IC0gZW5jb2Rpbmc6IG1heSBiZSBzZXQgYnkgbGliYXZjb2RlYyBhZnRlciBhdmNvZGVjX29wZW4y KCkuCisrICAgICAqLworKyAgICBBVlBhY2tldFNpZGVEYXRhICpjb2RlZF9zaWRlX2RhdGE7Cisr ICAgIGludCAgICAgICAgICAgIG5iX2NvZGVkX3NpZGVfZGF0YTsKKysKKysgICAgLyoqCisrICAg ICAqIEJpdCBzZXQgb2YgQVZfQ09ERUNfRVhQT1JUX0RBVEFfKiBmbGFncywgd2hpY2ggYWZmZWN0 cyB0aGUga2luZCBvZgorKyAgICAgKiBtZXRhZGF0YSBleHBvcnRlZCBpbiBmcmFtZSwgcGFja2V0 LCBvciBjb2RlZCBzdHJlYW0gc2lkZSBkYXRhIGJ5CisrICAgICAqIGRlY29kZXJzIGFuZCBlbmNv ZGVycy4KKysgICAgICoKKysgICAgICogLSBkZWNvZGluZzogc2V0IGJ5IHVzZXIKKysgICAgICog LSBlbmNvZGluZzogc2V0IGJ5IHVzZXIKKysgICAgICovCisrICAgIGludCBleHBvcnRfc2lkZV9k YXRhOworKworKyAgICAvKioKKysgICAgICogVGhlIG51bWJlciBvZiBwaXhlbHMgcGVyIGltYWdl IHRvIG1heGltYWxseSBhY2NlcHQuCisrICAgICAqCisrICAgICAqIC0gZGVjb2Rpbmc6IHNldCBi eSB1c2VyCisrICAgICAqIC0gZW5jb2Rpbmc6IHNldCBieSB1c2VyCisrICAgICAqLworKyAgICBp bnQ2NF90IG1heF9waXhlbHM7CisrCisrICAgIC8qKgorKyAgICAgKiBWaWRlbyBkZWNvZGluZyBv bmx5LiBDZXJ0YWluIHZpZGVvIGNvZGVjcyBzdXBwb3J0IGNyb3BwaW5nLCBtZWFuaW5nIHRoYXQK KysgICAgICogb25seSBhIHN1Yi1yZWN0YW5nbGUgb2YgdGhlIGRlY29kZWQgZnJhbWUgaXMgaW50 ZW5kZWQgZm9yIGRpc3BsYXkuICBUaGlzCisrICAgICAqIG9wdGlvbiBjb250cm9scyBob3cgY3Jv cHBpbmcgaXMgaGFuZGxlZCBieSBsaWJhdmNvZGVjLgorKyAgICAgKgorKyAgICAgKiBXaGVuIHNl dCB0byAxICh0aGUgZGVmYXVsdCksIGxpYmF2Y29kZWMgd2lsbCBhcHBseSBjcm9wcGluZyBpbnRl cm5hbGx5LgorKyAgICAgKiBJLmUuIGl0IHdpbGwgbW9kaWZ5IHRoZSBvdXRwdXQgZnJhbWUgd2lk dGgvaGVpZ2h0IGZpZWxkcyBhbmQgb2Zmc2V0IHRoZQorKyAgICAgKiBkYXRhIHBvaW50ZXJzIChv bmx5IGJ5IGFzIG11Y2ggYXMgcG9zc2libGUgd2hpbGUgcHJlc2VydmluZyBhbGlnbm1lbnQsIG9y CisrICAgICAqIGJ5IHRoZSBmdWxsIGFtb3VudCBpZiB0aGUgQVZfQ09ERUNfRkxBR19VTkFMSUdO RUQgZmxhZyBpcyBzZXQpIHNvIHRoYXQKKysgICAgICogdGhlIGZyYW1lcyBvdXRwdXQgYnkgdGhl IGRlY29kZXIgcmVmZXIgb25seSB0byB0aGUgY3JvcHBlZCBhcmVhLiBUaGUKKysgICAgICogY3Jv cF8qIGZpZWxkcyBvZiB0aGUgb3V0cHV0IGZyYW1lcyB3aWxsIGJlIHplcm8uCisrICAgICAqCisr ICAgICAqIFdoZW4gc2V0IHRvIDAsIHRoZSB3aWR0aC9oZWlnaHQgZmllbGRzIG9mIHRoZSBvdXRw dXQgZnJhbWVzIHdpbGwgYmUgc2V0CisrICAgICAqIHRvIHRoZSBjb2RlZCBkaW1lbnNpb25zIGFu ZCB0aGUgY3JvcF8qIGZpZWxkcyB3aWxsIGRlc2NyaWJlIHRoZSBjcm9wcGluZworKyAgICAgKiBy ZWN0YW5nbGUuIEFwcGx5aW5nIHRoZSBjcm9wcGluZyBpcyBsZWZ0IHRvIHRoZSBjYWxsZXIuCisr ICAgICAqCisrICAgICAqIEB3YXJuaW5nIFdoZW4gaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHdpdGgg b3BhcXVlIG91dHB1dCBmcmFtZXMgaXMgdXNlZCwKKysgICAgICogbGliYXZjb2RlYyBpcyB1bmFi bGUgdG8gYXBwbHkgY3JvcHBpbmcgZnJvbSB0aGUgdG9wL2xlZnQgYm9yZGVyLgorKyAgICAgKgor KyAgICAgKiBAbm90ZSB3aGVuIHRoaXMgb3B0aW9uIGlzIHNldCB0byB6ZXJvLCB0aGUgd2lkdGgv aGVpZ2h0IGZpZWxkcyBvZiB0aGUKKysgICAgICogQVZDb2RlY0NvbnRleHQgYW5kIG91dHB1dCBB VkZyYW1lcyBoYXZlIGRpZmZlcmVudCBtZWFuaW5ncy4gVGhlIGNvZGVjCisrICAgICAqIGNvbnRl eHQgZmllbGRzIHN0b3JlIGRpc3BsYXkgZGltZW5zaW9ucyAod2l0aCB0aGUgY29kZWQgZGltZW5z aW9ucyBpbgorKyAgICAgKiBjb2RlZF93aWR0aC9oZWlnaHQpLCB3aGlsZSB0aGUgZnJhbWUgZmll bGRzIHN0b3JlIHRoZSBjb2RlZCBkaW1lbnNpb25zCisrICAgICAqICh3aXRoIHRoZSBkaXNwbGF5 IGRpbWVuc2lvbnMgYmVpbmcgZGV0ZXJtaW5lZCBieSB0aGUgY3JvcF8qIGZpZWxkcykuCisrICAg ICAqLworKyAgICBpbnQgYXBwbHlfY3JvcHBpbmc7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGUg cGVyY2VudGFnZSBvZiBkYW1hZ2VkIHNhbXBsZXMgdG8gZGlzY2FyZCBhIGZyYW1lLgorKyAgICAg KgorKyAgICAgKiAtIGRlY29kaW5nOiBzZXQgYnkgdXNlcgorKyAgICAgKiAtIGVuY29kaW5nOiB1 bnVzZWQKKysgICAgICovCisrICAgIGludCBkaXNjYXJkX2RhbWFnZWRfcGVyY2VudGFnZTsKKysK KysgICAgLyoqCisrICAgICAqIFRoZSBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgZnJhbWUgdG8gbWF4 aW1hbGx5IGFjY2VwdC4KKysgICAgICoKKysgICAgICogLSBkZWNvZGluZzogc2V0IGJ5IHVzZXIK KysgICAgICogLSBlbmNvZGluZzogc2V0IGJ5IHVzZXIKKysgICAgICovCisrICAgIGludDY0X3Qg bWF4X3NhbXBsZXM7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxl ZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcGFja2V0IHRvIGdldCBhIGRhdGEKKysgICAgICog YnVmZmVyIGZvciBpdC4KKysgICAgICoKKysgICAgICogVGhlIGZvbGxvd2luZyBmaWVsZCB3aWxs IGJlIHNldCBpbiB0aGUgcGFja2V0IGJlZm9yZSB0aGlzIGNhbGxiYWNrIGlzCisrICAgICAqIGNh bGxlZDoKKysgICAgICogLSBzaXplCisrICAgICAqIFRoaXMgY2FsbGJhY2sgbXVzdCB1c2UgdGhl IGFib3ZlIHZhbHVlIHRvIGNhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUsCisrICAg ICAqIHdoaWNoIG11c3QgcGFkZGVkIGJ5IGF0IGxlYXN0IEFWX0lOUFVUX0JVRkZFUl9QQURESU5H X1NJWkUgYnl0ZXMuCisrICAgICAqCisrICAgICAqIEluIHNvbWUgc3BlY2lmaWMgY2FzZXMsIHRo ZSBlbmNvZGVyIG1heSBub3QgdXNlIHRoZSBlbnRpcmUgYnVmZmVyIGFsbG9jYXRlZCBieSB0aGlz CisrICAgICAqIGNhbGxiYWNrLiBUaGlzIHdpbGwgYmUgcmVmbGVjdGVkIGluIHRoZSBzaXplIHZh bHVlIGluIHRoZSBwYWNrZXQgb25jZSByZXR1cm5lZCBieQorKyAgICAgKiBhdmNvZGVjX3JlY2Vp dmVfcGFja2V0KCkuCisrICAgICAqCisrICAgICAqIFRoaXMgY2FsbGJhY2sgbXVzdCBmaWxsIHRo ZSBmb2xsb3dpbmcgZmllbGRzIGluIHRoZSBwYWNrZXQ6CisrICAgICAqIC0gZGF0YTogYWxpZ25t ZW50IHJlcXVpcmVtZW50cyBmb3IgQVZQYWNrZXQgYXBwbHksIGlmIGFueS4gU29tZSBhcmNoaXRl Y3R1cmVzIGFuZAorKyAgICAgKiAgIGVuY29kZXJzIG1heSBiZW5lZml0IGZyb20gaGF2aW5nIGFs aWduZWQgZGF0YS4KKysgICAgICogLSBidWY6IG11c3QgY29udGFpbiBhIHBvaW50ZXIgdG8gYW4g QVZCdWZmZXJSZWYgc3RydWN0dXJlLiBUaGUgcGFja2V0J3MKKysgICAgICogICBkYXRhIHBvaW50 ZXIgbXVzdCBiZSBjb250YWluZWQgaW4gaXQuIFNlZTogYXZfYnVmZmVyX2NyZWF0ZSgpLCBhdl9i dWZmZXJfYWxsb2MoKSwKKysgICAgICogICBhbmQgYXZfYnVmZmVyX3JlZigpLgorKyAgICAgKgor KyAgICAgKiBJZiBBVl9DT0RFQ19DQVBfRFIxIGlzIG5vdCBzZXQgdGhlbiBnZXRfZW5jb2RlX2J1 ZmZlcigpIG11c3QgY2FsbAorKyAgICAgKiBhdmNvZGVjX2RlZmF1bHRfZ2V0X2VuY29kZV9idWZm ZXIoKSBpbnN0ZWFkIG9mIHByb3ZpZGluZyBhIGJ1ZmZlciBhbGxvY2F0ZWQgYnkKKysgICAgICog c29tZSBvdGhlciBtZWFucy4KKysgICAgICoKKysgICAgICogVGhlIGZsYWdzIGZpZWxkIG1heSBj b250YWluIGEgY29tYmluYXRpb24gb2YgQVZfR0VUX0VOQ09ERV9CVUZGRVJfRkxBR18gZmxhZ3Mu CisrICAgICAqIFRoZXkgbWF5IGJlIHVzZWQgZm9yIGV4YW1wbGUgdG8gaGludCB3aGF0IHVzZSB0 aGUgYnVmZmVyIG1heSBnZXQgYWZ0ZXIgYmVpbmcKKysgICAgICogY3JlYXRlZC4KKysgICAgICog SW1wbGVtZW50YXRpb25zIG9mIHRoaXMgY2FsbGJhY2sgbWF5IGlnbm9yZSBmbGFncyB0aGV5IGRv bid0IHVuZGVyc3RhbmQuCisrICAgICAqIElmIEFWX0dFVF9FTkNPREVfQlVGRkVSX0ZMQUdfUkVG IGlzIHNldCBpbiBmbGFncyB0aGVuIHRoZSBwYWNrZXQgbWF5IGJlIHJldXNlZAorKyAgICAgKiAo cmVhZCBhbmQvb3Igd3JpdHRlbiB0byBpZiBpdCBpcyB3cml0YWJsZSkgbGF0ZXIgYnkgbGliYXZj b2RlYy4KKysgICAgICoKKysgICAgICogVGhpcyBjYWxsYmFjayBtdXN0IGJlIHRocmVhZC1zYWZl LCBhcyB3aGVuIGZyYW1lIHRocmVhZGluZyBpcyB1c2VkLCBpdCBtYXkKKysgICAgICogYmUgY2Fs bGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBzaW11bHRhbmVvdXNseS4KKysgICAgICoKKysgICAg ICogQHNlZSBhdmNvZGVjX2RlZmF1bHRfZ2V0X2VuY29kZV9idWZmZXIoKQorKyAgICAgKgorKyAg ICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgbGliYXZjb2RlYywgdXNlciBjYW4gb3ZlcnJpZGUuCisr ICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgaW50ICgqZ2V0X2VuY29k ZV9idWZmZXIpKHN0cnVjdCBBVkNvZGVjQ29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCwgaW50IGZs YWdzKTsKKysKKysgICAgLyoqCisrICAgICAqIEZyYW1lIGNvdW50ZXIsIHNldCBieSBsaWJhdmNv ZGVjLgorKyAgICAgKgorKyAgICAgKiAtIGRlY29kaW5nOiB0b3RhbCBudW1iZXIgb2YgZnJhbWVz IHJldHVybmVkIGZyb20gdGhlIGRlY29kZXIgc28gZmFyLgorKyAgICAgKiAtIGVuY29kaW5nOiB0 b3RhbCBudW1iZXIgb2YgZnJhbWVzIHBhc3NlZCB0byB0aGUgZW5jb2RlciBzbyBmYXIuCisrICAg ICAqCisrICAgICAqICAgQG5vdGUgdGhlIGNvdW50ZXIgaXMgbm90IGluY3JlbWVudGVkIGlmIGVu Y29kaW5nL2RlY29kaW5nIHJlc3VsdGVkIGluCisrICAgICAqICAgYW4gZXJyb3IuCisrICAgICAq LworKyAgICBpbnQ2NF90IGZyYW1lX251bTsKKysKKysgICAgLyoqCisrICAgICAqIERlY29kaW5n IG9ubHkuIE1heSBiZSBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgYXZjb2RlY19vcGVuMigpIHRv IGFuCisrICAgICAqIGF2X21hbGxvYygpJ2VkIGFycmF5IChvciB2aWEgQVZPcHRpb25zKS4gT3du ZWQgYW5kIGZyZWVkIGJ5IHRoZSBkZWNvZGVyCisrICAgICAqIGFmdGVyd2FyZHMuCisrICAgICAq CisrICAgICAqIFNpZGUgZGF0YSBhdHRhY2hlZCB0byBkZWNvZGVkIGZyYW1lcyBtYXkgY29tZSBm cm9tIHNldmVyYWwgc291cmNlczoKKysgICAgICogMS4gY29kZWRfc2lkZV9kYXRhLCB3aGljaCB0 aGUgZGVjb2RlciB3aWxsIGZvciBjZXJ0YWluIHR5cGVzIHRyYW5zbGF0ZQorKyAgICAgKiAgICBm cm9tIHBhY2tldC10eXBlIHRvIGZyYW1lLXR5cGUgYW5kIGF0dGFjaCB0byBmcmFtZXM7CisrICAg ICAqIDIuIHNpZGUgZGF0YSBhdHRhY2hlZCB0byBhbiBBVlBhY2tldCBzZW50IGZvciBkZWNvZGlu ZyAoc2FtZQorKyAgICAgKiAgICBjb25zaWRlcmF0aW9ucyBhcyBhYm92ZSk7CisrICAgICAqIDMu IGV4dHJhY3RlZCBmcm9tIHRoZSBjb2RlZCBieXRlc3RyZWFtLgorKyAgICAgKiBUaGUgZmlyc3Qg dHdvIGNhc2VzIGFyZSBzdXBwbGllZCBieSB0aGUgY2FsbGVyIGFuZCB0eXBpY2FsbHkgY29tZSBm cm9tIGEKKysgICAgICogY29udGFpbmVyLgorKyAgICAgKgorKyAgICAgKiBUaGlzIGFycmF5IGNv bmZpZ3VyZXMgZGVjb2RlciBiZWhhdmlvdXIgaW4gY2FzZXMgd2hlbiBzaWRlIGRhdGEgb2YgdGhl CisrICAgICAqIHNhbWUgdHlwZSBpcyBwcmVzZW50IGJvdGggaW4gdGhlIGNvZGVkIGJ5dGVzdHJl YW0gYW5kIGluIHRoZQorKyAgICAgKiB1c2VyLXN1cHBsaWVkIHNpZGUgZGF0YSAoaXRlbXMgMS4g YW5kIDIuIGFib3ZlKS4gSW4gYWxsIGNhc2VzLCBhdCBtb3N0CisrICAgICAqIG9uZSBpbnN0YW5j ZSBvZiBlYWNoIHNpZGUgZGF0YSB0eXBlIHdpbGwgYmUgYXR0YWNoZWQgdG8gb3V0cHV0IGZyYW1l cy4gQnkKKysgICAgICogZGVmYXVsdCBpdCB3aWxsIGJlIHRoZSBieXRlc3RyZWFtIHNpZGUgZGF0 YS4gQWRkaW5nIGFuCisrICAgICAqIEFWUGFja2V0U2lkZURhdGFUeXBlIHZhbHVlIHRvIHRoaXMg YXJyYXkgd2lsbCBmbGlwIHRoZSBwcmVmZXJlbmNlIGZvcgorKyAgICAgKiB0aGlzIHR5cGUsIHRo dXMgbWFraW5nIHRoZSBkZWNvZGVyIHByZWZlciB1c2VyLXN1cHBsaWVkIHNpZGUgZGF0YSBvdmVy CisrICAgICAqIGJ5dGVzdHJlYW0uIEluIGNhc2Ugc2lkZSBkYXRhIG9mIHRoZSBzYW1lIHR5cGUg aXMgcHJlc2VudCBib3RoIGluCisrICAgICAqIGNvZGVkX2RhdGEgYW5kIGF0dGFja2VkIHRvIGEg cGFja2V0LCB0aGUgcGFja2V0IGluc3RhbmNlIGFsd2F5cyBoYXMKKysgICAgICogcHJpb3JpdHku CisrICAgICAqCisrICAgICAqIFRoZSBhcnJheSBtYXkgYWxzbyBjb250YWluIGEgc2luZ2xlIC0x LCBpbiB3aGljaCBjYXNlIHRoZSBwcmVmZXJlbmNlIGlzCisrICAgICAqIHN3aXRjaGVkIGZvciBh bGwgc2lkZSBkYXRhIHR5cGVzLgorKyAgICAgKi8KKysgICAgaW50ICAgICAgICAqc2lkZV9kYXRh X3ByZWZlcl9wYWNrZXQ7CisrICAgIC8qKgorKyAgICAgKiBOdW1iZXIgb2YgZW50cmllcyBpbiBz aWRlX2RhdGFfcHJlZmVyX3BhY2tldC4KKysgICAgICovCisrICAgIHVuc2lnbmVkIG5iX3NpZGVf ZGF0YV9wcmVmZXJfcGFja2V0OworKworKyAgICAvKioKKysgICAgICogQXJyYXkgY29udGFpbmlu ZyBzdGF0aWMgc2lkZSBkYXRhLCBzdWNoIGFzIEhEUjEwIENMTCAvIE1EQ1Ygc3RydWN0dXJlcy4K KysgICAgICogU2lkZSBkYXRhIGVudHJpZXMgc2hvdWxkIGJlIGFsbG9jYXRlZCBieSB1c2FnZSBv ZiBoZWxwZXJzIGRlZmluZWQgaW4KKysgICAgICogbGliYXZ1dGlsL2ZyYW1lLmguCisrICAgICAq CisrICAgICAqIC0gZW5jb2Rpbmc6IG1heSBiZSBzZXQgYnkgdXNlciBiZWZvcmUgY2FsbGluZyBh dmNvZGVjX29wZW4yKCkgZm9yCisrICAgICAqICAgICAgICAgICAgIGVuY29kZXIgY29uZmlndXJh dGlvbi4gQWZ0ZXJ3YXJkcyBvd25lZCBhbmQgZnJlZWQgYnkgdGhlCisrICAgICAqICAgICAgICAg ICAgIGVuY29kZXIuCisrICAgICAqIC0gZGVjb2Rpbmc6IG1heSBiZSBzZXQgYnkgbGliYXZjb2Rl YyBpbiBhdmNvZGVjX29wZW4yKCkuCisrICAgICAqLworKyAgICBBVkZyYW1lU2lkZURhdGEgICoq ZGVjb2RlZF9zaWRlX2RhdGE7CisrICAgIGludCAgICAgICAgICAgICBuYl9kZWNvZGVkX3NpZGVf ZGF0YTsKKysKKysgICAgLyoqCisrICAgICAqIEluZGljYXRlcyBob3cgdGhlIGFscGhhIGNoYW5u ZWwgb2YgdGhlIHZpZGVvIGlzIHJlcHJlc2VudGVkLgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQg YnkgdXNlcgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgbGliYXZjb2RlYworKyAgICAgKi8K KysgICAgZW51bSBBVkFscGhhTW9kZSBhbHBoYV9tb2RlOworK30gQVZDb2RlY0NvbnRleHQ7Cisr CisrLyoqCisrICogQGRlZmdyb3VwIGxhdmNfaHdhY2NlbCBBVkhXQWNjZWwKKysgKgorKyAqIEBu b3RlICBOb3RoaW5nIGluIHRoaXMgc3RydWN0dXJlIHNob3VsZCBiZSBhY2Nlc3NlZCBieSB0aGUg dXNlci4gIEF0IHNvbWUKKysgKiAgICAgICAgcG9pbnQgaW4gZnV0dXJlIGl0IHdpbGwgbm90IGJl IGV4dGVybmFsbHkgdmlzaWJsZSBhdCBhbGwuCisrICoKKysgKiBAeworKyAqLworK3R5cGVkZWYg c3RydWN0IEFWSFdBY2NlbCB7CisrICAgIC8qKgorKyAgICAgKiBOYW1lIG9mIHRoZSBoYXJkd2Fy ZSBhY2NlbGVyYXRlZCBjb2RlYy4KKysgICAgICogVGhlIG5hbWUgaXMgZ2xvYmFsbHkgdW5pcXVl IGFtb25nIGVuY29kZXJzIGFuZCBhbW9uZyBkZWNvZGVycyAoYnV0IGFuCisrICAgICAqIGVuY29k ZXIgYW5kIGEgZGVjb2RlciBjYW4gc2hhcmUgdGhlIHNhbWUgbmFtZSkuCisrICAgICAqLworKyAg ICBjb25zdCBjaGFyICpuYW1lOworKworKyAgICAvKioKKysgICAgICogVHlwZSBvZiBjb2RlYyBp bXBsZW1lbnRlZCBieSB0aGUgaGFyZHdhcmUgYWNjZWxlcmF0b3IuCisrICAgICAqCisrICAgICAq IFNlZSBBVk1FRElBX1RZUEVfeHh4CisrICAgICAqLworKyAgICBlbnVtIEFWTWVkaWFUeXBlIHR5 cGU7CisrCisrICAgIC8qKgorKyAgICAgKiBDb2RlYyBpbXBsZW1lbnRlZCBieSB0aGUgaGFyZHdh cmUgYWNjZWxlcmF0b3IuCisrICAgICAqCisrICAgICAqIFNlZSBBVl9DT0RFQ19JRF94eHgKKysg ICAgICovCisrICAgIGVudW0gQVZDb2RlY0lEIGlkOworKworKyAgICAvKioKKysgICAgICogU3Vw cG9ydGVkIHBpeGVsIGZvcm1hdC4KKysgICAgICoKKysgICAgICogT25seSBoYXJkd2FyZSBhY2Nl bGVyYXRlZCBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgaGVyZS4KKysgICAgICovCisrICAgIGVudW0g QVZQaXhlbEZvcm1hdCBwaXhfZm10OworKworKyAgICAvKioKKysgICAgICogSGFyZHdhcmUgYWNj ZWxlcmF0ZWQgY29kZWMgY2FwYWJpbGl0aWVzLgorKyAgICAgKiBzZWUgQVZfSFdBQ0NFTF9DT0RF Q19DQVBfKgorKyAgICAgKi8KKysgICAgaW50IGNhcGFiaWxpdGllczsKKyt9IEFWSFdBY2NlbDsK KysKKysvKioKKysgKiBIV0FjY2VsIGlzIGV4cGVyaW1lbnRhbCBhbmQgaXMgdGh1cyBhdm9pZGVk IGluIGZhdm9yIG9mIG5vbiBleHBlcmltZW50YWwKKysgKiBjb2RlY3MKKysgKi8KKysjZGVmaW5l IEFWX0hXQUNDRUxfQ09ERUNfQ0FQX0VYUEVSSU1FTlRBTCAweDAyMDAKKysKKysvKioKKysgKiBI YXJkd2FyZSBhY2NlbGVyYXRpb24gc2hvdWxkIGJlIHVzZWQgZm9yIGRlY29kaW5nIGV2ZW4gaWYg dGhlIGNvZGVjIGxldmVsCisrICogdXNlZCBpcyB1bmtub3duIG9yIGhpZ2hlciB0aGFuIHRoZSBt YXhpbXVtIHN1cHBvcnRlZCBsZXZlbCByZXBvcnRlZCBieSB0aGUKKysgKiBoYXJkd2FyZSBkcml2 ZXIuCisrICoKKysgKiBJdCdzIGdlbmVyYWxseSBhIGdvb2QgaWRlYSB0byBwYXNzIHRoaXMgZmxh ZyB1bmxlc3MgeW91IGhhdmUgYSBzcGVjaWZpYworKyAqIHJlYXNvbiBub3QgdG8sIGFzIGhhcmR3 YXJlIHRlbmRzIHRvIHVuZGVyLXJlcG9ydCBzdXBwb3J0ZWQgbGV2ZWxzLgorKyAqLworKyNkZWZp bmUgQVZfSFdBQ0NFTF9GTEFHX0lHTk9SRV9MRVZFTCAoMSA8PCAwKQorKworKy8qKgorKyAqIEhh cmR3YXJlIGFjY2VsZXJhdGlvbiBjYW4gb3V0cHV0IFlVViBwaXhlbCBmb3JtYXRzIHdpdGggYSBk aWZmZXJlbnQgY2hyb21hCisrICogc2FtcGxpbmcgdGhhbiA0OjI6MCBhbmQvb3Igb3RoZXIgdGhh biA4IGJpdHMgcGVyIGNvbXBvbmVudC4KKysgKi8KKysjZGVmaW5lIEFWX0hXQUNDRUxfRkxBR19B TExPV19ISUdIX0RFUFRIICgxIDw8IDEpCisrCisrLyoqCisrICogSGFyZHdhcmUgYWNjZWxlcmF0 aW9uIHNob3VsZCBzdGlsbCBiZSBhdHRlbXB0ZWQgZm9yIGRlY29kaW5nIHdoZW4gdGhlCisrICog Y29kZWMgcHJvZmlsZSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVwb3J0ZWQgY2FwYWJpbGl0aWVzIG9m IHRoZSBoYXJkd2FyZS4KKysgKgorKyAqIEZvciBleGFtcGxlLCB0aGlzIGNhbiBiZSB1c2VkIHRv IHRyeSB0byBkZWNvZGUgYmFzZWxpbmUgcHJvZmlsZSBILjI2NAorKyAqIHN0cmVhbXMgaW4gaGFy ZHdhcmUgLSBpdCB3aWxsIG9mdGVuIHN1Y2NlZWQsIGJlY2F1c2UgbWFueSBzdHJlYW1zIG1hcmtl ZAorKyAqIGFzIGJhc2VsaW5lIHByb2ZpbGUgYWN0dWFsbHkgY29uZm9ybSB0byBjb25zdHJhaW5l ZCBiYXNlbGluZSBwcm9maWxlLgorKyAqCisrICogQHdhcm5pbmcgSWYgdGhlIHN0cmVhbSBpcyBh Y3R1YWxseSBub3Qgc3VwcG9ydGVkIHRoZW4gdGhlIGJlaGF2aW91ciBpcworKyAqICAgICAgICAg IHVuZGVmaW5lZCwgYW5kIG1heSBpbmNsdWRlIHJldHVybmluZyBlbnRpcmVseSBpbmNvcnJlY3Qg b3V0cHV0CisrICogICAgICAgICAgd2hpbGUgaW5kaWNhdGluZyBzdWNjZXNzLgorKyAqLworKyNk ZWZpbmUgQVZfSFdBQ0NFTF9GTEFHX0FMTE9XX1BST0ZJTEVfTUlTTUFUQ0ggKDEgPDwgMikKKysK KysvKioKKysgKiBTb21lIGhhcmR3YXJlIGRlY29kZXJzIChuYW1lbHkgbnZkZWMpIGNhbiBlaXRo ZXIgb3V0cHV0IGRpcmVjdCBkZWNvZGVyCisrICogc3VyZmFjZXMsIG9yIG1ha2UgYW4gb24tZGV2 aWNlIGNvcHkgYW5kIHJldHVybiBzYWlkIGNvcHkuCisrICogVGhlcmUgaXMgYSBoYXJkIGxpbWl0 IG9uIGhvdyBtYW55IGRlY29kZXIgc3VyZmFjZXMgdGhlcmUgY2FuIGJlLCBhbmQgaXQKKysgKiBj YW5ub3QgYmUgYWNjdXJhdGVseSBndWVzc2VkIGFoZWFkIG9mIHRpbWUuCisrICogRm9yIHNvbWUg cHJvY2Vzc2luZyBjaGFpbnMsIHRoaXMgY2FuIGJlIG9rYXksIGJ1dCBvdGhlcnMgd2lsbCBydW4g aW50byB0aGUKKysgKiBsaW1pdCBhbmQgaW4gdHVybiBwcm9kdWNlIHZlcnkgY29uZnVzaW5nIGVy cm9ycyB0aGF0IHJlcXVpcmUgZmluZSB0dW5pbmcgb2YKKysgKiBtb3JlIG9yIGxlc3Mgb2JzY3Vy ZSBvcHRpb25zIGJ5IHRoZSB1c2VyLCBvciBpbiBleHRyZW1lIGNhc2VzIGNhbm5vdCBiZQorKyAq IHJlc29sdmVkIGF0IGFsbCB3aXRob3V0IGluc2VydGluZyBhbiBhdmZpbHRlciB0aGF0IGZvcmNl cyBhIGNvcHkuCisrICoKKysgKiBUaHVzLCB0aGUgaHdhY2NlbCB3aWxsIGJ5IGRlZmF1bHQgbWFr ZSBhIGNvcHkgZm9yIHNhZmV0eSBhbmQgcmVzaWxpZW5jZS4KKysgKiBJZiBhIHVzZXJzIHJlYWxs eSB3YW50cyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIGNvcGllcywgdGhleSBjYW4gc2V0IHRo aXMKKysgKiBmbGFnIGFuZCBlbnN1cmUgdGhlaXIgcHJvY2Vzc2luZyBjaGFpbiBkb2VzIG5vdCBl eGhhdXN0IHRoZSBzdXJmYWNlIHBvb2wuCisrICovCisrI2RlZmluZSBBVl9IV0FDQ0VMX0ZMQUdf VU5TQUZFX09VVFBVVCAoMSA8PCAzKQorKworKy8qKgorKyAqIEB9CisrICovCisrCisrZW51bSBB VlN1YnRpdGxlVHlwZSB7CisrICAgIFNVQlRJVExFX05PTkUsCisrCisrICAgIFNVQlRJVExFX0JJ VE1BUCwgICAgICAgICAgICAgICAgLy8vPCBBIGJpdG1hcCwgcGljdCB3aWxsIGJlIHNldAorKwor KyAgICAvKioKKysgICAgICogUGxhaW4gdGV4dCwgdGhlIHRleHQgZmllbGQgbXVzdCBiZSBzZXQg YnkgdGhlIGRlY29kZXIgYW5kIGlzCisrICAgICAqIGF1dGhvcml0YXRpdmUuIGFzcyBhbmQgcGlj dCBmaWVsZHMgbWF5IGNvbnRhaW4gYXBwcm94aW1hdGlvbnMuCisrICAgICAqLworKyAgICBTVUJU SVRMRV9URVhULAorKworKyAgICAvKioKKysgICAgICogRm9ybWF0dGVkIHRleHQsIHRoZSBhc3Mg ZmllbGQgbXVzdCBiZSBzZXQgYnkgdGhlIGRlY29kZXIgYW5kIGlzCisrICAgICAqIGF1dGhvcml0 YXRpdmUuIHBpY3QgYW5kIHRleHQgZmllbGRzIG1heSBjb250YWluIGFwcHJveGltYXRpb25zLgor KyAgICAgKi8KKysgICAgU1VCVElUTEVfQVNTLAorK307CisrCisrI2RlZmluZSBBVl9TVUJUSVRM RV9GTEFHX0ZPUkNFRCAweDAwMDAwMDAxCisrCisrdHlwZWRlZiBzdHJ1Y3QgQVZTdWJ0aXRsZVJl Y3QgeworKyAgICBpbnQgeDsgICAgICAgICAvLy88IHRvcCBsZWZ0IGNvcm5lciAgb2YgcGljdCwg dW5kZWZpbmVkIHdoZW4gcGljdCBpcyBub3Qgc2V0CisrICAgIGludCB5OyAgICAgICAgIC8vLzwg dG9wIGxlZnQgY29ybmVyICBvZiBwaWN0LCB1bmRlZmluZWQgd2hlbiBwaWN0IGlzIG5vdCBzZXQK KysgICAgaW50IHc7ICAgICAgICAgLy8vPCB3aWR0aCAgICAgICAgICAgIG9mIHBpY3QsIHVuZGVm aW5lZCB3aGVuIHBpY3QgaXMgbm90IHNldAorKyAgICBpbnQgaDsgICAgICAgICAvLy88IGhlaWdo dCAgICAgICAgICAgb2YgcGljdCwgdW5kZWZpbmVkIHdoZW4gcGljdCBpcyBub3Qgc2V0CisrICAg IGludCBuYl9jb2xvcnM7IC8vLzwgbnVtYmVyIG9mIGNvbG9ycyBpbiBwaWN0LCB1bmRlZmluZWQg d2hlbiBwaWN0IGlzIG5vdCBzZXQKKysKKysgICAgLyoqCisrICAgICAqIGRhdGErbGluZXNpemUg Zm9yIHRoZSBiaXRtYXAgb2YgdGhpcyBzdWJ0aXRsZS4KKysgICAgICogQ2FuIGJlIHNldCBmb3Ig dGV4dC9hc3MgYXMgd2VsbCBvbmNlIHRoZXkgYXJlIHJlbmRlcmVkLgorKyAgICAgKi8KKysgICAg dWludDhfdCAqZGF0YVs0XTsKKysgICAgaW50IGxpbmVzaXplWzRdOworKworKyAgICBpbnQgZmxh Z3M7CisrICAgIGVudW0gQVZTdWJ0aXRsZVR5cGUgdHlwZTsKKysKKysgICAgY2hhciAqdGV4dDsg ICAgICAgICAgICAgICAgICAgICAvLy88IDAgdGVybWluYXRlZCBwbGFpbiBVVEYtOCB0ZXh0Cisr CisrICAgIC8qKgorKyAgICAgKiAwIHRlcm1pbmF0ZWQgQVNTL1NTQSBjb21wYXRpYmxlIGV2ZW50 IGxpbmUuCisrICAgICAqIFRoZSBwcmVzZW50YXRpb24gb2YgdGhpcyBpcyB1bmFmZmVjdGVkIGJ5 IHRoZSBvdGhlciB2YWx1ZXMgaW4gdGhpcworKyAgICAgKiBzdHJ1Y3QuCisrICAgICAqLworKyAg ICBjaGFyICphc3M7CisrfSBBVlN1YnRpdGxlUmVjdDsKKysKKyt0eXBlZGVmIHN0cnVjdCBBVlN1 YnRpdGxlIHsKKysgICAgdWludDE2X3QgZm9ybWF0OyAvKiAwID0gZ3JhcGhpY3MgKi8KKysgICAg dWludDMyX3Qgc3RhcnRfZGlzcGxheV90aW1lOyAvKiByZWxhdGl2ZSB0byBwYWNrZXQgcHRzLCBp biBtcyAqLworKyAgICB1aW50MzJfdCBlbmRfZGlzcGxheV90aW1lOyAvKiByZWxhdGl2ZSB0byBw YWNrZXQgcHRzLCBpbiBtcyAqLworKyAgICB1bnNpZ25lZCBudW1fcmVjdHM7CisrICAgIEFWU3Vi dGl0bGVSZWN0ICoqcmVjdHM7CisrICAgIGludDY0X3QgcHRzOyAgICAvLy88IFNhbWUgYXMgcGFj a2V0IHB0cywgaW4gQVZfVElNRV9CQVNFCisrfSBBVlN1YnRpdGxlOworKworKy8qKgorKyAqIFJl dHVybiB0aGUgTElCQVZDT0RFQ19WRVJTSU9OX0lOVCBjb25zdGFudC4KKysgKi8KKyt1bnNpZ25l ZCBhdmNvZGVjX3ZlcnNpb24odm9pZCk7CisrCisrLyoqCisrICogUmV0dXJuIHRoZSBsaWJhdmNv ZGVjIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbi4KKysgKi8KKytjb25zdCBjaGFyICphdmNvZGVj X2NvbmZpZ3VyYXRpb24odm9pZCk7CisrCisrLyoqCisrICogUmV0dXJuIHRoZSBsaWJhdmNvZGVj IGxpY2Vuc2UuCisrICovCisrY29uc3QgY2hhciAqYXZjb2RlY19saWNlbnNlKHZvaWQpOworKwor Ky8qKgorKyAqIEFsbG9jYXRlIGFuIEFWQ29kZWNDb250ZXh0IGFuZCBzZXQgaXRzIGZpZWxkcyB0 byBkZWZhdWx0IHZhbHVlcy4gVGhlCisrICogcmVzdWx0aW5nIHN0cnVjdCBzaG91bGQgYmUgZnJl ZWQgd2l0aCBhdmNvZGVjX2ZyZWVfY29udGV4dCgpLgorKyAqCisrICogQHBhcmFtIGNvZGVjIGlm IG5vbi1OVUxMLCBhbGxvY2F0ZSBwcml2YXRlIGRhdGEgYW5kIGluaXRpYWxpemUgZGVmYXVsdHMK KysgKiAgICAgICAgICAgICAgZm9yIHRoZSBnaXZlbiBjb2RlYy4gSXQgaXMgaWxsZWdhbCB0byB0 aGVuIGNhbGwgYXZjb2RlY19vcGVuMigpCisrICogICAgICAgICAgICAgIHdpdGggYSBkaWZmZXJl bnQgY29kZWMuCisrICogICAgICAgICAgICAgIElmIE5VTEwsIHRoZW4gdGhlIGNvZGVjLXNwZWNp ZmljIGRlZmF1bHRzIHdvbid0IGJlIGluaXRpYWxpemVkLAorKyAqICAgICAgICAgICAgICB3aGlj aCBtYXkgcmVzdWx0IGluIHN1Ym9wdGltYWwgZGVmYXVsdCBzZXR0aW5ncyAodGhpcyBpcworKyAq ICAgICAgICAgICAgICBpbXBvcnRhbnQgbWFpbmx5IGZvciBlbmNvZGVycywgZS5nLiBsaWJ4MjY0 KS4KKysgKgorKyAqIEByZXR1cm4gQW4gQVZDb2RlY0NvbnRleHQgZmlsbGVkIHdpdGggZGVmYXVs dCB2YWx1ZXMgb3IgTlVMTCBvbiBmYWlsdXJlLgorKyAqLworK0FWQ29kZWNDb250ZXh0ICphdmNv ZGVjX2FsbG9jX2NvbnRleHQzKGNvbnN0IEFWQ29kZWMgKmNvZGVjKTsKKysKKysvKioKKysgKiBG cmVlIHRoZSBjb2RlYyBjb250ZXh0IGFuZCBldmVyeXRoaW5nIGFzc29jaWF0ZWQgd2l0aCBpdCBh bmQgd3JpdGUgTlVMTCB0bworKyAqIHRoZSBwcm92aWRlZCBwb2ludGVyLgorKyAqLworK3ZvaWQg YXZjb2RlY19mcmVlX2NvbnRleHQoQVZDb2RlY0NvbnRleHQgKiphdmN0eCk7CisrCisrLyoqCisr ICogR2V0IHRoZSBBVkNsYXNzIGZvciBBVkNvZGVjQ29udGV4dC4gSXQgY2FuIGJlIHVzZWQgaW4g Y29tYmluYXRpb24gd2l0aAorKyAqIEFWX09QVF9TRUFSQ0hfRkFLRV9PQkogZm9yIGV4YW1pbmlu ZyBvcHRpb25zLgorKyAqCisrICogQHNlZSBhdl9vcHRfZmluZCgpLgorKyAqLworK2NvbnN0IEFW Q2xhc3MgKmF2Y29kZWNfZ2V0X2NsYXNzKHZvaWQpOworKworKy8qKgorKyAqIEdldCB0aGUgQVZD bGFzcyBmb3IgQVZTdWJ0aXRsZVJlY3QuIEl0IGNhbiBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdp dGgKKysgKiBBVl9PUFRfU0VBUkNIX0ZBS0VfT0JKIGZvciBleGFtaW5pbmcgb3B0aW9ucy4KKysg KgorKyAqIEBzZWUgYXZfb3B0X2ZpbmQoKS4KKysgKi8KKytjb25zdCBBVkNsYXNzICphdmNvZGVj X2dldF9zdWJ0aXRsZV9yZWN0X2NsYXNzKHZvaWQpOworKworKy8qKgorKyAqIEZpbGwgdGhlIHBh cmFtZXRlcnMgc3RydWN0IGJhc2VkIG9uIHRoZSB2YWx1ZXMgZnJvbSB0aGUgc3VwcGxpZWQgY29k ZWMKKysgKiBjb250ZXh0LiBBbnkgYWxsb2NhdGVkIGZpZWxkcyBpbiBwYXIgYXJlIGZyZWVkIGFu ZCByZXBsYWNlZCB3aXRoIGR1cGxpY2F0ZXMKKysgKiBvZiB0aGUgY29ycmVzcG9uZGluZyBmaWVs ZHMgaW4gY29kZWMuCisrICoKKysgKiBAcmV0dXJuID49IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2 ZSBBVkVSUk9SIGNvZGUgb24gZmFpbHVyZQorKyAqCisrICogQHJlbGF0ZXMgQVZDb2RlY1BhcmFt ZXRlcnMKKysgKi8KKytpbnQgYXZjb2RlY19wYXJhbWV0ZXJzX2Zyb21fY29udGV4dChzdHJ1Y3Qg QVZDb2RlY1BhcmFtZXRlcnMgKnBhciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBBVkNvZGVjQ29udGV4dCAqY29kZWMpOworKworKy8qKgorKyAqIEZpbGwgdGhl IGNvZGVjIGNvbnRleHQgYmFzZWQgb24gdGhlIHZhbHVlcyBmcm9tIHRoZSBzdXBwbGllZCBjb2Rl YworKyAqIHBhcmFtZXRlcnMuIEFueSBhbGxvY2F0ZWQgZmllbGRzIGluIGNvZGVjIHRoYXQgaGF2 ZSBhIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4KKysgKiBwYXIgYXJlIGZyZWVkIGFuZCByZXBsYWNl ZCB3aXRoIGR1cGxpY2F0ZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gcGFyLgorKyAq IEZpZWxkcyBpbiBjb2RlYyB0aGF0IGRvIG5vdCBoYXZlIGEgY291bnRlcnBhcnQgaW4gcGFyIGFy ZSBub3QgdG91Y2hlZC4KKysgKgorKyAqIEByZXR1cm4gPj0gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0 aXZlIEFWRVJST1IgY29kZSBvbiBmYWlsdXJlLgorKyAqCisrICogQHJlbGF0ZXMgQVZDb2RlY1Bh cmFtZXRlcnMKKysgKi8KKytpbnQgYXZjb2RlY19wYXJhbWV0ZXJzX3RvX2NvbnRleHQoQVZDb2Rl Y0NvbnRleHQgKmNvZGVjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBzdHJ1Y3QgQVZDb2RlY1BhcmFtZXRlcnMgKnBhcik7CisrCisrLyoqCisrICogSW5pdGlhbGl6 ZSB0aGUgQVZDb2RlY0NvbnRleHQgdG8gdXNlIHRoZSBnaXZlbiBBVkNvZGVjLiBQcmlvciB0byB1 c2luZyB0aGlzCisrICogZnVuY3Rpb24gdGhlIGNvbnRleHQgaGFzIHRvIGJlIGFsbG9jYXRlZCB3 aXRoIGF2Y29kZWNfYWxsb2NfY29udGV4dDMoKS4KKysgKgorKyAqIFRoZSBmdW5jdGlvbnMgYXZj b2RlY19maW5kX2RlY29kZXJfYnlfbmFtZSgpLCBhdmNvZGVjX2ZpbmRfZW5jb2Rlcl9ieV9uYW1l KCksCisrICogYXZjb2RlY19maW5kX2RlY29kZXIoKSBhbmQgYXZjb2RlY19maW5kX2VuY29kZXIo KSBwcm92aWRlIGFuIGVhc3kgd2F5IGZvcgorKyAqIHJldHJpZXZpbmcgYSBjb2RlYy4KKysgKgor KyAqIERlcGVuZGluZyBvbiB0aGUgY29kZWMsIHlvdSBtaWdodCBuZWVkIHRvIHNldCBvcHRpb25z IGluIHRoZSBjb2RlYyBjb250ZXh0CisrICogYWxzbyBmb3IgZGVjb2RpbmcgKGUuZy4gd2lkdGgs IGhlaWdodCwgb3IgdGhlIHBpeGVsIG9yIGF1ZGlvIHNhbXBsZSBmb3JtYXQgaW4KKysgKiB0aGUg Y2FzZSB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYml0c3RyZWFtLCBh cyB3aGVuIGRlY29kaW5nCisrICogcmF3IGF1ZGlvIG9yIHZpZGVvKS4KKysgKgorKyAqIE9wdGlv bnMgaW4gdGhlIGNvZGVjIGNvbnRleHQgY2FuIGJlIHNldCBlaXRoZXIgYnkgc2V0dGluZyB0aGVt IGluIHRoZSBvcHRpb25zCisrICogQVZEaWN0aW9uYXJ5LCBvciBieSBzZXR0aW5nIHRoZSB2YWx1 ZXMgaW4gdGhlIGNvbnRleHQgaXRzZWxmLCBkaXJlY3RseSBvciBieQorKyAqIHVzaW5nIHRoZSBh dl9vcHRfc2V0KCkgQVBJIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisrICoKKysgKiBF eGFtcGxlOgorKyAqIEBjb2RlCisrICogYXZfZGljdF9zZXQoJm9wdHMsICJiIiwgIjIuNU0iLCAw KTsKKysgKiBjb2RlYyA9IGF2Y29kZWNfZmluZF9kZWNvZGVyKEFWX0NPREVDX0lEX0gyNjQpOwor KyAqIGlmICghY29kZWMpCisrICogICAgIGV4aXQoMSk7CisrICoKKysgKiBjb250ZXh0ID0gYXZj b2RlY19hbGxvY19jb250ZXh0Myhjb2RlYyk7CisrICoKKysgKiBpZiAoYXZjb2RlY19vcGVuMihj b250ZXh0LCBjb2RlYywgb3B0cykgPCAwKQorKyAqICAgICBleGl0KDEpOworKyAqIEBlbmRjb2Rl CisrICoKKysgKiBJbiB0aGUgY2FzZSBBVkNvZGVjUGFyYW1ldGVycyBhcmUgYXZhaWxhYmxlIChl LmcuIHdoZW4gZGVtdXhpbmcgYSBzdHJlYW0KKysgKiB1c2luZyBsaWJhdmZvcm1hdCwgYW5kIGFj Y2Vzc2luZyB0aGUgQVZTdHJlYW0gY29udGFpbmVkIGluIHRoZSBkZW11eGVyKSwgdGhlCisrICog Y29kZWMgcGFyYW1ldGVycyBjYW4gYmUgY29waWVkIHRvIHRoZSBjb2RlYyBjb250ZXh0IHVzaW5n CisrICogYXZjb2RlY19wYXJhbWV0ZXJzX3RvX2NvbnRleHQoKSwgYXMgaW4gdGhlIGZvbGxvd2lu ZyBleGFtcGxlOgorKyAqCisrICogQGNvZGUKKysgKiBBVlN0cmVhbSAqc3RyZWFtID0gLi4uOwor KyAqIGNvbnRleHQgPSBhdmNvZGVjX2FsbG9jX2NvbnRleHQzKGNvZGVjKTsKKysgKiBpZiAoYXZj b2RlY19wYXJhbWV0ZXJzX3RvX2NvbnRleHQoY29udGV4dCwgc3RyZWFtLT5jb2RlY3BhcikgPCAw KQorKyAqICAgICBleGl0KDEpOworKyAqIGlmIChhdmNvZGVjX29wZW4yKGNvbnRleHQsIGNvZGVj LCBOVUxMKSA8IDApCisrICogICAgIGV4aXQoMSk7CisrICogQGVuZGNvZGUKKysgKgorKyAqIEBu b3RlIEFsd2F5cyBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIHVzaW5nIGRlY29kaW5nIHJvdXRp bmVzIChzdWNoIGFzCisrICogQHJlZiBhdmNvZGVjX3JlY2VpdmVfZnJhbWUoKSkuCisrICoKKysg KiBAcGFyYW0gYXZjdHggVGhlIGNvbnRleHQgdG8gaW5pdGlhbGl6ZS4KKysgKiBAcGFyYW0gY29k ZWMgVGhlIGNvZGVjIHRvIG9wZW4gdGhpcyBjb250ZXh0IGZvci4gSWYgYSBub24tTlVMTCBjb2Rl YyBoYXMgYmVlbgorKyAqICAgICAgICAgICAgICBwcmV2aW91c2x5IHBhc3NlZCB0byBhdmNvZGVj X2FsbG9jX2NvbnRleHQzKCkgb3IKKysgKiAgICAgICAgICAgICAgZm9yIHRoaXMgY29udGV4dCwg dGhlbiB0aGlzIHBhcmFtZXRlciBNVVNUIGJlIGVpdGhlciBOVUxMIG9yCisrICogICAgICAgICAg ICAgIGVxdWFsIHRvIHRoZSBwcmV2aW91c2x5IHBhc3NlZCBjb2RlYy4KKysgKiBAcGFyYW0gb3B0 aW9ucyBBIGRpY3Rpb25hcnkgZmlsbGVkIHdpdGggQVZDb2RlY0NvbnRleHQgYW5kIGNvZGVjLXBy aXZhdGUKKysgKiAgICAgICAgICAgICAgICBvcHRpb25zLCB3aGljaCBhcmUgc2V0IG9uIHRvcCBv ZiB0aGUgb3B0aW9ucyBhbHJlYWR5IHNldCBpbgorKyAqICAgICAgICAgICAgICAgIGF2Y3R4LCBj YW4gYmUgTlVMTC4gT24gcmV0dXJuIHRoaXMgb2JqZWN0IHdpbGwgYmUgZmlsbGVkIHdpdGgKKysg KiAgICAgICAgICAgICAgICBvcHRpb25zIHRoYXQgd2VyZSBub3QgZm91bmQgaW4gdGhlIGF2Y3R4 IGNvZGVjIGNvbnRleHQuCisrICoKKysgKiBAcmV0dXJuIHplcm8gb24gc3VjY2VzcywgYSBuZWdh dGl2ZSB2YWx1ZSBvbiBlcnJvcgorKyAqIEBzZWUgYXZjb2RlY19hbGxvY19jb250ZXh0MygpLCBh dmNvZGVjX2ZpbmRfZGVjb2RlcigpLCBhdmNvZGVjX2ZpbmRfZW5jb2RlcigpLAorKyAqICAgICAg YXZfZGljdF9zZXQoKSwgYXZfb3B0X3NldCgpLCBhdl9vcHRfZmluZCgpLCBhdmNvZGVjX3BhcmFt ZXRlcnNfdG9fY29udGV4dCgpCisrICovCisraW50IGF2Y29kZWNfb3BlbjIoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LCBjb25zdCBBVkNvZGVjICpjb2RlYywgQVZEaWN0aW9uYXJ5ICoqb3B0aW9ucyk7 CisrCisrLyoqCisrICogRnJlZSBhbGwgYWxsb2NhdGVkIGRhdGEgaW4gdGhlIGdpdmVuIHN1YnRp dGxlIHN0cnVjdC4KKysgKgorKyAqIEBwYXJhbSBzdWIgQVZTdWJ0aXRsZSB0byBmcmVlLgorKyAq LworK3ZvaWQgYXZzdWJ0aXRsZV9mcmVlKEFWU3VidGl0bGUgKnN1Yik7CisrCisrLyoqCisrICog QH0KKysgKi8KKysKKysvKioKKysgKiBAYWRkdG9ncm91cCBsYXZjX2RlY29kaW5nCisrICogQHsK KysgKi8KKysKKysvKioKKysgKiBUaGUgZGVmYXVsdCBjYWxsYmFjayBmb3IgQVZDb2RlY0NvbnRl eHQuZ2V0X2J1ZmZlcjIoKS4gSXQgaXMgbWFkZSBwdWJsaWMgc28KKysgKiBpdCBjYW4gYmUgY2Fs bGVkIGJ5IGN1c3RvbSBnZXRfYnVmZmVyMigpIGltcGxlbWVudGF0aW9ucyBmb3IgZGVjb2RlcnMg d2l0aG91dAorKyAqIEFWX0NPREVDX0NBUF9EUjEgc2V0LgorKyAqLworK2ludCBhdmNvZGVjX2Rl ZmF1bHRfZ2V0X2J1ZmZlcjIoQVZDb2RlY0NvbnRleHQgKnMsIEFWRnJhbWUgKmZyYW1lLCBpbnQg ZmxhZ3MpOworKworKy8qKgorKyAqIFRoZSBkZWZhdWx0IGNhbGxiYWNrIGZvciBBVkNvZGVjQ29u dGV4dC5nZXRfZW5jb2RlX2J1ZmZlcigpLiBJdCBpcyBtYWRlIHB1YmxpYyBzbworKyAqIGl0IGNh biBiZSBjYWxsZWQgYnkgY3VzdG9tIGdldF9lbmNvZGVfYnVmZmVyKCkgaW1wbGVtZW50YXRpb25z IGZvciBlbmNvZGVycyB3aXRob3V0CisrICogQVZfQ09ERUNfQ0FQX0RSMSBzZXQuCisrICovCisr aW50IGF2Y29kZWNfZGVmYXVsdF9nZXRfZW5jb2RlX2J1ZmZlcihBVkNvZGVjQ29udGV4dCAqcywg QVZQYWNrZXQgKnBrdCwgaW50IGZsYWdzKTsKKysKKysvKioKKysgKiBNb2RpZnkgd2lkdGggYW5k IGhlaWdodCB2YWx1ZXMgc28gdGhhdCB0aGV5IHdpbGwgcmVzdWx0IGluIGEgbWVtb3J5CisrICog YnVmZmVyIHRoYXQgaXMgYWNjZXB0YWJsZSBmb3IgdGhlIGNvZGVjIGlmIHlvdSBkbyBub3QgdXNl IGFueSBob3Jpem9udGFsCisrICogcGFkZGluZy4KKysgKgorKyAqIE1heSBvbmx5IGJlIHVzZWQg aWYgYSBjb2RlYyB3aXRoIEFWX0NPREVDX0NBUF9EUjEgaGFzIGJlZW4gb3BlbmVkLgorKyAqLwor K3ZvaWQgYXZjb2RlY19hbGlnbl9kaW1lbnNpb25zKEFWQ29kZWNDb250ZXh0ICpzLCBpbnQgKndp ZHRoLCBpbnQgKmhlaWdodCk7CisrCisrLyoqCisrICogTW9kaWZ5IHdpZHRoIGFuZCBoZWlnaHQg dmFsdWVzIHNvIHRoYXQgdGhleSB3aWxsIHJlc3VsdCBpbiBhIG1lbW9yeQorKyAqIGJ1ZmZlciB0 aGF0IGlzIGFjY2VwdGFibGUgZm9yIHRoZSBjb2RlYyBpZiB5b3UgYWxzbyBlbnN1cmUgdGhhdCBh bGwKKysgKiBsaW5lIHNpemVzIGFyZSBhIG11bHRpcGxlIG9mIHRoZSByZXNwZWN0aXZlIGxpbmVz aXplX2FsaWduW2ldLgorKyAqCisrICogTWF5IG9ubHkgYmUgdXNlZCBpZiBhIGNvZGVjIHdpdGgg QVZfQ09ERUNfQ0FQX0RSMSBoYXMgYmVlbiBvcGVuZWQuCisrICovCisrdm9pZCBhdmNvZGVjX2Fs aWduX2RpbWVuc2lvbnMyKEFWQ29kZWNDb250ZXh0ICpzLCBpbnQgKndpZHRoLCBpbnQgKmhlaWdo dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVzaXplX2FsaWduW0FW X05VTV9EQVRBX1BPSU5URVJTXSk7CisrCisrLyoqCisrICogRGVjb2RlIGEgc3VidGl0bGUgbWVz c2FnZS4KKysgKiBSZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciwgb3RoZXJ3aXNlIHJl dHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVzZWQuCisrICogSWYgbm8gc3VidGl0bGUgY291bGQg YmUgZGVjb21wcmVzc2VkLCBnb3Rfc3ViX3B0ciBpcyB6ZXJvLgorKyAqIE90aGVyd2lzZSwgdGhl IHN1YnRpdGxlIGlzIHN0b3JlZCBpbiAqc3ViLgorKyAqIE5vdGUgdGhhdCBBVl9DT0RFQ19DQVBf RFIxIGlzIG5vdCBhdmFpbGFibGUgZm9yIHN1YnRpdGxlIGNvZGVjcy4gVGhpcyBpcyBmb3IKKysg KiBzaW1wbGljaXR5LCBiZWNhdXNlIHRoZSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIGlzIGV4cGVj dGVkIHRvIGJlIG5lZ2xpZ2libGUKKysgKiBhbmQgcmV1c2luZyBhIGdldF9idWZmZXIgd3JpdHRl biBmb3IgdmlkZW8gY29kZWNzIHdvdWxkIHByb2JhYmx5IHBlcmZvcm0gYmFkbHkKKysgKiBkdWUg dG8gYSBwb3RlbnRpYWxseSB2ZXJ5IGRpZmZlcmVudCBhbGxvY2F0aW9uIHBhdHRlcm4uCisrICoK KysgKiBTb21lIGRlY29kZXJzICh0aG9zZSBtYXJrZWQgd2l0aCBBVl9DT0RFQ19DQVBfREVMQVkp IGhhdmUgYSBkZWxheSBiZXR3ZWVuIGlucHV0CisrICogYW5kIG91dHB1dC4gVGhpcyBtZWFucyB0 aGF0IGZvciBzb21lIHBhY2tldHMgdGhleSB3aWxsIG5vdCBpbW1lZGlhdGVseQorKyAqIHByb2R1 Y2UgZGVjb2RlZCBvdXRwdXQgYW5kIG5lZWQgdG8gYmUgZmx1c2hlZCBhdCB0aGUgZW5kIG9mIGRl Y29kaW5nIHRvIGdldAorKyAqIGFsbCB0aGUgZGVjb2RlZCBkYXRhLiBGbHVzaGluZyBpcyBkb25l IGJ5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIHBhY2tldHMKKysgKiB3aXRoIGF2cGt0LT5k YXRhIHNldCB0byBOVUxMIGFuZCBhdnBrdC0+c2l6ZSBzZXQgdG8gMCB1bnRpbCBpdCBzdG9wcwor KyAqIHJldHVybmluZyBzdWJ0aXRsZXMuIEl0IGlzIHNhZmUgdG8gZmx1c2ggZXZlbiB0aG9zZSBk ZWNvZGVycyB0aGF0IGFyZSBub3QKKysgKiBtYXJrZWQgd2l0aCBBVl9DT0RFQ19DQVBfREVMQVks IHRoZW4gbm8gc3VidGl0bGVzIHdpbGwgYmUgcmV0dXJuZWQuCisrICoKKysgKiBAbm90ZSBUaGUg QVZDb2RlY0NvbnRleHQgTVVTVCBoYXZlIGJlZW4gb3BlbmVkIHdpdGggQHJlZiBhdmNvZGVjX29w ZW4yKCkKKysgKiBiZWZvcmUgcGFja2V0cyBtYXkgYmUgZmVkIHRvIHRoZSBkZWNvZGVyLgorKyAq CisrICogQHBhcmFtIGF2Y3R4IHRoZSBjb2RlYyBjb250ZXh0CisrICogQHBhcmFtW291dF0gc3Vi IFRoZSBwcmVhbGxvY2F0ZWQgQVZTdWJ0aXRsZSBpbiB3aGljaCB0aGUgZGVjb2RlZCBzdWJ0aXRs ZSB3aWxsIGJlIHN0b3JlZCwKKysgKiAgICAgICAgICAgICAgICAgbXVzdCBiZSBmcmVlZCB3aXRo IGF2c3VidGl0bGVfZnJlZSBpZiAqZ290X3N1Yl9wdHIgaXMgc2V0LgorKyAqIEBwYXJhbVtpbixv dXRdIGdvdF9zdWJfcHRyIFplcm8gaWYgbm8gc3VidGl0bGUgY291bGQgYmUgZGVjb21wcmVzc2Vk LCBvdGhlcndpc2UsIGl0IGlzIG5vbnplcm8uCisrICogQHBhcmFtW2luXSBhdnBrdCBUaGUgaW5w dXQgQVZQYWNrZXQgY29udGFpbmluZyB0aGUgaW5wdXQgYnVmZmVyLgorKyAqLworK2ludCBhdmNv ZGVjX2RlY29kZV9zdWJ0aXRsZTIoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVlN1YnRpdGxlICpz dWIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmdvdF9zdWJfcHRyLCBjb25z dCBBVlBhY2tldCAqYXZwa3QpOworKworKy8qKgorKyAqIFN1cHBseSByYXcgcGFja2V0IGRhdGEg YXMgaW5wdXQgdG8gYSBkZWNvZGVyLgorKyAqCisrICogSW50ZXJuYWxseSwgdGhpcyBjYWxsIHdp bGwgY29weSByZWxldmFudCBBVkNvZGVjQ29udGV4dCBmaWVsZHMsIHdoaWNoIGNhbgorKyAqIGlu Zmx1ZW5jZSBkZWNvZGluZyBwZXItcGFja2V0LCBhbmQgYXBwbHkgdGhlbSB3aGVuIHRoZSBwYWNr ZXQgaXMgYWN0dWFsbHkKKysgKiBkZWNvZGVkLiAoRm9yIGV4YW1wbGUgQVZDb2RlY0NvbnRleHQu c2tpcF9mcmFtZSwgd2hpY2ggbWlnaHQgZGlyZWN0IHRoZQorKyAqIGRlY29kZXIgdG8gZHJvcCB0 aGUgZnJhbWUgY29udGFpbmVkIGJ5IHRoZSBwYWNrZXQgc2VudCB3aXRoIHRoaXMgZnVuY3Rpb24u KQorKyAqCisrICogQHdhcm5pbmcgVGhlIGlucHV0IGJ1ZmZlciwgYXZwa3QtPmRhdGEgbXVzdCBi ZSBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFCisrICogICAgICAgICAgbGFyZ2VyIHRoYW4g dGhlIGFjdHVhbCByZWFkIGJ5dGVzIGJlY2F1c2Ugc29tZSBvcHRpbWl6ZWQgYml0c3RyZWFtCisr ICogICAgICAgICAgcmVhZGVycyByZWFkIDMyIG9yIDY0IGJpdHMgYXQgb25jZSBhbmQgY291bGQg cmVhZCBvdmVyIHRoZSBlbmQuCisrICoKKysgKiBAbm90ZSBUaGUgQVZDb2RlY0NvbnRleHQgTVVT VCBoYXZlIGJlZW4gb3BlbmVkIHdpdGggQHJlZiBhdmNvZGVjX29wZW4yKCkKKysgKiAgICAgICBi ZWZvcmUgcGFja2V0cyBtYXkgYmUgZmVkIHRvIHRoZSBkZWNvZGVyLgorKyAqCisrICogQHBhcmFt IGF2Y3R4IGNvZGVjIGNvbnRleHQKKysgKiBAcGFyYW1baW5dIGF2cGt0IFRoZSBpbnB1dCBBVlBh Y2tldC4gVXN1YWxseSwgdGhpcyB3aWxsIGJlIGEgc2luZ2xlIHZpZGVvCisrICogICAgICAgICAg ICAgICAgICBmcmFtZSwgb3Igc2V2ZXJhbCBjb21wbGV0ZSBhdWRpbyBmcmFtZXMuCisrICogICAg ICAgICAgICAgICAgICBPd25lcnNoaXAgb2YgdGhlIHBhY2tldCByZW1haW5zIHdpdGggdGhlIGNh bGxlciwgYW5kIHRoZQorKyAqICAgICAgICAgICAgICAgICAgZGVjb2RlciB3aWxsIG5vdCB3cml0 ZSB0byB0aGUgcGFja2V0LiBUaGUgZGVjb2RlciBtYXkgY3JlYXRlCisrICogICAgICAgICAgICAg ICAgICBhIHJlZmVyZW5jZSB0byB0aGUgcGFja2V0IGRhdGEgKG9yIGNvcHkgaXQgaWYgdGhlIHBh Y2tldCBpcworKyAqICAgICAgICAgICAgICAgICAgbm90IHJlZmVyZW5jZS1jb3VudGVkKS4KKysg KiAgICAgICAgICAgICAgICAgIFVubGlrZSB3aXRoIG9sZGVyIEFQSXMsIHRoZSBwYWNrZXQgaXMg YWx3YXlzIGZ1bGx5IGNvbnN1bWVkLAorKyAqICAgICAgICAgICAgICAgICAgYW5kIGlmIGl0IGNv bnRhaW5zIG11bHRpcGxlIGZyYW1lcyAoZS5nLiBzb21lIGF1ZGlvIGNvZGVjcyksCisrICogICAg ICAgICAgICAgICAgICB3aWxsIHJlcXVpcmUgeW91IHRvIGNhbGwgYXZjb2RlY19yZWNlaXZlX2Zy YW1lKCkgbXVsdGlwbGUKKysgKiAgICAgICAgICAgICAgICAgIHRpbWVzIGFmdGVyd2FyZHMgYmVm b3JlIHlvdSBjYW4gc2VuZCBhIG5ldyBwYWNrZXQuCisrICogICAgICAgICAgICAgICAgICBJdCBj YW4gYmUgTlVMTCAob3IgYW4gQVZQYWNrZXQgd2l0aCBkYXRhIHNldCB0byBOVUxMIGFuZAorKyAq ICAgICAgICAgICAgICAgICAgc2l6ZSBzZXQgdG8gMCk7IGluIHRoaXMgY2FzZSwgaXQgaXMgY29u c2lkZXJlZCBhIGZsdXNoCisrICogICAgICAgICAgICAgICAgICBwYWNrZXQsIHdoaWNoIHNpZ25h bHMgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLiBTZW5kaW5nIHRoZQorKyAqICAgICAgICAgICAgICAg ICAgZmlyc3QgZmx1c2ggcGFja2V0IHdpbGwgcmV0dXJuIHN1Y2Nlc3MuIFN1YnNlcXVlbnQgb25l cyBhcmUKKysgKiAgICAgICAgICAgICAgICAgIHVubmVjZXNzYXJ5IGFuZCB3aWxsIHJldHVybiBB VkVSUk9SX0VPRi4gSWYgdGhlIGRlY29kZXIKKysgKiAgICAgICAgICAgICAgICAgIHN0aWxsIGhh cyBmcmFtZXMgYnVmZmVyZWQsIGl0IHdpbGwgcmV0dXJuIHRoZW0gYWZ0ZXIgc2VuZGluZworKyAq ICAgICAgICAgICAgICAgICAgYSBmbHVzaCBwYWNrZXQuCisrICoKKysgKiBAcmV0dmFsIDAgICAg ICAgICAgICAgICAgIHN1Y2Nlc3MKKysgKiBAcmV0dmFsIEFWRVJST1IoRUFHQUlOKSAgIGlucHV0 IGlzIG5vdCBhY2NlcHRlZCBpbiB0aGUgY3VycmVudCBzdGF0ZSAtIHVzZXIKKysgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgIG11c3QgcmVhZCBvdXRwdXQgd2l0aCBhdmNvZGVjX3JlY2VpdmVf ZnJhbWUoKSAob25jZQorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsIG91dHB1dCBp cyByZWFkLCB0aGUgcGFja2V0IHNob3VsZCBiZSByZXNlbnQsCisrICogICAgICAgICAgICAgICAg ICAgICAgICAgICBhbmQgdGhlIGNhbGwgd2lsbCBub3QgZmFpbCB3aXRoIEVBR0FJTikuCisrICog QHJldHZhbCBBVkVSUk9SX0VPRiAgICAgICB0aGUgZGVjb2RlciBoYXMgYmVlbiBmbHVzaGVkLCBh bmQgbm8gbmV3IHBhY2tldHMgY2FuIGJlCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICBz ZW50IHRvIGl0IChhbHNvIHJldHVybmVkIGlmIG1vcmUgdGhhbiAxIGZsdXNoCisrICogICAgICAg ICAgICAgICAgICAgICAgICAgICBwYWNrZXQgaXMgc2VudCkKKysgKiBAcmV0dmFsIEFWRVJST1Io RUlOVkFMKSAgIGNvZGVjIG5vdCBvcGVuZWQsIGl0IGlzIGFuIGVuY29kZXIsIG9yIHJlcXVpcmVz IGZsdXNoCisrICogQHJldHZhbCBBVkVSUk9SKEVOT01FTSkgICBmYWlsZWQgdG8gYWRkIHBhY2tl dCB0byBpbnRlcm5hbCBxdWV1ZSwgb3Igc2ltaWxhcgorKyAqIEByZXR2YWwgImFub3RoZXIgbmVn YXRpdmUgZXJyb3IgY29kZSIgbGVnaXRpbWF0ZSBkZWNvZGluZyBlcnJvcnMKKysgKi8KKytpbnQg YXZjb2RlY19zZW5kX3BhY2tldChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGNvbnN0IEFWUGFja2V0 ICphdnBrdCk7CisrCisrLyoqCisrICogUmV0dXJuIGRlY29kZWQgb3V0cHV0IGRhdGEgZnJvbSBh IGRlY29kZXIgb3IgZW5jb2RlciAod2hlbiB0aGUKKysgKiBAcmVmIEFWX0NPREVDX0ZMQUdfUkVD T05fRlJBTUUgZmxhZyBpcyB1c2VkKS4KKysgKgorKyAqIEBwYXJhbSBhdmN0eCBjb2RlYyBjb250 ZXh0CisrICogQHBhcmFtIGZyYW1lIFRoaXMgd2lsbCBiZSBzZXQgdG8gYSByZWZlcmVuY2UtY291 bnRlZCB2aWRlbyBvciBhdWRpbworKyAqICAgICAgICAgICAgICBmcmFtZSAoZGVwZW5kaW5nIG9u IHRoZSBkZWNvZGVyIHR5cGUpIGFsbG9jYXRlZCBieSB0aGUKKysgKiAgICAgICAgICAgICAgY29k ZWMuIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gd2lsbCBhbHdheXMgY2FsbAorKyAqICAgICAgICAg ICAgICBhdl9mcmFtZV91bnJlZihmcmFtZSkgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCisr ICogQHBhcmFtIGZsYWdzIENvbWJpbmF0aW9uIG9mIEFWX0NPREVDX1JFQ0VJVkVfRlJBTUVfRkxB R18qIGZsYWdzLgorKyAqCisrICogQHJldHZhbCAwICAgICAgICAgICAgICAgIHN1Y2Nlc3MsIGEg ZnJhbWUgd2FzIHJldHVybmVkCisrICogQHJldHZhbCBBVkVSUk9SKEVBR0FJTikgIG91dHB1dCBp cyBub3QgYXZhaWxhYmxlIGluIHRoaXMgc3RhdGUgLSB1c2VyIG11c3QKKysgKiAgICAgICAgICAg ICAgICAgICAgICAgICAgdHJ5IHRvIHNlbmQgbmV3IGlucHV0CisrICogQHJldHZhbCBBVkVSUk9S X0VPRiAgICAgIHRoZSBjb2RlYyBoYXMgYmVlbiBmdWxseSBmbHVzaGVkLCBhbmQgdGhlcmUgd2ls bCBiZQorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBubyBtb3JlIG91dHB1dCBmcmFtZXMK KysgKiBAcmV0dmFsIEFWRVJST1IoRUlOVkFMKSAgY29kZWMgbm90IG9wZW5lZCwgb3IgaXQgaXMg YW4gZW5jb2RlciB3aXRob3V0IHRoZQorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBAcmVm IEFWX0NPREVDX0ZMQUdfUkVDT05fRlJBTUUgZmxhZyBlbmFibGVkCisrICogQHJldHZhbCAib3Ro ZXIgbmVnYXRpdmUgZXJyb3IgY29kZSIgbGVnaXRpbWF0ZSBkZWNvZGluZyBlcnJvcnMKKysgKi8K KytpbnQgYXZjb2RlY19yZWNlaXZlX2ZyYW1lX2ZsYWdzKEFWQ29kZWNDb250ZXh0ICphdmN0eCwg QVZGcmFtZSAqZnJhbWUsIHVuc2lnbmVkIGZsYWdzKTsKKysKKysvKioKKysgKiBBbGlhcyBmb3Ig YGF2Y29kZWNfcmVjZWl2ZV9mcmFtZV9mbGFncyhhdmN0eCwgZnJhbWUsIDApYC4KKysgKi8KKytp bnQgYXZjb2RlY19yZWNlaXZlX2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZGcmFtZSAq ZnJhbWUpOworKworKy8qKgorKyAqIFN1cHBseSBhIHJhdyB2aWRlbyBvciBhdWRpbyBmcmFtZSB0 byB0aGUgZW5jb2Rlci4gVXNlIGF2Y29kZWNfcmVjZWl2ZV9wYWNrZXQoKQorKyAqIHRvIHJldHJp ZXZlIGJ1ZmZlcmVkIG91dHB1dCBwYWNrZXRzLgorKyAqCisrICogQHBhcmFtIGF2Y3R4ICAgICBj b2RlYyBjb250ZXh0CisrICogQHBhcmFtW2luXSBmcmFtZSBBVkZyYW1lIGNvbnRhaW5pbmcgdGhl IHJhdyBhdWRpbyBvciB2aWRlbyBmcmFtZSB0byBiZSBlbmNvZGVkLgorKyAqICAgICAgICAgICAg ICAgICAgT3duZXJzaGlwIG9mIHRoZSBmcmFtZSByZW1haW5zIHdpdGggdGhlIGNhbGxlciwgYW5k IHRoZQorKyAqICAgICAgICAgICAgICAgICAgZW5jb2RlciB3aWxsIG5vdCB3cml0ZSB0byB0aGUg ZnJhbWUuIFRoZSBlbmNvZGVyIG1heSBjcmVhdGUKKysgKiAgICAgICAgICAgICAgICAgIGEgcmVm ZXJlbmNlIHRvIHRoZSBmcmFtZSBkYXRhIChvciBjb3B5IGl0IGlmIHRoZSBmcmFtZSBpcworKyAq ICAgICAgICAgICAgICAgICAgbm90IHJlZmVyZW5jZS1jb3VudGVkKS4KKysgKiAgICAgICAgICAg ICAgICAgIEl0IGNhbiBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIGl0IGlzIGNvbnNpZGVyZWQgYSBm bHVzaAorKyAqICAgICAgICAgICAgICAgICAgcGFja2V0LiAgVGhpcyBzaWduYWxzIHRoZSBlbmQg b2YgdGhlIHN0cmVhbS4gSWYgdGhlIGVuY29kZXIKKysgKiAgICAgICAgICAgICAgICAgIHN0aWxs IGhhcyBwYWNrZXRzIGJ1ZmZlcmVkLCBpdCB3aWxsIHJldHVybiB0aGVtIGFmdGVyIHRoaXMKKysg KiAgICAgICAgICAgICAgICAgIGNhbGwuIE9uY2UgZmx1c2hpbmcgbW9kZSBoYXMgYmVlbiBlbnRl cmVkLCBhZGRpdGlvbmFsIGZsdXNoCisrICogICAgICAgICAgICAgICAgICBwYWNrZXRzIGFyZSBp Z25vcmVkLCBhbmQgc2VuZGluZyBmcmFtZXMgd2lsbCByZXR1cm4KKysgKiAgICAgICAgICAgICAg ICAgIEFWRVJST1JfRU9GLgorKyAqCisrICogICAgICAgICAgICAgICAgICBGb3IgYXVkaW86Cisr ICogICAgICAgICAgICAgICAgICBJZiBBVl9DT0RFQ19DQVBfVkFSSUFCTEVfRlJBTUVfU0laRSBp cyBzZXQsIHRoZW4gZWFjaCBmcmFtZQorKyAqICAgICAgICAgICAgICAgICAgY2FuIGhhdmUgYW55 IG51bWJlciBvZiBzYW1wbGVzLgorKyAqICAgICAgICAgICAgICAgICAgSWYgaXQgaXMgbm90IHNl dCwgb3IgQVZfQ09ERUNfRkxBRzJfRklYRURfRlJBTUVfU0laRSB3YXMKKysgKiAgICAgICAgICAg ICAgICAgIHJlcXVlc3RlZCwgdGhlbiBmcmFtZS0+bmJfc2FtcGxlcyBtdXN0IGJlIGVxdWFsIHRv CisrICogICAgICAgICAgICAgICAgICBhdmN0eC0+ZnJhbWVfc2l6ZSBmb3IgYWxsIGZyYW1lcyBl eGNlcHQgdGhlIGxhc3QuCisrICogICAgICAgICAgICAgICAgICBUaGUgZmluYWwgZnJhbWUgbWF5 IGJlIHNtYWxsZXIgdGhhbiBhdmN0eC0+ZnJhbWVfc2l6ZS4KKysgKiBAcmV0dmFsIDAgICAgICAg ICAgICAgICAgIHN1Y2Nlc3MKKysgKiBAcmV0dmFsIEFWRVJST1IoRUFHQUlOKSAgIGlucHV0IGlz IG5vdCBhY2NlcHRlZCBpbiB0aGUgY3VycmVudCBzdGF0ZSAtIHVzZXIgbXVzdAorKyAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVhZCBvdXRwdXQgd2l0aCBhdmNvZGVjX3JlY2VpdmVfcGFj a2V0KCkgKG9uY2UgYWxsCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgaXMg cmVhZCwgdGhlIHBhY2tldCBzaG91bGQgYmUgcmVzZW50LCBhbmQgdGhlCisrICogICAgICAgICAg ICAgICAgICAgICAgICAgICBjYWxsIHdpbGwgbm90IGZhaWwgd2l0aCBFQUdBSU4pLgorKyAqIEBy ZXR2YWwgQVZFUlJPUl9FT0YgICAgICAgdGhlIGVuY29kZXIgaGFzIGJlZW4gZmx1c2hlZCwgYW5k IG5vIG5ldyBmcmFtZXMgY2FuCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBzZW50 IHRvIGl0CisrICogQHJldHZhbCBBVkVSUk9SKEVJTlZBTCkgICBjb2RlYyBub3Qgb3BlbmVkLCBp dCBpcyBhIGRlY29kZXIsIG9yIHJlcXVpcmVzIGZsdXNoCisrICogQHJldHZhbCBBVkVSUk9SKEVO T01FTSkgICBmYWlsZWQgdG8gYWRkIHBhY2tldCB0byBpbnRlcm5hbCBxdWV1ZSwgb3Igc2ltaWxh cgorKyAqIEByZXR2YWwgImFub3RoZXIgbmVnYXRpdmUgZXJyb3IgY29kZSIgbGVnaXRpbWF0ZSBl bmNvZGluZyBlcnJvcnMKKysgKi8KKytpbnQgYXZjb2RlY19zZW5kX2ZyYW1lKEFWQ29kZWNDb250 ZXh0ICphdmN0eCwgY29uc3QgQVZGcmFtZSAqZnJhbWUpOworKworKy8qKgorKyAqIFJlYWQgZW5j b2RlZCBkYXRhIGZyb20gdGhlIGVuY29kZXIuCisrICoKKysgKiBAcGFyYW0gYXZjdHggY29kZWMg Y29udGV4dAorKyAqIEBwYXJhbSBhdnBrdCBUaGlzIHdpbGwgYmUgc2V0IHRvIGEgcmVmZXJlbmNl LWNvdW50ZWQgcGFja2V0IGFsbG9jYXRlZCBieSB0aGUKKysgKiAgICAgICAgICAgICAgZW5jb2Rl ci4gTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiB3aWxsIGFsd2F5cyBjYWxsCisrICogICAgICAgICAg ICAgIGF2X3BhY2tldF91bnJlZihhdnBrdCkgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCisr ICogQHJldHZhbCAwICAgICAgICAgICAgICAgc3VjY2VzcworKyAqIEByZXR2YWwgQVZFUlJPUihF QUdBSU4pIG91dHB1dCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IHN0YXRlIC0gdXNl ciBtdXN0CisrICogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIHNlbmQgaW5wdXQKKysg KiBAcmV0dmFsIEFWRVJST1JfRU9GICAgICB0aGUgZW5jb2RlciBoYXMgYmVlbiBmdWxseSBmbHVz aGVkLCBhbmQgdGhlcmUgd2lsbCBiZSBubworKyAqICAgICAgICAgICAgICAgICAgICAgICAgIG1v cmUgb3V0cHV0IHBhY2tldHMKKysgKiBAcmV0dmFsIEFWRVJST1IoRUlOVkFMKSBjb2RlYyBub3Qg b3BlbmVkLCBvciBpdCBpcyBhIGRlY29kZXIKKysgKiBAcmV0dmFsICJhbm90aGVyIG5lZ2F0aXZl IGVycm9yIGNvZGUiIGxlZ2l0aW1hdGUgZW5jb2RpbmcgZXJyb3JzCisrICovCisraW50IGF2Y29k ZWNfcmVjZWl2ZV9wYWNrZXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVlBhY2tldCAqYXZwa3Qp OworKworKy8qKgorKyAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgQVZIV0ZyYW1lc0NvbnRleHQgd2l0 aCB2YWx1ZXMgYWRlcXVhdGUgZm9yIGhhcmR3YXJlCisrICogZGVjb2RpbmcuIFRoaXMgaXMgbWVh bnQgdG8gZ2V0IGNhbGxlZCBmcm9tIHRoZSBnZXRfZm9ybWF0IGNhbGxiYWNrLCBhbmQgaXMKKysg KiBhIGhlbHBlciBmb3IgcHJlcGFyaW5nIGEgQVZIV0ZyYW1lc0NvbnRleHQgZm9yIEFWQ29kZWND b250ZXh0Lmh3X2ZyYW1lc19jdHguCisrICogVGhpcyBBUEkgaXMgZm9yIGRlY29kaW5nIHdpdGgg Y2VydGFpbiBoYXJkd2FyZSBhY2NlbGVyYXRpb24gbW9kZXMvQVBJcyBvbmx5LgorKyAqCisrICog VGhlIHJldHVybmVkIEFWSFdGcmFtZXNDb250ZXh0IGlzIG5vdCBpbml0aWFsaXplZC4gVGhlIGNh bGxlciBtdXN0IGRvIHRoaXMKKysgKiB3aXRoIGF2X2h3ZnJhbWVfY3R4X2luaXQoKS4KKysgKgor KyAqIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBpcyBub3QgYSByZXF1aXJlbWVudCwgYnV0IG1ha2Vz IGl0IHNpbXBsZXIgdG8gYXZvaWQKKysgKiBjb2RlYyBvciBoYXJkd2FyZSBBUEkgc3BlY2lmaWMg ZGV0YWlscyB3aGVuIG1hbnVhbGx5IGFsbG9jYXRpbmcgZnJhbWVzLgorKyAqCisrICogQWx0ZXJu YXRpdmVseSB0byB0aGlzLCBhbiBBUEkgdXNlciBjYW4gc2V0IEFWQ29kZWNDb250ZXh0Lmh3X2Rl dmljZV9jdHgsCisrICogd2hpY2ggc2V0cyB1cCBBVkNvZGVjQ29udGV4dC5od19mcmFtZXNfY3R4 IGZ1bGx5IGF1dG9tYXRpY2FsbHksIGFuZCBtYWtlcworKyAqIGl0IHVubmVjZXNzYXJ5IHRvIGNh bGwgdGhpcyBmdW5jdGlvbiBvciBoYXZpbmcgdG8gY2FyZSBhYm91dAorKyAqIEFWSFdGcmFtZXND b250ZXh0IGluaXRpYWxpemF0aW9uIGF0IGFsbC4KKysgKgorKyAqIFRoZXJlIGFyZSBhIG51bWJl ciBvZiByZXF1aXJlbWVudHMgZm9yIGNhbGxpbmcgdGhpcyBmdW5jdGlvbjoKKysgKgorKyAqIC0g SXQgbXVzdCBiZSBjYWxsZWQgZnJvbSBnZXRfZm9ybWF0IHdpdGggdGhlIHNhbWUgYXZjdHggcGFy YW1ldGVyIHRoYXQgd2FzCisrICogICBwYXNzZWQgdG8gZ2V0X2Zvcm1hdC4gQ2FsbGluZyBpdCBv dXRzaWRlIG9mIGdldF9mb3JtYXQgaXMgbm90IGFsbG93ZWQsIGFuZAorKyAqICAgY2FuIHRyaWdn ZXIgdW5kZWZpbmVkIGJlaGF2aW9yLgorKyAqIC0gVGhlIGZ1bmN0aW9uIGlzIG5vdCBhbHdheXMg c3VwcG9ydGVkIChzZWUgZGVzY3JpcHRpb24gb2YgcmV0dXJuIHZhbHVlcykuCisrICogICBFdmVu IGlmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBzdWNjZXNzZnVsbHksIGh3YWNjZWwgaW5pdGlhbGl6 YXRpb24gY291bGQKKysgKiAgIGZhaWwgbGF0ZXIuIChUaGUgZGVncmVlIHRvIHdoaWNoIGltcGxl bWVudGF0aW9ucyBjaGVjayB3aGV0aGVyIHRoZSBzdHJlYW0KKysgKiAgIGlzIGFjdHVhbGx5IHN1 cHBvcnRlZCB2YXJpZXMuIFNvbWUgZG8gdGhpcyBjaGVjayBvbmx5IGFmdGVyIHRoZSB1c2VyJ3MK KysgKiAgIGdldF9mb3JtYXQgY2FsbGJhY2sgcmV0dXJucy4pCisrICogLSBUaGUgaHdfcGl4X2Zt dCBtdXN0IGJlIG9uZSBvZiB0aGUgY2hvaWNlcyBzdWdnZXN0ZWQgYnkgZ2V0X2Zvcm1hdC4gSWYg dGhlCisrICogICB1c2VyIGRlY2lkZXMgdG8gdXNlIGEgQVZIV0ZyYW1lc0NvbnRleHQgcHJlcGFy ZWQgd2l0aCB0aGlzIEFQSSBmdW5jdGlvbiwKKysgKiAgIHRoZSB1c2VyIG11c3QgcmV0dXJuIHRo ZSBzYW1lIGh3X3BpeF9mbXQgZnJvbSBnZXRfZm9ybWF0LgorKyAqIC0gVGhlIGRldmljZV9yZWYg cGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gbXVzdCBzdXBwb3J0IHRoZSBnaXZlbiBod19waXhfZm10 LgorKyAqIC0gQWZ0ZXIgY2FsbGluZyB0aGlzIEFQSSBmdW5jdGlvbiwgaXQgaXMgdGhlIHVzZXIn cyByZXNwb25zaWJpbGl0eSB0bworKyAqICAgaW5pdGlhbGl6ZSB0aGUgQVZIV0ZyYW1lc0NvbnRl eHQgKHJldHVybmVkIGJ5IHRoZSBvdXRfZnJhbWVzX3JlZiBwYXJhbWV0ZXIpLAorKyAqICAgYW5k IHRvIHNldCBBVkNvZGVjQ29udGV4dC5od19mcmFtZXNfY3R4IHRvIGl0LiBJZiBkb25lLCB0aGlz IG11c3QgYmUgZG9uZQorKyAqICAgYmVmb3JlIHJldHVybmluZyBmcm9tIGdldF9mb3JtYXQgKHRo aXMgaXMgaW1wbGllZCBieSB0aGUgbm9ybWFsCisrICogICBBVkNvZGVjQ29udGV4dC5od19mcmFt ZXNfY3R4IEFQSSBydWxlcykuCisrICogLSBUaGUgQVZIV0ZyYW1lc0NvbnRleHQgcGFyYW1ldGVy cyBtYXkgY2hhbmdlIGV2ZXJ5IHRpbWUgdGltZSBnZXRfZm9ybWF0IGlzCisrICogICBjYWxsZWQu IEFsc28sIEFWQ29kZWNDb250ZXh0Lmh3X2ZyYW1lc19jdHggaXMgcmVzZXQgYmVmb3JlIGdldF9m b3JtYXQuIFNvCisrICogICB5b3UgYXJlIGluaGVyZW50bHkgcmVxdWlyZWQgdG8gZ28gdGhyb3Vn aCB0aGlzIHByb2Nlc3MgYWdhaW4gb24gZXZlcnkKKysgKiAgIGdldF9mb3JtYXQgY2FsbC4KKysg KiAtIEl0IGlzIHBlcmZlY3RseSBwb3NzaWJsZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aG91 dCBhY3R1YWxseSB1c2luZworKyAqICAgdGhlIHJlc3VsdGluZyBBVkhXRnJhbWVzQ29udGV4dC4g T25lIHVzZS1jYXNlIG1pZ2h0IGJlIHRyeWluZyB0byByZXVzZSBhCisrICogICBwcmV2aW91c2x5 IGluaXRpYWxpemVkIEFWSFdGcmFtZXNDb250ZXh0LCBhbmQgY2FsbGluZyB0aGlzIEFQSSBmdW5j dGlvbgorKyAqICAgb25seSB0byB0ZXN0IHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZyYW1lIHBhcmFt ZXRlcnMgaGF2ZSBjaGFuZ2VkLgorKyAqIC0gRmllbGRzIHRoYXQgdXNlIGR5bmFtaWNhbGx5IGFs bG9jYXRlZCB2YWx1ZXMgb2YgYW55IGtpbmQgbXVzdCBub3QgYmUgc2V0CisrICogICBieSB0aGUg dXNlciB1bmxlc3Mgc2V0dGluZyB0aGVtIGlzIGV4cGxpY2l0bHkgYWxsb3dlZCBieSB0aGUgZG9j dW1lbnRhdGlvbi4KKysgKiAgIElmIHRoZSB1c2VyIHNldHMgQVZIV0ZyYW1lc0NvbnRleHQuZnJl ZSBhbmQgQVZIV0ZyYW1lc0NvbnRleHQudXNlcl9vcGFxdWUsCisrICogICB0aGUgbmV3IGZyZWUg Y2FsbGJhY2sgbXVzdCBjYWxsIHRoZSBwb3RlbnRpYWxseSBzZXQgcHJldmlvdXMgZnJlZSBjYWxs YmFjay4KKysgKiAgIFRoaXMgQVBJIGNhbGwgbWF5IHNldCBhbnkgZHluYW1pY2FsbHkgYWxsb2Nh dGVkIGZpZWxkcywgaW5jbHVkaW5nIHRoZSBmcmVlCisrICogICBjYWxsYmFjay4KKysgKgorKyAq IFRoZSBmdW5jdGlvbiB3aWxsIHNldCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGZpZWxkcyBvbiBB VkhXRnJhbWVzQ29udGV4dAorKyAqIChwb3RlbnRpYWxseSBtb3JlLCBkZXBlbmRpbmcgb24gaHdh Y2NlbCBBUEkpOgorKyAqCisrICogLSBBbGwgZmllbGRzIHNldCBieSBhdl9od2ZyYW1lX2N0eF9h bGxvYygpLgorKyAqIC0gU2V0IHRoZSBmb3JtYXQgZmllbGQgdG8gaHdfcGl4X2ZtdC4KKysgKiAt IFNldCB0aGUgc3dfZm9ybWF0IGZpZWxkIHRvIHRoZSBtb3N0IHN1aXRlZCBhbmQgbW9zdCB2ZXJz YXRpbGUgZm9ybWF0LiAoQW4KKysgKiAgIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhpcyB3aWxsIHBy ZWZlciBnZW5lcmljIGZvcm1hdHMgb3ZlciBvcGFxdWUgZm9ybWF0cworKyAqICAgd2l0aCBhcmJp dHJhcnkgcmVzdHJpY3Rpb25zLCBpZiBwb3NzaWJsZS4pCisrICogLSBTZXQgdGhlIHdpZHRoL2hl aWdodCBmaWVsZHMgdG8gdGhlIGNvZGVkIGZyYW1lIHNpemUsIHJvdW5kZWQgdXAgdG8gdGhlCisr ICogICBBUEktc3BlY2lmaWMgbWluaW11bSBhbGlnbm1lbnQuCisrICogLSBPbmx5IF9pZl8gdGhl IGh3YWNjZWwgcmVxdWlyZXMgYSBwcmUtYWxsb2NhdGVkIHBvb2w6IHNldCB0aGUgaW5pdGlhbF9w b29sX3NpemUKKysgKiAgIGZpZWxkIHRvIHRoZSBudW1iZXIgb2YgbWF4aW11bSByZWZlcmVuY2Ug c3VyZmFjZXMgcG9zc2libGUgd2l0aCB0aGUgY29kZWMsCisrICogICBwbHVzIDEgc3VyZmFjZSBm b3IgdGhlIHVzZXIgdG8gd29yayAobWVhbmluZyB0aGUgdXNlciBjYW4gc2FmZWx5IHJlZmVyZW5j ZQorKyAqICAgYXQgbW9zdCAxIGRlY29kZWQgc3VyZmFjZSBhdCBhIHRpbWUpLCBwbHVzIGFkZGl0 aW9uYWwgYnVmZmVyaW5nIGludHJvZHVjZWQKKysgKiAgIGJ5IGZyYW1lIHRocmVhZGluZy4gSWYg dGhlIGh3YWNjZWwgZG9lcyBub3QgcmVxdWlyZSBwcmUtYWxsb2NhdGlvbiwgdGhlCisrICogICBm aWVsZCBpcyBsZWZ0IHRvIDAsIGFuZCB0aGUgZGVjb2RlciB3aWxsIGFsbG9jYXRlIG5ldyBzdXJm YWNlcyBvbiBkZW1hbmQKKysgKiAgIGR1cmluZyBkZWNvZGluZy4KKysgKiAtIFBvc3NpYmx5IEFW SFdGcmFtZXNDb250ZXh0Lmh3Y3R4IGZpZWxkcywgZGVwZW5kaW5nIG9uIHRoZSB1bmRlcmx5aW5n CisrICogICBoYXJkd2FyZSBBUEkuCisrICoKKysgKiBFc3NlbnRpYWxseSwgb3V0X2ZyYW1lc19y ZWYgcmV0dXJucyB0aGUgc2FtZSBhcyBhdl9od2ZyYW1lX2N0eF9hbGxvYygpLCBidXQKKysgKiB3 aXRoIGJhc2ljIGZyYW1lIHBhcmFtZXRlcnMgc2V0LgorKyAqCisrICogVGhlIGZ1bmN0aW9uIGlz IHN0YXRlbGVzcywgYW5kIGRvZXMgbm90IGNoYW5nZSB0aGUgQVZDb2RlY0NvbnRleHQgb3IgdGhl CisrICogZGV2aWNlX3JlZiBBVkhXRGV2aWNlQ29udGV4dC4KKysgKgorKyAqIEBwYXJhbSBhdmN0 eCBUaGUgY29udGV4dCB3aGljaCBpcyBjdXJyZW50bHkgY2FsbGluZyBnZXRfZm9ybWF0LCBhbmQg d2hpY2gKKysgKiAgICAgICAgICAgICAgaW1wbGljaXRseSBjb250YWlucyBhbGwgc3RhdGUgbmVl ZGVkIGZvciBmaWxsaW5nIHRoZSByZXR1cm5lZAorKyAqICAgICAgICAgICAgICBBVkhXRnJhbWVz Q29udGV4dCBwcm9wZXJseS4KKysgKiBAcGFyYW0gZGV2aWNlX3JlZiBBIHJlZmVyZW5jZSB0byB0 aGUgQVZIV0RldmljZUNvbnRleHQgZGVzY3JpYmluZyB0aGUgZGV2aWNlCisrICogICAgICAgICAg ICAgICAgICAgd2hpY2ggd2lsbCBiZSB1c2VkIGJ5IHRoZSBoYXJkd2FyZSBkZWNvZGVyLgorKyAq IEBwYXJhbSBod19waXhfZm10IFRoZSBod2FjY2VsIGZvcm1hdCB5b3UgYXJlIGdvaW5nIHRvIHJl dHVybiBmcm9tIGdldF9mb3JtYXQuCisrICogQHBhcmFtIG91dF9mcmFtZXNfcmVmIE9uIHN1Y2Nl c3MsIHNldCB0byBhIHJlZmVyZW5jZSB0byBhbiBfdW5pbml0aWFsaXplZF8KKysgKiAgICAgICAg ICAgICAgICAgICAgICAgQVZIV0ZyYW1lc0NvbnRleHQsIGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4g ZGV2aWNlX3JlZi4KKysgKiAgICAgICAgICAgICAgICAgICAgICAgRmllbGRzIHdpbGwgYmUgc2V0 IHRvIHZhbHVlcyByZXF1aXJlZCBmb3IgZGVjb2RpbmcuCisrICogICAgICAgICAgICAgICAgICAg ICAgIE5vdCBjaGFuZ2VkIGlmIGFuIGVycm9yIGlzIHJldHVybmVkLgorKyAqIEByZXR1cm4gemVy byBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLiBUaGUgZm9sbG93aW5nIGVy cm9yIGNvZGVzCisrICogICAgICAgICBoYXZlIHNwZWNpYWwgc2VtYW50aWNzOgorKyAqICAgICAg QVZFUlJPUihFTk9FTlQpOiB0aGUgZGVjb2RlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZnVuY3Rp b25hbGl0eS4gU2V0dXAKKysgKiAgICAgICAgICAgICAgICAgICAgICAgaXMgYWx3YXlzIG1hbnVh bCwgb3IgaXQgaXMgYSBkZWNvZGVyIHdoaWNoIGRvZXMgbm90CisrICogICAgICAgICAgICAgICAg ICAgICAgIHN1cHBvcnQgc2V0dGluZyBBVkNvZGVjQ29udGV4dC5od19mcmFtZXNfY3R4IGF0IGFs bCwKKysgKiAgICAgICAgICAgICAgICAgICAgICAgb3IgaXQgaXMgYSBzb2Z0d2FyZSBmb3JtYXQu CisrICogICAgICBBVkVSUk9SKEVJTlZBTCk6IGl0IGlzIGtub3duIHRoYXQgaGFyZHdhcmUgZGVj b2RpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IKKysgKiAgICAgICAgICAgICAgICAgICAgICAgdGhp cyBjb25maWd1cmF0aW9uLCBvciB0aGUgZGV2aWNlX3JlZiBpcyBub3Qgc3VwcG9ydGVkCisrICog ICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgaHdhY2NlbCByZWZlcmVuY2VkIGJ5IGh3X3Bp eF9mbXQuCisrICovCisraW50IGF2Y29kZWNfZ2V0X2h3X2ZyYW1lc19wYXJhbWV0ZXJzKEFWQ29k ZWNDb250ZXh0ICphdmN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QVZCdWZmZXJSZWYgKmRldmljZV9yZWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVudW0gQVZQaXhlbEZvcm1hdCBod19waXhfZm10LAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBVkJ1ZmZlclJlZiAqKm91dF9mcmFtZXNfcmVmKTsKKysKKytl bnVtIEFWQ29kZWNDb25maWcgeworKyAgICBBVl9DT0RFQ19DT05GSUdfUElYX0ZPUk1BVCwgICAg IC8vLzwgQVZQaXhlbEZvcm1hdCwgdGVybWluYXRlZCBieSBBVl9QSVhfRk1UX05PTkUKKysgICAg QVZfQ09ERUNfQ09ORklHX0ZSQU1FX1JBVEUsICAgICAvLy88IEFWUmF0aW9uYWwsIHRlcm1pbmF0 ZWQgYnkgezAsIDB9CisrICAgIEFWX0NPREVDX0NPTkZJR19TQU1QTEVfUkFURSwgICAgLy8vPCBp bnQsIHRlcm1pbmF0ZWQgYnkgMAorKyAgICBBVl9DT0RFQ19DT05GSUdfU0FNUExFX0ZPUk1BVCwg IC8vLzwgQVZTYW1wbGVGb3JtYXQsIHRlcm1pbmF0ZWQgYnkgQVZfU0FNUExFX0ZNVF9OT05FCisr ICAgIEFWX0NPREVDX0NPTkZJR19DSEFOTkVMX0xBWU9VVCwgLy8vPCBBVkNoYW5uZWxMYXlvdXQs IHRlcm1pbmF0ZWQgYnkgezB9CisrICAgIEFWX0NPREVDX0NPTkZJR19DT0xPUl9SQU5HRSwgICAg Ly8vPCBBVkNvbG9yUmFuZ2UsIHRlcm1pbmF0ZWQgYnkgQVZDT0xfUkFOR0VfVU5TUEVDSUZJRUQK KysgICAgQVZfQ09ERUNfQ09ORklHX0NPTE9SX1NQQUNFLCAgICAvLy88IEFWQ29sb3JTcGFjZSwg dGVybWluYXRlZCBieSBBVkNPTF9TUENfVU5TUEVDSUZJRUQKKysgICAgQVZfQ09ERUNfQ09ORklH X0FMUEhBX01PREUsICAgICAvLy88IEFWQWxwaGFNb2RlLCB0ZXJtaW5hdGVkIGJ5IEFWQUxQSEFf TU9ERV9VTlNQRUNJRklFRAorK307CisrCisrLyoqCisrICogUmV0cmlldmUgYSBsaXN0IG9mIGFs bCBzdXBwb3J0ZWQgdmFsdWVzIGZvciBhIGdpdmVuIGNvbmZpZ3VyYXRpb24gdHlwZS4KKysgKgor KyAqIEBwYXJhbSBhdmN0eCBBbiBvcHRpb25hbCBjb250ZXh0IHRvIHVzZS4gVmFsdWVzIHN1Y2gg YXMKKysgKiAgICAgICAgICAgICAgYHN0cmljdF9zdGRfY29tcGxpYW5jZWAgbWF5IGFmZmVjdCB0 aGUgcmVzdWx0LiBJZiBOVUxMLAorKyAqICAgICAgICAgICAgICBkZWZhdWx0IHZhbHVlcyBhcmUg dXNlZC4KKysgKiBAcGFyYW0gY29kZWMgVGhlIGNvZGVjIHRvIHF1ZXJ5LCBvciBOVUxMIHRvIHVz ZSBhdmN0eC0+Y29kZWMuCisrICogQHBhcmFtIGNvbmZpZyBUaGUgY29uZmlndXJhdGlvbiB0byBx dWVyeS4KKysgKiBAcGFyYW0gZmxhZ3MgQ3VycmVudGx5IHVudXNlZDsgc2hvdWxkIGJlIHNldCB0 byB6ZXJvLgorKyAqIEBwYXJhbSBvdXRfY29uZmlncyBPbiBzdWNjZXNzLCBzZXQgdG8gYSBsaXN0 IG9mIGNvbmZpZ3VyYXRpb25zLCB0ZXJtaW5hdGVkCisrICogICAgICAgICAgICAgICAgICAgIGJ5 IGEgY29uZmlnLXNwZWNpZmljIHRlcm1pbmF0b3IsIG9yIE5VTEwgaWYgYWxsCisrICogICAgICAg ICAgICAgICAgICAgIHBvc3NpYmxlIHZhbHVlcyBhcmUgc3VwcG9ydGVkLgorKyAqIEBwYXJhbSBv dXRfbnVtX2NvbmZpZ3MgT24gc3VjY2Vzcywgc2V0IHRvIHRoZSBudW1iZXIgb2YgZWxlbWVudHMg aW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICpvdXRfY29uZmlncywgZXhjbHVkaW5nIHRo ZSB0ZXJtaW5hdG9yLiBPcHRpb25hbC4KKysgKi8KKytpbnQgYXZjb2RlY19nZXRfc3VwcG9ydGVk X2NvbmZpZyhjb25zdCBBVkNvZGVjQ29udGV4dCAqYXZjdHgsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgQVZDb2RlYyAqY29kZWMsIGVudW0gQVZDb2RlY0NvbmZpZyBj b25maWcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3Ms IGNvbnN0IHZvaWQgKipvdXRfY29uZmlncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgKm91dF9udW1fY29uZmlncyk7CisrCisrCisrCisrLyoqCisrICogQGRlZmdyb3Vw IGxhdmNfcGFyc2luZyBGcmFtZSBwYXJzaW5nCisrICogQHsKKysgKi8KKysKKytlbnVtIEFWUGlj dHVyZVN0cnVjdHVyZSB7CisrICAgIEFWX1BJQ1RVUkVfU1RSVUNUVVJFX1VOS05PV04sICAgICAg Ly8vPCB1bmtub3duCisrICAgIEFWX1BJQ1RVUkVfU1RSVUNUVVJFX1RPUF9GSUVMRCwgICAgLy8v PCBjb2RlZCBhcyB0b3AgZmllbGQKKysgICAgQVZfUElDVFVSRV9TVFJVQ1RVUkVfQk9UVE9NX0ZJ RUxELCAvLy88IGNvZGVkIGFzIGJvdHRvbSBmaWVsZAorKyAgICBBVl9QSUNUVVJFX1NUUlVDVFVS RV9GUkFNRSwgICAgICAgIC8vLzwgY29kZWQgYXMgZnJhbWUKKyt9OworKworK3R5cGVkZWYgc3Ry dWN0IEFWQ29kZWNQYXJzZXJDb250ZXh0IHsKKysgICAgdm9pZCAqcHJpdl9kYXRhOworKyAgICBj b25zdCBzdHJ1Y3QgQVZDb2RlY1BhcnNlciAqcGFyc2VyOworKyAgICBpbnQ2NF90IGZyYW1lX29m ZnNldDsgLyogb2Zmc2V0IG9mIHRoZSBjdXJyZW50IGZyYW1lICovCisrICAgIGludDY0X3QgY3Vy X29mZnNldDsgLyogY3VycmVudCBvZmZzZXQKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAo aW5jcmVtZW50ZWQgYnkgZWFjaCBhdl9wYXJzZXJfcGFyc2UoKSkgKi8KKysgICAgaW50NjRfdCBu ZXh0X2ZyYW1lX29mZnNldDsgLyogb2Zmc2V0IG9mIHRoZSBuZXh0IGZyYW1lICovCisrICAgIC8q IHZpZGVvIGluZm8gKi8KKysgICAgaW50IHBpY3RfdHlwZTsgLyogWFhYOiBQdXQgaXQgYmFjayBp biBBVkNvZGVjQ29udGV4dC4gKi8KKysgICAgLyoqCisrICAgICAqIFRoaXMgZmllbGQgaXMgdXNl ZCBmb3IgcHJvcGVyIGZyYW1lIGR1cmF0aW9uIGNvbXB1dGF0aW9uIGluIGxhdmYuCisrICAgICAq IEl0IHNpZ25hbHMsIGhvdyBtdWNoIGxvbmdlciB0aGUgZnJhbWUgZHVyYXRpb24gb2YgdGhlIGN1 cnJlbnQgZnJhbWUKKysgICAgICogaXMgY29tcGFyZWQgdG8gbm9ybWFsIGZyYW1lIGR1cmF0aW9u LgorKyAgICAgKgorKyAgICAgKiBmcmFtZV9kdXJhdGlvbiA9ICgxICsgcmVwZWF0X3BpY3QpICog dGltZV9iYXNlCisrICAgICAqCisrICAgICAqIEl0IGlzIHVzZWQgYnkgY29kZWNzIGxpa2UgSC4y NjQgdG8gZGlzcGxheSB0ZWxlY2luZWQgbWF0ZXJpYWwuCisrICAgICAqLworKyAgICBpbnQgcmVw ZWF0X3BpY3Q7IC8qIFhYWDogUHV0IGl0IGJhY2sgaW4gQVZDb2RlY0NvbnRleHQuICovCisrICAg IGludDY0X3QgcHRzOyAgICAgLyogcHRzIG9mIHRoZSBjdXJyZW50IGZyYW1lICovCisrICAgIGlu dDY0X3QgZHRzOyAgICAgLyogZHRzIG9mIHRoZSBjdXJyZW50IGZyYW1lICovCisrCisrICAgIC8q IHByaXZhdGUgZGF0YSAqLworKyAgICBpbnQ2NF90IGxhc3RfcHRzOworKyAgICBpbnQ2NF90IGxh c3RfZHRzOworKyAgICBpbnQgZmV0Y2hfdGltZXN0YW1wOworKworKyNkZWZpbmUgQVZfUEFSU0VS X1BUU19OQiA0CisrICAgIGludCBjdXJfZnJhbWVfc3RhcnRfaW5kZXg7CisrICAgIGludDY0X3Qg Y3VyX2ZyYW1lX29mZnNldFtBVl9QQVJTRVJfUFRTX05CXTsKKysgICAgaW50NjRfdCBjdXJfZnJh bWVfcHRzW0FWX1BBUlNFUl9QVFNfTkJdOworKyAgICBpbnQ2NF90IGN1cl9mcmFtZV9kdHNbQVZf UEFSU0VSX1BUU19OQl07CisrCisrICAgIGludCBmbGFnczsKKysjZGVmaW5lIFBBUlNFUl9GTEFH X0NPTVBMRVRFX0ZSQU1FUyAgICAgICAgICAgMHgwMDAxCisrI2RlZmluZSBQQVJTRVJfRkxBR19P TkNFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorKy8vLyBTZXQgaWYgdGhlIHBhcnNlciBo YXMgYSB2YWxpZCBmaWxlIG9mZnNldAorKyNkZWZpbmUgUEFSU0VSX0ZMQUdfRkVUQ0hFRF9PRkZT RVQgICAgICAgICAgICAweDAwMDQKKysjZGVmaW5lIFBBUlNFUl9GTEFHX1VTRV9DT0RFQ19UUyAg ICAgICAgICAgICAgMHgxMDAwCisrCisrICAgIGludDY0X3Qgb2Zmc2V0OyAgICAgIC8vLzwgYnl0 ZSBvZmZzZXQgZnJvbSBzdGFydGluZyBwYWNrZXQgc3RhcnQKKysgICAgaW50NjRfdCBjdXJfZnJh bWVfZW5kW0FWX1BBUlNFUl9QVFNfTkJdOworKworKyAgICAvKioKKysgICAgICogU2V0IGJ5IHBh cnNlciB0byAxIGZvciBrZXkgZnJhbWVzIGFuZCAwIGZvciBub24ta2V5IGZyYW1lcy4KKysgICAg ICogSXQgaXMgaW5pdGlhbGl6ZWQgdG8gLTEsIHNvIGlmIHRoZSBwYXJzZXIgZG9lc24ndCBzZXQg dGhpcyBmbGFnLAorKyAgICAgKiBvbGQtc3R5bGUgZmFsbGJhY2sgdXNpbmcgQVZfUElDVFVSRV9U WVBFX0kgcGljdHVyZSB0eXBlIGFzIGtleSBmcmFtZXMKKysgICAgICogd2lsbCBiZSB1c2VkLgor KyAgICAgKi8KKysgICAgaW50IGtleV9mcmFtZTsKKysKKysgICAgLy8gVGltZXN0YW1wIGdlbmVy YXRpb24gc3VwcG9ydDoKKysgICAgLyoqCisrICAgICAqIFN5bmNocm9uaXphdGlvbiBwb2ludCBm b3Igc3RhcnQgb2YgdGltZXN0YW1wIGdlbmVyYXRpb24uCisrICAgICAqCisrICAgICAqIFNldCB0 byA+MCBmb3Igc3luYyBwb2ludCwgMCBmb3Igbm8gc3luYyBwb2ludCBhbmQgPDAgZm9yIHVuZGVm aW5lZAorKyAgICAgKiAoZGVmYXVsdCkuCisrICAgICAqCisrICAgICAqIEZvciBleGFtcGxlLCB0 aGlzIGNvcnJlc3BvbmRzIHRvIHByZXNlbmNlIG9mIEguMjY0IGJ1ZmZlcmluZyBwZXJpb2QKKysg ICAgICogU0VJIG1lc3NhZ2UuCisrICAgICAqLworKyAgICBpbnQgZHRzX3N5bmNfcG9pbnQ7Cisr CisrICAgIC8qKgorKyAgICAgKiBPZmZzZXQgb2YgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFnYWlu c3QgbGFzdCB0aW1lc3RhbXAgc3luYyBwb2ludCBpbgorKyAgICAgKiB1bml0cyBvZiBBVkNvZGVj Q29udGV4dC50aW1lX2Jhc2UuCisrICAgICAqCisrICAgICAqIFNldCB0byBJTlRfTUlOIHdoZW4g ZHRzX3N5bmNfcG9pbnQgdW51c2VkLiBPdGhlcndpc2UsIGl0IG11c3QKKysgICAgICogY29udGFp biBhIHZhbGlkIHRpbWVzdGFtcCBvZmZzZXQuCisrICAgICAqCisrICAgICAqIE5vdGUgdGhhdCB0 aGUgdGltZXN0YW1wIG9mIHN5bmMgcG9pbnQgaGFzIHVzdWFsbHkgYSBub256ZXJvCisrICAgICAq IGR0c19yZWZfZHRzX2RlbHRhLCB3aGljaCByZWZlcnMgdG8gdGhlIHByZXZpb3VzIHN5bmMgcG9p bnQuIE9mZnNldCBvZgorKyAgICAgKiB0aGUgbmV4dCBmcmFtZSBhZnRlciB0aW1lc3RhbXAgc3lu YyBwb2ludCB3aWxsIGJlIHVzdWFsbHkgMS4KKysgICAgICoKKysgICAgICogRm9yIGV4YW1wbGUs IHRoaXMgY29ycmVzcG9uZHMgdG8gSC4yNjQgY3BiX3JlbW92YWxfZGVsYXkuCisrICAgICAqLwor KyAgICBpbnQgZHRzX3JlZl9kdHNfZGVsdGE7CisrCisrICAgIC8qKgorKyAgICAgKiBQcmVzZW50 YXRpb24gZGVsYXkgb2YgY3VycmVudCBmcmFtZSBpbiB1bml0cyBvZiBBVkNvZGVjQ29udGV4dC50 aW1lX2Jhc2UuCisrICAgICAqCisrICAgICAqIFNldCB0byBJTlRfTUlOIHdoZW4gZHRzX3N5bmNf cG9pbnQgdW51c2VkLiBPdGhlcndpc2UsIGl0IG11c3QKKysgICAgICogY29udGFpbiB2YWxpZCBu b24tbmVnYXRpdmUgdGltZXN0YW1wIGRlbHRhIChwcmVzZW50YXRpb24gdGltZSBvZiBhIGZyYW1l CisrICAgICAqIG11c3Qgbm90IGxpZSBpbiB0aGUgcGFzdCkuCisrICAgICAqCisrICAgICAqIFRo aXMgZGVsYXkgcmVwcmVzZW50cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGRlY29kaW5nIGFuZCBw cmVzZW50YXRpb24KKysgICAgICogdGltZSBvZiB0aGUgZnJhbWUuCisrICAgICAqCisrICAgICAq IEZvciBleGFtcGxlLCB0aGlzIGNvcnJlc3BvbmRzIHRvIEguMjY0IGRwYl9vdXRwdXRfZGVsYXku CisrICAgICAqLworKyAgICBpbnQgcHRzX2R0c19kZWx0YTsKKysKKysgICAgLyoqCisrICAgICAq IFBvc2l0aW9uIG9mIHRoZSBwYWNrZXQgaW4gZmlsZS4KKysgICAgICoKKysgICAgICogQW5hbG9n b3VzIHRvIGN1cl9mcmFtZV9wdHMvZHRzCisrICAgICAqLworKyAgICBpbnQ2NF90IGN1cl9mcmFt ZV9wb3NbQVZfUEFSU0VSX1BUU19OQl07CisrCisrICAgIC8qKgorKyAgICAgKiBCeXRlIHBvc2l0 aW9uIG9mIGN1cnJlbnRseSBwYXJzZWQgZnJhbWUgaW4gc3RyZWFtLgorKyAgICAgKi8KKysgICAg aW50NjRfdCBwb3M7CisrCisrICAgIC8qKgorKyAgICAgKiBQcmV2aW91cyBmcmFtZSBieXRlIHBv c2l0aW9uLgorKyAgICAgKi8KKysgICAgaW50NjRfdCBsYXN0X3BvczsKKysKKysgICAgLyoqCisr ICAgICAqIER1cmF0aW9uIG9mIHRoZSBjdXJyZW50IGZyYW1lLgorKyAgICAgKiBGb3IgYXVkaW8s IHRoaXMgaXMgaW4gdW5pdHMgb2YgMSAvIEFWQ29kZWNDb250ZXh0LnNhbXBsZV9yYXRlLgorKyAg ICAgKiBGb3IgYWxsIG90aGVyIHR5cGVzLCB0aGlzIGlzIGluIHVuaXRzIG9mIEFWQ29kZWNDb250 ZXh0LnRpbWVfYmFzZS4KKysgICAgICovCisrICAgIGludCBkdXJhdGlvbjsKKysKKysgICAgZW51 bSBBVkZpZWxkT3JkZXIgZmllbGRfb3JkZXI7CisrCisrICAgIC8qKgorKyAgICAgKiBJbmRpY2F0 ZSB3aGV0aGVyIGEgcGljdHVyZSBpcyBjb2RlZCBhcyBhIGZyYW1lLCB0b3AgZmllbGQgb3IgYm90 dG9tIGZpZWxkLgorKyAgICAgKgorKyAgICAgKiBGb3IgZXhhbXBsZSwgSC4yNjQgZmllbGRfcGlj X2ZsYWcgZXF1YWwgdG8gMCBjb3JyZXNwb25kcyB0bworKyAgICAgKiBBVl9QSUNUVVJFX1NUUlVD VFVSRV9GUkFNRS4gQW4gSC4yNjQgcGljdHVyZSB3aXRoIGZpZWxkX3BpY19mbGFnCisrICAgICAq IGVxdWFsIHRvIDEgYW5kIGJvdHRvbV9maWVsZF9mbGFnIGVxdWFsIHRvIDAgY29ycmVzcG9uZHMg dG8KKysgICAgICogQVZfUElDVFVSRV9TVFJVQ1RVUkVfVE9QX0ZJRUxELgorKyAgICAgKi8KKysg ICAgZW51bSBBVlBpY3R1cmVTdHJ1Y3R1cmUgcGljdHVyZV9zdHJ1Y3R1cmU7CisrCisrICAgIC8q KgorKyAgICAgKiBQaWN0dXJlIG51bWJlciBpbmNyZW1lbnRlZCBpbiBwcmVzZW50YXRpb24gb3Ig b3V0cHV0IG9yZGVyLgorKyAgICAgKiBUaGlzIGZpZWxkIG1heSBiZSByZWluaXRpYWxpemVkIGF0 IHRoZSBmaXJzdCBwaWN0dXJlIG9mIGEgbmV3IHNlcXVlbmNlLgorKyAgICAgKgorKyAgICAgKiBG b3IgZXhhbXBsZSwgdGhpcyBjb3JyZXNwb25kcyB0byBILjI2NCBQaWNPcmRlckNudC4KKysgICAg ICovCisrICAgIGludCBvdXRwdXRfcGljdHVyZV9udW1iZXI7CisrCisrICAgIC8qKgorKyAgICAg KiBEaW1lbnNpb25zIG9mIHRoZSBkZWNvZGVkIHZpZGVvIGludGVuZGVkIGZvciBwcmVzZW50YXRp b24uCisrICAgICAqLworKyAgICBpbnQgd2lkdGg7CisrICAgIGludCBoZWlnaHQ7CisrCisrICAg IC8qKgorKyAgICAgKiBEaW1lbnNpb25zIG9mIHRoZSBjb2RlZCB2aWRlby4KKysgICAgICovCisr ICAgIGludCBjb2RlZF93aWR0aDsKKysgICAgaW50IGNvZGVkX2hlaWdodDsKKysKKysgICAgLyoq CisrICAgICAqIFRoZSBmb3JtYXQgb2YgdGhlIGNvZGVkIGRhdGEsIGNvcnJlc3BvbmRzIHRvIGVu dW0gQVZQaXhlbEZvcm1hdCBmb3IgdmlkZW8KKysgICAgICogYW5kIGZvciBlbnVtIEFWU2FtcGxl Rm9ybWF0IGZvciBhdWRpby4KKysgICAgICoKKysgICAgICogTm90ZSB0aGF0IGEgZGVjb2RlciBj YW4gaGF2ZSBjb25zaWRlcmFibGUgZnJlZWRvbSBpbiBob3cgZXhhY3RseSBpdAorKyAgICAgKiBk ZWNvZGVzIHRoZSBkYXRhLCBzbyB0aGUgZm9ybWF0IHJlcG9ydGVkIGhlcmUgbWlnaHQgYmUgZGlm ZmVyZW50IGZyb20gdGhlCisrICAgICAqIG9uZSByZXR1cm5lZCBieSBhIGRlY29kZXIuCisrICAg ICAqLworKyAgICBpbnQgZm9ybWF0OworK30gQVZDb2RlY1BhcnNlckNvbnRleHQ7CisrCisrdHlw ZWRlZiBzdHJ1Y3QgQVZDb2RlY1BhcnNlciB7CisrICAgIGVudW0gQVZDb2RlY0lEIGNvZGVjX2lk c1s3XTsgLyogc2V2ZXJhbCBjb2RlYyBJRHMgYXJlIHBlcm1pdHRlZCAqLworK30gQVZDb2RlY1Bh cnNlcjsKKysKKysvKioKKysgKiBJdGVyYXRlIG92ZXIgYWxsIHJlZ2lzdGVyZWQgY29kZWMgcGFy c2Vycy4KKysgKgorKyAqIEBwYXJhbSBvcGFxdWUgYSBwb2ludGVyIHdoZXJlIGxpYmF2Y29kZWMg d2lsbCBzdG9yZSB0aGUgaXRlcmF0aW9uIHN0YXRlLiBNdXN0CisrICogICAgICAgICAgICAgICBw b2ludCB0byBOVUxMIHRvIHN0YXJ0IHRoZSBpdGVyYXRpb24uCisrICoKKysgKiBAcmV0dXJuIHRo ZSBuZXh0IHJlZ2lzdGVyZWQgY29kZWMgcGFyc2VyIG9yIE5VTEwgd2hlbiB0aGUgaXRlcmF0aW9u IGlzCisrICogICAgICAgICBmaW5pc2hlZAorKyAqLworK2NvbnN0IEFWQ29kZWNQYXJzZXIgKmF2 X3BhcnNlcl9pdGVyYXRlKHZvaWQgKipvcGFxdWUpOworKworK0FWQ29kZWNQYXJzZXJDb250ZXh0 ICphdl9wYXJzZXJfaW5pdChlbnVtIEFWQ29kZWNJRCBjb2RlY19pZCk7CisrCisrLyoqCisrICog UGFyc2UgYSBwYWNrZXQuCisrICoKKysgKiBAcGFyYW0gcyAgICAgICAgICAgICBwYXJzZXIgY29u dGV4dC4KKysgKiBAcGFyYW0gYXZjdHggICAgICAgICBjb2RlYyBjb250ZXh0LgorKyAqIEBwYXJh bSBwb3V0YnVmICAgICAgIHNldCB0byBwb2ludGVyIHRvIHBhcnNlZCBidWZmZXIgb3IgTlVMTCBp ZiBub3QgeWV0IGZpbmlzaGVkLgorKyAqIEBwYXJhbSBwb3V0YnVmX3NpemUgIHNldCB0byBzaXpl IG9mIHBhcnNlZCBidWZmZXIgb3IgemVybyBpZiBub3QgeWV0IGZpbmlzaGVkLgorKyAqIEBwYXJh bSBidWYgICAgICAgICAgIGlucHV0IGJ1ZmZlci4KKysgKiBAcGFyYW0gYnVmX3NpemUgICAgICBi dWZmZXIgc2l6ZSBpbiBieXRlcyB3aXRob3V0IHRoZSBwYWRkaW5nLiBJLmUuIHRoZSBmdWxsIGJ1 ZmZlcgorKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgaXMgYXNzdW1lZCB0byBiZSBidWZf c2l6ZSArIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUuCisrICAgICAgICAgICAgICAgICAg ICAgICAgVG8gc2lnbmFsIEVPRiwgdGhpcyBzaG91bGQgYmUgMCAoc28gdGhhdCB0aGUgbGFzdCBm cmFtZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBvdXRwdXQpLgorKyAqIEBwYXJh bSBwdHMgICAgICAgICAgIGlucHV0IHByZXNlbnRhdGlvbiB0aW1lc3RhbXAuCisrICogQHBhcmFt IGR0cyAgICAgICAgICAgaW5wdXQgZGVjb2RpbmcgdGltZXN0YW1wLgorKyAqIEBwYXJhbSBwb3Mg ICAgICAgICAgIGlucHV0IGJ5dGUgcG9zaXRpb24gaW4gc3RyZWFtLgorKyAqIEByZXR1cm4gdGhl IG51bWJlciBvZiBieXRlcyBvZiB0aGUgaW5wdXQgYml0c3RyZWFtIHVzZWQuCisrICoKKysgKiBF eGFtcGxlOgorKyAqIEBjb2RlCisrICogICB3aGlsZShpbl9sZW4peworKyAqICAgICAgIGxlbiA9 IGF2X3BhcnNlcl9wYXJzZTIobXlwYXJzZXIsIEFWQ29kZWNDb250ZXh0LCAmZGF0YSwgJnNpemUs CisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fZGF0YSwgaW5f bGVuLAorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cywgZHRz LCBwb3MpOworKyAqICAgICAgIGluX2RhdGEgKz0gbGVuOworKyAqICAgICAgIGluX2xlbiAgLT0g bGVuOworKyAqCisrICogICAgICAgaWYoc2l6ZSkKKysgKiAgICAgICAgICBkZWNvZGVfZnJhbWUo ZGF0YSwgc2l6ZSk7CisrICogICB9CisrICogQGVuZGNvZGUKKysgKi8KKytpbnQgYXZfcGFyc2Vy X3BhcnNlMihBVkNvZGVjUGFyc2VyQ29udGV4dCAqcywKKysgICAgICAgICAgICAgICAgICAgICBB VkNvZGVjQ29udGV4dCAqYXZjdHgsCisrICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqKnBv dXRidWYsIGludCAqcG91dGJ1Zl9zaXplLAorKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVp bnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplLAorKyAgICAgICAgICAgICAgICAgICAgIGludDY0X3Qg cHRzLCBpbnQ2NF90IGR0cywKKysgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHBvcyk7Cisr Cisrdm9pZCBhdl9wYXJzZXJfY2xvc2UoQVZDb2RlY1BhcnNlckNvbnRleHQgKnMpOworKworKy8q KgorKyAqIEB9CisrICogQH0KKysgKi8KKysKKysvKioKKysgKiBAYWRkdG9ncm91cCBsYXZjX2Vu Y29kaW5nCisrICogQHsKKysgKi8KKysKKytpbnQgYXZjb2RlY19lbmNvZGVfc3VidGl0bGUoQVZD b2RlY0NvbnRleHQgKmF2Y3R4LCB1aW50OF90ICpidWYsIGludCBidWZfc2l6ZSwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZTdWJ0aXRsZSAqc3ViKTsKKysKKysKKysvKioK KysgKiBAfQorKyAqLworKworKy8qKgorKyAqIEBkZWZncm91cCBsYXZjX21pc2MgVXRpbGl0eSBm dW5jdGlvbnMKKysgKiBAaW5ncm91cCBsaWJhdmMKKysgKgorKyAqIE1pc2NlbGxhbmVvdXMgdXRp bGl0eSBmdW5jdGlvbnMgcmVsYXRlZCB0byBib3RoIGVuY29kaW5nIGFuZCBkZWNvZGluZworKyAq IChvciBuZWl0aGVyKS4KKysgKiBAeworKyAqLworKworKy8qKgorKyAqIEBkZWZncm91cCBsYXZj X21pc2NfcGl4Zm10IFBpeGVsIGZvcm1hdHMKKysgKgorKyAqIEZ1bmN0aW9ucyBmb3Igd29ya2lu ZyB3aXRoIHBpeGVsIGZvcm1hdHMuCisrICogQHsKKysgKi8KKysKKysvKioKKysgKiBSZXR1cm4g YSB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGZvdXJDQyBjb2RlIGFzc29jaWF0ZWQgdG8gdGhlCisr ICogcGl4ZWwgZm9ybWF0IHBpeF9mbXQsIG9yIDAgaWYgbm8gYXNzb2NpYXRlZCBmb3VyQ0MgY29k ZSBjYW4gYmUKKysgKiBmb3VuZC4KKysgKi8KKyt1bnNpZ25lZCBpbnQgYXZjb2RlY19waXhfZm10 X3RvX2NvZGVjX3RhZyhlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCk7CisrCisrLyoqCisrICog RmluZCB0aGUgYmVzdCBwaXhlbCBmb3JtYXQgdG8gY29udmVydCB0byBnaXZlbiBhIGNlcnRhaW4g c291cmNlIHBpeGVsCisrICogZm9ybWF0LiAgV2hlbiBjb252ZXJ0aW5nIGZyb20gb25lIHBpeGVs IGZvcm1hdCB0byBhbm90aGVyLCBpbmZvcm1hdGlvbiBsb3NzCisrICogbWF5IG9jY3VyLiAgRm9y IGV4YW1wbGUsIHdoZW4gY29udmVydGluZyBmcm9tIFJHQjI0IHRvIEdSQVksIHRoZSBjb2xvcgor KyAqIGluZm9ybWF0aW9uIHdpbGwgYmUgbG9zdC4gU2ltaWxhcmx5LCBvdGhlciBsb3NzZXMgb2Nj dXIgd2hlbiBjb252ZXJ0aW5nIGZyb20KKysgKiBzb21lIGZvcm1hdHMgdG8gb3RoZXIgZm9ybWF0 cy4gYXZjb2RlY19maW5kX2Jlc3RfcGl4X2ZtdF9vZl8yKCkgc2VhcmNoZXMgd2hpY2ggb2YKKysg KiB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0cyBzaG91bGQgYmUgdXNlZCB0byBzdWZmZXIgdGhlIGxl YXN0IGFtb3VudCBvZiBsb3NzLgorKyAqIFRoZSBwaXhlbCBmb3JtYXRzIGZyb20gd2hpY2ggaXQg Y2hvb3NlcyBvbmUsIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZQorKyAqIHBpeF9mbXRfbGlzdCBwYXJh bWV0ZXIuCisrICoKKysgKgorKyAqIEBwYXJhbVtpbl0gcGl4X2ZtdF9saXN0IEFWX1BJWF9GTVRf Tk9ORSB0ZXJtaW5hdGVkIGFycmF5IG9mIHBpeGVsIGZvcm1hdHMgdG8gY2hvb3NlIGZyb20KKysg KiBAcGFyYW1baW5dIHNyY19waXhfZm10IHNvdXJjZSBwaXhlbCBmb3JtYXQKKysgKiBAcGFyYW1b aW5dIGhhc19hbHBoYSBXaGV0aGVyIHRoZSBzb3VyY2UgcGl4ZWwgZm9ybWF0IGFscGhhIGNoYW5u ZWwgaXMgdXNlZC4KKysgKiBAcGFyYW1bb3V0XSBsb3NzX3B0ciBDb21iaW5hdGlvbiBvZiBmbGFn cyBpbmZvcm1pbmcgeW91IHdoYXQga2luZCBvZiBsb3NzZXMgd2lsbCBvY2N1ci4KKysgKiBAcmV0 dXJuIFRoZSBiZXN0IHBpeGVsIGZvcm1hdCB0byBjb252ZXJ0IHRvIG9yIC0xIGlmIG5vbmUgd2Fz IGZvdW5kLgorKyAqLworK2VudW0gQVZQaXhlbEZvcm1hdCBhdmNvZGVjX2ZpbmRfYmVzdF9waXhf Zm10X29mX2xpc3QoY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0ICpwaXhfZm10X2xpc3QsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWUGl4ZWxGb3Jt YXQgc3JjX3BpeF9mbXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgaGFzX2FscGhhLCBpbnQgKmxvc3NfcHRyKTsKKysKKytlbnVtIEFWUGl4ZWxGb3Jt YXQgYXZjb2RlY19kZWZhdWx0X2dldF9mb3JtYXQoc3RydWN0IEFWQ29kZWNDb250ZXh0ICpzLCBj b25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQgKiBmbXQpOworKworKy8qKgorKyAqIEB9CisrICovCisr Cisrdm9pZCBhdmNvZGVjX3N0cmluZyhjaGFyICpidWYsIGludCBidWZfc2l6ZSwgQVZDb2RlY0Nv bnRleHQgKmVuYywgaW50IGVuY29kZSk7CisrCisraW50IGF2Y29kZWNfZGVmYXVsdF9leGVjdXRl KEFWQ29kZWNDb250ZXh0ICpjLCBpbnQgKCpmdW5jKShBVkNvZGVjQ29udGV4dCAqYzIsIHZvaWQg KmFyZzIpLHZvaWQgKmFyZywgaW50ICpyZXQsIGludCBjb3VudCwgaW50IHNpemUpOworK2ludCBh dmNvZGVjX2RlZmF1bHRfZXhlY3V0ZTIoQVZDb2RlY0NvbnRleHQgKmMsIGludCAoKmZ1bmMpKEFW Q29kZWNDb250ZXh0ICpjMiwgdm9pZCAqYXJnMiwgaW50LCBpbnQpLHZvaWQgKmFyZywgaW50ICpy ZXQsIGludCBjb3VudCk7CisrLy9GSVhNRSBmdW5jIHR5cGVkZWYKKysKKysvKioKKysgKiBGaWxs IEFWRnJhbWUgYXVkaW8gZGF0YSBhbmQgbGluZXNpemUgcG9pbnRlcnMuCisrICoKKysgKiBUaGUg YnVmZmVyIGJ1ZiBtdXN0IGJlIGEgcHJlYWxsb2NhdGVkIGJ1ZmZlciB3aXRoIGEgc2l6ZSBiaWcg ZW5vdWdoCisrICogdG8gY29udGFpbiB0aGUgc3BlY2lmaWVkIHNhbXBsZXMgYW1vdW50LiBUaGUg ZmlsbGVkIEFWRnJhbWUgZGF0YQorKyAqIHBvaW50ZXJzIHdpbGwgcG9pbnQgdG8gdGhpcyBidWZm ZXIuCisrICoKKysgKiBBVkZyYW1lIGV4dGVuZGVkX2RhdGEgY2hhbm5lbCBwb2ludGVycyBhcmUg YWxsb2NhdGVkIGlmIG5lY2Vzc2FyeSBmb3IKKysgKiBwbGFuYXIgYXVkaW8uCisrICoKKysgKiBA cGFyYW0gZnJhbWUgICAgICAgdGhlIEFWRnJhbWUKKysgKiAgICAgICAgICAgICAgICAgICAgZnJh bWUtPm5iX3NhbXBsZXMgbXVzdCBiZSBzZXQgcHJpb3IgdG8gY2FsbGluZyB0aGUKKysgKiAgICAg ICAgICAgICAgICAgICAgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gZmlsbHMgaW4gZnJhbWUtPmRh dGEsCisrICogICAgICAgICAgICAgICAgICAgIGZyYW1lLT5leHRlbmRlZF9kYXRhLCBmcmFtZS0+ bGluZXNpemVbMF0uCisrICogQHBhcmFtIG5iX2NoYW5uZWxzIGNoYW5uZWwgY291bnQKKysgKiBA cGFyYW0gc2FtcGxlX2ZtdCAgc2FtcGxlIGZvcm1hdAorKyAqIEBwYXJhbSBidWYgICAgICAgICBi dWZmZXIgdG8gdXNlIGZvciBmcmFtZSBkYXRhCisrICogQHBhcmFtIGJ1Zl9zaXplICAgIHNpemUg b2YgYnVmZmVyCisrICogQHBhcmFtIGFsaWduICAgICAgIHBsYW5lIHNpemUgc2FtcGxlIGFsaWdu bWVudCAoMCA9IGRlZmF1bHQpCisrICogQHJldHVybiAgICAgICAgICAgID49MCBvbiBzdWNjZXNz LCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKysgKiBAdG9kbyByZXR1cm4gdGhlIHNp emUgaW4gYnl0ZXMgcmVxdWlyZWQgdG8gc3RvcmUgdGhlIHNhbXBsZXMgaW4KKysgKiBjYXNlIG9m IHN1Y2Nlc3MsIGF0IHRoZSBuZXh0IGxpYmF2dXRpbCBidW1wCisrICovCisraW50IGF2Y29kZWNf ZmlsbF9hdWRpb19mcmFtZShBVkZyYW1lICpmcmFtZSwgaW50IG5iX2NoYW5uZWxzLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVlNhbXBsZUZvcm1hdCBzYW1wbGVfZm10LCBj b25zdCB1aW50OF90ICpidWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVm X3NpemUsIGludCBhbGlnbik7CisrCisrLyoqCisrICogUmVzZXQgdGhlIGludGVybmFsIGNvZGVj IHN0YXRlIC8gZmx1c2ggaW50ZXJuYWwgYnVmZmVycy4gU2hvdWxkIGJlIGNhbGxlZAorKyAqIGUu Zy4gd2hlbiBzZWVraW5nIG9yIHdoZW4gc3dpdGNoaW5nIHRvIGEgZGlmZmVyZW50IHN0cmVhbS4K KysgKgorKyAqIEBub3RlIGZvciBkZWNvZGVycywgdGhpcyBmdW5jdGlvbiBqdXN0IHJlbGVhc2Vz IGFueSByZWZlcmVuY2VzIHRoZSBkZWNvZGVyCisrICogbWlnaHQga2VlcCBpbnRlcm5hbGx5LCBi dXQgdGhlIGNhbGxlcidzIHJlZmVyZW5jZXMgcmVtYWluIHZhbGlkLgorKyAqCisrICogQG5vdGUg Zm9yIGVuY29kZXJzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSBkbyBzb21ldGhpbmcgaWYgdGhl IGVuY29kZXIKKysgKiBkZWNsYXJlcyBzdXBwb3J0IGZvciBBVl9DT0RFQ19DQVBfRU5DT0RFUl9G TFVTSC4gV2hlbiBjYWxsZWQsIHRoZSBlbmNvZGVyCisrICogd2lsbCBkcmFpbiBhbnkgcmVtYWlu aW5nIHBhY2tldHMsIGFuZCBjYW4gdGhlbiBiZSByZXVzZWQgZm9yIGEgZGlmZmVyZW50CisrICog c3RyZWFtIChhcyBvcHBvc2VkIHRvIHNlbmRpbmcgYSBudWxsIGZyYW1lIHdoaWNoIHdpbGwgbGVh dmUgdGhlIGVuY29kZXIKKysgKiBpbiBhIHBlcm1hbmVudCBFT0Ygc3RhdGUgYWZ0ZXIgZHJhaW5p bmcpLiBUaGlzIGNhbiBiZSBkZXNpcmFibGUgaWYgdGhlCisrICogY29zdCBvZiB0ZWFyaW5nIGRv d24gYW5kIHJlcGxhY2luZyB0aGUgZW5jb2RlciBpbnN0YW5jZSBpcyBoaWdoLgorKyAqLworK3Zv aWQgYXZjb2RlY19mbHVzaF9idWZmZXJzKEFWQ29kZWNDb250ZXh0ICphdmN0eCk7CisrCisrLyoq CisrICogUmV0dXJuIGF1ZGlvIGZyYW1lIGR1cmF0aW9uLgorKyAqCisrICogQHBhcmFtIGF2Y3R4 ICAgICAgICBjb2RlYyBjb250ZXh0CisrICogQHBhcmFtIGZyYW1lX2J5dGVzICBzaXplIG9mIHRo ZSBmcmFtZSwgb3IgMCBpZiB1bmtub3duCisrICogQHJldHVybiAgICAgICAgICAgICBmcmFtZSBk dXJhdGlvbiwgaW4gc2FtcGxlcywgaWYga25vd24uIDAgaWYgbm90IGFibGUgdG8KKysgKiAgICAg ICAgICAgICAgICAgICAgIGRldGVybWluZS4KKysgKi8KKytpbnQgYXZfZ2V0X2F1ZGlvX2ZyYW1l X2R1cmF0aW9uKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgaW50IGZyYW1lX2J5dGVzKTsKKysKKysv KiBtZW1vcnkgKi8KKysKKysvKioKKysgKiBTYW1lIGJlaGF2aW91ciBhdl9mYXN0X21hbGxvYyBi dXQgdGhlIGJ1ZmZlciBoYXMgYWRkaXRpb25hbAorKyAqIEFWX0lOUFVUX0JVRkZFUl9QQURESU5H X1NJWkUgYXQgdGhlIGVuZCB3aGljaCB3aWxsIGFsd2F5cyBiZSAwLgorKyAqCisrICogSW4gYWRk aXRpb24gdGhlIHdob2xlIGJ1ZmZlciB3aWxsIGluaXRpYWxseSBhbmQgYWZ0ZXIgcmVzaXplcwor KyAqIGJlIDAtaW5pdGlhbGl6ZWQgc28gdGhhdCBubyB1bmluaXRpYWxpemVkIGRhdGEgd2lsbCBl dmVyIGFwcGVhci4KKysgKi8KKyt2b2lkIGF2X2Zhc3RfcGFkZGVkX21hbGxvYyh2b2lkICpwdHIs IHVuc2lnbmVkIGludCAqc2l6ZSwgc2l6ZV90IG1pbl9zaXplKTsKKysKKysvKioKKysgKiBTYW1l IGJlaGF2aW91ciBhdl9mYXN0X3BhZGRlZF9tYWxsb2MgZXhjZXB0IHRoYXQgYnVmZmVyIHdpbGwg YWx3YXlzCisrICogYmUgMC1pbml0aWFsaXplZCBhZnRlciBjYWxsLgorKyAqLworK3ZvaWQgYXZf ZmFzdF9wYWRkZWRfbWFsbG9jeih2b2lkICpwdHIsIHVuc2lnbmVkIGludCAqc2l6ZSwgc2l6ZV90 IG1pbl9zaXplKTsKKysKKysvKioKKysgKiBAcmV0dXJuIGEgcG9zaXRpdmUgdmFsdWUgaWYgcyBp cyBvcGVuIChpLmUuIGF2Y29kZWNfb3BlbjIoKSB3YXMgY2FsbGVkIG9uIGl0KSwKKysgKiAwIG90 aGVyd2lzZS4KKysgKi8KKytpbnQgYXZjb2RlY19pc19vcGVuKEFWQ29kZWNDb250ZXh0ICpzKTsK KysKKysvKioKKysgKiBAfQorKyAqLworKworKyNlbmRpZiAvKiBBVkNPREVDX0FWQ09ERUNfSCAq LworZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0 eS9mZm1wZWcvdjkvbGliYXZjb2RlYy9jb2RlY19kZXNjLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL2Nv ZGVjX2Rlc2MuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJk cGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvY29kZWNfZGVzYy5oLmZmbXBlZzkJMjAyNi0wOS0w NyAxMjoyMzo0Ny42NzI3NDA0NTYgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1l d29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL2NvZGVjX2Rlc2MuaAky MDI2LTA5LTA3IDEyOjIzOjQ3LjY3MjYxNjk0MSArMDIwMAorQEAgLTAsMCArMSwxNDIgQEAKKysv KgorKyAqIENvZGVjIGRlc2NyaXB0b3JzIHB1YmxpYyBBUEkKKysgKgorKyAqIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEZGbXBlZy4KKysgKgorKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAy LjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisrICoKKysgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBM aWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCisrICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyAqLworKworKyNpZm5kZWYgQVZDT0RFQ19D T0RFQ19ERVNDX0gKKysjZGVmaW5lIEFWQ09ERUNfQ09ERUNfREVTQ19ICisrCisrI2luY2x1ZGUg ImxpYmF2dXRpbC9hdnV0aWwuaCIKKysKKysjaW5jbHVkZSAiY29kZWNfaWQuaCIKKysKKysvKioK KysgKiBAYWRkdG9ncm91cCBsYXZjX2NvcmUKKysgKiBAeworKyAqLworKworKy8qKgorKyAqIFRo aXMgc3RydWN0IGRlc2NyaWJlcyB0aGUgcHJvcGVydGllcyBvZiBhIHNpbmdsZSBjb2RlYyBkZXNj cmliZWQgYnkgYW4KKysgKiBBVkNvZGVjSUQuCisrICogQHNlZSBhdmNvZGVjX2Rlc2NyaXB0b3Jf Z2V0KCkKKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVkNvZGVjRGVzY3JpcHRvciB7CisrICAgIGVu dW0gQVZDb2RlY0lEICAgICBpZDsKKysgICAgZW51bSBBVk1lZGlhVHlwZSB0eXBlOworKyAgICAv KioKKysgICAgICogTmFtZSBvZiB0aGUgY29kZWMgZGVzY3JpYmVkIGJ5IHRoaXMgZGVzY3JpcHRv ci4gSXQgaXMgbm9uLWVtcHR5IGFuZAorKyAgICAgKiB1bmlxdWUgZm9yIGVhY2ggY29kZWMgZGVz Y3JpcHRvci4gSXQgc2hvdWxkIGNvbnRhaW4gYWxwaGFudW1lcmljCisrICAgICAqIGNoYXJhY3Rl cnMgYW5kICdfJyBvbmx5LgorKyAgICAgKi8KKysgICAgY29uc3QgY2hhciAgICAgICpuYW1lOwor KyAgICAvKioKKysgICAgICogQSBtb3JlIGRlc2NyaXB0aXZlIG5hbWUgZm9yIHRoaXMgY29kZWMu IE1heSBiZSBOVUxMLgorKyAgICAgKi8KKysgICAgY29uc3QgY2hhciAqbG9uZ19uYW1lOworKyAg ICAvKioKKysgICAgICogQ29kZWMgcHJvcGVydGllcywgYSBjb21iaW5hdGlvbiBvZiBBVl9DT0RF Q19QUk9QXyogZmxhZ3MuCisrICAgICAqLworKyAgICBpbnQgICAgICAgICAgICAgcHJvcHM7Cisr ICAgIC8qKgorKyAgICAgKiBNSU1FIHR5cGUocykgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb2RlYy4K KysgICAgICogTWF5IGJlIE5VTEw7IGlmIG5vdCwgYSBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Yg TUlNRSB0eXBlcy4KKysgICAgICogVGhlIGZpcnN0IGl0ZW0gaXMgYWx3YXlzIG5vbi1OVUxMIGFu ZCBpcyB0aGUgcHJlZmVycmVkIE1JTUUgdHlwZS4KKysgICAgICovCisrICAgIGNvbnN0IGNoYXIg KmNvbnN0ICptaW1lX3R5cGVzOworKyAgICAvKioKKysgICAgICogSWYgbm9uLU5VTEwsIGFuIGFy cmF5IG9mIHByb2ZpbGVzIHJlY29nbml6ZWQgZm9yIHRoaXMgY29kZWMuCisrICAgICAqIFRlcm1p bmF0ZWQgd2l0aCBBVl9QUk9GSUxFX1VOS05PV04uCisrICAgICAqLworKyAgICBjb25zdCBzdHJ1 Y3QgQVZQcm9maWxlICpwcm9maWxlczsKKyt9IEFWQ29kZWNEZXNjcmlwdG9yOworKworKy8qKgor KyAqIENvZGVjIHVzZXMgb25seSBpbnRyYSBjb21wcmVzc2lvbi4KKysgKiBWaWRlbyBhbmQgYXVk aW8gY29kZWNzIG9ubHkuCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19QUk9QX0lOVFJBX09OTFkg ICAgKDEgPDwgMCkKKysvKioKKysgKiBDb2RlYyBzdXBwb3J0cyBsb3NzeSBjb21wcmVzc2lvbi4g QXVkaW8gYW5kIHZpZGVvIGNvZGVjcyBvbmx5LgorKyAqIEBub3RlIGEgY29kZWMgbWF5IHN1cHBv cnQgYm90aCBsb3NzeSBhbmQgbG9zc2xlc3MKKysgKiBjb21wcmVzc2lvbiBtb2RlcworKyAqLwor KyNkZWZpbmUgQVZfQ09ERUNfUFJPUF9MT1NTWSAgICAgICAgICgxIDw8IDEpCisrLyoqCisrICog Q29kZWMgc3VwcG9ydHMgbG9zc2xlc3MgY29tcHJlc3Npb24uIEF1ZGlvIGFuZCB2aWRlbyBjb2Rl Y3Mgb25seS4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX1BST1BfTE9TU0xFU1MgICAgICAoMSA8 PCAyKQorKy8qKgorKyAqIENvZGVjIHN1cHBvcnRzIGZyYW1lIHJlb3JkZXJpbmcuIFRoYXQgaXMs IHRoZSBjb2RlZCBvcmRlciAodGhlIG9yZGVyIGluIHdoaWNoCisrICogdGhlIGVuY29kZWQgcGFj a2V0cyBhcmUgb3V0cHV0IGJ5IHRoZSBlbmNvZGVycyAvIHN0b3JlZCAvIGlucHV0IHRvIHRoZQor KyAqIGRlY29kZXJzKSBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIHByZXNlbnRhdGlvbiBvcmRl ciBvZiB0aGUgY29ycmVzcG9uZGluZworKyAqIGZyYW1lcy4KKysgKgorKyAqIEZvciBjb2RlY3Mg dGhhdCBkbyBub3QgaGF2ZSB0aGlzIHByb3BlcnR5IHNldCwgUFRTIGFuZCBEVFMgc2hvdWxkIGFs d2F5cyBiZQorKyAqIGVxdWFsLgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfUFJPUF9SRU9SREVS ICAgICAgICgxIDw8IDMpCisrCisrLyoqCisrICogVmlkZW8gY29kZWMgc3VwcG9ydHMgc2VwYXJh dGUgY29kaW5nIG9mIGZpZWxkcyBpbiBpbnRlcmxhY2VkIGZyYW1lcy4KKysgKi8KKysjZGVmaW5l IEFWX0NPREVDX1BST1BfRklFTERTICAgICAgICAoMSA8PCA0KQorKworKy8qKgorKyAqIFZpZGVv IGNvZGVjIGNvbnRhaW5zIGVuaGFuY2VtZW50IGluZm9ybWF0aW9uIG1lYW50IHRvIGJlIGFwcGxp ZWQgdG8gb3RoZXIKKysgKiBleGlzdGluZyBmcmFtZXMsIGFuZCBjYW4ndCBnZW5lcmF0ZSB1c2Fi bGUgaW1hZ2UgZGF0YSBvbiBpdHMgb3duLgorKyAqIEEgc3RhbmRhbG9uZSBkZWNvZGVyIGlzIHVu bGlrZWx5IHRvIGJlIGF2YWlsYWJsZSBmb3IgaXQgYW5kIHNob3VsZCBub3QKKysgKiBiZSBleHBl Y3RlZC4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX1BST1BfRU5IQU5DRU1FTlQgICAoMSA8PCA1 KQorKworKy8qKgorKyAqIFN1YnRpdGxlIGNvZGVjIGlzIGJpdG1hcCBiYXNlZAorKyAqIERlY29k ZWQgQVZTdWJ0aXRsZSBkYXRhIGNhbiBiZSByZWFkIGZyb20gdGhlIEFWU3VidGl0bGVSZWN0LT5w aWN0IGZpZWxkLgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfUFJPUF9CSVRNQVBfU1VCICAgICgx IDw8IDE2KQorKy8qKgorKyAqIFN1YnRpdGxlIGNvZGVjIGlzIHRleHQgYmFzZWQuCisrICogRGVj b2RlZCBBVlN1YnRpdGxlIGRhdGEgY2FuIGJlIHJlYWQgZnJvbSB0aGUgQVZTdWJ0aXRsZVJlY3Qt PmFzcyBmaWVsZC4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX1BST1BfVEVYVF9TVUIgICAgICAo MSA8PCAxNykKKysKKysvKioKKysgKiBAcmV0dXJuIGRlc2NyaXB0b3IgZm9yIGdpdmVuIGNvZGVj IElEIG9yIE5VTEwgaWYgbm8gZGVzY3JpcHRvciBleGlzdHMuCisrICovCisrY29uc3QgQVZDb2Rl Y0Rlc2NyaXB0b3IgKmF2Y29kZWNfZGVzY3JpcHRvcl9nZXQoZW51bSBBVkNvZGVjSUQgaWQpOwor KworKy8qKgorKyAqIEl0ZXJhdGUgb3ZlciBhbGwgY29kZWMgZGVzY3JpcHRvcnMga25vd24gdG8g bGliYXZjb2RlYy4KKysgKgorKyAqIEBwYXJhbSBwcmV2IHByZXZpb3VzIGRlc2NyaXB0b3IuIE5V TEwgdG8gZ2V0IHRoZSBmaXJzdCBkZXNjcmlwdG9yLgorKyAqCisrICogQHJldHVybiBuZXh0IGRl c2NyaXB0b3Igb3IgTlVMTCBhZnRlciB0aGUgbGFzdCBkZXNjcmlwdG9yCisrICovCisrY29uc3Qg QVZDb2RlY0Rlc2NyaXB0b3IgKmF2Y29kZWNfZGVzY3JpcHRvcl9uZXh0KGNvbnN0IEFWQ29kZWNE ZXNjcmlwdG9yICpwcmV2KTsKKysKKysvKioKKysgKiBAcmV0dXJuIGNvZGVjIGRlc2NyaXB0b3Ig d2l0aCB0aGUgZ2l2ZW4gbmFtZSBvciBOVUxMIGlmIG5vIHN1Y2ggZGVzY3JpcHRvcgorKyAqICAg ICAgICAgZXhpc3RzLgorKyAqLworK2NvbnN0IEFWQ29kZWNEZXNjcmlwdG9yICphdmNvZGVjX2Rl c2NyaXB0b3JfZ2V0X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisrCisrLyoqCisrICogQH0K KysgKi8KKysKKysjZW5kaWYgLy8gQVZDT0RFQ19DT0RFQ19ERVNDX0gKK2RpZmYgLXVwIE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2 Y29kZWMvY29kZWMuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlh L3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvY29kZWMuaAorLS0tIE11c2VTY29yZS00 LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMv Y29kZWMuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjcyNDc0MjgwICswMjAwCisrKysg TXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkv bGliYXZjb2RlYy9jb2RlYy5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjcyMjM4NTQxICswMjAwCitA QCAtMCwwICsxLDM0NSBAQAorKy8qCisrICogQVZDb2RlYyBwdWJsaWMgQVBJCisrICoKKysgKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVm IEFWQ09ERUNfQ09ERUNfSAorKyNkZWZpbmUgQVZDT0RFQ19DT0RFQ19ICisrCisrI2luY2x1ZGUg PHN0ZGludC5oPgorKworKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZ1dGlsLmgiCisrI2luY2x1ZGUg ImxpYmF2dXRpbC9od2NvbnRleHQuaCIKKysjaW5jbHVkZSAibGliYXZ1dGlsL2xvZy5oIgorKyNp bmNsdWRlICJsaWJhdnV0aWwvcGl4Zm10LmgiCisrCisrI2luY2x1ZGUgImxpYmF2Y29kZWMvY29k ZWNfaWQuaCIKKysKKysvKioKKysgKiBAYWRkdG9ncm91cCBsYXZjX2NvcmUKKysgKiBAeworKyAq LworKworKy8qKgorKyAqIERlY29kZXIgY2FuIHVzZSBkcmF3X2hvcml6X2JhbmQgY2FsbGJhY2su CisrICovCisrI2RlZmluZSBBVl9DT0RFQ19DQVBfRFJBV19IT1JJWl9CQU5EICAgICAoMSA8PCAg MCkKKysvKioKKysgKiBDb2RlYyB1c2VzIGdldF9idWZmZXIoKSBvciBnZXRfZW5jb2RlX2J1ZmZl cigpIGZvciBhbGxvY2F0aW5nIGJ1ZmZlcnMgYW5kCisrICogc3VwcG9ydHMgY3VzdG9tIGFsbG9j YXRvcnMuCisrICogSWYgbm90IHNldCwgaXQgbWlnaHQgbm90IHVzZSBnZXRfYnVmZmVyKCkgb3Ig Z2V0X2VuY29kZV9idWZmZXIoKSBhdCBhbGwsIG9yCisrICogdXNlIG9wZXJhdGlvbnMgdGhhdCBh c3N1bWUgdGhlIGJ1ZmZlciB3YXMgYWxsb2NhdGVkIGJ5CisrICogYXZjb2RlY19kZWZhdWx0X2dl dF9idWZmZXIyIG9yIGF2Y29kZWNfZGVmYXVsdF9nZXRfZW5jb2RlX2J1ZmZlci4KKysgKi8KKysj ZGVmaW5lIEFWX0NPREVDX0NBUF9EUjEgICAgICAgICAgICAgICAgICgxIDw8ICAxKQorKy8qKgor KyAqIEVuY29kZXIgb3IgZGVjb2RlciByZXF1aXJlcyBmbHVzaGluZyB3aXRoIE5VTEwgaW5wdXQg YXQgdGhlIGVuZCBpbiBvcmRlciB0bworKyAqIGdpdmUgdGhlIGNvbXBsZXRlIGFuZCBjb3JyZWN0 IG91dHB1dC4KKysgKgorKyAqIE5PVEU6IElmIHRoaXMgZmxhZyBpcyBub3Qgc2V0LCB0aGUgY29k ZWMgaXMgZ3VhcmFudGVlZCB0byBuZXZlciBiZSBmZWQgd2l0aAorKyAqICAgICAgIHdpdGggTlVM TCBkYXRhLiBUaGUgdXNlciBjYW4gc3RpbGwgc2VuZCBOVUxMIGRhdGEgdG8gdGhlIHB1YmxpYyBl bmNvZGUKKysgKiAgICAgICBvciBkZWNvZGUgZnVuY3Rpb24sIGJ1dCBsaWJhdmNvZGVjIHdpbGwg bm90IHBhc3MgaXQgYWxvbmcgdG8gdGhlIGNvZGVjCisrICogICAgICAgdW5sZXNzIHRoaXMgZmxh ZyBpcyBzZXQuCisrICoKKysgKiBEZWNvZGVyczoKKysgKiBUaGUgZGVjb2RlciBoYXMgYSBub24t emVybyBkZWxheSBhbmQgbmVlZHMgdG8gYmUgZmVkIHdpdGggYXZwa3QtPmRhdGE9TlVMTCwKKysg KiBhdnBrdC0+c2l6ZT0wIGF0IHRoZSBlbmQgdG8gZ2V0IHRoZSBkZWxheWVkIGRhdGEgdW50aWwg dGhlIGRlY29kZXIgbm8gbG9uZ2VyCisrICogcmV0dXJucyBmcmFtZXMuCisrICoKKysgKiBFbmNv ZGVyczoKKysgKiBUaGUgZW5jb2RlciBuZWVkcyB0byBiZSBmZWQgd2l0aCBOVUxMIGRhdGEgYXQg dGhlIGVuZCBvZiBlbmNvZGluZyB1bnRpbCB0aGUKKysgKiBlbmNvZGVyIG5vIGxvbmdlciByZXR1 cm5zIGRhdGEuCisrICoKKysgKiBOT1RFOiBGb3IgZW5jb2RlcnMgaW1wbGVtZW50aW5nIHRoZSBB VkNvZGVjLmVuY29kZTIoKSBmdW5jdGlvbiwgc2V0dGluZyB0aGlzCisrICogICAgICAgZmxhZyBh bHNvIG1lYW5zIHRoYXQgdGhlIGVuY29kZXIgbXVzdCBzZXQgdGhlIHB0cyBhbmQgZHVyYXRpb24g Zm9yCisrICogICAgICAgZWFjaCBvdXRwdXQgcGFja2V0LiBJZiB0aGlzIGZsYWcgaXMgbm90IHNl dCwgdGhlIHB0cyBhbmQgZHVyYXRpb24gd2lsbAorKyAqICAgICAgIGJlIGRldGVybWluZWQgYnkg bGliYXZjb2RlYyBmcm9tIHRoZSBpbnB1dCBmcmFtZS4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVD X0NBUF9ERUxBWSAgICAgICAgICAgICAgICgxIDw8ICA1KQorKy8qKgorKyAqIENvZGVjIGNhbiBi ZSBmZWQgYSBmaW5hbCBmcmFtZSB3aXRoIGEgc21hbGxlciBzaXplLgorKyAqIFRoaXMgY2FuIGJl IHVzZWQgdG8gcHJldmVudCB0cnVuY2F0aW9uIG9mIHRoZSBsYXN0IGF1ZGlvIHNhbXBsZXMuCisr ICovCisrI2RlZmluZSBBVl9DT0RFQ19DQVBfU01BTExfTEFTVF9GUkFNRSAgICAoMSA8PCAgNikK KysKKysvKioKKysgKiBDb2RlYyBpcyBleHBlcmltZW50YWwgYW5kIGlzIHRodXMgYXZvaWRlZCBp biBmYXZvciBvZiBub24gZXhwZXJpbWVudGFsCisrICogZW5jb2RlcnMKKysgKi8KKysjZGVmaW5l IEFWX0NPREVDX0NBUF9FWFBFUklNRU5UQUwgICAgICAgICgxIDw8ICA5KQorKy8qKgorKyAqIENv ZGVjIHNob3VsZCBmaWxsIGluIGNoYW5uZWwgY29uZmlndXJhdGlvbiBhbmQgc2FtcGxlcmF0ZSBp bnN0ZWFkIG9mIGNvbnRhaW5lcgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfQ0FQX0NIQU5ORUxf Q09ORiAgICAgICAgKDEgPDwgMTApCisrLyoqCisrICogQ29kZWMgc3VwcG9ydHMgZnJhbWUtbGV2 ZWwgbXVsdGl0aHJlYWRpbmcuCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19DQVBfRlJBTUVfVEhS RUFEUyAgICAgICAoMSA8PCAxMikKKysvKioKKysgKiBDb2RlYyBzdXBwb3J0cyBzbGljZS1iYXNl ZCAob3IgcGFydGl0aW9uLWJhc2VkKSBtdWx0aXRocmVhZGluZy4KKysgKi8KKysjZGVmaW5lIEFW X0NPREVDX0NBUF9TTElDRV9USFJFQURTICAgICAgICgxIDw8IDEzKQorKy8qKgorKyAqIENvZGVj IHN1cHBvcnRzIGNoYW5nZWQgcGFyYW1ldGVycyBhdCBhbnkgcG9pbnQuCisrICovCisrI2RlZmlu ZSBBVl9DT0RFQ19DQVBfUEFSQU1fQ0hBTkdFICAgICAgICAoMSA8PCAxNCkKKysvKioKKysgKiBD b2RlYyBzdXBwb3J0cyBtdWx0aXRocmVhZGluZyB0aHJvdWdoIGEgbWV0aG9kIG90aGVyIHRoYW4g c2xpY2UtIG9yCisrICogZnJhbWUtbGV2ZWwgbXVsdGl0aHJlYWRpbmcuIFR5cGljYWxseSB0aGlz IG1hcmtzIHdyYXBwZXJzIGFyb3VuZAorKyAqIG11bHRpdGhyZWFkaW5nLWNhcGFibGUgZXh0ZXJu YWwgbGlicmFyaWVzLgorKyAqLworKyNkZWZpbmUgQVZfQ09ERUNfQ0FQX09USEVSX1RIUkVBRFMg ICAgICAgKDEgPDwgMTUpCisrLyoqCisrICogQXVkaW8gZW5jb2RlciBzdXBwb3J0cyByZWNlaXZp bmcgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIHNhbXBsZXMgaW4gZWFjaCBjYWxsLgorKyAqLworKyNk ZWZpbmUgQVZfQ09ERUNfQ0FQX1ZBUklBQkxFX0ZSQU1FX1NJWkUgKDEgPDwgMTYpCisrLyoqCisr ICogRGVjb2RlciBpcyBub3QgYSBwcmVmZXJyZWQgY2hvaWNlIGZvciBwcm9iaW5nLgorKyAqIFRo aXMgaW5kaWNhdGVzIHRoYXQgdGhlIGRlY29kZXIgaXMgbm90IGEgZ29vZCBjaG9pY2UgZm9yIHBy b2JpbmcuCisrICogSXQgY291bGQgZm9yIGV4YW1wbGUgYmUgYW4gZXhwZW5zaXZlIHRvIHNwaW4g dXAgaGFyZHdhcmUgZGVjb2RlciwKKysgKiBvciBpdCBjb3VsZCBzaW1wbHkgbm90IHByb3ZpZGUg YSBsb3Qgb2YgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0CisrICogdGhlIHN0cmVhbS4KKysgKiBB IGRlY29kZXIgbWFya2VkIHdpdGggdGhpcyBmbGFnIHNob3VsZCBvbmx5IGJlIHVzZWQgYXMgbGFz dCByZXNvcnQKKysgKiBjaG9pY2UgZm9yIHByb2JpbmcuCisrICovCisrI2RlZmluZSBBVl9DT0RF Q19DQVBfQVZPSURfUFJPQklORyAgICAgICAoMSA8PCAxNykKKysKKysvKioKKysgKiBDb2RlYyBp cyBiYWNrZWQgYnkgYSBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbi4gVHlwaWNhbGx5IHVzZWQgdG8K KysgKiBpZGVudGlmeSBhIG5vbi1od2FjY2VsIGhhcmR3YXJlIGRlY29kZXIuIEZvciBpbmZvcm1h dGlvbiBhYm91dCBod2FjY2VscywgdXNlCisrICogYXZjb2RlY19nZXRfaHdfY29uZmlnKCkgaW5z dGVhZC4KKysgKi8KKysjZGVmaW5lIEFWX0NPREVDX0NBUF9IQVJEV0FSRSAgICAgICAgICAgICgx IDw8IDE4KQorKworKy8qKgorKyAqIENvZGVjIGlzIHBvdGVudGlhbGx5IGJhY2tlZCBieSBhIGhh cmR3YXJlIGltcGxlbWVudGF0aW9uLCBidXQgbm90CisrICogbmVjZXNzYXJpbHkuIFRoaXMgaXMg dXNlZCBpbnN0ZWFkIG9mIEFWX0NPREVDX0NBUF9IQVJEV0FSRSwgaWYgdGhlCisrICogaW1wbGVt ZW50YXRpb24gcHJvdmlkZXMgc29tZSBzb3J0IG9mIGludGVybmFsIGZhbGxiYWNrLgorKyAqLwor KyNkZWZpbmUgQVZfQ09ERUNfQ0FQX0hZQlJJRCAgICAgICAgICAgICAgKDEgPDwgMTkpCisrCisr LyoqCisrICogVGhpcyBlbmNvZGVyIGNhbiByZW9yZGVyIHVzZXIgb3BhcXVlIHZhbHVlcyBmcm9t IGlucHV0IEFWRnJhbWVzIGFuZCByZXR1cm4KKysgKiB0aGVtIHdpdGggY29ycmVzcG9uZGluZyBv dXRwdXQgcGFja2V0cy4KKysgKiBAc2VlIEFWX0NPREVDX0ZMQUdfQ09QWV9PUEFRVUUKKysgKi8K KysjZGVmaW5lIEFWX0NPREVDX0NBUF9FTkNPREVSX1JFT1JERVJFRF9PUEFRVUUgKDEgPDwgMjAp CisrCisrLyoqCisrICogVGhpcyBlbmNvZGVyIGNhbiBiZSBmbHVzaGVkIHVzaW5nIGF2Y29kZWNf Zmx1c2hfYnVmZmVycygpLiBJZiB0aGlzIGZsYWcgaXMKKysgKiBub3Qgc2V0LCB0aGUgZW5jb2Rl ciBtdXN0IGJlIGNsb3NlZCBhbmQgcmVvcGVuZWQgdG8gZW5zdXJlIHRoYXQgbm8gZnJhbWVzCisr ICogcmVtYWluIHBlbmRpbmcuCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19DQVBfRU5DT0RFUl9G TFVTSCAgICgxIDw8IDIxKQorKworKy8qKgorKyAqIFRoZSBlbmNvZGVyIGlzIGFibGUgdG8gb3V0 cHV0IHJlY29uc3RydWN0ZWQgZnJhbWUgZGF0YSwgaS5lLiByYXcgZnJhbWVzIHRoYXQKKysgKiB3 b3VsZCBiZSBwcm9kdWNlZCBieSBkZWNvZGluZyB0aGUgZW5jb2RlZCBiaXRzdHJlYW0uCisrICoK KysgKiBSZWNvbnN0cnVjdGVkIGZyYW1lIG91dHB1dCBpcyBlbmFibGVkIGJ5IHRoZSBBVl9DT0RF Q19GTEFHX1JFQ09OX0ZSQU1FIGZsYWcuCisrICovCisrI2RlZmluZSBBVl9DT0RFQ19DQVBfRU5D T0RFUl9SRUNPTl9GUkFNRSAoMSA8PCAyMikKKysKKysvKioKKysgKiBBVlByb2ZpbGUuCisrICov CisrdHlwZWRlZiBzdHJ1Y3QgQVZQcm9maWxlIHsKKysgICAgaW50IHByb2ZpbGU7CisrICAgIGNv bnN0IGNoYXIgKm5hbWU7IC8vLzwgc2hvcnQgbmFtZSBmb3IgdGhlIHByb2ZpbGUKKyt9IEFWUHJv ZmlsZTsKKysKKysvKioKKysgKiBBVkNvZGVjLgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWQ29k ZWMgeworKyAgICAvKioKKysgICAgICogTmFtZSBvZiB0aGUgY29kZWMgaW1wbGVtZW50YXRpb24u CisrICAgICAqIFRoZSBuYW1lIGlzIGdsb2JhbGx5IHVuaXF1ZSBhbW9uZyBlbmNvZGVycyBhbmQg YW1vbmcgZGVjb2RlcnMgKGJ1dCBhbgorKyAgICAgKiBlbmNvZGVyIGFuZCBhIGRlY29kZXIgY2Fu IHNoYXJlIHRoZSBzYW1lIG5hbWUpLgorKyAgICAgKiBUaGlzIGlzIHRoZSBwcmltYXJ5IHdheSB0 byBmaW5kIGEgY29kZWMgZnJvbSB0aGUgdXNlciBwZXJzcGVjdGl2ZS4KKysgICAgICovCisrICAg IGNvbnN0IGNoYXIgKm5hbWU7CisrICAgIC8qKgorKyAgICAgKiBEZXNjcmlwdGl2ZSBuYW1lIGZv ciB0aGUgY29kZWMsIG1lYW50IHRvIGJlIG1vcmUgaHVtYW4gcmVhZGFibGUgdGhhbiBuYW1lLgor KyAgICAgKiBZb3Ugc2hvdWxkIHVzZSB0aGUgTlVMTF9JRl9DT05GSUdfU01BTEwoKSBtYWNybyB0 byBkZWZpbmUgaXQuCisrICAgICAqLworKyAgICBjb25zdCBjaGFyICpsb25nX25hbWU7CisrICAg IGVudW0gQVZNZWRpYVR5cGUgdHlwZTsKKysgICAgZW51bSBBVkNvZGVjSUQgaWQ7CisrICAgIC8q KgorKyAgICAgKiBDb2RlYyBjYXBhYmlsaXRpZXMuCisrICAgICAqIHNlZSBBVl9DT0RFQ19DQVBf KgorKyAgICAgKi8KKysgICAgaW50IGNhcGFiaWxpdGllczsKKysgICAgdWludDhfdCBtYXhfbG93 cmVzOyAgICAgICAgICAgICAgICAgICAgIC8vLzwgbWF4aW11bSB2YWx1ZSBmb3IgbG93cmVzIHN1 cHBvcnRlZCBieSB0aGUgZGVjb2RlcgorKworKyAgICBjb25zdCBBVkNsYXNzICpwcml2X2NsYXNz OyAgICAgICAgICAgICAgLy8vPCBBVkNsYXNzIGZvciB0aGUgcHJpdmF0ZSBjb250ZXh0CisrICAg IGNvbnN0IEFWUHJvZmlsZSAqcHJvZmlsZXM7ICAgICAgICAgICAgICAvLy88IGFycmF5IG9mIHJl Y29nbml6ZWQgcHJvZmlsZXMsIG9yIE5VTEwgaWYgdW5rbm93biwgYXJyYXkgaXMgdGVybWluYXRl ZCBieSB7QVZfUFJPRklMRV9VTktOT1dOfQorKworKyAgICAvKioKKysgICAgICogR3JvdXAgbmFt ZSBvZiB0aGUgY29kZWMgaW1wbGVtZW50YXRpb24uCisrICAgICAqIFRoaXMgaXMgYSBzaG9ydCBz eW1ib2xpYyBuYW1lIG9mIHRoZSB3cmFwcGVyIGJhY2tpbmcgdGhpcyBjb2RlYy4gQQorKyAgICAg KiB3cmFwcGVyIHVzZXMgc29tZSBraW5kIG9mIGV4dGVybmFsIGltcGxlbWVudGF0aW9uIGZvciB0 aGUgY29kZWMsIHN1Y2gKKysgICAgICogYXMgYW4gZXh0ZXJuYWwgbGlicmFyeSwgb3IgYSBjb2Rl YyBpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCBieSB0aGUgT1Mgb3IKKysgICAgICogdGhlIGhhcmR3 YXJlLgorKyAgICAgKiBJZiB0aGlzIGZpZWxkIGlzIE5VTEwsIHRoaXMgaXMgYSBidWlsdGluLCBs aWJhdmNvZGVjIG5hdGl2ZSBjb2RlYy4KKysgICAgICogSWYgbm9uLU5VTEwsIHRoaXMgd2lsbCBi ZSB0aGUgc3VmZml4IGluIEFWQ29kZWMubmFtZSBpbiBtb3N0IGNhc2VzCisrICAgICAqICh1c3Vh bGx5IEFWQ29kZWMubmFtZSB3aWxsIGJlIG9mIHRoZSBmb3JtICI8Y29kZWNfbmFtZT5fPHdyYXBw ZXJfbmFtZT4iKS4KKysgICAgICovCisrICAgIGNvbnN0IGNoYXIgKndyYXBwZXJfbmFtZTsKKyt9 IEFWQ29kZWM7CisrCisrLyoqCisrICogSXRlcmF0ZSBvdmVyIGFsbCByZWdpc3RlcmVkIGNvZGVj cy4KKysgKgorKyAqIEBwYXJhbSBvcGFxdWUgYSBwb2ludGVyIHdoZXJlIGxpYmF2Y29kZWMgd2ls bCBzdG9yZSB0aGUgaXRlcmF0aW9uIHN0YXRlLiBNdXN0CisrICogICAgICAgICAgICAgICBwb2lu dCB0byBOVUxMIHRvIHN0YXJ0IHRoZSBpdGVyYXRpb24uCisrICoKKysgKiBAcmV0dXJuIHRoZSBu ZXh0IHJlZ2lzdGVyZWQgY29kZWMgb3IgTlVMTCB3aGVuIHRoZSBpdGVyYXRpb24gaXMKKysgKiAg ICAgICAgIGZpbmlzaGVkCisrICovCisrY29uc3QgQVZDb2RlYyAqYXZfY29kZWNfaXRlcmF0ZSh2 b2lkICoqb3BhcXVlKTsKKysKKysvKioKKysgKiBGaW5kIGEgcmVnaXN0ZXJlZCBkZWNvZGVyIHdp dGggYSBtYXRjaGluZyBjb2RlYyBJRC4KKysgKgorKyAqIEBwYXJhbSBpZCBBVkNvZGVjSUQgb2Yg dGhlIHJlcXVlc3RlZCBkZWNvZGVyCisrICogQHJldHVybiBBIGRlY29kZXIgaWYgb25lIHdhcyBm b3VuZCwgTlVMTCBvdGhlcndpc2UuCisrICovCisrY29uc3QgQVZDb2RlYyAqYXZjb2RlY19maW5k X2RlY29kZXIoZW51bSBBVkNvZGVjSUQgaWQpOworKworKy8qKgorKyAqIEZpbmQgYSByZWdpc3Rl cmVkIGRlY29kZXIgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCisrICoKKysgKiBAcGFyYW0gbmFt ZSBuYW1lIG9mIHRoZSByZXF1ZXN0ZWQgZGVjb2RlcgorKyAqIEByZXR1cm4gQSBkZWNvZGVyIGlm IG9uZSB3YXMgZm91bmQsIE5VTEwgb3RoZXJ3aXNlLgorKyAqLworK2NvbnN0IEFWQ29kZWMgKmF2 Y29kZWNfZmluZF9kZWNvZGVyX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisrCisrLyoqCisr ICogRmluZCBhIHJlZ2lzdGVyZWQgZW5jb2RlciB3aXRoIGEgbWF0Y2hpbmcgY29kZWMgSUQuCisr ICoKKysgKiBAcGFyYW0gaWQgQVZDb2RlY0lEIG9mIHRoZSByZXF1ZXN0ZWQgZW5jb2RlcgorKyAq IEByZXR1cm4gQW4gZW5jb2RlciBpZiBvbmUgd2FzIGZvdW5kLCBOVUxMIG90aGVyd2lzZS4KKysg Ki8KKytjb25zdCBBVkNvZGVjICphdmNvZGVjX2ZpbmRfZW5jb2RlcihlbnVtIEFWQ29kZWNJRCBp ZCk7CisrCisrLyoqCisrICogRmluZCBhIHJlZ2lzdGVyZWQgZW5jb2RlciB3aXRoIHRoZSBzcGVj aWZpZWQgbmFtZS4KKysgKgorKyAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIHJlcXVlc3RlZCBl bmNvZGVyCisrICogQHJldHVybiBBbiBlbmNvZGVyIGlmIG9uZSB3YXMgZm91bmQsIE5VTEwgb3Ro ZXJ3aXNlLgorKyAqLworK2NvbnN0IEFWQ29kZWMgKmF2Y29kZWNfZmluZF9lbmNvZGVyX2J5X25h bWUoY29uc3QgY2hhciAqbmFtZSk7CisrLyoqCisrICogQHJldHVybiBhIG5vbi16ZXJvIG51bWJl ciBpZiBjb2RlYyBpcyBhbiBlbmNvZGVyLCB6ZXJvIG90aGVyd2lzZQorKyAqLworK2ludCBhdl9j b2RlY19pc19lbmNvZGVyKGNvbnN0IEFWQ29kZWMgKmNvZGVjKTsKKysKKysvKioKKysgKiBAcmV0 dXJuIGEgbm9uLXplcm8gbnVtYmVyIGlmIGNvZGVjIGlzIGEgZGVjb2RlciwgemVybyBvdGhlcndp c2UKKysgKi8KKytpbnQgYXZfY29kZWNfaXNfZGVjb2Rlcihjb25zdCBBVkNvZGVjICpjb2RlYyk7 CisrCisrLyoqCisrICogUmV0dXJuIGEgbmFtZSBmb3IgdGhlIHNwZWNpZmllZCBwcm9maWxlLCBp ZiBhdmFpbGFibGUuCisrICoKKysgKiBAcGFyYW0gY29kZWMgdGhlIGNvZGVjIHRoYXQgaXMgc2Vh cmNoZWQgZm9yIHRoZSBnaXZlbiBwcm9maWxlCisrICogQHBhcmFtIHByb2ZpbGUgdGhlIHByb2Zp bGUgdmFsdWUgZm9yIHdoaWNoIGEgbmFtZSBpcyByZXF1ZXN0ZWQKKysgKiBAcmV0dXJuIEEgbmFt ZSBmb3IgdGhlIHByb2ZpbGUgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlLgorKyAqLworK2NvbnN0 IGNoYXIgKmF2X2dldF9wcm9maWxlX25hbWUoY29uc3QgQVZDb2RlYyAqY29kZWMsIGludCBwcm9m aWxlKTsKKysKKytlbnVtIHsKKysgICAgLyoqCisrICAgICAqIFRoZSBjb2RlYyBzdXBwb3J0cyB0 aGlzIGZvcm1hdCB2aWEgdGhlIGh3X2RldmljZV9jdHggaW50ZXJmYWNlLgorKyAgICAgKgorKyAg ICAgKiBXaGVuIHNlbGVjdGluZyB0aGlzIGZvcm1hdCwgQVZDb2RlY0NvbnRleHQuaHdfZGV2aWNl X2N0eCBzaG91bGQKKysgICAgICogaGF2ZSBiZWVuIHNldCB0byBhIGRldmljZSBvZiB0aGUgc3Bl Y2lmaWVkIHR5cGUgYmVmb3JlIGNhbGxpbmcKKysgICAgICogYXZjb2RlY19vcGVuMigpLgorKyAg ICAgKi8KKysgICAgQVZfQ09ERUNfSFdfQ09ORklHX01FVEhPRF9IV19ERVZJQ0VfQ1RYID0gMHgw MSwKKysgICAgLyoqCisrICAgICAqIFRoZSBjb2RlYyBzdXBwb3J0cyB0aGlzIGZvcm1hdCB2aWEg dGhlIGh3X2ZyYW1lc19jdHggaW50ZXJmYWNlLgorKyAgICAgKgorKyAgICAgKiBXaGVuIHNlbGVj dGluZyB0aGlzIGZvcm1hdCBmb3IgYSBkZWNvZGVyLAorKyAgICAgKiBBVkNvZGVjQ29udGV4dC5o d19mcmFtZXNfY3R4IHNob3VsZCBiZSBzZXQgdG8gYSBzdWl0YWJsZSBmcmFtZXMKKysgICAgICog Y29udGV4dCBpbnNpZGUgdGhlIGdldF9mb3JtYXQoKSBjYWxsYmFjay4gIFRoZSBmcmFtZXMgY29u dGV4dAorKyAgICAgKiBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIG9uIGEgZGV2aWNlIG9mIHRoZSBz cGVjaWZpZWQgdHlwZS4KKysgICAgICoKKysgICAgICogV2hlbiBzZWxlY3RpbmcgdGhpcyBmb3Jt YXQgZm9yIGFuIGVuY29kZXIsCisrICAgICAqIEFWQ29kZWNDb250ZXh0Lmh3X2ZyYW1lc19jdHgg c2hvdWxkIGJlIHNldCB0byB0aGUgY29udGV4dCB3aGljaAorKyAgICAgKiB3aWxsIGJlIHVzZWQg Zm9yIHRoZSBpbnB1dCBmcmFtZXMgYmVmb3JlIGNhbGxpbmcgYXZjb2RlY19vcGVuMigpLgorKyAg ICAgKi8KKysgICAgQVZfQ09ERUNfSFdfQ09ORklHX01FVEhPRF9IV19GUkFNRVNfQ1RYID0gMHgw MiwKKysgICAgLyoqCisrICAgICAqIFRoZSBjb2RlYyBzdXBwb3J0cyB0aGlzIGZvcm1hdCBieSBz b21lIGludGVybmFsIG1ldGhvZC4KKysgICAgICoKKysgICAgICogVGhpcyBmb3JtYXQgY2FuIGJl IHNlbGVjdGVkIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiAtCisrICAgICAq IG5vIGRldmljZSBvciBmcmFtZXMgY29udGV4dCBpcyByZXF1aXJlZC4KKysgICAgICovCisrICAg IEFWX0NPREVDX0hXX0NPTkZJR19NRVRIT0RfSU5URVJOQUwgICAgICA9IDB4MDQsCisrICAgIC8q KgorKyAgICAgKiBUaGUgY29kZWMgc3VwcG9ydHMgdGhpcyBmb3JtYXQgYnkgc29tZSBhZC1ob2Mg bWV0aG9kLgorKyAgICAgKgorKyAgICAgKiBBZGRpdGlvbmFsIHNldHRpbmdzIGFuZC9vciBmdW5j dGlvbiBjYWxscyBhcmUgcmVxdWlyZWQuICBTZWUgdGhlCisrICAgICAqIGNvZGVjLXNwZWNpZmlj IGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuICAoTWV0aG9kcyByZXF1aXJpbmcKKysgICAgICog dGhpcyBzb3J0IG9mIGNvbmZpZ3VyYXRpb24gYXJlIGRlcHJlY2F0ZWQgYW5kIG90aGVycyBzaG91 bGQgYmUKKysgICAgICogdXNlZCBpbiBwcmVmZXJlbmNlLikKKysgICAgICovCisrICAgIEFWX0NP REVDX0hXX0NPTkZJR19NRVRIT0RfQURfSE9DICAgICAgICA9IDB4MDgsCisrfTsKKysKKyt0eXBl ZGVmIHN0cnVjdCBBVkNvZGVjSFdDb25maWcgeworKyAgICAvKioKKysgICAgICogRm9yIGRlY29k ZXJzLCBhIGhhcmR3YXJlIHBpeGVsIGZvcm1hdCB3aGljaCB0aGF0IGRlY29kZXIgbWF5IGJlCisr ICAgICAqIGFibGUgdG8gZGVjb2RlIHRvIGlmIHN1aXRhYmxlIGhhcmR3YXJlIGlzIGF2YWlsYWJs ZS4KKysgICAgICoKKysgICAgICogRm9yIGVuY29kZXJzLCBhIHBpeGVsIGZvcm1hdCB3aGljaCB0 aGUgZW5jb2RlciBtYXkgYmUgYWJsZSB0bworKyAgICAgKiBhY2NlcHQuICBJZiBzZXQgdG8gQVZf UElYX0ZNVF9OT05FLCB0aGlzIGFwcGxpZXMgdG8gYWxsIHBpeGVsCisrICAgICAqIGZvcm1hdHMg c3VwcG9ydGVkIGJ5IHRoZSBjb2RlYy4KKysgICAgICovCisrICAgIGVudW0gQVZQaXhlbEZvcm1h dCBwaXhfZm10OworKyAgICAvKioKKysgICAgICogQml0IHNldCBvZiBBVl9DT0RFQ19IV19DT05G SUdfTUVUSE9EXyogZmxhZ3MsIGRlc2NyaWJpbmcgdGhlIHBvc3NpYmxlCisrICAgICAqIHNldHVw IG1ldGhvZHMgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24uCisrICAg ICAqLworKyAgICBpbnQgbWV0aG9kczsKKysgICAgLyoqCisrICAgICAqIFRoZSBkZXZpY2UgdHlw ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24uCisrICAgICAqCisrICAgICAqIE11 c3QgYmUgc2V0IGZvciBBVl9DT0RFQ19IV19DT05GSUdfTUVUSE9EX0hXX0RFVklDRV9DVFggYW5k CisrICAgICAqIEFWX0NPREVDX0hXX0NPTkZJR19NRVRIT0RfSFdfRlJBTUVTX0NUWCwgb3RoZXJ3 aXNlIHVudXNlZC4KKysgICAgICovCisrICAgIGVudW0gQVZIV0RldmljZVR5cGUgZGV2aWNlX3R5 cGU7CisrfSBBVkNvZGVjSFdDb25maWc7CisrCisrLyoqCisrICogUmV0cmlldmUgc3VwcG9ydGVk IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIGZvciBhIGNvZGVjLgorKyAqCisrICogVmFsdWVzIG9m IGluZGV4IGZyb20gemVybyB0byBzb21lIG1heGltdW0gcmV0dXJuIHRoZSBpbmRleGVkIGNvbmZp Z3VyYXRpb24KKysgKiBkZXNjcmlwdG9yOyBhbGwgb3RoZXIgdmFsdWVzIHJldHVybiBOVUxMLiAg SWYgdGhlIGNvZGVjIGRvZXMgbm90IHN1cHBvcnQKKysgKiBhbnkgaGFyZHdhcmUgY29uZmlndXJh dGlvbnMgdGhlbiBpdCB3aWxsIGFsd2F5cyByZXR1cm4gTlVMTC4KKysgKi8KKytjb25zdCBBVkNv ZGVjSFdDb25maWcgKmF2Y29kZWNfZ2V0X2h3X2NvbmZpZyhjb25zdCBBVkNvZGVjICpjb2RlYywg aW50IGluZGV4KTsKKysKKysvKioKKysgKiBAfQorKyAqLworKworKyNlbmRpZiAvKiBBVkNPREVD X0NPREVDX0ggKi8KK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlh L3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvY29kZWNfaWQuaC5mZm1wZWc5IE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2 Y29kZWMvY29kZWNfaWQuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlh L3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvY29kZWNfaWQuaC5mZm1wZWc5CTIwMjYt MDktMDcgMTI6MjM6NDcuNjczMjgwNDcxICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9m cmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZjb2RlYy9jb2RlY19pZC5o CTIwMjYtMDktMDcgMTI6MjM6NDcuNjcyOTUwMzU1ICswMjAwCitAQCAtMCwwICsxLDY4NiBAQAor Ky8qCisrICogQ29kZWMgSURzCisrICoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcu CisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRp b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx MTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVmIEFWQ09ERUNfQ09ERUNfSURfSAorKyNkZWZp bmUgQVZDT0RFQ19DT0RFQ19JRF9ICisrCisrI2luY2x1ZGUgImxpYmF2dXRpbC9hdnV0aWwuaCIK KysjaW5jbHVkZSAibGliYXZ1dGlsL3NhbXBsZWZtdC5oIgorKworKy8qKgorKyAqIEBhZGR0b2dy b3VwIGxhdmNfY29yZQorKyAqIEB7CisrICovCisrCisrLyoqCisrICogSWRlbnRpZnkgdGhlIHN5 bnRheCBhbmQgc2VtYW50aWNzIG9mIHRoZSBiaXRzdHJlYW0uCisrICogVGhlIHByaW5jaXBsZSBp cyByb3VnaGx5OgorKyAqIFR3byBkZWNvZGVycyB3aXRoIHRoZSBzYW1lIElEIGNhbiBkZWNvZGUg dGhlIHNhbWUgc3RyZWFtcy4KKysgKiBUd28gZW5jb2RlcnMgd2l0aCB0aGUgc2FtZSBJRCBjYW4g ZW5jb2RlIGNvbXBhdGlibGUgc3RyZWFtcy4KKysgKiBUaGVyZSBtYXkgYmUgc2xpZ2h0IGRldmlh dGlvbnMgZnJvbSB0aGUgcHJpbmNpcGxlIGR1ZSB0byBpbXBsZW1lbnRhdGlvbgorKyAqIGRldGFp bHMuCisrICoKKysgKiBJZiB5b3UgYWRkIGEgY29kZWMgSUQgdG8gdGhpcyBsaXN0LCBhZGQgaXQg c28gdGhhdAorKyAqIDEuIG5vIHZhbHVlIG9mIGFuIGV4aXN0aW5nIGNvZGVjIElEIGNoYW5nZXMg KHRoYXQgd291bGQgYnJlYWsgQUJJKSwKKysgKiAyLiBpdCBpcyBhcyBjbG9zZSBhcyBwb3NzaWJs ZSB0byBzaW1pbGFyIGNvZGVjcworKyAqCisrICogQWZ0ZXIgYWRkaW5nIG5ldyBjb2RlYyBJRHMs IGRvIG5vdCBmb3JnZXQgdG8gYWRkIGFuIGVudHJ5IHRvIHRoZSBjb2RlYworKyAqIGRlc2NyaXB0 b3IgbGlzdCBhbmQgYnVtcCBsaWJhdmNvZGVjIG1pbm9yIHZlcnNpb24uCisrICovCisrZW51bSBB VkNvZGVjSUQgeworKyAgICBBVl9DT0RFQ19JRF9OT05FLAorKworKyAgICAvKiB2aWRlbyBjb2Rl Y3MgKi8KKysgICAgQVZfQ09ERUNfSURfTVBFRzFWSURFTywKKysgICAgQVZfQ09ERUNfSURfTVBF RzJWSURFTywgLy8vPCBwcmVmZXJyZWQgSUQgZm9yIE1QRUctMS8yIHZpZGVvIGRlY29kaW5nCisr ICAgIEFWX0NPREVDX0lEX0gyNjEsCisrICAgIEFWX0NPREVDX0lEX0gyNjMsCisrICAgIEFWX0NP REVDX0lEX1JWMTAsCisrICAgIEFWX0NPREVDX0lEX1JWMjAsCisrICAgIEFWX0NPREVDX0lEX01K UEVHLAorKyAgICBBVl9DT0RFQ19JRF9NSlBFR0IsCisrICAgIEFWX0NPREVDX0lEX0xKUEVHLAor KyAgICBBVl9DT0RFQ19JRF9TUDVYLAorKyAgICBBVl9DT0RFQ19JRF9KUEVHTFMsCisrICAgIEFW X0NPREVDX0lEX01QRUc0LAorKyAgICBBVl9DT0RFQ19JRF9SQVdWSURFTywKKysgICAgQVZfQ09E RUNfSURfTVNNUEVHNFYxLAorKyAgICBBVl9DT0RFQ19JRF9NU01QRUc0VjIsCisrICAgIEFWX0NP REVDX0lEX01TTVBFRzRWMywKKysgICAgQVZfQ09ERUNfSURfV01WMSwKKysgICAgQVZfQ09ERUNf SURfV01WMiwKKysgICAgQVZfQ09ERUNfSURfSDI2M1AsCisrICAgIEFWX0NPREVDX0lEX0gyNjNJ LAorKyAgICBBVl9DT0RFQ19JRF9GTFYxLAorKyAgICBBVl9DT0RFQ19JRF9TVlExLAorKyAgICBB Vl9DT0RFQ19JRF9TVlEzLAorKyAgICBBVl9DT0RFQ19JRF9EVlZJREVPLAorKyAgICBBVl9DT0RF Q19JRF9IVUZGWVVWLAorKyAgICBBVl9DT0RFQ19JRF9DWVVWLAorKyAgICBBVl9DT0RFQ19JRF9I MjY0LAorKyAgICBBVl9DT0RFQ19JRF9JTkRFTzMsCisrICAgIEFWX0NPREVDX0lEX1ZQMywKKysg ICAgQVZfQ09ERUNfSURfVEhFT1JBLAorKyAgICBBVl9DT0RFQ19JRF9BU1YxLAorKyAgICBBVl9D T0RFQ19JRF9BU1YyLAorKyAgICBBVl9DT0RFQ19JRF9GRlYxLAorKyAgICBBVl9DT0RFQ19JRF80 WE0sCisrICAgIEFWX0NPREVDX0lEX1ZDUjEsCisrICAgIEFWX0NPREVDX0lEX0NMSlIsCisrICAg IEFWX0NPREVDX0lEX01ERUMsCisrICAgIEFWX0NPREVDX0lEX1JPUSwKKysgICAgQVZfQ09ERUNf SURfSU5URVJQTEFZX1ZJREVPLAorKyAgICBBVl9DT0RFQ19JRF9YQU5fV0MzLAorKyAgICBBVl9D T0RFQ19JRF9YQU5fV0M0LAorKyAgICBBVl9DT0RFQ19JRF9SUFpBLAorKyAgICBBVl9DT0RFQ19J RF9DSU5FUEFLLAorKyAgICBBVl9DT0RFQ19JRF9XU19WUUEsCisrICAgIEFWX0NPREVDX0lEX01T UkxFLAorKyAgICBBVl9DT0RFQ19JRF9NU1ZJREVPMSwKKysgICAgQVZfQ09ERUNfSURfSURDSU4s CisrICAgIEFWX0NPREVDX0lEXzhCUFMsCisrICAgIEFWX0NPREVDX0lEX1NNQywKKysgICAgQVZf Q09ERUNfSURfRkxJQywKKysgICAgQVZfQ09ERUNfSURfVFJVRU1PVElPTjEsCisrICAgIEFWX0NP REVDX0lEX1ZNRFZJREVPLAorKyAgICBBVl9DT0RFQ19JRF9NU1pILAorKyAgICBBVl9DT0RFQ19J RF9aTElCLAorKyAgICBBVl9DT0RFQ19JRF9RVFJMRSwKKysgICAgQVZfQ09ERUNfSURfVFNDQywK KysgICAgQVZfQ09ERUNfSURfVUxUSSwKKysgICAgQVZfQ09ERUNfSURfUURSQVcsCisrICAgIEFW X0NPREVDX0lEX1ZJWEwsCisrICAgIEFWX0NPREVDX0lEX1FQRUcsCisrICAgIEFWX0NPREVDX0lE X1BORywKKysgICAgQVZfQ09ERUNfSURfUFBNLAorKyAgICBBVl9DT0RFQ19JRF9QQk0sCisrICAg IEFWX0NPREVDX0lEX1BHTSwKKysgICAgQVZfQ09ERUNfSURfUEdNWVVWLAorKyAgICBBVl9DT0RF Q19JRF9QQU0sCisrICAgIEFWX0NPREVDX0lEX0ZGVkhVRkYsCisrICAgIEFWX0NPREVDX0lEX1JW MzAsCisrICAgIEFWX0NPREVDX0lEX1JWNDAsCisrICAgIEFWX0NPREVDX0lEX1ZDMSwKKysgICAg QVZfQ09ERUNfSURfV01WMywKKysgICAgQVZfQ09ERUNfSURfTE9DTywKKysgICAgQVZfQ09ERUNf SURfV05WMSwKKysgICAgQVZfQ09ERUNfSURfQUFTQywKKysgICAgQVZfQ09ERUNfSURfSU5ERU8y LAorKyAgICBBVl9DT0RFQ19JRF9GUkFQUywKKysgICAgQVZfQ09ERUNfSURfVFJVRU1PVElPTjIs CisrICAgIEFWX0NPREVDX0lEX0JNUCwKKysgICAgQVZfQ09ERUNfSURfQ1NDRCwKKysgICAgQVZf Q09ERUNfSURfTU1WSURFTywKKysgICAgQVZfQ09ERUNfSURfWk1CViwKKysgICAgQVZfQ09ERUNf SURfQVZTLAorKyAgICBBVl9DT0RFQ19JRF9TTUFDS1ZJREVPLAorKyAgICBBVl9DT0RFQ19JRF9O VVYsCisrICAgIEFWX0NPREVDX0lEX0tNVkMsCisrICAgIEFWX0NPREVDX0lEX0ZMQVNIU1YsCisr ICAgIEFWX0NPREVDX0lEX0NBVlMsCisrICAgIEFWX0NPREVDX0lEX0pQRUcyMDAwLAorKyAgICBB Vl9DT0RFQ19JRF9WTU5DLAorKyAgICBBVl9DT0RFQ19JRF9WUDUsCisrICAgIEFWX0NPREVDX0lE X1ZQNiwKKysgICAgQVZfQ09ERUNfSURfVlA2RiwKKysgICAgQVZfQ09ERUNfSURfVEFSR0EsCisr ICAgIEFWX0NPREVDX0lEX0RTSUNJTlZJREVPLAorKyAgICBBVl9DT0RFQ19JRF9USUVSVEVYU0VR VklERU8sCisrICAgIEFWX0NPREVDX0lEX1RJRkYsCisrICAgIEFWX0NPREVDX0lEX0dJRiwKKysg ICAgQVZfQ09ERUNfSURfRFhBLAorKyAgICBBVl9DT0RFQ19JRF9ETlhIRCwKKysgICAgQVZfQ09E RUNfSURfVEhQLAorKyAgICBBVl9DT0RFQ19JRF9TR0ksCisrICAgIEFWX0NPREVDX0lEX0M5MywK KysgICAgQVZfQ09ERUNfSURfQkVUSFNPRlRWSUQsCisrICAgIEFWX0NPREVDX0lEX1BUWCwKKysg ICAgQVZfQ09ERUNfSURfVFhELAorKyAgICBBVl9DT0RFQ19JRF9WUDZBLAorKyAgICBBVl9DT0RF Q19JRF9BTVYsCisrICAgIEFWX0NPREVDX0lEX1ZCLAorKyAgICBBVl9DT0RFQ19JRF9QQ1gsCisr ICAgIEFWX0NPREVDX0lEX1NVTlJBU1QsCisrICAgIEFWX0NPREVDX0lEX0lOREVPNCwKKysgICAg QVZfQ09ERUNfSURfSU5ERU81LAorKyAgICBBVl9DT0RFQ19JRF9NSU1JQywKKysgICAgQVZfQ09E RUNfSURfUkwyLAorKyAgICBBVl9DT0RFQ19JRF9FU0NBUEUxMjQsCisrICAgIEFWX0NPREVDX0lE X0RJUkFDLAorKyAgICBBVl9DT0RFQ19JRF9CRkksCisrICAgIEFWX0NPREVDX0lEX0NNViwKKysg ICAgQVZfQ09ERUNfSURfTU9USU9OUElYRUxTLAorKyAgICBBVl9DT0RFQ19JRF9UR1YsCisrICAg IEFWX0NPREVDX0lEX1RHUSwKKysgICAgQVZfQ09ERUNfSURfVFFJLAorKyAgICBBVl9DT0RFQ19J RF9BVVJBLAorKyAgICBBVl9DT0RFQ19JRF9BVVJBMiwKKysgICAgQVZfQ09ERUNfSURfVjIxMFgs CisrICAgIEFWX0NPREVDX0lEX1RNViwKKysgICAgQVZfQ09ERUNfSURfVjIxMCwKKysgICAgQVZf Q09ERUNfSURfRFBYLAorKyAgICBBVl9DT0RFQ19JRF9NQUQsCisrICAgIEFWX0NPREVDX0lEX0ZS V1UsCisrICAgIEFWX0NPREVDX0lEX0ZMQVNIU1YyLAorKyAgICBBVl9DT0RFQ19JRF9DREdSQVBI SUNTLAorKyAgICBBVl9DT0RFQ19JRF9SMjEwLAorKyAgICBBVl9DT0RFQ19JRF9BTk0sCisrICAg IEFWX0NPREVDX0lEX0JJTktWSURFTywKKysgICAgQVZfQ09ERUNfSURfSUZGX0lMQk0sCisrI2Rl ZmluZSBBVl9DT0RFQ19JRF9JRkZfQllURVJVTjEgQVZfQ09ERUNfSURfSUZGX0lMQk0KKysgICAg QVZfQ09ERUNfSURfS0dWMSwKKysgICAgQVZfQ09ERUNfSURfWU9QLAorKyAgICBBVl9DT0RFQ19J RF9WUDgsCisrICAgIEFWX0NPREVDX0lEX1BJQ1RPUiwKKysgICAgQVZfQ09ERUNfSURfQU5TSSwK KysgICAgQVZfQ09ERUNfSURfQTY0X01VTFRJLAorKyAgICBBVl9DT0RFQ19JRF9BNjRfTVVMVEk1 LAorKyAgICBBVl9DT0RFQ19JRF9SMTBLLAorKyAgICBBVl9DT0RFQ19JRF9NWFBFRywKKysgICAg QVZfQ09ERUNfSURfTEFHQVJJVEgsCisrICAgIEFWX0NPREVDX0lEX1BST1JFUywKKysgICAgQVZf Q09ERUNfSURfSlYsCisrICAgIEFWX0NPREVDX0lEX0RGQSwKKysgICAgQVZfQ09ERUNfSURfV01W M0lNQUdFLAorKyAgICBBVl9DT0RFQ19JRF9WQzFJTUFHRSwKKysgICAgQVZfQ09ERUNfSURfVVRW SURFTywKKysgICAgQVZfQ09ERUNfSURfQk1WX1ZJREVPLAorKyAgICBBVl9DT0RFQ19JRF9WQkxF LAorKyAgICBBVl9DT0RFQ19JRF9EWFRPUlksCisrICAgIEFWX0NPREVDX0lEX1hXRCwKKysgICAg QVZfQ09ERUNfSURfQ0RYTCwKKysgICAgQVZfQ09ERUNfSURfWEJNLAorKyAgICBBVl9DT0RFQ19J RF9aRVJPQ09ERUMsCisrICAgIEFWX0NPREVDX0lEX01TUzEsCisrICAgIEFWX0NPREVDX0lEX01T QTEsCisrICAgIEFWX0NPREVDX0lEX1RTQ0MyLAorKyAgICBBVl9DT0RFQ19JRF9NVFMyLAorKyAg ICBBVl9DT0RFQ19JRF9DTExDLAorKyAgICBBVl9DT0RFQ19JRF9NU1MyLAorKyAgICBBVl9DT0RF Q19JRF9WUDksCisrICAgIEFWX0NPREVDX0lEX0FJQywKKysgICAgQVZfQ09ERUNfSURfRVNDQVBF MTMwLAorKyAgICBBVl9DT0RFQ19JRF9HMk0sCisrICAgIEFWX0NPREVDX0lEX1dFQlAsCisrICAg IEFWX0NPREVDX0lEX0hOTTRfVklERU8sCisrICAgIEFWX0NPREVDX0lEX0hFVkMsCisrI2RlZmlu ZSBBVl9DT0RFQ19JRF9IMjY1IEFWX0NPREVDX0lEX0hFVkMKKysgICAgQVZfQ09ERUNfSURfRklD LAorKyAgICBBVl9DT0RFQ19JRF9BTElBU19QSVgsCisrICAgIEFWX0NPREVDX0lEX0JSRU5ERVJf UElYLAorKyAgICBBVl9DT0RFQ19JRF9QQUZfVklERU8sCisrICAgIEFWX0NPREVDX0lEX0VYUiwK KysgICAgQVZfQ09ERUNfSURfVlA3LAorKyAgICBBVl9DT0RFQ19JRF9TQU5NLAorKyAgICBBVl9D T0RFQ19JRF9TR0lSTEUsCisrICAgIEFWX0NPREVDX0lEX01WQzEsCisrICAgIEFWX0NPREVDX0lE X01WQzIsCisrICAgIEFWX0NPREVDX0lEX0hRWCwKKysgICAgQVZfQ09ERUNfSURfVERTQywKKysg ICAgQVZfQ09ERUNfSURfSFFfSFFBLAorKyAgICBBVl9DT0RFQ19JRF9IQVAsCisrICAgIEFWX0NP REVDX0lEX0REUywKKysgICAgQVZfQ09ERUNfSURfRFhWLAorKyAgICBBVl9DT0RFQ19JRF9TQ1JF RU5QUkVTU08sCisrICAgIEFWX0NPREVDX0lEX1JTQ0MsCisrICAgIEFWX0NPREVDX0lEX0FWUzIs CisrICAgIEFWX0NPREVDX0lEX1BHWCwKKysgICAgQVZfQ09ERUNfSURfQVZTMywKKysgICAgQVZf Q09ERUNfSURfTVNQMiwKKysgICAgQVZfQ09ERUNfSURfVlZDLAorKyNkZWZpbmUgQVZfQ09ERUNf SURfSDI2NiBBVl9DT0RFQ19JRF9WVkMKKysgICAgQVZfQ09ERUNfSURfWTQxUCwKKysgICAgQVZf Q09ERUNfSURfQVZSUCwKKysgICAgQVZfQ09ERUNfSURfMDEyViwKKysgICAgQVZfQ09ERUNfSURf QVZVSSwKKysgICAgQVZfQ09ERUNfSURfVEFSR0FfWTIxNiwKKysgICAgQVZfQ09ERUNfSURfWVVW NCwKKysgICAgQVZfQ09ERUNfSURfQVZSTiwKKysgICAgQVZfQ09ERUNfSURfQ1BJQSwKKysgICAg QVZfQ09ERUNfSURfWEZBQ0UsCisrICAgIEFWX0NPREVDX0lEX1NOT1csCisrICAgIEFWX0NPREVD X0lEX1NNVkpQRUcsCisrICAgIEFWX0NPREVDX0lEX0FQTkcsCisrICAgIEFWX0NPREVDX0lEX0RB QUxBLAorKyAgICBBVl9DT0RFQ19JRF9DRkhELAorKyAgICBBVl9DT0RFQ19JRF9UUlVFTU9USU9O MlJULAorKyAgICBBVl9DT0RFQ19JRF9NMTAxLAorKyAgICBBVl9DT0RFQ19JRF9NQUdJQ1lVViwK KysgICAgQVZfQ09ERUNfSURfU0hFRVJWSURFTywKKysgICAgQVZfQ09ERUNfSURfWUxDLAorKyAg ICBBVl9DT0RFQ19JRF9QU0QsCisrICAgIEFWX0NPREVDX0lEX1BJWExFVCwKKysgICAgQVZfQ09E RUNfSURfU1BFRURIUSwKKysgICAgQVZfQ09ERUNfSURfRk1WQywKKysgICAgQVZfQ09ERUNfSURf U0NQUiwKKysgICAgQVZfQ09ERUNfSURfQ0xFQVJWSURFTywKKysgICAgQVZfQ09ERUNfSURfWFBN LAorKyAgICBBVl9DT0RFQ19JRF9BVjEsCisrICAgIEFWX0NPREVDX0lEX0JJVFBBQ0tFRCwKKysg ICAgQVZfQ09ERUNfSURfTVNDQywKKysgICAgQVZfQ09ERUNfSURfU1JHQywKKysgICAgQVZfQ09E RUNfSURfU1ZHLAorKyAgICBBVl9DT0RFQ19JRF9HRFYsCisrICAgIEFWX0NPREVDX0lEX0ZJVFMs CisrICAgIEFWX0NPREVDX0lEX0lNTTQsCisrICAgIEFWX0NPREVDX0lEX1BST1NVTUVSLAorKyAg ICBBVl9DT0RFQ19JRF9NV1NDLAorKyAgICBBVl9DT0RFQ19JRF9XQ01WLAorKyAgICBBVl9DT0RF Q19JRF9SQVNDLAorKyAgICBBVl9DT0RFQ19JRF9IWU1ULAorKyAgICBBVl9DT0RFQ19JRF9BUkJD LAorKyAgICBBVl9DT0RFQ19JRF9BR00sCisrICAgIEFWX0NPREVDX0lEX0xTQ1IsCisrICAgIEFW X0NPREVDX0lEX1ZQNCwKKysgICAgQVZfQ09ERUNfSURfSU1NNSwKKysgICAgQVZfQ09ERUNfSURf TVZEViwKKysgICAgQVZfQ09ERUNfSURfTVZIQSwKKysgICAgQVZfQ09ERUNfSURfQ0RUT09OUywK KysgICAgQVZfQ09ERUNfSURfTVYzMCwKKysgICAgQVZfQ09ERUNfSURfTk9UQ0hMQywKKysgICAg QVZfQ09ERUNfSURfUEZNLAorKyAgICBBVl9DT0RFQ19JRF9NT0JJQ0xJUCwKKysgICAgQVZfQ09E RUNfSURfUEhPVE9DRCwKKysgICAgQVZfQ09ERUNfSURfSVBVLAorKyAgICBBVl9DT0RFQ19JRF9B UkdPLAorKyAgICBBVl9DT0RFQ19JRF9DUkksCisrICAgIEFWX0NPREVDX0lEX1NJTUJJT1NJU19J TVgsCisrICAgIEFWX0NPREVDX0lEX1NHQV9WSURFTywKKysgICAgQVZfQ09ERUNfSURfR0VNLAor KyAgICBBVl9DT0RFQ19JRF9WQk4sCisrICAgIEFWX0NPREVDX0lEX0pQRUdYTCwKKysgICAgQVZf Q09ERUNfSURfUU9JLAorKyAgICBBVl9DT0RFQ19JRF9QSE0sCisrICAgIEFWX0NPREVDX0lEX1JB RElBTkNFX0hEUiwKKysgICAgQVZfQ09ERUNfSURfV0JNUCwKKysgICAgQVZfQ09ERUNfSURfTUVE SUExMDAsCisrICAgIEFWX0NPREVDX0lEX1ZRQywKKysgICAgQVZfQ09ERUNfSURfUERWLAorKyAg ICBBVl9DT0RFQ19JRF9FVkMsCisrICAgIEFWX0NPREVDX0lEX1JUVjEsCisrICAgIEFWX0NPREVD X0lEX1ZNSVgsCisrICAgIEFWX0NPREVDX0lEX0xFQUQsCisrICAgIEFWX0NPREVDX0lEX0ROWFVD LAorKyAgICBBVl9DT0RFQ19JRF9SVjYwLAorKyAgICBBVl9DT0RFQ19JRF9KUEVHWExfQU5JTSwK KysgICAgQVZfQ09ERUNfSURfQVBWLAorKyAgICBBVl9DT0RFQ19JRF9QUk9SRVNfUkFXLAorKyAg ICBBVl9DT0RFQ19JRF9KUEVHWFMsCisrICAgIEFWX0NPREVDX0lEX1dFQlBfQU5JTSwKKysKKysg ICAgLyogdmFyaW91cyBQQ00gImNvZGVjcyIgKi8KKysgICAgQVZfQ09ERUNfSURfRklSU1RfQVVE SU8gPSAweDEwMDAwLCAgICAgLy8vPCBBIGR1bW15IGlkIHBvaW50aW5nIGF0IHRoZSBzdGFydCBv ZiBhdWRpbyBjb2RlY3MKKysgICAgQVZfQ09ERUNfSURfUENNX1MxNkxFID0gMHgxMDAwMCwKKysg ICAgQVZfQ09ERUNfSURfUENNX1MxNkJFLAorKyAgICBBVl9DT0RFQ19JRF9QQ01fVTE2TEUsCisr ICAgIEFWX0NPREVDX0lEX1BDTV9VMTZCRSwKKysgICAgQVZfQ09ERUNfSURfUENNX1M4LAorKyAg ICBBVl9DT0RFQ19JRF9QQ01fVTgsCisrICAgIEFWX0NPREVDX0lEX1BDTV9NVUxBVywKKysgICAg QVZfQ09ERUNfSURfUENNX0FMQVcsCisrICAgIEFWX0NPREVDX0lEX1BDTV9TMzJMRSwKKysgICAg QVZfQ09ERUNfSURfUENNX1MzMkJFLAorKyAgICBBVl9DT0RFQ19JRF9QQ01fVTMyTEUsCisrICAg IEFWX0NPREVDX0lEX1BDTV9VMzJCRSwKKysgICAgQVZfQ09ERUNfSURfUENNX1MyNExFLAorKyAg ICBBVl9DT0RFQ19JRF9QQ01fUzI0QkUsCisrICAgIEFWX0NPREVDX0lEX1BDTV9VMjRMRSwKKysg ICAgQVZfQ09ERUNfSURfUENNX1UyNEJFLAorKyAgICBBVl9DT0RFQ19JRF9QQ01fUzI0REFVRCwK KysgICAgQVZfQ09ERUNfSURfUENNX1pPUkssCisrICAgIEFWX0NPREVDX0lEX1BDTV9TMTZMRV9Q TEFOQVIsCisrICAgIEFWX0NPREVDX0lEX1BDTV9EVkQsCisrICAgIEFWX0NPREVDX0lEX1BDTV9G MzJCRSwKKysgICAgQVZfQ09ERUNfSURfUENNX0YzMkxFLAorKyAgICBBVl9DT0RFQ19JRF9QQ01f RjY0QkUsCisrICAgIEFWX0NPREVDX0lEX1BDTV9GNjRMRSwKKysgICAgQVZfQ09ERUNfSURfUENN X0JMVVJBWSwKKysgICAgQVZfQ09ERUNfSURfUENNX0xYRiwKKysgICAgQVZfQ09ERUNfSURfUzMw Mk0sCisrICAgIEFWX0NPREVDX0lEX1BDTV9TOF9QTEFOQVIsCisrICAgIEFWX0NPREVDX0lEX1BD TV9TMjRMRV9QTEFOQVIsCisrICAgIEFWX0NPREVDX0lEX1BDTV9TMzJMRV9QTEFOQVIsCisrICAg IEFWX0NPREVDX0lEX1BDTV9TMTZCRV9QTEFOQVIsCisrICAgIEFWX0NPREVDX0lEX1BDTV9TNjRM RSwKKysgICAgQVZfQ09ERUNfSURfUENNX1M2NEJFLAorKyAgICBBVl9DT0RFQ19JRF9QQ01fRjE2 TEUsCisrICAgIEFWX0NPREVDX0lEX1BDTV9GMjRMRSwKKysgICAgQVZfQ09ERUNfSURfUENNX1ZJ REMsCisrICAgIEFWX0NPREVDX0lEX1BDTV9TR0EsCisrCisrICAgIC8qIHZhcmlvdXMgQURQQ00g Y29kZWNzICovCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9RVCA9IDB4MTEwMDAsCisrICAg IEFWX0NPREVDX0lEX0FEUENNX0lNQV9XQVYsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9E SzMsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9ESzQsCisrICAgIEFWX0NPREVDX0lEX0FE UENNX0lNQV9XUywKKysgICAgQVZfQ09ERUNfSURfQURQQ01fSU1BX1NNSlBFRywKKysgICAgQVZf Q09ERUNfSURfQURQQ01fTVMsCisrICAgIEFWX0NPREVDX0lEX0FEUENNXzRYTSwKKysgICAgQVZf Q09ERUNfSURfQURQQ01fWEEsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0FEWCwKKysgICAgQVZf Q09ERUNfSURfQURQQ01fRUEsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0c3MjYsCisrICAgIEFW X0NPREVDX0lEX0FEUENNX0NULAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9TV0YsCisrICAgIEFW X0NPREVDX0lEX0FEUENNX1lBTUFIQSwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fU0JQUk9fNCwK KysgICAgQVZfQ09ERUNfSURfQURQQ01fU0JQUk9fMywKKysgICAgQVZfQ09ERUNfSURfQURQQ01f U0JQUk9fMiwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fVEhQLAorKyAgICBBVl9DT0RFQ19JRF9B RFBDTV9JTUFfQU1WLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9FQV9SMSwKKysgICAgQVZfQ09E RUNfSURfQURQQ01fRUFfUjMsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0VBX1IyLAorKyAgICBB Vl9DT0RFQ19JRF9BRFBDTV9JTUFfRUFfU0VBRCwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fSU1B X0VBX0VBQ1MsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0VBX1hBUywKKysgICAgQVZfQ09ERUNf SURfQURQQ01fRUFfTUFYSVNfWEEsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9JU1MsCisr ICAgIEFWX0NPREVDX0lEX0FEUENNX0c3MjIsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9B UEMsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX1ZJTUEsCisrICAgIEFWX0NPREVDX0lEX0FEUENN X0FGQywKKysgICAgQVZfQ09ERUNfSURfQURQQ01fSU1BX09LSSwKKysgICAgQVZfQ09ERUNfSURf QURQQ01fRFRLLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfUkFELAorKyAgICBBVl9DT0RF Q19JRF9BRFBDTV9HNzI2TEUsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX1RIUF9MRSwKKysgICAg QVZfQ09ERUNfSURfQURQQ01fUFNYLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9BSUNBLAorKyAg ICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfREFUNCwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fTVRB RiwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fQUdNLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9B UkdPLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfU1NJLAorKyAgICBBVl9DT0RFQ19JRF9B RFBDTV9aT1JLLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfQVBNLAorKyAgICBBVl9DT0RF Q19JRF9BRFBDTV9JTUFfQUxQLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfTVRGLAorKyAg ICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfQ1VOTklORywKKysgICAgQVZfQ09ERUNfSURfQURQQ01f SU1BX01PRkxFWCwKKysgICAgQVZfQ09ERUNfSURfQURQQ01fSU1BX0FDT1JOLAorKyAgICBBVl9D T0RFQ19JRF9BRFBDTV9YTUQsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9YQk9YLAorKyAg ICBBVl9DT0RFQ19JRF9BRFBDTV9TQU5ZTywKKysgICAgQVZfQ09ERUNfSURfQURQQ01fSU1BX0hW UU00LAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9JTUFfUERBLAorKyAgICBBVl9DT0RFQ19JRF9B RFBDTV9ONjQsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9IVlFNMiwKKysgICAgQVZfQ09E RUNfSURfQURQQ01fSU1BX01BR0lYLAorKyAgICBBVl9DT0RFQ19JRF9BRFBDTV9QU1hDLAorKyAg ICBBVl9DT0RFQ19JRF9BRFBDTV9DSVJDVVMsCisrICAgIEFWX0NPREVDX0lEX0FEUENNX0lNQV9F U0NBUEUsCisrCisrICAgIC8qIEFNUiAqLworKyAgICBBVl9DT0RFQ19JRF9BTVJfTkIgPSAweDEy MDAwLAorKyAgICBBVl9DT0RFQ19JRF9BTVJfV0IsCisrCisrICAgIC8qIFJlYWxBdWRpbyBjb2Rl Y3MqLworKyAgICBBVl9DT0RFQ19JRF9SQV8xNDQgPSAweDEzMDAwLAorKyAgICBBVl9DT0RFQ19J RF9SQV8yODgsCisrCisrICAgIC8qIHZhcmlvdXMgRFBDTSBjb2RlY3MgKi8KKysgICAgQVZfQ09E RUNfSURfUk9RX0RQQ00gPSAweDE0MDAwLAorKyAgICBBVl9DT0RFQ19JRF9JTlRFUlBMQVlfRFBD TSwKKysgICAgQVZfQ09ERUNfSURfWEFOX0RQQ00sCisrICAgIEFWX0NPREVDX0lEX1NPTF9EUENN LAorKyAgICBBVl9DT0RFQ19JRF9TRFgyX0RQQ00sCisrICAgIEFWX0NPREVDX0lEX0dSRU1MSU5f RFBDTSwKKysgICAgQVZfQ09ERUNfSURfREVSRl9EUENNLAorKyAgICBBVl9DT0RFQ19JRF9XQURZ X0RQQ00sCisrICAgIEFWX0NPREVDX0lEX0NCRDJfRFBDTSwKKysKKysgICAgLyogYXVkaW8gY29k ZWNzICovCisrICAgIEFWX0NPREVDX0lEX01QMiA9IDB4MTUwMDAsCisrICAgIEFWX0NPREVDX0lE X01QMywgLy8vPCBwcmVmZXJyZWQgSUQgZm9yIGRlY29kaW5nIE1QRUcgYXVkaW8gbGF5ZXIgMSwg MiBvciAzCisrICAgIEFWX0NPREVDX0lEX0FBQywKKysgICAgQVZfQ09ERUNfSURfQUMzLAorKyAg ICBBVl9DT0RFQ19JRF9EVFMsCisrICAgIEFWX0NPREVDX0lEX1ZPUkJJUywKKysgICAgQVZfQ09E RUNfSURfRFZBVURJTywKKysgICAgQVZfQ09ERUNfSURfV01BVjEsCisrICAgIEFWX0NPREVDX0lE X1dNQVYyLAorKyAgICBBVl9DT0RFQ19JRF9NQUNFMywKKysgICAgQVZfQ09ERUNfSURfTUFDRTYs CisrICAgIEFWX0NPREVDX0lEX1ZNREFVRElPLAorKyAgICBBVl9DT0RFQ19JRF9GTEFDLAorKyAg ICBBVl9DT0RFQ19JRF9NUDNBRFUsCisrICAgIEFWX0NPREVDX0lEX01QM09ONCwKKysgICAgQVZf Q09ERUNfSURfU0hPUlRFTiwKKysgICAgQVZfQ09ERUNfSURfQUxBQywKKysgICAgQVZfQ09ERUNf SURfV0VTVFdPT0RfU05EMSwKKysgICAgQVZfQ09ERUNfSURfR1NNLCAvLy88IGFzIGluIEJlcmxp biB0b2FzdCBmb3JtYXQKKysgICAgQVZfQ09ERUNfSURfUURNMiwKKysgICAgQVZfQ09ERUNfSURf Q09PSywKKysgICAgQVZfQ09ERUNfSURfVFJVRVNQRUVDSCwKKysgICAgQVZfQ09ERUNfSURfVFRB LAorKyAgICBBVl9DT0RFQ19JRF9TTUFDS0FVRElPLAorKyAgICBBVl9DT0RFQ19JRF9RQ0VMUCwK KysgICAgQVZfQ09ERUNfSURfV0FWUEFDSywKKysgICAgQVZfQ09ERUNfSURfRFNJQ0lOQVVESU8s CisrICAgIEFWX0NPREVDX0lEX0lNQywKKysgICAgQVZfQ09ERUNfSURfTVVTRVBBQ0s3LAorKyAg ICBBVl9DT0RFQ19JRF9NTFAsCisrICAgIEFWX0NPREVDX0lEX0dTTV9NUywgLyogYXMgZm91bmQg aW4gV0FWICovCisrICAgIEFWX0NPREVDX0lEX0FUUkFDMywKKysgICAgQVZfQ09ERUNfSURfQVBF LAorKyAgICBBVl9DT0RFQ19JRF9ORUxMWU1PU0VSLAorKyAgICBBVl9DT0RFQ19JRF9NVVNFUEFD SzgsCisrICAgIEFWX0NPREVDX0lEX1NQRUVYLAorKyAgICBBVl9DT0RFQ19JRF9XTUFWT0lDRSwK KysgICAgQVZfQ09ERUNfSURfV01BUFJPLAorKyAgICBBVl9DT0RFQ19JRF9XTUFMT1NTTEVTUywK KysgICAgQVZfQ09ERUNfSURfQVRSQUMzUCwKKysgICAgQVZfQ09ERUNfSURfRUFDMywKKysgICAg QVZfQ09ERUNfSURfU0lQUiwKKysgICAgQVZfQ09ERUNfSURfTVAxLAorKyAgICBBVl9DT0RFQ19J RF9UV0lOVlEsCisrICAgIEFWX0NPREVDX0lEX1RSVUVIRCwKKysgICAgQVZfQ09ERUNfSURfTVA0 QUxTLAorKyAgICBBVl9DT0RFQ19JRF9BVFJBQzEsCisrICAgIEFWX0NPREVDX0lEX0JJTktBVURJ T19SREZULAorKyAgICBBVl9DT0RFQ19JRF9CSU5LQVVESU9fRENULAorKyAgICBBVl9DT0RFQ19J RF9BQUNfTEFUTSwKKysgICAgQVZfQ09ERUNfSURfUURNQywKKysgICAgQVZfQ09ERUNfSURfQ0VM VCwKKysgICAgQVZfQ09ERUNfSURfRzcyM18xLAorKyAgICBBVl9DT0RFQ19JRF9HNzI5LAorKyAg ICBBVl9DT0RFQ19JRF84U1ZYX0VYUCwKKysgICAgQVZfQ09ERUNfSURfOFNWWF9GSUIsCisrICAg IEFWX0NPREVDX0lEX0JNVl9BVURJTywKKysgICAgQVZfQ09ERUNfSURfUkFMRiwKKysgICAgQVZf Q09ERUNfSURfSUFDLAorKyAgICBBVl9DT0RFQ19JRF9JTEJDLAorKyAgICBBVl9DT0RFQ19JRF9P UFVTLAorKyAgICBBVl9DT0RFQ19JRF9DT01GT1JUX05PSVNFLAorKyAgICBBVl9DT0RFQ19JRF9U QUssCisrICAgIEFWX0NPREVDX0lEX01FVEFTT1VORCwKKysgICAgQVZfQ09ERUNfSURfUEFGX0FV RElPLAorKyAgICBBVl9DT0RFQ19JRF9PTjJBVkMsCisrICAgIEFWX0NPREVDX0lEX0RTU19TUCwK KysgICAgQVZfQ09ERUNfSURfQ09ERUMyLAorKyAgICBBVl9DT0RFQ19JRF9GRldBVkVTWU5USCwK KysgICAgQVZfQ09ERUNfSURfU09OSUMsCisrICAgIEFWX0NPREVDX0lEX1NPTklDX0xTLAorKyAg ICBBVl9DT0RFQ19JRF9FVlJDLAorKyAgICBBVl9DT0RFQ19JRF9TTVYsCisrICAgIEFWX0NPREVD X0lEX0RTRF9MU0JGLAorKyAgICBBVl9DT0RFQ19JRF9EU0RfTVNCRiwKKysgICAgQVZfQ09ERUNf SURfRFNEX0xTQkZfUExBTkFSLAorKyAgICBBVl9DT0RFQ19JRF9EU0RfTVNCRl9QTEFOQVIsCisr ICAgIEFWX0NPREVDX0lEXzRHViwKKysgICAgQVZfQ09ERUNfSURfSU5URVJQTEFZX0FDTSwKKysg ICAgQVZfQ09ERUNfSURfWE1BMSwKKysgICAgQVZfQ09ERUNfSURfWE1BMiwKKysgICAgQVZfQ09E RUNfSURfRFNULAorKyAgICBBVl9DT0RFQ19JRF9BVFJBQzNBTCwKKysgICAgQVZfQ09ERUNfSURf QVRSQUMzUEFMLAorKyAgICBBVl9DT0RFQ19JRF9ET0xCWV9FLAorKyAgICBBVl9DT0RFQ19JRF9B UFRYLAorKyAgICBBVl9DT0RFQ19JRF9BUFRYX0hELAorKyAgICBBVl9DT0RFQ19JRF9TQkMsCisr ICAgIEFWX0NPREVDX0lEX0FUUkFDOSwKKysgICAgQVZfQ09ERUNfSURfSENPTSwKKysgICAgQVZf Q09ERUNfSURfQUNFTFBfS0VMVklOLAorKyAgICBBVl9DT0RFQ19JRF9NUEVHSF8zRF9BVURJTywK KysgICAgQVZfQ09ERUNfSURfU0lSRU4sCisrICAgIEFWX0NPREVDX0lEX0hDQSwKKysgICAgQVZf Q09ERUNfSURfRkFTVEFVRElPLAorKyAgICBBVl9DT0RFQ19JRF9NU05TSVJFTiwKKysgICAgQVZf Q09ERUNfSURfREZQV00sCisrICAgIEFWX0NPREVDX0lEX0JPTkssCisrICAgIEFWX0NPREVDX0lE X01JU0M0LAorKyAgICBBVl9DT0RFQ19JRF9BUEFDLAorKyAgICBBVl9DT0RFQ19JRF9GVFIsCisr ICAgIEFWX0NPREVDX0lEX1dBVkFSQywKKysgICAgQVZfQ09ERUNfSURfUktBLAorKyAgICBBVl9D T0RFQ19JRF9BQzQsCisrICAgIEFWX0NPREVDX0lEX09TUSwKKysgICAgQVZfQ09ERUNfSURfUU9B LAorKyAgICBBVl9DT0RFQ19JRF9MQzMsCisrICAgIEFWX0NPREVDX0lEX0c3MjgsCisrICAgIEFW X0NPREVDX0lEX0FIWCwKKysgICAgQVZfQ09ERUNfSURfQVBQTEVfQVBBQywKKysKKysgICAgLyog c3VidGl0bGUgY29kZWNzICovCisrICAgIEFWX0NPREVDX0lEX0ZJUlNUX1NVQlRJVExFID0gMHgx NzAwMCwgICAgICAgICAgLy8vPCBBIGR1bW15IElEIHBvaW50aW5nIGF0IHRoZSBzdGFydCBvZiBz dWJ0aXRsZSBjb2RlY3MuCisrICAgIEFWX0NPREVDX0lEX0RWRF9TVUJUSVRMRSA9IDB4MTcwMDAs CisrICAgIEFWX0NPREVDX0lEX0RWQl9TVUJUSVRMRSwKKysgICAgQVZfQ09ERUNfSURfVEVYVCwg IC8vLzwgcmF3IFVURi04IHRleHQKKysgICAgQVZfQ09ERUNfSURfWFNVQiwKKysgICAgQVZfQ09E RUNfSURfU1NBLAorKyAgICBBVl9DT0RFQ19JRF9NT1ZfVEVYVCwKKysgICAgQVZfQ09ERUNfSURf SERNVl9QR1NfU1VCVElUTEUsCisrICAgIEFWX0NPREVDX0lEX0RWQl9URUxFVEVYVCwKKysgICAg QVZfQ09ERUNfSURfU1JULAorKyAgICBBVl9DT0RFQ19JRF9NSUNST0RWRCwKKysgICAgQVZfQ09E RUNfSURfRUlBXzYwOCwKKysgICAgQVZfQ09ERUNfSURfSkFDT1NVQiwKKysgICAgQVZfQ09ERUNf SURfU0FNSSwKKysgICAgQVZfQ09ERUNfSURfUkVBTFRFWFQsCisrICAgIEFWX0NPREVDX0lEX1NU TCwKKysgICAgQVZfQ09ERUNfSURfU1VCVklFV0VSMSwKKysgICAgQVZfQ09ERUNfSURfU1VCVklF V0VSLAorKyAgICBBVl9DT0RFQ19JRF9TVUJSSVAsCisrICAgIEFWX0NPREVDX0lEX1dFQlZUVCwK KysgICAgQVZfQ09ERUNfSURfTVBMMiwKKysgICAgQVZfQ09ERUNfSURfVlBMQVlFUiwKKysgICAg QVZfQ09ERUNfSURfUEpTLAorKyAgICBBVl9DT0RFQ19JRF9BU1MsCisrICAgIEFWX0NPREVDX0lE X0hETVZfVEVYVF9TVUJUSVRMRSwKKysgICAgQVZfQ09ERUNfSURfVFRNTCwKKysgICAgQVZfQ09E RUNfSURfQVJJQl9DQVBUSU9OLAorKyAgICBBVl9DT0RFQ19JRF9JVlRWX1ZCSSwKKysKKysgICAg Lyogb3RoZXIgc3BlY2lmaWMga2luZCBvZiBjb2RlY3MgKGdlbmVyYWxseSB1c2VkIGZvciBhdHRh Y2htZW50cykgKi8KKysgICAgQVZfQ09ERUNfSURfRklSU1RfVU5LTk9XTiA9IDB4MTgwMDAsICAg ICAgICAgICAvLy88IEEgZHVtbXkgSUQgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9mIHZhcmlvdXMg ZmFrZSBjb2RlY3MuCisrICAgIEFWX0NPREVDX0lEX1RURiA9IDB4MTgwMDAsCisrCisrICAgIEFW X0NPREVDX0lEX1NDVEVfMzUsIC8vLzwgQ29udGFpbiB0aW1lc3RhbXAgZXN0aW1hdGVkIHRocm91 Z2ggUENSIG9mIHByb2dyYW0gc3RyZWFtLgorKyAgICBBVl9DT0RFQ19JRF9FUEcsCisrICAgIEFW X0NPREVDX0lEX0JJTlRFWFQsCisrICAgIEFWX0NPREVDX0lEX1hCSU4sCisrICAgIEFWX0NPREVD X0lEX0lERiwKKysgICAgQVZfQ09ERUNfSURfT1RGLAorKyAgICBBVl9DT0RFQ19JRF9TTVBURV9L TFYsCisrICAgIEFWX0NPREVDX0lEX0RWRF9OQVYsCisrICAgIEFWX0NPREVDX0lEX1RJTUVEX0lE MywKKysgICAgQVZfQ09ERUNfSURfQklOX0RBVEEsCisrICAgIEFWX0NPREVDX0lEX1NNUFRFXzIw MzgsCisrICAgIEFWX0NPREVDX0lEX0xDRVZDLAorKyAgICBBVl9DT0RFQ19JRF9TTVBURV80MzZN X0FOQywKKysKKysKKysgICAgQVZfQ09ERUNfSURfUFJPQkUgPSAweDE5MDAwLCAvLy88IGNvZGVj X2lkIGlzIG5vdCBrbm93biAobGlrZSBBVl9DT0RFQ19JRF9OT05FKSBidXQgbGF2ZiBzaG91bGQg YXR0ZW1wdCB0byBpZGVudGlmeSBpdAorKworKyAgICBBVl9DT0RFQ19JRF9NUEVHMlRTID0gMHgy MDAwMCwgLyoqPCBfRkFLRV8gY29kZWMgdG8gaW5kaWNhdGUgYSByYXcgTVBFRy0yIFRTCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0cmVhbSAob25seSB1c2VkIGJ5IGxpYmF2 Zm9ybWF0KSAqLworKyAgICBBVl9DT0RFQ19JRF9NUEVHNFNZU1RFTVMgPSAweDIwMDAxLCAvKio8 IF9GQUtFXyBjb2RlYyB0byBpbmRpY2F0ZSBhIE1QRUctNCBTeXN0ZW1zCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqIHN0cmVhbSAob25seSB1c2VkIGJ5IGxpYmF2Zm9ybWF0KSAq LworKyAgICBBVl9DT0RFQ19JRF9GRk1FVEFEQVRBID0gMHgyMTAwMCwgICAvLy88IER1bW15IGNv ZGVjIGZvciBzdHJlYW1zIGNvbnRhaW5pbmcgb25seSBtZXRhZGF0YSBpbmZvcm1hdGlvbi4KKysg ICAgQVZfQ09ERUNfSURfV1JBUFBFRF9BVkZSQU1FID0gMHgyMTAwMSwgLy8vPCBQYXNzdGhyb3Vn aCBjb2RlYywgQVZGcmFtZXMgd3JhcHBlZCBpbiBBVlBhY2tldAorKyAgICAvKioKKysgICAgICog RHVtbXkgbnVsbCB2aWRlbyBjb2RlYywgdXNlZnVsIG1haW5seSBmb3IgZGV2ZWxvcG1lbnQgYW5k IGRlYnVnZ2luZy4KKysgICAgICogTnVsbCBlbmNvZGVyL2RlY29kZXIgZGlzY2FyZCBhbGwgaW5w dXQgYW5kIG5ldmVyIHJldHVybiBhbnkgb3V0cHV0LgorKyAgICAgKi8KKysgICAgQVZfQ09ERUNf SURfVk5VTEwsCisrICAgIC8qKgorKyAgICAgKiBEdW1teSBudWxsIGF1ZGlvIGNvZGVjLCB1c2Vm dWwgbWFpbmx5IGZvciBkZXZlbG9wbWVudCBhbmQgZGVidWdnaW5nLgorKyAgICAgKiBOdWxsIGVu Y29kZXIvZGVjb2RlciBkaXNjYXJkIGFsbCBpbnB1dCBhbmQgbmV2ZXIgcmV0dXJuIGFueSBvdXRw dXQuCisrICAgICAqLworKyAgICBBVl9DT0RFQ19JRF9BTlVMTCwKKyt9OworKworKy8qKgorKyAq IEdldCB0aGUgdHlwZSBvZiB0aGUgZ2l2ZW4gY29kZWMuCisrICovCisrZW51bSBBVk1lZGlhVHlw ZSBhdmNvZGVjX2dldF90eXBlKGVudW0gQVZDb2RlY0lEIGNvZGVjX2lkKTsKKysKKysvKioKKysg KiBHZXQgdGhlIG5hbWUgb2YgYSBjb2RlYy4KKysgKiBAcmV0dXJuICBhIHN0YXRpYyBzdHJpbmcg aWRlbnRpZnlpbmcgdGhlIGNvZGVjOyBuZXZlciBOVUxMCisrICovCisrY29uc3QgY2hhciAqYXZj b2RlY19nZXRfbmFtZShlbnVtIEFWQ29kZWNJRCBpZCk7CisrCisrLyoqCisrICogUmV0dXJuIGNv ZGVjIGJpdHMgcGVyIHNhbXBsZS4KKysgKgorKyAqIEBwYXJhbVtpbl0gY29kZWNfaWQgdGhlIGNv ZGVjCisrICogQHJldHVybiBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIG9yIHplcm8gaWYgdW5r bm93biBmb3IgdGhlIGdpdmVuIGNvZGVjLgorKyAqLworK2ludCBhdl9nZXRfYml0c19wZXJfc2Ft cGxlKGVudW0gQVZDb2RlY0lEIGNvZGVjX2lkKTsKKysKKysvKioKKysgKiBSZXR1cm4gY29kZWMg Yml0cyBwZXIgc2FtcGxlLgorKyAqIE9ubHkgcmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBiaXRzIHBl ciBzYW1wbGUgaXMgZXhhY3RseSBjb3JyZWN0LCBub3QgYW4KKysgKiBhcHByb3hpbWF0aW9uLgor KyAqCisrICogQHBhcmFtW2luXSBjb2RlY19pZCB0aGUgY29kZWMKKysgKiBAcmV0dXJuIE51bWJl ciBvZiBiaXRzIHBlciBzYW1wbGUgb3IgemVybyBpZiB1bmtub3duIGZvciB0aGUgZ2l2ZW4gY29k ZWMuCisrICovCisraW50IGF2X2dldF9leGFjdF9iaXRzX3Blcl9zYW1wbGUoZW51bSBBVkNvZGVj SUQgY29kZWNfaWQpOworKworKy8qKgorKyAqIFJldHVybiBhIG5hbWUgZm9yIHRoZSBzcGVjaWZp ZWQgcHJvZmlsZSwgaWYgYXZhaWxhYmxlLgorKyAqCisrICogQHBhcmFtIGNvZGVjX2lkIHRoZSBJ RCBvZiB0aGUgY29kZWMgdG8gd2hpY2ggdGhlIHJlcXVlc3RlZCBwcm9maWxlIGJlbG9uZ3MKKysg KiBAcGFyYW0gcHJvZmlsZSB0aGUgcHJvZmlsZSB2YWx1ZSBmb3Igd2hpY2ggYSBuYW1lIGlzIHJl cXVlc3RlZAorKyAqIEByZXR1cm4gQSBuYW1lIGZvciB0aGUgcHJvZmlsZSBpZiBmb3VuZCwgTlVM TCBvdGhlcndpc2UuCisrICoKKysgKiBAbm90ZSB1bmxpa2UgYXZfZ2V0X3Byb2ZpbGVfbmFtZSgp LCB3aGljaCBzZWFyY2hlcyBhIGxpc3Qgb2YgcHJvZmlsZXMKKysgKiAgICAgICBzdXBwb3J0ZWQg YnkgYSBzcGVjaWZpYyBkZWNvZGVyIG9yIGVuY29kZXIgaW1wbGVtZW50YXRpb24sIHRoaXMKKysg KiAgICAgICBmdW5jdGlvbiBzZWFyY2hlcyB0aGUgbGlzdCBvZiBwcm9maWxlcyBmcm9tIHRoZSBB VkNvZGVjRGVzY3JpcHRvcgorKyAqLworK2NvbnN0IGNoYXIgKmF2Y29kZWNfcHJvZmlsZV9uYW1l KGVudW0gQVZDb2RlY0lEIGNvZGVjX2lkLCBpbnQgcHJvZmlsZSk7CisrCisrLyoqCisrICogUmV0 dXJuIHRoZSBQQ00gY29kZWMgYXNzb2NpYXRlZCB3aXRoIGEgc2FtcGxlIGZvcm1hdC4KKysgKiBA cGFyYW0gYmUgIGVuZGlhbm5lc3MsIDAgZm9yIGxpdHRsZSwgMSBmb3IgYmlnLAorKyAqICAgICAg ICAgICAgLTEgKG9yIGFueXRoaW5nIGVsc2UpIGZvciBuYXRpdmUKKysgKiBAcmV0dXJuICBBVl9D T0RFQ19JRF9QQ01fKiBvciBBVl9DT0RFQ19JRF9OT05FCisrICovCisrZW51bSBBVkNvZGVjSUQg YXZfZ2V0X3BjbV9jb2RlYyhlbnVtIEFWU2FtcGxlRm9ybWF0IGZtdCwgaW50IGJlKTsKKysKKysv KioKKysgKiBAfQorKyAqLworKworKyNlbmRpZiAvLyBBVkNPREVDX0NPREVDX0lEX0gKK2RpZmYg LXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVn L3Y5L2xpYmF2Y29kZWMvY29kZWNfcGFyLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2Zy YW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL2NvZGVjX3Bhci5o CistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1w ZWcvdjkvbGliYXZjb2RlYy9jb2RlY19wYXIuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcu NjczNTk4ODMyICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEv dGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZjb2RlYy9jb2RlY19wYXIuaAkyMDI2LTA5LTA3IDEy OjIzOjQ3LjY3MzQxNzM5NiArMDIwMAorQEAgLTAsMCArMSwzMDIgQEAKKysvKgorKyAqIENvZGVj IHBhcmFtZXRlcnMgcHVibGljIEFQSQorKyAqCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZt cGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZG bXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcg d2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3Vu ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrI2lmbmRlZiBBVkNPREVDX0NPREVDX1BBUl9ICisr I2RlZmluZSBBVkNPREVDX0NPREVDX1BBUl9ICisrCisrI2luY2x1ZGUgPHN0ZGludC5oPgorKwor KyNpbmNsdWRlICJsaWJhdnV0aWwvYXZ1dGlsLmgiCisrI2luY2x1ZGUgImxpYmF2dXRpbC9jaGFu bmVsX2xheW91dC5oIgorKyNpbmNsdWRlICJsaWJhdnV0aWwvcmF0aW9uYWwuaCIKKysjaW5jbHVk ZSAibGliYXZ1dGlsL3BpeGZtdC5oIgorKworKyNpbmNsdWRlICJjb2RlY19pZC5oIgorKyNpbmNs dWRlICJkZWZzLmgiCisrI2luY2x1ZGUgInBhY2tldC5oIgorKworKy8qKgorKyAqIEBkZWZncm91 cCBsYXZjX2NvZGVjX3BhcmFtcyBDb2RlYyBwYXJhbWV0ZXJzCisrICogQGluZ3JvdXAgbGF2Y19j b3JlCisrICogQHsKKysgKi8KKysKKysvKioKKysgKiBUaGlzIHN0cnVjdCBkZXNjcmliZXMgdGhl IHByb3BlcnRpZXMgb2YgYW4gZW5jb2RlZCBzdHJlYW0uCisrICoKKysgKiBAbm90ZQorKyAqIFRo ZSBgc2l6ZW9mKEFWQ29kZWNQYXJhbWV0ZXJzKWAgaXMgbm90IGEgcGFydCBvZiB0aGUgcHVibGlj IEFCSSwKKysgKiB0aGVyZWZvcmUgdGhpcyBzdHJ1Y3QgbXVzdCBiZSBhbGxvY2F0ZWQgd2l0aCA6 OmF2Y29kZWNfcGFyYW1ldGVyc19hbGxvYygpCisrICogYW5kIGZyZWVkIHdpdGggOjphdmNvZGVj X3BhcmFtZXRlcnNfZnJlZSgpLgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWQ29kZWNQYXJhbWV0 ZXJzIHsKKysgICAgLyoqCisrICAgICAqIEdlbmVyYWwgdHlwZSBvZiB0aGUgZW5jb2RlZCBkYXRh LgorKyAgICAgKi8KKysgICAgZW51bSBBVk1lZGlhVHlwZSBjb2RlY190eXBlOworKyAgICAvKioK KysgICAgICogU3BlY2lmaWMgdHlwZSBvZiB0aGUgZW5jb2RlZCBkYXRhICh0aGUgY29kZWMgdXNl ZCkuCisrICAgICAqLworKyAgICBlbnVtIEFWQ29kZWNJRCAgIGNvZGVjX2lkOworKyAgICAvKioK KysgICAgICogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29kZWMgKGNvcnJlc3Bv bmRzIHRvIHRoZSBBVkkgRk9VUkNDKS4KKysgICAgICovCisrICAgIHVpbnQzMl90ICAgICAgICAg Y29kZWNfdGFnOworKworKyAgICAvKioKKysgICAgICogRXh0cmEgYmluYXJ5IGRhdGEgbmVlZGVk IGZvciBpbml0aWFsaXppbmcgdGhlIGRlY29kZXIsIGNvZGVjLWRlcGVuZGVudC4KKysgICAgICoK KysgICAgICogTXVzdCBiZSBhbGxvY2F0ZWQgd2l0aCA6OmF2X21hbGxvYygpIGFuZCB3aWxsIGJl IGZyZWVkIGJ5CisrICAgICAqIDo6YXZjb2RlY19wYXJhbWV0ZXJzX2ZyZWUoKS4gVGhlIGFsbG9j YXRlZCBzaXplIG9mIGV4dHJhZGF0YSBtdXN0IGJlIGF0CisrICAgICAqIGxlYXN0ICNleHRyYWRh dGFfc2l6ZSArIDo6QVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSwgd2l0aCB0aGUgcGFkZGlu ZworKyAgICAgKiBieXRlcyB6ZXJvZWQuCisrICAgICAqLworKyAgICB1aW50OF90ICpleHRyYWRh dGE7CisrICAgIC8qKgorKyAgICAgKiBTaXplIG9mIHRoZSBleHRyYWRhdGEgY29udGVudCBpbiBi eXRlcy4KKysgICAgICovCisrICAgIGludCAgICAgIGV4dHJhZGF0YV9zaXplOworKworKyAgICAv KioKKysgICAgICogQWRkaXRpb25hbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW50aXJlIHN0 cmVhbS4KKysgICAgICoKKysgICAgICogU2hvdWxkIGJlIGFsbG9jYXRlZCB3aXRoIDo6YXZfcGFj a2V0X3NpZGVfZGF0YV9uZXcoKSBvcgorKyAgICAgKiA6OmF2X3BhY2tldF9zaWRlX2RhdGFfYWRk KCksIGFuZCB3aWxsIGJlIGZyZWVkIGJ5IDo6YXZjb2RlY19wYXJhbWV0ZXJzX2ZyZWUoKS4KKysg ICAgICovCisrICAgIEFWUGFja2V0U2lkZURhdGEgKmNvZGVkX3NpZGVfZGF0YTsKKysKKysgICAg LyoqCisrICAgICAqIEFtb3VudCBvZiBlbnRyaWVzIGluICNjb2RlZF9zaWRlX2RhdGEuCisrICAg ICAqLworKyAgICBpbnQgbmJfY29kZWRfc2lkZV9kYXRhOworKworKyAgICAvKioKKysgICAgICog LSBWaWRlbzogdGhlIHBpeGVsIGZvcm1hdCwgdGhlIHZhbHVlIGNvcnJlc3BvbmRzIHRvIGVudW0g OjpBVlBpeGVsRm9ybWF0LgorKyAgICAgKiAtIEF1ZGlvOiB0aGUgc2FtcGxlIGZvcm1hdCwgdGhl IHZhbHVlIGNvcnJlc3BvbmRzIHRvIGVudW0gOjpBVlNhbXBsZUZvcm1hdC4KKysgICAgICovCisr ICAgIGludCBmb3JtYXQ7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGUgYXZlcmFnZSBiaXRyYXRl IG9mIHRoZSBlbmNvZGVkIGRhdGEgKGluIGJpdHMgcGVyIHNlY29uZCkuCisrICAgICAqLworKyAg ICBpbnQ2NF90IGJpdF9yYXRlOworKworKyAgICAvKioKKysgICAgICogVGhlIG51bWJlciBvZiBi aXRzIHBlciBzYW1wbGUgaW4gdGhlIGNvZGVkd29yZHMuCisrICAgICAqCisrICAgICAqIFRoaXMg aXMgYmFzaWNhbGx5IHRoZSBiaXRyYXRlIHBlciBzYW1wbGUuIEl0IGlzIG1hbmRhdG9yeSBmb3Ig YSBidW5jaCBvZgorKyAgICAgKiBmb3JtYXRzIHRvIGFjdHVhbGx5IGRlY29kZSB0aGVtLiBJdCdz IHRoZSBudW1iZXIgb2YgYml0cyBmb3Igb25lIHNhbXBsZSBpbgorKyAgICAgKiB0aGUgYWN0dWFs IGNvZGVkIGJpdHN0cmVhbS4KKysgICAgICoKKysgICAgICogVGhpcyBjb3VsZCBiZSwgZm9yIGV4 YW1wbGUsIDQsIGZvciBBRFBDTS4KKysgICAgICogRm9yIFBDTSBmb3JtYXRzIHRoaXMgbWF0Y2hl cyAjYml0c19wZXJfcmF3X3NhbXBsZS4KKysgICAgICoKKysgICAgICogQ2FuIGJlIDAuCisrICAg ICAqLworKyAgICBpbnQgYml0c19wZXJfY29kZWRfc2FtcGxlOworKworKyAgICAvKioKKysgICAg ICogVGhlIG51bWJlciBvZiB2YWxpZCBiaXRzIGluIGVhY2ggb3V0cHV0IHNhbXBsZS4KKysgICAg ICoKKysgICAgICogSWYgdGhlIHNhbXBsZSBmb3JtYXQgaGFzIG1vcmUgYml0cywgdGhlIGxlYXN0 IHNpZ25pZmljYW50IGJpdHMgYXJlIGFkZGl0aW9uYWwKKysgICAgICogcGFkZGluZyBiaXRzLCB3 aGljaCBhcmUgYWx3YXlzIDAuIFVzZSByaWdodCBzaGlmdHMgdG8gcmVkdWNlIHRoZSBzYW1wbGUK KysgICAgICogdG8gaXRzIGFjdHVhbCBzaXplLgorKyAgICAgKgorKyAgICAgKiBGb3IgZXhhbXBs ZSwgYXVkaW8gZm9ybWF0cyB3aXRoIDI0LWJpdCBzYW1wbGVzIHdpbGwgaGF2ZSAjYml0c19wZXJf cmF3X3NhbXBsZQorKyAgICAgKiBzZXQgdG8gMjQsIGFuZCA6OmZvcm1hdCBzZXQgdG8gOjpBVl9T QU1QTEVfRk1UX1MzMi4gVG8gZ2V0IHRoZSBvcmlnaW5hbCBzYW1wbGUsCisrICAgICAqIHVzZTog YChpbnQzMl90KXNhbXBsZSA+PiA4YC4KKysgICAgICoKKysgICAgICogRm9yIEFEUENNLCB0aGlz IG1pZ2h0IGJlIDEyIG9yIDE2LCBvciBzaW1pbGFyLgorKyAgICAgKgorKyAgICAgKiBDYW4gYmUg MC4KKysgICAgICovCisrICAgIGludCBiaXRzX3Blcl9yYXdfc2FtcGxlOworKworKyAgICAvKioK KysgICAgICogQ29kZWMtc3BlY2lmaWMgYml0c3RyZWFtIHJlc3RyaWN0aW9ucyB0aGF0IHRoZSBz dHJlYW0gY29uZm9ybXMgdG8uCisrICAgICAqLworKyAgICBpbnQgcHJvZmlsZTsKKysgICAgaW50 IGxldmVsOworKworKyAgICAvKioKKysgICAgICogVGhlIHdpZHRoIG9mIHRoZSB2aWRlbyBmcmFt ZSBpbiBwaXhlbHMuCisrICAgICAqCisrICAgICAqIFZpZGVvIG9ubHkuCisrICAgICAqLworKyAg ICBpbnQgd2lkdGg7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB2aWRl byBmcmFtZSBpbiBwaXhlbHMuCisrICAgICAqCisrICAgICAqIFZpZGVvIG9ubHkuCisrICAgICAq LworKyAgICBpbnQgaGVpZ2h0OworKworKyAgICAvKioKKysgICAgICogVGhlIGFzcGVjdCByYXRp byAod2lkdGgvaGVpZ2h0KSB3aGljaCBhIHNpbmdsZSBwaXhlbAorKyAgICAgKiBzaG91bGQgaGF2 ZSB3aGVuIGRpc3BsYXllZC4KKysgICAgICoKKysgICAgICogV2hlbiB0aGUgYXNwZWN0IHJhdGlv IGlzIHVua25vd24gb3IgdW5kZWZpbmVkLCB0aGUgbnVtZXJhdG9yIHNob3VsZCBiZQorKyAgICAg KiBzZXQgdG8gMCAodGhlIGRlbm9taW5hdG9yIG1heSBoYXZlIGFueSB2YWx1ZSkuCisrICAgICAq CisrICAgICAqIFZpZGVvIG9ubHkuCisrICAgICAqLworKyAgICBBVlJhdGlvbmFsIHNhbXBsZV9h c3BlY3RfcmF0aW87CisrCisrICAgIC8qKgorKyAgICAgKiBOdW1iZXIgb2YgZnJhbWVzIHBlciBz ZWNvbmQsIGZvciBzdHJlYW1zIHdpdGggY29uc3RhbnQgZnJhbWUKKysgICAgICogZHVyYXRpb25z LiBTaG91bGQgYmUgc2V0IHRvIGB7IDAsIDEgfWAgd2hlbiBzb21lIGZyYW1lcyBoYXZlIGRpZmZl cmluZworKyAgICAgKiBkdXJhdGlvbnMgb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBrbm93bi4KKysg ICAgICoKKysgICAgICogQG5vdGUgVGhpcyBmaWVsZCBjb3JyZXNwb25kcyB0byB2YWx1ZXMgdGhh dCBhcmUgc3RvcmVkIGluIGNvZGVjLWxldmVsCisrICAgICAqIGhlYWRlcnMgYW5kIGlzIHR5cGlj YWxseSBvdmVycmlkZGVuIGJ5IGNvbnRhaW5lci90cmFuc3BvcnQtbGF5ZXIKKysgICAgICogdGlt ZXN0YW1wcywgd2hlbiBhdmFpbGFibGUuIEl0IHNob3VsZCB0aHVzIGJlIHVzZWQgb25seSBhcyBh IGxhc3QgcmVzb3J0LAorKyAgICAgKiB3aGVuIG5vIGhpZ2hlci1sZXZlbCB0aW1pbmcgaW5mb3Jt YXRpb24gaXMgYXZhaWxhYmxlLgorKyAgICAgKgorKyAgICAgKiBWaWRlbyBvbmx5LgorKyAgICAg Ki8KKysgICAgQVZSYXRpb25hbCBmcmFtZXJhdGU7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGUg b3JkZXIgb2YgdGhlIGZpZWxkcyBpbiBpbnRlcmxhY2VkIHZpZGVvLgorKyAgICAgKgorKyAgICAg KiBWaWRlbyBvbmx5LgorKyAgICAgKi8KKysgICAgZW51bSBBVkZpZWxkT3JkZXIgICAgICAgICAg ICAgICAgICBmaWVsZF9vcmRlcjsKKysKKysgICAgLyoqCisrICAgICAqIEFkZGl0aW9uYWwgY29s b3JzcGFjZSBjaGFyYWN0ZXJpc3RpY3MuCisrICAgICAqCisrICAgICAqIFZpZGVvIG9ubHkuCisr ICAgICAqLworKyAgICBlbnVtIEFWQ29sb3JSYW5nZSAgICAgICAgICAgICAgICAgIGNvbG9yX3Jh bmdlOworKyAgICBlbnVtIEFWQ29sb3JQcmltYXJpZXMgICAgICAgICAgICAgIGNvbG9yX3ByaW1h cmllczsKKysgICAgZW51bSBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyBjb2xvcl90cmM7 CisrICAgIGVudW0gQVZDb2xvclNwYWNlICAgICAgICAgICAgICAgICAgY29sb3Jfc3BhY2U7Cisr ICAgIGVudW0gQVZDaHJvbWFMb2NhdGlvbiAgICAgICAgICAgICAgY2hyb21hX2xvY2F0aW9uOwor KworKyAgICAvKioKKysgICAgICogTnVtYmVyIG9mIGRlbGF5ZWQgZnJhbWVzLgorKyAgICAgKgor KyAgICAgKiBWaWRlbyBvbmx5LgorKyAgICAgKi8KKysgICAgaW50IHZpZGVvX2RlbGF5OworKwor KyAgICAvKioKKysgICAgICogVGhlIGNoYW5uZWwgbGF5b3V0IGFuZCBudW1iZXIgb2YgY2hhbm5l bHMuCisrICAgICAqCisrICAgICAqIEF1ZGlvIG9ubHkuCisrICAgICAqLworKyAgICBBVkNoYW5u ZWxMYXlvdXQgY2hfbGF5b3V0OworKyAgICAvKioKKysgICAgICogVGhlIG51bWJlciBvZiBhdWRp byBzYW1wbGVzIHBlciBzZWNvbmQuCisrICAgICAqCisrICAgICAqIEF1ZGlvIG9ubHkuCisrICAg ICAqLworKyAgICBpbnQgICAgICBzYW1wbGVfcmF0ZTsKKysgICAgLyoqCisrICAgICAqIFRoZSBu dW1iZXIgb2YgYnl0ZXMgcGVyIGNvZGVkIGF1ZGlvIGZyYW1lLCByZXF1aXJlZCBieSBzb21lIGZv cm1hdHMuCisrICAgICAqCisrICAgICAqIEF1ZGlvIG9ubHkuCisrICAgICAqCisrICAgICAqIENv cnJlc3BvbmRzIHRvIG5CbG9ja0FsaWduIGluIFdBVkVGT1JNQVRFWC4KKysgICAgICovCisrICAg IGludCAgICAgIGJsb2NrX2FsaWduOworKyAgICAvKioKKysgICAgICogQXVkaW8gZnJhbWUgc2l6 ZSwgaWYga25vd24uIFJlcXVpcmVkIGJ5IHNvbWUgZm9ybWF0cyB0byBiZSBzdGF0aWMuCisrICAg ICAqCisrICAgICAqIEF1ZGlvIG9ubHkuCisrICAgICAqLworKyAgICBpbnQgICAgICBmcmFtZV9z aXplOworKworKyAgICAvKioKKysgICAgICogTnVtYmVyIG9mIHBhZGRpbmcgYXVkaW8gc2FtcGxl cyBhdCB0aGUgc3RhcnQuCisrICAgICAqCisrICAgICAqIFRoZSBhbW91bnQgb2YgcGFkZGluZyAo aW4gc2FtcGxlcykgaW5zZXJ0ZWQgYnkgdGhlIGVuY29kZXIgYXQKKysgICAgICogdGhlIGJlZ2lu bmluZyBvZiB0aGUgYXVkaW8uIEkuZS4gdGhpcyBudW1iZXIgb2YgbGVhZGluZyBkZWNvZGVkIHNh bXBsZXMKKysgICAgICogbXVzdCBiZSBkaXNjYXJkZWQgdG8gZ2V0IHRoZSBvcmlnaW5hbCBhdWRp byB3aXRob3V0IGxlYWRpbmcKKysgICAgICogcGFkZGluZy4KKysgICAgICoKKysgICAgICogQXVk aW8gb25seS4KKysgICAgICovCisrICAgIGludCBpbml0aWFsX3BhZGRpbmc7CisrICAgIC8qKgor KyAgICAgKiBOdW1iZXIgb2YgcGFkZGluZyBhdWRpbyBzYW1wbGVzIGF0IHRoZSBlbmQuCisrICAg ICAqCisrICAgICAqIFRoZSBhbW91bnQgb2YgcGFkZGluZyAoaW4gc2FtcGxlcykgYXBwZW5kZWQg YnkgdGhlIGVuY29kZXIgdG8KKysgICAgICogdGhlIGVuZCBvZiB0aGUgYXVkaW8uIEkuZS4gdGhp cyBudW1iZXIgb2YgZGVjb2RlZCBzYW1wbGVzIG11c3QgYmUKKysgICAgICogZGlzY2FyZGVkIGZy b20gdGhlIGVuZCBvZiB0aGUgc3RyZWFtIHRvIGdldCB0aGUgb3JpZ2luYWwKKysgICAgICogYXVk aW8gd2l0aG91dCBhbnkgdHJhaWxpbmcgcGFkZGluZy4KKysgICAgICoKKysgICAgICogQXVkaW8g b25seS4KKysgICAgICovCisrICAgIGludCB0cmFpbGluZ19wYWRkaW5nOworKyAgICAvKioKKysg ICAgICogTnVtYmVyIG9mIGF1ZGlvIHNhbXBsZXMgdG8gc2tpcCBhZnRlciBhIGRpc2NvbnRpbnVp dHkuCisrICAgICAqCisrICAgICAqIEF1ZGlvIG9ubHkuCisrICAgICAqLworKyAgICBpbnQgc2Vl a19wcmVyb2xsOworKworKyAgICAvKioKKysgICAgICogVmlkZW8gd2l0aCBhbHBoYSBjaGFubmVs IG9ubHkuIEFscGhhIGNoYW5uZWwgaGFuZGxpbmcKKysgICAgICovCisrICAgIGVudW0gQVZBbHBo YU1vZGUgYWxwaGFfbW9kZTsKKyt9IEFWQ29kZWNQYXJhbWV0ZXJzOworKworKy8qKgorKyAqIEBy ZWxhdGVzIEFWQ29kZWNQYXJhbWV0ZXJzCisrICogQHsKKysgKi8KKysKKysvKioKKysgKiBBbGxv Y2F0ZSBhIG5ldyBBVkNvZGVjUGFyYW1ldGVycyBhbmQgc2V0IGl0cyBmaWVsZHMgdG8gZGVmYXVs dCB2YWx1ZXMKKysgKiAodW5rbm93bi9pbnZhbGlkLzApLiBUaGUgcmV0dXJuZWQgc3RydWN0IG11 c3QgYmUgZnJlZWQgd2l0aAorKyAqIDo6YXZjb2RlY19wYXJhbWV0ZXJzX2ZyZWUoKS4KKysgKi8K KytBVkNvZGVjUGFyYW1ldGVycyAqYXZjb2RlY19wYXJhbWV0ZXJzX2FsbG9jKHZvaWQpOworKwor Ky8qKgorKyAqIEZyZWUgYW4gQVZDb2RlY1BhcmFtZXRlcnMgaW5zdGFuY2UgYW5kIGV2ZXJ5dGhp bmcgYXNzb2NpYXRlZCB3aXRoIGl0IGFuZAorKyAqIHdyaXRlIGBOVUxMYCB0byB0aGUgc3VwcGxp ZWQgcG9pbnRlci4KKysgKi8KKyt2b2lkIGF2Y29kZWNfcGFyYW1ldGVyc19mcmVlKEFWQ29kZWNQ YXJhbWV0ZXJzICoqcGFyKTsKKysKKysvKioKKysgKiBDb3B5IHRoZSBjb250ZW50cyBvZiBccCBz cmMgdG8gXHAgZHN0LiBBbnkgYWxsb2NhdGVkIGZpZWxkcyBpbiBkc3QgYXJlIGZyZWVkIGFuZAor KyAqIHJlcGxhY2VkIHdpdGggbmV3bHkgYWxsb2NhdGVkIGR1cGxpY2F0ZXMgb2YgdGhlIGNvcnJl c3BvbmRpbmcgZmllbGRzIGluIHNyYy4KKysgKgorKyAqIEByZXR1cm4gPj0gMCBvbiBzdWNjZXNz LCBhIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBvbiBmYWlsdXJlLgorKyAqLworK2ludCBhdmNvZGVj X3BhcmFtZXRlcnNfY29weShBVkNvZGVjUGFyYW1ldGVycyAqZHN0LCBjb25zdCBBVkNvZGVjUGFy YW1ldGVycyAqc3JjKTsKKysKKysvKioKKysgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBzYW1lIGFz IDo6YXZfZ2V0X2F1ZGlvX2ZyYW1lX2R1cmF0aW9uKCksIGV4Y2VwdCBpdCB3b3JrcworKyAqIHdp dGggOjpBVkNvZGVjUGFyYW1ldGVycyBpbnN0ZWFkIG9mIGFuIDo6QVZDb2RlY0NvbnRleHQuCisr ICovCisraW50IGF2X2dldF9hdWRpb19mcmFtZV9kdXJhdGlvbjIoQVZDb2RlY1BhcmFtZXRlcnMg KnBhciwgaW50IGZyYW1lX2J5dGVzKTsKKysKKysvKiogQH0gKi8KKysKKysvKioKKysgKiBAfQor KyAqLworKworKyNlbmRpZiAvLyBBVkNPREVDX0NPREVDX1BBUl9ICitkaWZmIC11cCBNdXNlU2Nv cmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNv ZGVjL2RlZnMuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3Ro aXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvZGVmcy5oCistLS0gTXVzZVNjb3JlLTQuNy40 L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZjb2RlYy9kZWZz LmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3Mzk5NzIwMCArMDIwMAorKysrIE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2 Y29kZWMvZGVmcy5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjczNzUzMjM1ICswMjAwCitAQCAtMCww ICsxLDM2MiBAQAorKy8qCisrICoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisr ICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZG bXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24s IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVmIEFWQ09ERUNfREVGU19ICisrI2RlZmluZSBBVkNP REVDX0RFRlNfSAorKworKy8qKgorKyAqIEBmaWxlCisrICogQGluZ3JvdXAgbGliYXZjCisrICog TWlzYyB0eXBlcyBhbmQgY29uc3RhbnRzIHRoYXQgZG8gbm90IGJlbG9uZyBhbnl3aGVyZSBlbHNl LgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+Cisr CisrLyoqCisrICogQGluZ3JvdXAgbGF2Y19kZWNvZGluZworKyAqIFJlcXVpcmVkIG51bWJlciBv ZiBhZGRpdGlvbmFsbHkgYWxsb2NhdGVkIGJ5dGVzIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IGJp dHN0cmVhbSBmb3IgZGVjb2RpbmcuCisrICogVGhpcyBpcyBtYWlubHkgbmVlZGVkIGJlY2F1c2Ug c29tZSBvcHRpbWl6ZWQgYml0c3RyZWFtIHJlYWRlcnMgcmVhZAorKyAqIDMyIG9yIDY0IGJpdCBh dCBvbmNlIGFuZCBjb3VsZCByZWFkIG92ZXIgdGhlIGVuZC48YnI+CisrICogTm90ZTogSWYgdGhl IGZpcnN0IDIzIGJpdHMgb2YgdGhlIGFkZGl0aW9uYWwgYnl0ZXMgYXJlIG5vdCAwLCB0aGVuIGRh bWFnZWQKKysgKiBNUEVHIGJpdHN0cmVhbXMgY291bGQgY2F1c2Ugb3ZlcnJlYWQgYW5kIHNlZ2Zh dWx0LgorKyAqLworKyNkZWZpbmUgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSA2NAorKwor Ky8qKgorKyAqIFZlcmlmeSBjaGVja3N1bXMgZW1iZWRkZWQgaW4gdGhlIGJpdHN0cmVhbSAoY291 bGQgYmUgb2YgZWl0aGVyIGVuY29kZWQgb3IKKysgKiBkZWNvZGVkIGRhdGEsIGRlcGVuZGluZyBv biB0aGUgZm9ybWF0KSBhbmQgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBtaXNtYXRjaC4KKysg KiBJZiBBVl9FRl9FWFBMT0RFIGlzIGFsc28gc2V0LCBhIG1pc21hdGNoaW5nIGNoZWNrc3VtIHdp bGwgcmVzdWx0IGluIHRoZQorKyAqIGRlY29kZXIvZGVtdXhlciByZXR1cm5pbmcgYW4gZXJyb3Iu CisrICovCisrI2RlZmluZSBBVl9FRl9DUkNDSEVDSyAgICAgICAoMTw8MCkKKysjZGVmaW5lIEFW X0VGX0JJVFNUUkVBTSAgICAgICgxPDwxKSAgIC8vLzwgZGV0ZWN0IGJpdHN0cmVhbSBzcGVjaWZp Y2F0aW9uIGRldmlhdGlvbnMKKysjZGVmaW5lIEFWX0VGX0JVRkZFUiAgICAgICAgICgxPDwyKSAg IC8vLzwgZGV0ZWN0IGltcHJvcGVyIGJpdHN0cmVhbSBsZW5ndGgKKysjZGVmaW5lIEFWX0VGX0VY UExPREUgICAgICAgICgxPDwzKSAgIC8vLzwgYWJvcnQgZGVjb2Rpbmcgb24gbWlub3IgZXJyb3Ig ZGV0ZWN0aW9uCisrCisrI2RlZmluZSBBVl9FRl9JR05PUkVfRVJSICAgICAoMTw8MTUpICAvLy88 IGlnbm9yZSBlcnJvcnMgYW5kIGNvbnRpbnVlCisrI2RlZmluZSBBVl9FRl9DQVJFRlVMICAgICAg ICAoMTw8MTYpICAvLy88IGNvbnNpZGVyIHRoaW5ncyB0aGF0IHZpb2xhdGUgdGhlIHNwZWMsIGFy ZSBmYXN0IHRvIGNhbGN1bGF0ZSBhbmQgaGF2ZSBub3QgYmVlbiBzZWVuIGluIHRoZSB3aWxkIGFz IGVycm9ycworKyNkZWZpbmUgQVZfRUZfQ09NUExJQU5UICAgICAgKDE8PDE3KSAgLy8vPCBjb25z aWRlciBhbGwgc3BlYyBub24gY29tcGxpYW5jZXMgYXMgZXJyb3JzCisrI2RlZmluZSBBVl9FRl9B R0dSRVNTSVZFICAgICAoMTw8MTgpICAvLy88IGNvbnNpZGVyIHRoaW5ncyB0aGF0IGEgc2FuZSBl bmNvZGVyL211eGVyIHNob3VsZCBub3QgZG8gYXMgYW4gZXJyb3IKKysKKysjZGVmaW5lIEZGX0NP TVBMSUFOQ0VfVkVSWV9TVFJJQ1QgICAyIC8vLzwgU3RyaWN0bHkgY29uZm9ybSB0byBhbiBvbGRl ciBtb3JlIHN0cmljdCB2ZXJzaW9uIG9mIHRoZSBzcGVjIG9yIHJlZmVyZW5jZSBzb2Z0d2FyZS4K KysjZGVmaW5lIEZGX0NPTVBMSUFOQ0VfU1RSSUNUICAgICAgICAxIC8vLzwgU3RyaWN0bHkgY29u Zm9ybSB0byBhbGwgdGhlIHRoaW5ncyBpbiB0aGUgc3BlYyBubyBtYXR0ZXIgd2hhdCBjb25zZXF1 ZW5jZXMuCisrI2RlZmluZSBGRl9DT01QTElBTkNFX05PUk1BTCAgICAgICAgMAorKyNkZWZpbmUg RkZfQ09NUExJQU5DRV9VTk9GRklDSUFMICAgLTEgLy8vPCBBbGxvdyB1bm9mZmljaWFsIGV4dGVu c2lvbnMKKysjZGVmaW5lIEZGX0NPTVBMSUFOQ0VfRVhQRVJJTUVOVEFMIC0yIC8vLzwgQWxsb3cg bm9uc3RhbmRhcmRpemVkIGV4cGVyaW1lbnRhbCB0aGluZ3MuCisrCisrCisrI2RlZmluZSBBVl9Q Uk9GSUxFX1VOS05PV04gICAgICAgIC05OQorKyNkZWZpbmUgQVZfUFJPRklMRV9SRVNFUlZFRCAg ICAgIC0xMDAKKysKKysjZGVmaW5lIEFWX1BST0ZJTEVfQUFDX01BSU4gICAgICAgICAwCisrI2Rl ZmluZSBBVl9QUk9GSUxFX0FBQ19MT1cgICAgICAgICAgMQorKyNkZWZpbmUgQVZfUFJPRklMRV9B QUNfU1NSICAgICAgICAgIDIKKysjZGVmaW5lIEFWX1BST0ZJTEVfQUFDX0xUUCAgICAgICAgICAz CisrI2RlZmluZSBBVl9QUk9GSUxFX0FBQ19IRSAgICAgICAgICAgNAorKyNkZWZpbmUgQVZfUFJP RklMRV9BQUNfSEVfVjIgICAgICAgMjgKKysjZGVmaW5lIEFWX1BST0ZJTEVfQUFDX0xEICAgICAg ICAgIDIyCisrI2RlZmluZSBBVl9QUk9GSUxFX0FBQ19FTEQgICAgICAgICAzOAorKyNkZWZpbmUg QVZfUFJPRklMRV9BQUNfVVNBQyAgICAgICAgNDEKKysjZGVmaW5lIEFWX1BST0ZJTEVfTVBFRzJf QUFDX0xPVyAgMTI4CisrI2RlZmluZSBBVl9QUk9GSUxFX01QRUcyX0FBQ19IRSAgIDEzMQorKwor KyNkZWZpbmUgQVZfUFJPRklMRV9ETlhIRCAgICAgICAgIDAKKysjZGVmaW5lIEFWX1BST0ZJTEVf RE5YSFJfTEIgICAgICAxCisrI2RlZmluZSBBVl9QUk9GSUxFX0ROWEhSX1NRICAgICAgMgorKyNk ZWZpbmUgQVZfUFJPRklMRV9ETlhIUl9IUSAgICAgIDMKKysjZGVmaW5lIEFWX1BST0ZJTEVfRE5Y SFJfSFFYICAgICA0CisrI2RlZmluZSBBVl9QUk9GSUxFX0ROWEhSXzQ0NCAgICAgNQorKworKyNk ZWZpbmUgQVZfUFJPRklMRV9EVFMgICAgICAgICAgICAgICAgMjAKKysjZGVmaW5lIEFWX1BST0ZJ TEVfRFRTX0VTICAgICAgICAgICAgIDMwCisrI2RlZmluZSBBVl9QUk9GSUxFX0RUU185Nl8yNCAg ICAgICAgICA0MAorKyNkZWZpbmUgQVZfUFJPRklMRV9EVFNfSERfSFJBICAgICAgICAgNTAKKysj ZGVmaW5lIEFWX1BST0ZJTEVfRFRTX0hEX01BICAgICAgICAgIDYwCisrI2RlZmluZSBBVl9QUk9G SUxFX0RUU19FWFBSRVNTICAgICAgICA3MAorKyNkZWZpbmUgQVZfUFJPRklMRV9EVFNfSERfTUFf WCAgICAgICAgNjEKKysjZGVmaW5lIEFWX1BST0ZJTEVfRFRTX0hEX01BX1hfSU1BWCAgIDYyCisr CisrI2RlZmluZSBBVl9QUk9GSUxFX0VBQzNfRERQX0FUTU9TICAgICAgICAgMzAKKysKKysjZGVm aW5lIEFWX1BST0ZJTEVfVFJVRUhEX0FUTU9TICAgICAgICAgICAzMAorKworKyNkZWZpbmUgQVZf UFJPRklMRV9NUEVHMl80MjIgICAgICAgICAgIDAKKysjZGVmaW5lIEFWX1BST0ZJTEVfTVBFRzJf SElHSCAgICAgICAgICAxCisrI2RlZmluZSBBVl9QUk9GSUxFX01QRUcyX1NTICAgICAgICAgICAg MgorKyNkZWZpbmUgQVZfUFJPRklMRV9NUEVHMl9TTlJfU0NBTEFCTEUgIDMKKysjZGVmaW5lIEFW X1BST0ZJTEVfTVBFRzJfTUFJTiAgICAgICAgICA0CisrI2RlZmluZSBBVl9QUk9GSUxFX01QRUcy X1NJTVBMRSAgICAgICAgNQorKworKyNkZWZpbmUgQVZfUFJPRklMRV9IMjY0X0NPTlNUUkFJTkVE ICAoMTw8OSkgIC8vIDgrMTsgY29uc3RyYWludF9zZXQxX2ZsYWcKKysjZGVmaW5lIEFWX1BST0ZJ TEVfSDI2NF9JTlRSQSAgICAgICAgKDE8PDExKSAvLyA4KzM7IGNvbnN0cmFpbnRfc2V0M19mbGFn CisrCisrI2RlZmluZSBBVl9QUk9GSUxFX0gyNjRfQkFTRUxJTkUgICAgICAgICAgICAgNjYKKysj ZGVmaW5lIEFWX1BST0ZJTEVfSDI2NF9DT05TVFJBSU5FRF9CQVNFTElORSAoNjZ8QVZfUFJPRklM RV9IMjY0X0NPTlNUUkFJTkVEKQorKyNkZWZpbmUgQVZfUFJPRklMRV9IMjY0X01BSU4gICAgICAg ICAgICAgICAgIDc3CisrI2RlZmluZSBBVl9QUk9GSUxFX0gyNjRfRVhURU5ERUQgICAgICAgICAg ICAgODgKKysjZGVmaW5lIEFWX1BST0ZJTEVfSDI2NF9ISUdIICAgICAgICAgICAgICAgICAxMDAK KysjZGVmaW5lIEFWX1BST0ZJTEVfSDI2NF9ISUdIXzEwICAgICAgICAgICAgICAxMTAKKysjZGVm aW5lIEFWX1BST0ZJTEVfSDI2NF9ISUdIXzEwX0lOVFJBICAgICAgICAoMTEwfEFWX1BST0ZJTEVf SDI2NF9JTlRSQSkKKysjZGVmaW5lIEFWX1BST0ZJTEVfSDI2NF9NVUxUSVZJRVdfSElHSCAgICAg ICAxMTgKKysjZGVmaW5lIEFWX1BST0ZJTEVfSDI2NF9ISUdIXzQyMiAgICAgICAgICAgICAxMjIK KysjZGVmaW5lIEFWX1BST0ZJTEVfSDI2NF9ISUdIXzQyMl9JTlRSQSAgICAgICAoMTIyfEFWX1BS T0ZJTEVfSDI2NF9JTlRSQSkKKysjZGVmaW5lIEFWX1BST0ZJTEVfSDI2NF9TVEVSRU9fSElHSCAg ICAgICAgICAxMjgKKysjZGVmaW5lIEFWX1BST0ZJTEVfSDI2NF9ISUdIXzQ0NCAgICAgICAgICAg ICAxNDQKKysjZGVmaW5lIEFWX1BST0ZJTEVfSDI2NF9ISUdIXzQ0NF9QUkVESUNUSVZFICAyNDQK KysjZGVmaW5lIEFWX1BST0ZJTEVfSDI2NF9ISUdIXzQ0NF9JTlRSQSAgICAgICAoMjQ0fEFWX1BS T0ZJTEVfSDI2NF9JTlRSQSkKKysjZGVmaW5lIEFWX1BST0ZJTEVfSDI2NF9DQVZMQ180NDQgICAg ICAgICAgICA0NAorKworKyNkZWZpbmUgQVZfUFJPRklMRV9WQzFfU0lNUExFICAgMAorKyNkZWZp bmUgQVZfUFJPRklMRV9WQzFfTUFJTiAgICAgMQorKyNkZWZpbmUgQVZfUFJPRklMRV9WQzFfQ09N UExFWCAgMgorKyNkZWZpbmUgQVZfUFJPRklMRV9WQzFfQURWQU5DRUQgMworKworKyNkZWZpbmUg QVZfUFJPRklMRV9NUEVHNF9TSU1QTEUgICAgICAgICAgICAgICAgICAgICAwCisrI2RlZmluZSBB Vl9QUk9GSUxFX01QRUc0X1NJTVBMRV9TQ0FMQUJMRSAgICAgICAgICAgIDEKKysjZGVmaW5lIEFW X1BST0ZJTEVfTVBFRzRfQ09SRSAgICAgICAgICAgICAgICAgICAgICAgMgorKyNkZWZpbmUgQVZf UFJPRklMRV9NUEVHNF9NQUlOICAgICAgICAgICAgICAgICAgICAgICAzCisrI2RlZmluZSBBVl9Q Uk9GSUxFX01QRUc0X05fQklUICAgICAgICAgICAgICAgICAgICAgIDQKKysjZGVmaW5lIEFWX1BS T0ZJTEVfTVBFRzRfU0NBTEFCTEVfVEVYVFVSRSAgICAgICAgICAgNQorKyNkZWZpbmUgQVZfUFJP RklMRV9NUEVHNF9TSU1QTEVfRkFDRV9BTklNQVRJT04gICAgICA2CisrI2RlZmluZSBBVl9QUk9G SUxFX01QRUc0X0JBU0lDX0FOSU1BVEVEX1RFWFRVUkUgICAgIDcKKysjZGVmaW5lIEFWX1BST0ZJ TEVfTVBFRzRfSFlCUklEICAgICAgICAgICAgICAgICAgICAgOAorKyNkZWZpbmUgQVZfUFJPRklM RV9NUEVHNF9BRFZBTkNFRF9SRUFMX1RJTUUgICAgICAgICA5CisrI2RlZmluZSBBVl9QUk9GSUxF X01QRUc0X0NPUkVfU0NBTEFCTEUgICAgICAgICAgICAgMTAKKysjZGVmaW5lIEFWX1BST0ZJTEVf TVBFRzRfQURWQU5DRURfQ09ESU5HICAgICAgICAgICAxMQorKyNkZWZpbmUgQVZfUFJPRklMRV9N UEVHNF9BRFZBTkNFRF9DT1JFICAgICAgICAgICAgIDEyCisrI2RlZmluZSBBVl9QUk9GSUxFX01Q RUc0X0FEVkFOQ0VEX1NDQUxBQkxFX1RFWFRVUkUgMTMKKysjZGVmaW5lIEFWX1BST0ZJTEVfTVBF RzRfU0lNUExFX1NUVURJTyAgICAgICAgICAgICAxNAorKyNkZWZpbmUgQVZfUFJPRklMRV9NUEVH NF9BRFZBTkNFRF9TSU1QTEUgICAgICAgICAgIDE1CisrCisrI2RlZmluZSBBVl9QUk9GSUxFX0pQ RUcyMDAwX0NTVFJFQU1fUkVTVFJJQ1RJT05fMCAgIDEKKysjZGVmaW5lIEFWX1BST0ZJTEVfSlBF RzIwMDBfQ1NUUkVBTV9SRVNUUklDVElPTl8xICAgMgorKyNkZWZpbmUgQVZfUFJPRklMRV9KUEVH MjAwMF9DU1RSRUFNX05PX1JFU1RSSUNUSU9OICAzMjc2OAorKyNkZWZpbmUgQVZfUFJPRklMRV9K UEVHMjAwMF9EQ0lORU1BXzJLICAgICAgICAgICAgICAzCisrI2RlZmluZSBBVl9QUk9GSUxFX0pQ RUcyMDAwX0RDSU5FTUFfNEsgICAgICAgICAgICAgIDQKKysKKysjZGVmaW5lIEFWX1BST0ZJTEVf VlA5XzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorKyNkZWZpbmUgQVZfUFJPRklMRV9W UDlfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisrI2RlZmluZSBBVl9QUk9GSUxFX1ZQ OV8yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKysjZGVmaW5lIEFWX1BST0ZJTEVfVlA5 XzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworKworKyNkZWZpbmUgQVZfUFJPRklMRV9I RVZDX01BSU4gICAgICAgICAgICAgICAgICAgICAgICAxCisrI2RlZmluZSBBVl9QUk9GSUxFX0hF VkNfTUFJTl8xMCAgICAgICAgICAgICAgICAgICAgIDIKKysjZGVmaW5lIEFWX1BST0ZJTEVfSEVW Q19NQUlOX1NUSUxMX1BJQ1RVUkUgICAgICAgICAgMworKyNkZWZpbmUgQVZfUFJPRklMRV9IRVZD X1JFWFQgICAgICAgICAgICAgICAgICAgICAgICA0CisrI2RlZmluZSBBVl9QUk9GSUxFX0hFVkNf TVVMVElWSUVXX01BSU4gICAgICAgICAgICAgIDYKKysjZGVmaW5lIEFWX1BST0ZJTEVfSEVWQ19T Q0MgICAgICAgICAgICAgICAgICAgICAgICAgOQorKworKyNkZWZpbmUgQVZfUFJPRklMRV9WVkNf TUFJTl8xMCAgICAgICAgICAgICAgICAgICAgICAxCisrI2RlZmluZSBBVl9QUk9GSUxFX1ZWQ19N QUlOXzEwXzQ0NCAgICAgICAgICAgICAgICAgMzMKKysKKysjZGVmaW5lIEFWX1BST0ZJTEVfQVYx X01BSU4gICAgICAgICAgICAgICAgICAgICAgICAgMAorKyNkZWZpbmUgQVZfUFJPRklMRV9BVjFf SElHSCAgICAgICAgICAgICAgICAgICAgICAgICAxCisrI2RlZmluZSBBVl9QUk9GSUxFX0FWMV9Q Uk9GRVNTSU9OQUwgICAgICAgICAgICAgICAgIDIKKysKKysjZGVmaW5lIEFWX1BST0ZJTEVfTUpQ RUdfSFVGRk1BTl9CQVNFTElORV9EQ1QgICAgICAgICAgICAweGMwCisrI2RlZmluZSBBVl9QUk9G SUxFX01KUEVHX0hVRkZNQU5fRVhURU5ERURfU0VRVUVOVElBTF9EQ1QgMHhjMQorKyNkZWZpbmUg QVZfUFJPRklMRV9NSlBFR19IVUZGTUFOX1BST0dSRVNTSVZFX0RDVCAgICAgICAgIDB4YzIKKysj ZGVmaW5lIEFWX1BST0ZJTEVfTUpQRUdfSFVGRk1BTl9MT1NTTEVTUyAgICAgICAgICAgICAgICAw eGMzCisrI2RlZmluZSBBVl9QUk9GSUxFX01KUEVHX0pQRUdfTFMgICAgICAgICAgICAgICAgICAg ICAgICAgMHhmNworKworKyNkZWZpbmUgQVZfUFJPRklMRV9TQkNfTVNCQyAgICAgICAgICAgICAg ICAgICAgICAgICAxCisrCisrI2RlZmluZSBBVl9QUk9GSUxFX1BST1JFU19QUk9YWSAgICAgMAor KyNkZWZpbmUgQVZfUFJPRklMRV9QUk9SRVNfTFQgICAgICAgIDEKKysjZGVmaW5lIEFWX1BST0ZJ TEVfUFJPUkVTX1NUQU5EQVJEICAyCisrI2RlZmluZSBBVl9QUk9GSUxFX1BST1JFU19IUSAgICAg ICAgMworKyNkZWZpbmUgQVZfUFJPRklMRV9QUk9SRVNfNDQ0NCAgICAgIDQKKysjZGVmaW5lIEFW X1BST0ZJTEVfUFJPUkVTX1hRICAgICAgICA1CisrCisrI2RlZmluZSBBVl9QUk9GSUxFX1BST1JF U19SQVcgICAgICAgMAorKyNkZWZpbmUgQVZfUFJPRklMRV9QUk9SRVNfUkFXX0hRICAgIDEKKysK KysjZGVmaW5lIEFWX1BST0ZJTEVfQVJJQl9QUk9GSUxFX0EgMAorKyNkZWZpbmUgQVZfUFJPRklM RV9BUklCX1BST0ZJTEVfQyAxCisrCisrI2RlZmluZSBBVl9QUk9GSUxFX0tMVkFfU1lOQyAgMAor KyNkZWZpbmUgQVZfUFJPRklMRV9LTFZBX0FTWU5DIDEKKysKKysjZGVmaW5lIEFWX1BST0ZJTEVf RVZDX0JBU0VMSU5FICAgICAgICAgICAgIDAKKysjZGVmaW5lIEFWX1BST0ZJTEVfRVZDX01BSU4g ICAgICAgICAgICAgICAgIDEKKysKKysjZGVmaW5lIEFWX1BST0ZJTEVfQVBWXzQyMl8xMCAgMzMK KysjZGVmaW5lIEFWX1BST0ZJTEVfQVBWXzQyMl8xMiAgNDQKKysjZGVmaW5lIEFWX1BST0ZJTEVf QVBWXzQ0NF8xMCAgNTUKKysjZGVmaW5lIEFWX1BST0ZJTEVfQVBWXzQ0NF8xMiAgNjYKKysjZGVm aW5lIEFWX1BST0ZJTEVfQVBWXzQ0NDRfMTAgNzcKKysjZGVmaW5lIEFWX1BST0ZJTEVfQVBWXzQ0 NDRfMTIgODgKKysjZGVmaW5lIEFWX1BST0ZJTEVfQVBWXzQwMF8xMCAgOTkKKysKKysKKysjZGVm aW5lIEFWX0xFVkVMX1VOS05PV04gICAgICAgICAgICAgICAgICAtOTkKKysKKytlbnVtIEFWRmll bGRPcmRlciB7CisrICAgIEFWX0ZJRUxEX1VOS05PV04sCisrICAgIEFWX0ZJRUxEX1BST0dSRVNT SVZFLAorKyAgICBBVl9GSUVMRF9UVCwgICAgICAgICAgLy8vPCBUb3AgY29kZWRfZmlyc3QsIHRv cCBkaXNwbGF5ZWQgZmlyc3QKKysgICAgQVZfRklFTERfQkIsICAgICAgICAgIC8vLzwgQm90dG9t IGNvZGVkIGZpcnN0LCBib3R0b20gZGlzcGxheWVkIGZpcnN0CisrICAgIEFWX0ZJRUxEX1RCLCAg ICAgICAgICAvLy88IFRvcCBjb2RlZCBmaXJzdCwgYm90dG9tIGRpc3BsYXllZCBmaXJzdAorKyAg ICBBVl9GSUVMRF9CVCwgICAgICAgICAgLy8vPCBCb3R0b20gY29kZWQgZmlyc3QsIHRvcCBkaXNw bGF5ZWQgZmlyc3QKKyt9OworKworKy8qKgorKyAqIEBpbmdyb3VwIGxhdmNfZGVjb2RpbmcKKysg Ki8KKytlbnVtIEFWRGlzY2FyZHsKKysgICAgLyogV2UgbGVhdmUgc29tZSBzcGFjZSBiZXR3ZWVu IHRoZW0gZm9yIGV4dGVuc2lvbnMgKGRyb3Agc29tZQorKyAgICAgKiBrZXlmcmFtZXMgZm9yIGlu dHJhLW9ubHkgb3IgZHJvcCBqdXN0IHNvbWUgYmlkaXIgZnJhbWVzKS4gKi8KKysgICAgQVZESVND QVJEX05PTkUgICAgPS0xNiwgLy8vPCBkaXNjYXJkIG5vdGhpbmcKKysgICAgQVZESVNDQVJEX0RF RkFVTFQgPSAgMCwgLy8vPCBkaXNjYXJkIHVzZWxlc3MgcGFja2V0cyBsaWtlIDAgc2l6ZSBwYWNr ZXRzIGluIGF2aQorKyAgICBBVkRJU0NBUkRfTk9OUkVGICA9ICA4LCAvLy88IGRpc2NhcmQgYWxs IG5vbiByZWZlcmVuY2UKKysgICAgQVZESVNDQVJEX0JJRElSICAgPSAxNiwgLy8vPCBkaXNjYXJk IGFsbCBiaWRpcmVjdGlvbmFsIGZyYW1lcworKyAgICBBVkRJU0NBUkRfTk9OSU5UUkE9IDI0LCAv Ly88IGRpc2NhcmQgYWxsIG5vbiBpbnRyYSBmcmFtZXMKKysgICAgQVZESVNDQVJEX05PTktFWSAg PSAzMiwgLy8vPCBkaXNjYXJkIGFsbCBmcmFtZXMgZXhjZXB0IGtleWZyYW1lcworKyAgICBBVkRJ U0NBUkRfQUxMICAgICA9IDQ4LCAvLy88IGRpc2NhcmQgYWxsCisrfTsKKysKKytlbnVtIEFWQXVk aW9TZXJ2aWNlVHlwZSB7CisrICAgIEFWX0FVRElPX1NFUlZJQ0VfVFlQRV9NQUlOICAgICAgICAg ICAgICA9IDAsCisrICAgIEFWX0FVRElPX1NFUlZJQ0VfVFlQRV9FRkZFQ1RTICAgICAgICAgICA9 IDEsCisrICAgIEFWX0FVRElPX1NFUlZJQ0VfVFlQRV9WSVNVQUxMWV9JTVBBSVJFRCA9IDIsCisr ICAgIEFWX0FVRElPX1NFUlZJQ0VfVFlQRV9IRUFSSU5HX0lNUEFJUkVEICA9IDMsCisrICAgIEFW X0FVRElPX1NFUlZJQ0VfVFlQRV9ESUFMT0dVRSAgICAgICAgICA9IDQsCisrICAgIEFWX0FVRElP X1NFUlZJQ0VfVFlQRV9DT01NRU5UQVJZICAgICAgICA9IDUsCisrICAgIEFWX0FVRElPX1NFUlZJ Q0VfVFlQRV9FTUVSR0VOQ1kgICAgICAgICA9IDYsCisrICAgIEFWX0FVRElPX1NFUlZJQ0VfVFlQ RV9WT0lDRV9PVkVSICAgICAgICA9IDcsCisrICAgIEFWX0FVRElPX1NFUlZJQ0VfVFlQRV9LQVJB T0tFICAgICAgICAgICA9IDgsCisrICAgIEFWX0FVRElPX1NFUlZJQ0VfVFlQRV9OQiAgICAgICAg ICAgICAgICAgICAsIC8vLzwgTm90IHBhcnQgb2YgQUJJCisrfTsKKysKKysvKioKKysgKiBQYW4g U2NhbiBhcmVhLgorKyAqIFRoaXMgc3BlY2lmaWVzIHRoZSBhcmVhIHdoaWNoIHNob3VsZCBiZSBk aXNwbGF5ZWQuCisrICogTm90ZSB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgc3VjaCBhcmVhcyBmb3Ig b25lIGZyYW1lLgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWUGFuU2NhbiB7CisrICAgIC8qKgor KyAgICAgKiBpZAorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4KKysgICAgICogLSBk ZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMuCisrICAgICAqLworKyAgICBpbnQgaWQ7CisrCisr ICAgIC8qKgorKyAgICAgKiB3aWR0aCBhbmQgaGVpZ2h0IGluIDEvMTYgcGVsCisrICAgICAqIC0g ZW5jb2Rpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKiAtIGRlY29kaW5nOiBTZXQgYnkgbGliYXZj b2RlYy4KKysgICAgICovCisrICAgIGludCB3aWR0aDsKKysgICAgaW50IGhlaWdodDsKKysKKysg ICAgLyoqCisrICAgICAqIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgaW4gMS8xNiBw ZWwgZm9yIHVwIHRvIDMgZmllbGRzL2ZyYW1lcworKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkg dXNlci4KKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMuCisrICAgICAqLwor KyAgICBpbnQxNl90IHBvc2l0aW9uWzNdWzJdOworK30gQVZQYW5TY2FuOworKworKy8qKgorKyAq IFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgYml0cmF0ZSBwcm9wZXJ0aWVzIG9mIGFuIGVu Y29kZWQgYml0c3RyZWFtLiBJdAorKyAqIHJvdWdobHkgY29ycmVzcG9uZHMgdG8gYSBzdWJzZXQg dGhlIFZCViBwYXJhbWV0ZXJzIGZvciBNUEVHLTIgb3IgSFJECisrICogcGFyYW1ldGVycyBmb3Ig SC4yNjQvSEVWQy4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVkNQQlByb3BlcnRpZXMgeworKyAg ICAvKioKKysgICAgICogTWF4aW11bSBiaXRyYXRlIG9mIHRoZSBzdHJlYW0sIGluIGJpdHMgcGVy IHNlY29uZC4KKysgICAgICogWmVybyBpZiB1bmtub3duIG9yIHVuc3BlY2lmaWVkLgorKyAgICAg Ki8KKysgICAgaW50NjRfdCBtYXhfYml0cmF0ZTsKKysgICAgLyoqCisrICAgICAqIE1pbmltdW0g Yml0cmF0ZSBvZiB0aGUgc3RyZWFtLCBpbiBiaXRzIHBlciBzZWNvbmQuCisrICAgICAqIFplcm8g aWYgdW5rbm93biBvciB1bnNwZWNpZmllZC4KKysgICAgICovCisrICAgIGludDY0X3QgbWluX2Jp dHJhdGU7CisrICAgIC8qKgorKyAgICAgKiBBdmVyYWdlIGJpdHJhdGUgb2YgdGhlIHN0cmVhbSwg aW4gYml0cyBwZXIgc2Vjb25kLgorKyAgICAgKiBaZXJvIGlmIHVua25vd24gb3IgdW5zcGVjaWZp ZWQuCisrICAgICAqLworKyAgICBpbnQ2NF90IGF2Z19iaXRyYXRlOworKworKyAgICAvKioKKysg ICAgICogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0byB3aGljaCB0aGUgcmF0ZWNvbnRyb2wgaXMg YXBwbGllZCwgaW4gYml0cy4KKysgICAgICogWmVybyBpZiB1bmtub3duIG9yIHVuc3BlY2lmaWVk LgorKyAgICAgKi8KKysgICAgaW50NjRfdCBidWZmZXJfc2l6ZTsKKysKKysgICAgLyoqCisrICAg ICAqIFRoZSBkZWxheSBiZXR3ZWVuIHRoZSB0aW1lIHRoZSBwYWNrZXQgdGhpcyBzdHJ1Y3R1cmUg aXMgYXNzb2NpYXRlZCB3aXRoCisrICAgICAqIGlzIHJlY2VpdmVkIGFuZCB0aGUgdGltZSB3aGVu IGl0IHNob3VsZCBiZSBkZWNvZGVkLCBpbiBwZXJpb2RzIG9mIGEgMjdNSHoKKysgICAgICogY2xv Y2suCisrICAgICAqCisrICAgICAqIFVJTlQ2NF9NQVggd2hlbiB1bmtub3duIG9yIHVuc3BlY2lm aWVkLgorKyAgICAgKi8KKysgICAgdWludDY0X3QgdmJ2X2RlbGF5OworK30gQVZDUEJQcm9wZXJ0 aWVzOworKworKy8qKgorKyAqIEFsbG9jYXRlIGEgQ1BCIHByb3BlcnRpZXMgc3RydWN0dXJlIGFu ZCBpbml0aWFsaXplIGl0cyBmaWVsZHMgdG8gZGVmYXVsdAorKyAqIHZhbHVlcy4KKysgKgorKyAq IEBwYXJhbSBzaXplIGlmIG5vbi1OVUxMLCB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGVkIHN0cnVj dCB3aWxsIGJlIHdyaXR0ZW4KKysgKiAgICAgICAgICAgICBoZXJlLiBUaGlzIGlzIHVzZWZ1bCBm b3IgZW1iZWRkaW5nIGl0IGluIHNpZGUgZGF0YS4KKysgKgorKyAqIEByZXR1cm4gdGhlIG5ld2x5 IGFsbG9jYXRlZCBzdHJ1Y3Qgb3IgTlVMTCBvbiBmYWlsdXJlCisrICovCisrQVZDUEJQcm9wZXJ0 aWVzICphdl9jcGJfcHJvcGVydGllc19hbGxvYyhzaXplX3QgKnNpemUpOworKworKy8qKgorKyAq IFRoaXMgc3RydWN0dXJlIHN1cHBsaWVzIGNvcnJlbGF0aW9uIGJldHdlZW4gYSBwYWNrZXQgdGlt ZXN0YW1wIGFuZCBhIHdhbGwgY2xvY2sKKysgKiBwcm9kdWN0aW9uIHRpbWUuIFRoZSBkZWZpbml0 aW9uIGZvbGxvd3MgdGhlIFByb2R1Y2VyIFJlZmVyZW5jZSBUaW1lICgncHJmdCcpCisrICogYXMg ZGVmaW5lZCBpbiBJU08vSUVDIDE0NDk2LTEyCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZQcm9k dWNlclJlZmVyZW5jZVRpbWUgeworKyAgICAvKioKKysgICAgICogQSBVVEMgdGltZXN0YW1wLCBp biBtaWNyb3NlY29uZHMsIHNpbmNlIFVuaXggZXBvY2ggKGUuZywgYXZfZ2V0dGltZSgpKS4KKysg ICAgICovCisrICAgIGludDY0X3Qgd2FsbGNsb2NrOworKyAgICBpbnQgZmxhZ3M7CisrfSBBVlBy b2R1Y2VyUmVmZXJlbmNlVGltZTsKKysKKysvKioKKysgKiBSVENQIFNSIChTZW5kZXIgUmVwb3J0 KSBpbmZvcm1hdGlvbgorKyAqCisrICogVGhlIHJlY2VpdmVkIHNlbmRlciByZXBvcnQgaW5mb3Jt YXRpb24gZm9yIGFuIFJUU1AKKysgKiBzdHJlYW0sIGV4cG9zZWQgYXMgQVZfUEtUX0RBVEFfUlRD UF9TUiBzaWRlIGRhdGEuCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZSVENQU2VuZGVyUmVwb3J0 IHsKKysgICAgdWludDMyX3Qgc3NyYzsgLy8vPCBTeW5jaHJvbml6YXRpb24gc291cmNlIGlkZW50 aWZpZXIKKysgICAgdWludDY0X3QgbnRwX3RpbWVzdGFtcDsgLy8vPCBOVFAgdGltZSB3aGVuIHRo ZSByZXBvcnQgd2FzIHNlbnQKKysgICAgdWludDMyX3QgcnRwX3RpbWVzdGFtcDsgLy8vPCBSVFAg dGltZSB3aGVuIHRoZSByZXBvcnQgd2FzIHNlbnQKKysgICAgdWludDMyX3Qgc2VuZGVyX25iX3Bh Y2tldHM7IC8vLzwgVG90YWwgbnVtYmVyIG9mIHBhY2tldHMgc2VudAorKyAgICB1aW50MzJfdCBz ZW5kZXJfbmJfYnl0ZXM7IC8vLzwgVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgKGV4Y2x1ZGlu ZyBoZWFkZXJzIG9yIHBhZGRpbmcpCisrfSBBVlJUQ1BTZW5kZXJSZXBvcnQ7CisrCisrLyoqCisr ICogRW5jb2RlIGV4dHJhZGF0YSBsZW5ndGggdG8gYSBidWZmZXIuIFVzZWQgYnkgeGlwaCBjb2Rl Y3MuCisrICoKKysgKiBAcGFyYW0gcyBidWZmZXIgdG8gd3JpdGUgdG87IG11c3QgYmUgYXQgbGVh c3QgKHYvMjU1KzEpIGJ5dGVzIGxvbmcKKysgKiBAcGFyYW0gdiBzaXplIG9mIGV4dHJhZGF0YSBp biBieXRlcworKyAqIEByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZl ci4KKysgKi8KKyt1bnNpZ25lZCBpbnQgYXZfeGlwaGxhY2luZyh1bnNpZ25lZCBjaGFyICpzLCB1 bnNpZ25lZCBpbnQgdik7CisrCisrI2VuZGlmIC8vIEFWQ09ERUNfREVGU19ICitkaWZmIC11cCBN dXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9s aWJhdmNvZGVjL3BhY2tldC5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsv bWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZjb2RlYy9wYWNrZXQuaAorLS0tIE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2 Y29kZWMvcGFja2V0LmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NDQzODAyMiArMDIw MAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZt cGVnL3Y5L2xpYmF2Y29kZWMvcGFja2V0LmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzQxMzkzNDAg KzAyMDAKK0BAIC0wLDAgKzEsOTUwIEBACisrLyoKKysgKiBBVlBhY2tldCBwdWJsaWMgQVBJCisr ICoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAq IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoK KysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysK KysjaWZuZGVmIEFWQ09ERUNfUEFDS0VUX0gKKysjZGVmaW5lIEFWQ09ERUNfUEFDS0VUX0gKKysK KysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorKworKyNpbmNsdWRl ICJsaWJhdnV0aWwvYXR0cmlidXRlcy5oIgorKyNpbmNsdWRlICJsaWJhdnV0aWwvYnVmZmVyLmgi CisrI2luY2x1ZGUgImxpYmF2dXRpbC9kaWN0LmgiCisrI2luY2x1ZGUgImxpYmF2dXRpbC9yYXRp b25hbC5oIgorKyNpbmNsdWRlICJsaWJhdnV0aWwvdmVyc2lvbi5oIgorKworKyNpbmNsdWRlICJs aWJhdmNvZGVjL3ZlcnNpb25fbWFqb3IuaCIKKysKKysvKioKKysgKiBAZGVmZ3JvdXAgbGF2Y19w YWNrZXRfc2lkZV9kYXRhIEFWUGFja2V0U2lkZURhdGEKKysgKgorKyAqIFR5cGVzIGFuZCBmdW5j dGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBBVlBhY2tldFNpZGVEYXRhLgorKyAqIEB7CisrICovCisr ZW51bSBBVlBhY2tldFNpZGVEYXRhVHlwZSB7CisrICAgIC8qKgorKyAgICAgKiBBbiBBVl9QS1Rf REFUQV9QQUxFVFRFIHNpZGUgZGF0YSBwYWNrZXQgY29udGFpbnMgZXhhY3RseSBBVlBBTEVUVEVf U0laRQorKyAgICAgKiBieXRlcyB3b3J0aCBvZiBwYWxldHRlLiBUaGlzIHNpZGUgZGF0YSBzaWdu YWxzIHRoYXQgYSBuZXcgcGFsZXR0ZSBpcworKyAgICAgKiBwcmVzZW50LgorKyAgICAgKi8KKysg ICAgQVZfUEtUX0RBVEFfUEFMRVRURSwKKysKKysgICAgLyoqCisrICAgICAqIFRoZSBBVl9QS1Rf REFUQV9ORVdfRVhUUkFEQVRBIGlzIHVzZWQgdG8gbm90aWZ5IHRoZSBjb2RlYyBvciB0aGUgZm9y bWF0CisrICAgICAqIHRoYXQgdGhlIGV4dHJhZGF0YSBidWZmZXIgd2FzIGNoYW5nZWQgYW5kIHRo ZSByZWNlaXZpbmcgc2lkZSBzaG91bGQKKysgICAgICogYWN0IHVwb24gaXQgYXBwcm9wcmlhdGVs eS4gVGhlIG5ldyBleHRyYWRhdGEgaXMgZW1iZWRkZWQgaW4gdGhlIHNpZGUKKysgICAgICogZGF0 YSBidWZmZXIgYW5kIHNob3VsZCBiZSBpbW1lZGlhdGVseSB1c2VkIGZvciBwcm9jZXNzaW5nIHRo ZSBjdXJyZW50CisrICAgICAqIGZyYW1lIG9yIHBhY2tldC4KKysgICAgICovCisrICAgIEFWX1BL VF9EQVRBX05FV19FWFRSQURBVEEsCisrCisrICAgIC8qKgorKyAgICAgKiBBbiBBVl9QS1RfREFU QV9QQVJBTV9DSEFOR0Ugc2lkZSBkYXRhIHBhY2tldCBpcyBsYWlkIG91dCBhcyBmb2xsb3dzOgor KyAgICAgKiBAY29kZQorKyAgICAgKiB1MzJsZSBwYXJhbV9mbGFncworKyAgICAgKiBpZiAocGFy YW1fZmxhZ3MgJiBBVl9TSURFX0RBVEFfUEFSQU1fQ0hBTkdFX1NBTVBMRV9SQVRFKQorKyAgICAg KiAgICAgczMybGUgc2FtcGxlX3JhdGUKKysgICAgICogaWYgKHBhcmFtX2ZsYWdzICYgQVZfU0lE RV9EQVRBX1BBUkFNX0NIQU5HRV9ESU1FTlNJT05TKQorKyAgICAgKiAgICAgczMybGUgd2lkdGgK KysgICAgICogICAgIHMzMmxlIGhlaWdodAorKyAgICAgKiBAZW5kY29kZQorKyAgICAgKi8KKysg ICAgQVZfUEtUX0RBVEFfUEFSQU1fQ0hBTkdFLAorKworKyAgICAvKioKKysgICAgICogQW4gQVZf UEtUX0RBVEFfSDI2M19NQl9JTkZPIHNpZGUgZGF0YSBwYWNrZXQgY29udGFpbnMgYSBudW1iZXIg b2YKKysgICAgICogc3RydWN0dXJlcyB3aXRoIGluZm8gYWJvdXQgbWFjcm9ibG9ja3MgcmVsZXZh bnQgdG8gc3BsaXR0aW5nIHRoZQorKyAgICAgKiBwYWNrZXQgaW50byBzbWFsbGVyIHBhY2tldHMg b24gbWFjcm9ibG9jayBlZGdlcyAoZS5nLiBhcyBmb3IgUkZDIDIxOTApLgorKyAgICAgKiBUaGF0 IGlzLCBpdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBjb250YWluIGluZm8gYWJvdXQgYWxsIG1hY3Jv YmxvY2tzLAorKyAgICAgKiBhcyBsb25nIGFzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIG1hY3JvYmxv Y2tzIGluIHRoZSBpbmZvIGlzIHNtYWxsZXIKKysgICAgICogdGhhbiB0aGUgdGFyZ2V0IHBheWxv YWQgc2l6ZS4KKysgICAgICogRWFjaCBNQiBpbmZvIHN0cnVjdHVyZSBpcyAxMiBieXRlcywgYW5k IGlzIGxhaWQgb3V0IGFzIGZvbGxvd3M6CisrICAgICAqIEBjb2RlCisrICAgICAqIHUzMmxlIGJp dCBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhY2tldAorKyAgICAgKiB1OCAgICBjdXJy ZW50IHF1YW50aXplciBhdCB0aGUgc3RhcnQgb2YgdGhlIG1hY3JvYmxvY2sKKysgICAgICogdTgg ICAgR09CIG51bWJlcgorKyAgICAgKiB1MTZsZSBtYWNyb2Jsb2NrIGFkZHJlc3Mgd2l0aGluIHRo ZSBHT0IKKysgICAgICogdTggICAgaG9yaXpvbnRhbCBNViBwcmVkaWN0b3IKKysgICAgICogdTgg ICAgdmVydGljYWwgTVYgcHJlZGljdG9yCisrICAgICAqIHU4ICAgIGhvcml6b250YWwgTVYgcHJl ZGljdG9yIGZvciBibG9jayBudW1iZXIgMworKyAgICAgKiB1OCAgICB2ZXJ0aWNhbCBNViBwcmVk aWN0b3IgZm9yIGJsb2NrIG51bWJlciAzCisrICAgICAqIEBlbmRjb2RlCisrICAgICAqLworKyAg ICBBVl9QS1RfREFUQV9IMjYzX01CX0lORk8sCisrCisrICAgIC8qKgorKyAgICAgKiBUaGlzIHNp ZGUgZGF0YSBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGFuIGF1ZGlvIHN0cmVhbSBhbmQgY29u dGFpbnMKKysgICAgICogUmVwbGF5R2FpbiBpbmZvcm1hdGlvbiBpbiBmb3JtIG9mIHRoZSBBVlJl cGxheUdhaW4gc3RydWN0LgorKyAgICAgKi8KKysgICAgQVZfUEtUX0RBVEFfUkVQTEFZR0FJTiwK KysKKysgICAgLyoqCisrICAgICAqIFRoaXMgc2lkZSBkYXRhIGNvbnRhaW5zIGEgM3gzIHRyYW5z Zm9ybWF0aW9uIG1hdHJpeCBkZXNjcmliaW5nIGFuIGFmZmluZQorKyAgICAgKiB0cmFuc2Zvcm1h dGlvbiB0aGF0IG5lZWRzIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGRlY29kZWQgdmlkZW8gZnJhbWVz IGZvcgorKyAgICAgKiBjb3JyZWN0IHByZXNlbnRhdGlvbi4KKysgICAgICoKKysgICAgICogU2Vl IGxpYmF2dXRpbC9kaXNwbGF5LmggZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGRh dGEuCisrICAgICAqLworKyAgICBBVl9QS1RfREFUQV9ESVNQTEFZTUFUUklYLAorKworKyAgICAv KioKKysgICAgICogVGhpcyBzaWRlIGRhdGEgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCBhIHZp ZGVvIHN0cmVhbSBhbmQgY29udGFpbnMKKysgICAgICogU3RlcmVvc2NvcGljIDNEIGluZm9ybWF0 aW9uIGluIGZvcm0gb2YgdGhlIEFWU3RlcmVvM0Qgc3RydWN0LgorKyAgICAgKi8KKysgICAgQVZf UEtUX0RBVEFfU1RFUkVPM0QsCisrCisrICAgIC8qKgorKyAgICAgKiBUaGlzIHNpZGUgZGF0YSBz aG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGFuIGF1ZGlvIHN0cmVhbSBhbmQgY29ycmVzcG9uZHMK KysgICAgICogdG8gZW51bSBBVkF1ZGlvU2VydmljZVR5cGUuCisrICAgICAqLworKyAgICBBVl9Q S1RfREFUQV9BVURJT19TRVJWSUNFX1RZUEUsCisrCisrICAgIC8qKgorKyAgICAgKiBUaGlzIHNp ZGUgZGF0YSBjb250YWlucyBxdWFsaXR5IHJlbGF0ZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgZW5j b2Rlci4KKysgICAgICogQGNvZGUKKysgICAgICogdTMybGUgcXVhbGl0eSBmYWN0b3Igb2YgdGhl IGNvbXByZXNzZWQgZnJhbWUuIEFsbG93ZWQgcmFuZ2UgaXMgYmV0d2VlbiAxIChnb29kKSBhbmQg RkZfTEFNQkRBX01BWCAoYmFkKS4KKysgICAgICogdTggICAgcGljdHVyZSB0eXBlCisrICAgICAq IHU4ICAgIGVycm9yIGNvdW50CisrICAgICAqIHUxNiAgIHJlc2VydmVkCisrICAgICAqIHU2NGxl W2Vycm9yIGNvdW50XSBzdW0gb2Ygc3F1YXJlZCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGVuY29kZXIg aW4gYW5kIG91dHB1dAorKyAgICAgKiBAZW5kY29kZQorKyAgICAgKi8KKysgICAgQVZfUEtUX0RB VEFfUVVBTElUWV9TVEFUUywKKysKKysgICAgLyoqCisrICAgICAqIFRoaXMgc2lkZSBkYXRhIGNv bnRhaW5zIGFuIGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBzdHJlYW0gaW5kZXgKKysg ICAgICogb2YgYSAiZmFsbGJhY2siIHRyYWNrLiAgQSBmYWxsYmFjayB0cmFjayBpbmRpY2F0ZXMg YW4gYWx0ZXJuYXRlCisrICAgICAqIHRyYWNrIHRvIHVzZSB3aGVuIHRoZSBjdXJyZW50IHRyYWNr IGNhbiBub3QgYmUgZGVjb2RlZCBmb3Igc29tZSByZWFzb24uCisrICAgICAqIGUuZy4gbm8gZGVj b2RlciBhdmFpbGFibGUgZm9yIGNvZGVjLgorKyAgICAgKi8KKysgICAgQVZfUEtUX0RBVEFfRkFM TEJBQ0tfVFJBQ0ssCisrCisrICAgIC8qKgorKyAgICAgKiBUaGlzIHNpZGUgZGF0YSBjb3JyZXNw b25kcyB0byB0aGUgQVZDUEJQcm9wZXJ0aWVzIHN0cnVjdC4KKysgICAgICovCisrICAgIEFWX1BL VF9EQVRBX0NQQl9QUk9QRVJUSUVTLAorKworKyAgICAvKioKKysgICAgICogUmVjb21tZW5kcyBz a2lwcGluZyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBzYW1wbGVzCisrICAgICAqIEBjb2RlCisr ICAgICAqIHUzMmxlIG51bWJlciBvZiBzYW1wbGVzIHRvIHNraXAgZnJvbSBzdGFydCBvZiB0aGlz IHBhY2tldAorKyAgICAgKiB1MzJsZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBza2lwIGZyb20gZW5k IG9mIHRoaXMgcGFja2V0CisrICAgICAqIHU4ICAgIHJlYXNvbiBmb3Igc3RhcnQgc2tpcAorKyAg ICAgKiB1OCAgICByZWFzb24gZm9yIGVuZCAgIHNraXAgKDA9cGFkZGluZyBzaWxlbmNlLCAxPWNv bnZlcmdlbmNlKQorKyAgICAgKiBAZW5kY29kZQorKyAgICAgKi8KKysgICAgQVZfUEtUX0RBVEFf U0tJUF9TQU1QTEVTLAorKworKyAgICAvKioKKysgICAgICogQW4gQVZfUEtUX0RBVEFfSlBfRFVB TE1PTk8gc2lkZSBkYXRhIHBhY2tldCBpbmRpY2F0ZXMgdGhhdAorKyAgICAgKiB0aGUgcGFja2V0 IG1heSBjb250YWluICJkdWFsIG1vbm8iIGF1ZGlvIHNwZWNpZmljIHRvIEphcGFuZXNlIERUVgor KyAgICAgKiBhbmQgaWYgaXQgaXMgdHJ1ZSwgcmVjb21tZW5kcyBvbmx5IHRoZSBzZWxlY3RlZCBj aGFubmVsIHRvIGJlIHVzZWQuCisrICAgICAqIEBjb2RlCisrICAgICAqIHU4ICAgIHNlbGVjdGVk IGNoYW5uZWxzICgwPW1haW4vbGVmdCwgMT1zdWIvcmlnaHQsIDI9Ym90aCkKKysgICAgICogQGVu ZGNvZGUKKysgICAgICovCisrICAgIEFWX1BLVF9EQVRBX0pQX0RVQUxNT05PLAorKworKyAgICAv KioKKysgICAgICogQSBsaXN0IG9mIHplcm8gdGVybWluYXRlZCBrZXkvdmFsdWUgc3RyaW5ncy4g VGhlcmUgaXMgbm8gZW5kIG1hcmtlciBmb3IKKysgICAgICogdGhlIGxpc3QsIHNvIGl0IGlzIHJl cXVpcmVkIHRvIHJlbHkgb24gdGhlIHNpZGUgZGF0YSBzaXplIHRvIHN0b3AuCisrICAgICAqLwor KyAgICBBVl9QS1RfREFUQV9TVFJJTkdTX01FVEFEQVRBLAorKworKyAgICAvKioKKysgICAgICog U3VidGl0bGUgZXZlbnQgcG9zaXRpb24KKysgICAgICogQGNvZGUKKysgICAgICogdTMybGUgeDEK KysgICAgICogdTMybGUgeTEKKysgICAgICogdTMybGUgeDIKKysgICAgICogdTMybGUgeTIKKysg ICAgICogQGVuZGNvZGUKKysgICAgICovCisrICAgIEFWX1BLVF9EQVRBX1NVQlRJVExFX1BPU0lU SU9OLAorKworKyAgICAvKioKKysgICAgICogRGF0YSBmb3VuZCBpbiBCbG9ja0FkZGl0aW9uYWwg ZWxlbWVudCBvZiBtYXRyb3NrYSBjb250YWluZXIuIFRoZXJlIGlzCisrICAgICAqIG5vIGVuZCBt YXJrZXIgZm9yIHRoZSBkYXRhLCBzbyBpdCBpcyByZXF1aXJlZCB0byByZWx5IG9uIHRoZSBzaWRl IGRhdGEKKysgICAgICogc2l6ZSB0byByZWNvZ25pemUgdGhlIGVuZC4gOCBieXRlIGlkIChhcyBm b3VuZCBpbiBCbG9ja0FkZElkKSBmb2xsb3dlZAorKyAgICAgKiBieSBkYXRhLgorKyAgICAgKi8K KysgICAgQVZfUEtUX0RBVEFfTUFUUk9TS0FfQkxPQ0tBRERJVElPTkFMLAorKworKyAgICAvKioK KysgICAgICogVGhlIG9wdGlvbmFsIGZpcnN0IGlkZW50aWZpZXIgbGluZSBvZiBhIFdlYlZUVCBj dWUuCisrICAgICAqLworKyAgICBBVl9QS1RfREFUQV9XRUJWVFRfSURFTlRJRklFUiwKKysKKysg ICAgLyoqCisrICAgICAqIFRoZSBvcHRpb25hbCBzZXR0aW5ncyAocmVuZGVyaW5nIGluc3RydWN0 aW9ucykgdGhhdCBpbW1lZGlhdGVseQorKyAgICAgKiBmb2xsb3cgdGhlIHRpbWVzdGFtcCBzcGVj aWZpZXIgb2YgYSBXZWJWVFQgY3VlLgorKyAgICAgKi8KKysgICAgQVZfUEtUX0RBVEFfV0VCVlRU X1NFVFRJTkdTLAorKworKyAgICAvKioKKysgICAgICogQSBsaXN0IG9mIHplcm8gdGVybWluYXRl ZCBrZXkvdmFsdWUgc3RyaW5ncy4gVGhlcmUgaXMgbm8gZW5kIG1hcmtlciBmb3IKKysgICAgICog dGhlIGxpc3QsIHNvIGl0IGlzIHJlcXVpcmVkIHRvIHJlbHkgb24gdGhlIHNpZGUgZGF0YSBzaXpl IHRvIHN0b3AuIFRoaXMKKysgICAgICogc2lkZSBkYXRhIGluY2x1ZGVzIHVwZGF0ZWQgbWV0YWRh dGEgd2hpY2ggYXBwZWFyZWQgaW4gdGhlIHN0cmVhbS4KKysgICAgICovCisrICAgIEFWX1BLVF9E QVRBX01FVEFEQVRBX1VQREFURSwKKysKKysgICAgLyoqCisrICAgICAqIE1QRUdUUyBzdHJlYW0g SUQgYXMgdWludDhfdCwgdGhpcyBpcyByZXF1aXJlZCB0byBwYXNzIHRoZSBzdHJlYW0gSUQKKysg ICAgICogaW5mb3JtYXRpb24gZnJvbSB0aGUgZGVtdXhlciB0byB0aGUgY29ycmVzcG9uZGluZyBt dXhlci4KKysgICAgICovCisrICAgIEFWX1BLVF9EQVRBX01QRUdUU19TVFJFQU1fSUQsCisrCisr ICAgIC8qKgorKyAgICAgKiBNYXN0ZXJpbmcgZGlzcGxheSBtZXRhZGF0YSAoYmFzZWQgb24gU01Q VEUtMjA4NjoyMDE0KS4gVGhpcyBtZXRhZGF0YQorKyAgICAgKiBzaG91bGQgYmUgYXNzb2NpYXRl ZCB3aXRoIGEgdmlkZW8gc3RyZWFtIGFuZCBjb250YWlucyBkYXRhIGluIHRoZSBmb3JtCisrICAg ICAqIG9mIHRoZSBBVk1hc3RlcmluZ0Rpc3BsYXlNZXRhZGF0YSBzdHJ1Y3QuCisrICAgICAqLwor KyAgICBBVl9QS1RfREFUQV9NQVNURVJJTkdfRElTUExBWV9NRVRBREFUQSwKKysKKysgICAgLyoq CisrICAgICAqIFRoaXMgc2lkZSBkYXRhIHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGggYSB2aWRl byBzdHJlYW0gYW5kIGNvcnJlc3BvbmRzCisrICAgICAqIHRvIHRoZSBBVlNwaGVyaWNhbE1hcHBp bmcgc3RydWN0dXJlLgorKyAgICAgKi8KKysgICAgQVZfUEtUX0RBVEFfU1BIRVJJQ0FMLAorKwor KyAgICAvKioKKysgICAgICogQ29udGVudCBsaWdodCBsZXZlbCAoYmFzZWQgb24gQ1RBLTg2MS4z KS4gVGhpcyBtZXRhZGF0YSBzaG91bGQgYmUKKysgICAgICogYXNzb2NpYXRlZCB3aXRoIGEgdmlk ZW8gc3RyZWFtIGFuZCBjb250YWlucyBkYXRhIGluIHRoZSBmb3JtIG9mIHRoZQorKyAgICAgKiBB VkNvbnRlbnRMaWdodE1ldGFkYXRhIHN0cnVjdC4KKysgICAgICovCisrICAgIEFWX1BLVF9EQVRB X0NPTlRFTlRfTElHSFRfTEVWRUwsCisrCisrICAgIC8qKgorKyAgICAgKiBBVFNDIEE1MyBQYXJ0 IDQgQ2xvc2VkIENhcHRpb25zLiBUaGlzIG1ldGFkYXRhIHNob3VsZCBiZSBhc3NvY2lhdGVkIHdp dGgKKysgICAgICogYSB2aWRlbyBzdHJlYW0uIEE1MyBDQyBiaXRzdHJlYW0gaXMgc3RvcmVkIGFz IHVpbnQ4X3QgaW4gQVZQYWNrZXRTaWRlRGF0YS5kYXRhLgorKyAgICAgKiBUaGUgbnVtYmVyIG9m IGJ5dGVzIG9mIENDIGRhdGEgaXMgQVZQYWNrZXRTaWRlRGF0YS5zaXplLgorKyAgICAgKi8KKysg ICAgQVZfUEtUX0RBVEFfQTUzX0NDLAorKworKyAgICAvKioKKysgICAgICogVGhpcyBzaWRlIGRh dGEgaXMgZW5jcnlwdGlvbiBpbml0aWFsaXphdGlvbiBkYXRhLgorKyAgICAgKiBUaGUgZm9ybWF0 IGlzIG5vdCBwYXJ0IG9mIEFCSSwgdXNlIGF2X2VuY3J5cHRpb25faW5pdF9pbmZvXyogbWV0aG9k cyB0bworKyAgICAgKiBhY2Nlc3MuCisrICAgICAqLworKyAgICBBVl9QS1RfREFUQV9FTkNSWVBU SU9OX0lOSVRfSU5GTywKKysKKysgICAgLyoqCisrICAgICAqIFRoaXMgc2lkZSBkYXRhIGNvbnRh aW5zIGVuY3J5cHRpb24gaW5mbyBmb3IgaG93IHRvIGRlY3J5cHQgdGhlIHBhY2tldC4KKysgICAg ICogVGhlIGZvcm1hdCBpcyBub3QgcGFydCBvZiBBQkksIHVzZSBhdl9lbmNyeXB0aW9uX2luZm9f KiBtZXRob2RzIHRvIGFjY2Vzcy4KKysgICAgICovCisrICAgIEFWX1BLVF9EQVRBX0VOQ1JZUFRJ T05fSU5GTywKKysKKysgICAgLyoqCisrICAgICAqIEFjdGl2ZSBGb3JtYXQgRGVzY3JpcHRpb24g ZGF0YSBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIGJ5dGUgYXMgc3BlY2lmaWVkCisrICAgICAqIGlu IEVUU0kgVFMgMTAxIDE1NCB1c2luZyBBVkFjdGl2ZUZvcm1hdERlc2NyaXB0aW9uIGVudW0uCisr ICAgICAqLworKyAgICBBVl9QS1RfREFUQV9BRkQsCisrCisrICAgIC8qKgorKyAgICAgKiBQcm9k dWNlciBSZWZlcmVuY2UgVGltZSBkYXRhIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEFWUHJvZHVjZXJS ZWZlcmVuY2VUaW1lIHN0cnVjdCwKKysgICAgICogdXN1YWxseSBleHBvcnRlZCBieSBzb21lIGVu Y29kZXJzIChvbiBkZW1hbmQgdGhyb3VnaCB0aGUgcHJmdCBmbGFnIHNldCBpbiB0aGUKKysgICAg ICogQVZDb2RlY0NvbnRleHQgZXhwb3J0X3NpZGVfZGF0YSBmaWVsZCkuCisrICAgICAqLworKyAg ICBBVl9QS1RfREFUQV9QUkZULAorKworKyAgICAvKioKKysgICAgICogSUNDIHByb2ZpbGUgZGF0 YSBjb25zaXN0aW5nIG9mIGFuIG9wYXF1ZSBvY3RldCBidWZmZXIgZm9sbG93aW5nIHRoZQorKyAg ICAgKiBmb3JtYXQgZGVzY3JpYmVkIGJ5IElTTyAxNTA3Ni0xLgorKyAgICAgKi8KKysgICAgQVZf UEtUX0RBVEFfSUNDX1BST0ZJTEUsCisrCisrICAgIC8qKgorKyAgICAgKiBET1ZJIGNvbmZpZ3Vy YXRpb24KKysgICAgICogcmVmOgorKyAgICAgKiBkb2xieS12aXNpb24tYml0c3RyZWFtcy13aXRo aW4tdGhlLWlzby1iYXNlLW1lZGlhLWZpbGUtZm9ybWF0LXYyLjEuMiwgc2VjdGlvbiAyLjIKKysg ICAgICogZG9sYnktdmlzaW9uLWJpdHN0cmVhbXMtaW4tbXBlZy0yLXRyYW5zcG9ydC1zdHJlYW0t bXVsdGlwbGV4LXYxLjIsIHNlY3Rpb24gMy4zCisrICAgICAqIFRhZ3MgYXJlIHN0b3JlZCBpbiBz dHJ1Y3QgQVZET1ZJRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQuCisrICAgICAqLworKyAgICBB Vl9QS1RfREFUQV9ET1ZJX0NPTkYsCisrCisrICAgIC8qKgorKyAgICAgKiBUaW1lY29kZSB3aGlj aCBjb25mb3JtcyB0byBTTVBURSBTVCAxMi0xOjIwMTQuIFRoZSBkYXRhIGlzIGFuIGFycmF5IG9m IDQgdWludDMyX3QKKysgICAgICogd2hlcmUgdGhlIGZpcnN0IHVpbnQzMl90IGRlc2NyaWJlcyBo b3cgbWFueSAoMS0zKSBvZiB0aGUgb3RoZXIgdGltZWNvZGVzIGFyZSB1c2VkLgorKyAgICAgKiBU aGUgdGltZWNvZGUgZm9ybWF0IGlzIGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBh dl90aW1lY29kZV9nZXRfc21wdGVfZnJvbV9mcmFtZW51bSgpCisrICAgICAqIGZ1bmN0aW9uIGlu IGxpYmF2dXRpbC90aW1lY29kZS5oLgorKyAgICAgKi8KKysgICAgQVZfUEtUX0RBVEFfUzEyTV9U SU1FQ09ERSwKKysKKysgICAgLyoqCisrICAgICAqIEhEUjEwKyBkeW5hbWljIG1ldGFkYXRhIGFz c29jaWF0ZWQgd2l0aCBhIHZpZGVvIGZyYW1lLiBUaGUgbWV0YWRhdGEgaXMgaW4KKysgICAgICog dGhlIGZvcm0gb2YgdGhlIEFWRHluYW1pY0hEUlBsdXMgc3RydWN0IGFuZCBjb250YWlucworKyAg ICAgKiBpbmZvcm1hdGlvbiBmb3IgY29sb3Igdm9sdW1lIHRyYW5zZm9ybSAtIGFwcGxpY2F0aW9u IDQgb2YKKysgICAgICogU01QVEUgMjA5NC00MDoyMDE2IHN0YW5kYXJkLgorKyAgICAgKi8KKysg ICAgQVZfUEtUX0RBVEFfRFlOQU1JQ19IRFIxMF9QTFVTLAorKworKyAgICAvKioKKysgICAgICog SUFNRiBNaXggR2FpbiBQYXJhbWV0ZXIgRGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGF1ZGlvIGZy YW1lLiBUaGlzIG1ldGFkYXRhCisrICAgICAqIGlzIGluIHRoZSBmb3JtIG9mIHRoZSBBVklBTUZQ YXJhbURlZmluaXRpb24gc3RydWN0IGFuZCBjb250YWlucyBpbmZvcm1hdGlvbgorKyAgICAgKiBk ZWZpbmVkIGluIHNlY3Rpb25zIDMuNi4xIGFuZCAzLjguMSBvZiB0aGUgSW1tZXJzaXZlIEF1ZGlv IE1vZGVsIGFuZAorKyAgICAgKiBGb3JtYXRzIHN0YW5kYXJkLgorKyAgICAgKi8KKysgICAgQVZf UEtUX0RBVEFfSUFNRl9NSVhfR0FJTl9QQVJBTSwKKysKKysgICAgLyoqCisrICAgICAqIElBTUYg RGVtaXhpbmcgSW5mbyBQYXJhbWV0ZXIgRGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGF1ZGlvIGZy YW1lLiBUaGlzCisrICAgICAqIG1ldGFkYXRhIGlzIGluIHRoZSBmb3JtIG9mIHRoZSBBVklBTUZQ YXJhbURlZmluaXRpb24gc3RydWN0IGFuZCBjb250YWlucworKyAgICAgKiBpbmZvcm1hdGlvbiBk ZWZpbmVkIGluIHNlY3Rpb25zIDMuNi4xIGFuZCAzLjguMiBvZiB0aGUgSW1tZXJzaXZlIEF1ZGlv IE1vZGVsCisrICAgICAqIGFuZCBGb3JtYXRzIHN0YW5kYXJkLgorKyAgICAgKi8KKysgICAgQVZf UEtUX0RBVEFfSUFNRl9ERU1JWElOR19JTkZPX1BBUkFNLAorKworKyAgICAvKioKKysgICAgICog SUFNRiBSZWNvbiBHYWluIEluZm8gUGFyYW1ldGVyIERhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBh dWRpbyBmcmFtZS4gVGhpcworKyAgICAgKiBtZXRhZGF0YSBpcyBpbiB0aGUgZm9ybSBvZiB0aGUg QVZJQU1GUGFyYW1EZWZpbml0aW9uIHN0cnVjdCBhbmQgY29udGFpbnMKKysgICAgICogaW5mb3Jt YXRpb24gZGVmaW5lZCBpbiBzZWN0aW9ucyAzLjYuMSBhbmQgMy44LjMgb2YgdGhlIEltbWVyc2l2 ZSBBdWRpbyBNb2RlbAorKyAgICAgKiBhbmQgRm9ybWF0cyBzdGFuZGFyZC4KKysgICAgICovCisr ICAgIEFWX1BLVF9EQVRBX0lBTUZfUkVDT05fR0FJTl9JTkZPX1BBUkFNLAorKworKyAgICAvKioK KysgICAgICogQW1iaWVudCB2aWV3aW5nIGVudmlyb25tZW50IG1ldGFkYXRhLCBhcyBkZWZpbmVk IGJ5IEguMjc0LiBUaGlzIG1ldGFkYXRhCisrICAgICAqIHNob3VsZCBiZSBhc3NvY2lhdGVkIHdp dGggYSB2aWRlbyBzdHJlYW0gYW5kIGNvbnRhaW5zIGRhdGEgaW4gdGhlIGZvcm0KKysgICAgICog b2YgdGhlIEFWQW1iaWVudFZpZXdpbmdFbnZpcm9ubWVudCBzdHJ1Y3QuCisrICAgICovCisrICAg IEFWX1BLVF9EQVRBX0FNQklFTlRfVklFV0lOR19FTlZJUk9OTUVOVCwKKysKKysgICAgLyoqCisr ICAgICAqIFRoZSBudW1iZXIgb2YgcGl4ZWxzIHRvIGRpc2NhcmQgZnJvbSB0aGUgdG9wL2JvdHRv bS9sZWZ0L3JpZ2h0IGJvcmRlciBvZiB0aGUKKysgICAgICogZGVjb2RlZCBmcmFtZSB0byBvYnRh aW4gdGhlIHN1Yi1yZWN0YW5nbGUgaW50ZW5kZWQgZm9yIHByZXNlbnRhdGlvbi4KKysgICAgICoK KysgICAgICogQGNvZGUKKysgICAgICogdTMybGUgY3JvcF90b3AKKysgICAgICogdTMybGUgY3Jv cF9ib3R0b20KKysgICAgICogdTMybGUgY3JvcF9sZWZ0CisrICAgICAqIHUzMmxlIGNyb3Bfcmln aHQKKysgICAgICogQGVuZGNvZGUKKysgICAgICovCisrICAgIEFWX1BLVF9EQVRBX0ZSQU1FX0NS T1BQSU5HLAorKworKyAgICAvKioKKysgICAgICogUmF3IExDRVZDIHBheWxvYWQgZGF0YSwgYXMg YSB1aW50OF90IGFycmF5LCB3aXRoIE5BTCBlbXVsYXRpb24KKysgICAgICogYnl0ZXMgaW50YWN0 LgorKyAgICAgKi8KKysgICAgQVZfUEtUX0RBVEFfTENFVkMsCisrCisrICAgIC8qKgorKyAgICAg KiBUaGlzIHNpZGUgZGF0YSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVmZXJlbmNl IGRpc3BsYXkgd2lkdGgocykKKysgICAgICogYW5kIHJlZmVyZW5jZSB2aWV3aW5nIGRpc3RhbmNl KHMpIGFzIHdlbGwgYXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisrICAgICAqIGNvcnJlc3BvbmRp bmcgcmVmZXJlbmNlIHN0ZXJlbyBwYWlyKHMpLCBpLmUuLCB0aGUgcGFpcihzKSBvZiB2aWV3cyB0 byBiZQorKyAgICAgKiBkaXNwbGF5ZWQgZm9yIHRoZSB2aWV3ZXIncyBsZWZ0IGFuZCByaWdodCBl eWVzIG9uIHRoZSByZWZlcmVuY2UgZGlzcGxheQorKyAgICAgKiBhdCB0aGUgcmVmZXJlbmNlIHZp ZXdpbmcgZGlzdGFuY2UuCisrICAgICAqIFRoZSBwYXlsb2FkIGlzIHRoZSBBVjNEUmVmZXJlbmNl RGlzcGxheXNJbmZvIHN0cnVjdCBkZWZpbmVkIGluCisrICAgICAqIGxpYmF2dXRpbC90ZHJkaS5o LgorKyAgICAgKi8KKysgICAgQVZfUEtUX0RBVEFfM0RfUkVGRVJFTkNFX0RJU1BMQVlTLAorKwor KyAgICAvKioKKysgICAgICogQ29udGFpbnMgdGhlIGxhc3QgcmVjZWl2ZWQgUlRDUCBTUiAoU2Vu ZGVyIFJlcG9ydCkgaW5mb3JtYXRpb24KKysgICAgICogaW4gdGhlIGZvcm0gb2YgdGhlIEFWUlRD UFNlbmRlclJlcG9ydCBzdHJ1Y3QuCisrICAgICAqLworKyAgICBBVl9QS1RfREFUQV9SVENQX1NS LAorKworKyAgICAvKioKKysgICAgICogRXh0ZW5zaWJsZSBpbWFnZSBmaWxlIGZvcm1hdCBtZXRh ZGF0YS4gVGhlIHBheWxvYWQgaXMgYSBidWZmZXIgY29udGFpbmluZworKyAgICAgKiBFWElGIG1l dGFkYXRhLCBzdGFydGluZyB3aXRoIGVpdGhlciA0OSA0OSAyYSAwMCwgb3IgNGQgNGQgMDAgMmEu CisrICAgICAqLworKyAgICAgQVZfUEtUX0RBVEFfRVhJRiwKKysKKysgICAgLyoqCisrICAgICAq IEhEUiBkeW5hbWljIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHZpZGVvIGZyYW1lLiBUaGUg cGF5bG9hZCBpcyBhbgorKyAgICAgKiBBVkR5bmFtaWNIRFJTbXB0ZTIwOTRBcHA1IHR5cGUgYW5k IGNvbnRhaW5zIGluZm9ybWF0aW9uIGZvciBjb2xvciB2b2x1bWUKKysgICAgICogdHJhbnNmb3Jt IGFzIHNwZWNpZmllZCBpbiB0aGUgU01QVEUgMjA5NC01MCBzdGFuZGFyZC4KKysgICAgICovCisr ICAgIEFWX1BLVF9EQVRBX0RZTkFNSUNfSERSX1NNUFRFXzIwOTRfQVBQNSwKKysKKysgICAgLyoq CisrICAgICAqIERvbGJ5IFZpc2lvbiBlbmhhbmNlbWVudC1sYXllciBIRVZDIGRlY29kZXIgY29u ZmlndXJhdGlvbi4KKysgICAgICogUGFyc2VkIGZyb20gdGhlIEBjIGh2Y0UgYm94IGluIElTT00t YmFzZWQgY29udGFpbmVycyBvciB0aGUKKysgICAgICogY29ycmVzcG9uZGluZyBCbG9ja0FkZGl0 aW9uTWFwcGluZyBpbiBNYXRyb3NrYS4gVGhlIGRhdGEgaXMgYSByYXcKKysgICAgICogSEVWQ0Rl Y29kZXJDb25maWd1cmF0aW9uUmVjb3JkIGFzIGRlZmluZWQgaW4gSVNPIDE0NDk2LTE1LgorKyAg ICAgKi8KKysgICAgQVZfUEtUX0RBVEFfSEVWQ19DT05GLAorKworKyAgICAvKioKKysgICAgICog VGhlIG51bWJlciBvZiBzaWRlIGRhdGEgdHlwZXMuCisrICAgICAqIFRoaXMgaXMgbm90IHBhcnQg b2YgdGhlIHB1YmxpYyBBUEkvQUJJIGluIHRoZSBzZW5zZSB0aGF0IGl0IG1heQorKyAgICAgKiBj aGFuZ2Ugd2hlbiBuZXcgc2lkZSBkYXRhIHR5cGVzIGFyZSBhZGRlZC4KKysgICAgICogVGhpcyBt dXN0IHN0YXkgdGhlIGxhc3QgZW51bSB2YWx1ZS4KKysgICAgICogSWYgaXRzIHZhbHVlIGJlY29t ZXMgaHVnZSwgc29tZSBjb2RlIHVzaW5nIGl0CisrICAgICAqIG5lZWRzIHRvIGJlIHVwZGF0ZWQg YXMgaXQgYXNzdW1lcyBpdCB0byBiZSBzbWFsbGVyIHRoYW4gb3RoZXIgbGltaXRzLgorKyAgICAg Ki8KKysgICAgQVZfUEtUX0RBVEFfTkIKKyt9OworKworKy8qKgorKyAqIFRoaXMgc3RydWN0dXJl IHN0b3JlcyBhdXhpbGlhcnkgaW5mb3JtYXRpb24gZm9yIGRlY29kaW5nLCBwcmVzZW50aW5nLCBv cgorKyAqIG90aGVyd2lzZSBwcm9jZXNzaW5nIHRoZSBjb2RlZCBzdHJlYW0uIEl0IGlzIHR5cGlj YWxseSBleHBvcnRlZCBieSBkZW11eGVycworKyAqIGFuZCBlbmNvZGVycyBhbmQgY2FuIGJlIGZl ZCB0byBkZWNvZGVycyBhbmQgbXV4ZXJzIGVpdGhlciBpbiBhIHBlciBwYWNrZXQKKysgKiBiYXNp cywgb3IgYXMgZ2xvYmFsIHNpZGUgZGF0YSAoYXBwbHlpbmcgdG8gdGhlIGVudGlyZSBjb2RlZCBz dHJlYW0pLgorKyAqCisrICogR2xvYmFsIHNpZGUgZGF0YSBpcyBoYW5kbGVkIGFzIGZvbGxvd3M6 CisrICogLSBEdXJpbmcgZGVtdXhpbmcsIGl0IG1heSBiZSBleHBvcnRlZCB0aHJvdWdoCisrICog ICBAcmVmIEFWQ29kZWNQYXJhbWV0ZXJzLmNvZGVkX3NpZGVfZGF0YSAiQVZTdHJlYW0ncyBjb2Rl YyBwYXJhbWV0ZXJzIiwgd2hpY2ggY2FuCisrICogICB0aGVuIGJlIHBhc3NlZCBhcyBpbnB1dCB0 byBkZWNvZGVycyB0aHJvdWdoIHRoZQorKyAqICAgQHJlZiBBVkNvZGVjQ29udGV4dC5jb2RlZF9z aWRlX2RhdGEgImRlY29kZXIgY29udGV4dCdzIHNpZGUgZGF0YSIsIGZvcgorKyAqICAgaW5pdGlh bGl6YXRpb24uCisrICogLSBGb3IgbXV4aW5nLCBpdCBjYW4gYmUgZmVkIHRocm91Z2ggQHJlZiBB VkNvZGVjUGFyYW1ldGVycy5jb2RlZF9zaWRlX2RhdGEKKysgKiAgICJBVlN0cmVhbSdzIGNvZGVj IHBhcmFtZXRlcnMiLCB0eXBpY2FsbHkgIHRoZSBvdXRwdXQgb2YgZW5jb2RlcnMgdGhyb3VnaAor KyAqICAgdGhlIEByZWYgQVZDb2RlY0NvbnRleHQuY29kZWRfc2lkZV9kYXRhICJlbmNvZGVyIGNv bnRleHQncyBzaWRlIGRhdGEiLCBmb3IKKysgKiAgIGluaXRpYWxpemF0aW9uLgorKyAqCisrICog UGFja2V0IHNwZWNpZmljIHNpZGUgZGF0YSBpcyBoYW5kbGVkIGFzIGZvbGxvd3M6CisrICogLSBE dXJpbmcgZGVtdXhpbmcsIGl0IG1heSBiZSBleHBvcnRlZCB0aHJvdWdoIEByZWYgQVZQYWNrZXQu c2lkZV9kYXRhCisrICogICAiQVZQYWNrZXQncyBzaWRlIGRhdGEiLCB3aGljaCBjYW4gdGhlbiBi ZSBwYXNzZWQgYXMgaW5wdXQgdG8gZGVjb2RlcnMuCisrICogLSBGb3IgbXV4aW5nLCBpdCBjYW4g YmUgZmVkIHRocm91Z2ggQHJlZiBBVlBhY2tldC5zaWRlX2RhdGEgIkFWUGFja2V0J3MKKysgKiAg IHNpZGUgZGF0YSIsIHR5cGljYWxseSB0aGUgb3V0cHV0IG9mIGVuY29kZXJzLgorKyAqCisrICog RGlmZmVyZW50IG1vZHVsZXMgbWF5IGFjY2VwdCBvciBleHBvcnQgZGlmZmVyZW50IHR5cGVzIG9m IHNpZGUgZGF0YQorKyAqIGRlcGVuZGluZyBvbiBtZWRpYSB0eXBlIGFuZCBjb2RlYy4gUmVmZXIg dG8gQHJlZiBBVlBhY2tldFNpZGVEYXRhVHlwZSBmb3IgYQorKyAqIGxpc3Qgb2YgZGVmaW5lZCB0 eXBlcyBhbmQgd2hlcmUgdGhleSBtYXkgYmUgZm91bmQgb3IgdXNlZC4KKysgKi8KKyt0eXBlZGVm IHN0cnVjdCBBVlBhY2tldFNpZGVEYXRhIHsKKysgICAgdWludDhfdCAqZGF0YTsKKysgICAgc2l6 ZV90ICAgc2l6ZTsKKysgICAgZW51bSBBVlBhY2tldFNpZGVEYXRhVHlwZSB0eXBlOworK30gQVZQ YWNrZXRTaWRlRGF0YTsKKysKKysvKioKKysgKiBBbGxvY2F0ZSBhIG5ldyBwYWNrZXQgc2lkZSBk YXRhLgorKyAqCisrICogQHBhcmFtIHNkICAgIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygc2lkZSBk YXRhIHRvIHdoaWNoIHRoZSBzaWRlIGRhdGEgc2hvdWxkCisrICogICAgICAgICAgICAgIGJlIGFk ZGVkLiAqc2QgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgdGhlIGFycmF5IHdpbGwgYmUKKysg KiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQuCisrICogQHBhcmFtIG5iX3NkIHBvaW50ZXIgdG8g YW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbgorKyAqICAgICAg ICAgICAgICB0aGUgYXJyYXkuIFRoZSBpbnRlZ2VyIHZhbHVlIHdpbGwgYmUgaW5jcmVhc2VkIGJ5 IDEgb24gc3VjY2Vzcy4KKysgKiBAcGFyYW0gdHlwZSAgc2lkZSBkYXRhIHR5cGUKKysgKiBAcGFy YW0gc2l6ZSAgZGVzaXJlZCBzaWRlIGRhdGEgc2l6ZQorKyAqIEBwYXJhbSBmbGFncyBjdXJyZW50 bHkgdW51c2VkLiBNdXN0IGJlIHplcm8KKysgKgorKyAqIEByZXR1cm4gcG9pbnRlciB0byBmcmVz aGx5IGFsbG9jYXRlZCBzaWRlIGRhdGEgb24gc3VjY2Vzcywgb3IgTlVMTCBvdGhlcndpc2UuCisr ICovCisrQVZQYWNrZXRTaWRlRGF0YSAqYXZfcGFja2V0X3NpZGVfZGF0YV9uZXcoQVZQYWNrZXRT aWRlRGF0YSAqKnBzZCwgaW50ICpwbmJfc2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZW51bSBBVlBhY2tldFNpZGVEYXRhVHlwZSB0eXBlLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3Mp OworKworKy8qKgorKyAqIFdyYXAgZXhpc3RpbmcgZGF0YSBhcyBwYWNrZXQgc2lkZSBkYXRhLgor KyAqCisrICogQHBhcmFtIHNkICAgIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygc2lkZSBkYXRhIHRv IHdoaWNoIHRoZSBzaWRlIGRhdGEgc2hvdWxkCisrICogICAgICAgICAgICAgIGJlIGFkZGVkLiAq c2QgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgdGhlIGFycmF5IHdpbGwgYmUKKysgKiAgICAg ICAgICAgICAgaW5pdGlhbGl6ZWQKKysgKiBAcGFyYW0gbmJfc2QgcG9pbnRlciB0byBhbiBpbnRl Z2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluCisrICogICAgICAgICAgICAg IHRoZSBhcnJheS4gVGhlIGludGVnZXIgdmFsdWUgd2lsbCBiZSBpbmNyZWFzZWQgYnkgMSBvbiBz dWNjZXNzLgorKyAqIEBwYXJhbSB0eXBlICBzaWRlIGRhdGEgdHlwZQorKyAqIEBwYXJhbSBkYXRh ICBhIGRhdGEgYXJyYXkuIEl0IG11c3QgYmUgYWxsb2NhdGVkIHdpdGggdGhlIGF2X21hbGxvYygp IGZhbWlseQorKyAqICAgICAgICAgICAgICBvZiBmdW5jdGlvbnMuIFRoZSBvd25lcnNoaXAgb2Yg dGhlIGRhdGEgaXMgdHJhbnNmZXJyZWQgdG8gdGhlCisrICogICAgICAgICAgICAgIHNpZGUgZGF0 YSBhcnJheSBvbiBzdWNjZXNzCisrICogQHBhcmFtIHNpemUgIHNpemUgb2YgdGhlIGRhdGEgYXJy YXkKKysgKiBAcGFyYW0gZmxhZ3MgY3VycmVudGx5IHVudXNlZC4gTXVzdCBiZSB6ZXJvCisrICoK KysgKiBAcmV0dXJuIHBvaW50ZXIgdG8gZnJlc2hseSBhbGxvY2F0ZWQgc2lkZSBkYXRhIG9uIHN1 Y2Nlc3MsIG9yIE5VTEwgb3RoZXJ3aXNlCisrICogICAgICAgICBPbiBmYWlsdXJlLCB0aGUgc2lk ZSBkYXRhIGFycmF5IGlzIHVuY2hhbmdlZCBhbmQgdGhlIGRhdGEgcmVtYWlucworKyAqICAgICAg ICAgb3duZWQgYnkgdGhlIGNhbGxlci4KKysgKi8KKytBVlBhY2tldFNpZGVEYXRhICphdl9wYWNr ZXRfc2lkZV9kYXRhX2FkZChBVlBhY2tldFNpZGVEYXRhICoqc2QsIGludCAqbmJfc2QsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVlBhY2tldFNpZGVE YXRhVHlwZSB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworKworKy8qKgorKyAqIEdldCBz aWRlIGluZm9ybWF0aW9uIGZyb20gYSBzaWRlIGRhdGEgYXJyYXkuCisrICoKKysgKiBAcGFyYW0g c2QgICAgdGhlIGFycmF5IGZyb20gd2hpY2ggdGhlIHNpZGUgZGF0YSBzaG91bGQgYmUgZmV0Y2hl ZAorKyAqIEBwYXJhbSBuYl9zZCB2YWx1ZSBjb250YWluaW5nIHRoZSBudW1iZXIgb2YgZW50cmll cyBpbiB0aGUgYXJyYXkuCisrICogQHBhcmFtIHR5cGUgIGRlc2lyZWQgc2lkZSBpbmZvcm1hdGlv biB0eXBlCisrICoKKysgKiBAcmV0dXJuIHBvaW50ZXIgdG8gc2lkZSBkYXRhIGlmIHByZXNlbnQg b3IgTlVMTCBvdGhlcndpc2UKKysgKi8KKytjb25zdCBBVlBhY2tldFNpZGVEYXRhICphdl9wYWNr ZXRfc2lkZV9kYXRhX2dldChjb25zdCBBVlBhY2tldFNpZGVEYXRhICpzZCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJfc2QsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVlBhY2tldFNp ZGVEYXRhVHlwZSB0eXBlKTsKKysKKysvKioKKysgKiBSZW1vdmUgc2lkZSBkYXRhIG9mIHRoZSBn aXZlbiB0eXBlIGZyb20gYSBzaWRlIGRhdGEgYXJyYXkuCisrICoKKysgKiBAcGFyYW0gc2QgICAg dGhlIGFycmF5IGZyb20gd2hpY2ggdGhlIHNpZGUgZGF0YSBzaG91bGQgYmUgcmVtb3ZlZAorKyAq IEBwYXJhbSBuYl9zZCBwb2ludGVyIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgbnVtYmVy IG9mIGVudHJpZXMgaW4KKysgKiAgICAgICAgICAgICAgdGhlIGFycmF5LiBXaWxsIGJlIHJlZHVj ZWQgYnkgdGhlIGFtb3VudCBvZiBlbnRyaWVzIHJlbW92ZWQKKysgKiAgICAgICAgICAgICAgdXBv biByZXR1cm4KKysgKiBAcGFyYW0gdHlwZSAgc2lkZSBpbmZvcm1hdGlvbiB0eXBlCisrICovCisr dm9pZCBhdl9wYWNrZXRfc2lkZV9kYXRhX3JlbW92ZShBVlBhY2tldFNpZGVEYXRhICpzZCwgaW50 ICpuYl9zZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZQYWNrZXRT aWRlRGF0YVR5cGUgdHlwZSk7CisrCisrLyoqCisrICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8g ZnJlZSBhbGwgdGhlIHNpZGUgZGF0YSBzdG9yZWQgaW4gYW4gYXJyYXksIGFuZAorKyAqIHRoZSBh cnJheSBpdHNlbGYuCisrICoKKysgKiBAcGFyYW0gc2QgICAgcG9pbnRlciB0byBhcnJheSBvZiBz aWRlIGRhdGEgdG8gZnJlZS4gV2lsbCBiZSBzZXQgdG8gTlVMTAorKyAqICAgICAgICAgICAgICB1 cG9uIHJldHVybi4KKysgKiBAcGFyYW0gbmJfc2QgcG9pbnRlciB0byBhbiBpbnRlZ2VyIGNvbnRh aW5pbmcgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluCisrICogICAgICAgICAgICAgIHRoZSBhcnJh eS4gV2lsbCBiZSBzZXQgdG8gMCB1cG9uIHJldHVybi4KKysgKi8KKyt2b2lkIGF2X3BhY2tldF9z aWRlX2RhdGFfZnJlZShBVlBhY2tldFNpZGVEYXRhICoqc2QsIGludCAqbmJfc2QpOworKworK3N0 cnVjdCBBVkZyYW1lU2lkZURhdGE7CisrCisrLyoqCisrICogQWRkIGEgbmV3IHBhY2tldCBzaWRl IGRhdGEgZW50cnkgdG8gYW4gYXJyYXkgYmFzZWQgb24gZXhpc3RpbmcgZnJhbWUKKysgKiBzaWRl IGRhdGEsIGlmIGEgbWF0Y2hpbmcgdHlwZSBleGlzdHMgZm9yIHBhY2tldCBzaWRlIGRhdGEuCisr ICoKKysgKiBAcGFyYW0gZmxhZ3MgICAgICAgICAgICAgIEN1cnJlbnRseSB1bnVzZWQuIE11c3Qg YmUgMC4KKysgKiBAcmV0dmFsID49IDAgICAgICAgICAgICAgIFN1Y2Nlc3MKKysgKiBAcmV0dmFs IEFWRVJST1IoRUlOVkFMKSAgIFRoZSBmcmFtZSBzaWRlIGRhdGEgdHlwZSBkb2VzIG5vdCBoYXZl IGEgbWF0Y2hpbmcKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldCBzaWRlIGRh dGEgdHlwZS4KKysgKiBAcmV0dmFsIEFWRVJST1IoRU5PTUVNKSAgIEZhaWxlZCB0byBhZGQgYSBz aWRlIGRhdGEgZW50cnkgdG8gdGhlIGFycmF5LCBvcgorKyAqICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2ltaWxhci4KKysgKi8KKytpbnQgYXZfcGFja2V0X3NpZGVfZGF0YV9mcm9tX2ZyYW1l KEFWUGFja2V0U2lkZURhdGEgKipzZCwgaW50ICpuYl9zZCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBBVkZyYW1lU2lkZURhdGEgKnNyYywgdW5zaWdu ZWQgaW50IGZsYWdzKTsKKysvKioKKysgKiBBZGQgYSBuZXcgZnJhbWUgc2lkZSBkYXRhIGVudHJ5 IHRvIGFuIGFycmF5IGJhc2VkIG9uIGV4aXN0aW5nIHBhY2tldAorKyAqIHNpZGUgZGF0YSwgaWYg YSBtYXRjaGluZyB0eXBlIGV4aXN0cyBmb3IgZnJhbWUgc2lkZSBkYXRhLgorKyAqCisrICogQHBh cmFtIGZsYWdzICAgICAgICAgICAgICBTb21lIGNvbWJpbmF0aW9uIG9mIEFWX0ZSQU1FX1NJREVf REFUQV9GTEFHXyogZmxhZ3MsCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICBvciAwLgor KyAqIEByZXR2YWwgPj0gMCAgICAgICAgICAgICAgU3VjY2VzcworKyAqIEByZXR2YWwgQVZFUlJP UihFSU5WQUwpICAgVGhlIHBhY2tldCBzaWRlIGRhdGEgdHlwZSBkb2VzIG5vdCBoYXZlIGEgbWF0 Y2hpbmcKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lIHNpZGUgZGF0YSB0eXBl LgorKyAqIEByZXR2YWwgQVZFUlJPUihFTk9NRU0pICAgRmFpbGVkIHRvIGFkZCBhIHNpZGUgZGF0 YSBlbnRyeSB0byB0aGUgYXJyYXksIG9yCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICBz aW1pbGFyLgorKyAqLworK2ludCBhdl9wYWNrZXRfc2lkZV9kYXRhX3RvX2ZyYW1lKHN0cnVjdCBB VkZyYW1lU2lkZURhdGEgKioqc2QsIGludCAqbmJfc2QsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgQVZQYWNrZXRTaWRlRGF0YSAqc3JjLCB1bnNpZ25lZCBpbnQgZmxh Z3MpOworKworK2NvbnN0IGNoYXIgKmF2X3BhY2tldF9zaWRlX2RhdGFfbmFtZShlbnVtIEFWUGFj a2V0U2lkZURhdGFUeXBlIHR5cGUpOworKworKy8qKgorKyAqIEB9CisrICovCisrCisrLyoqCisr ICogQGRlZmdyb3VwIGxhdmNfcGFja2V0IEFWUGFja2V0CisrICoKKysgKiBUeXBlcyBhbmQgZnVu Y3Rpb25zIGZvciB3b3JraW5nIHdpdGggQVZQYWNrZXQuCisrICogQHsKKysgKi8KKysKKysvKioK KysgKiBUaGlzIHN0cnVjdHVyZSBzdG9yZXMgY29tcHJlc3NlZCBkYXRhLiBJdCBpcyB0eXBpY2Fs bHkgZXhwb3J0ZWQgYnkgZGVtdXhlcnMKKysgKiBhbmQgdGhlbiBwYXNzZWQgYXMgaW5wdXQgdG8g ZGVjb2RlcnMsIG9yIHJlY2VpdmVkIGFzIG91dHB1dCBmcm9tIGVuY29kZXJzIGFuZAorKyAqIHRo ZW4gcGFzc2VkIHRvIG11eGVycy4KKysgKgorKyAqIEZvciB2aWRlbywgaXQgc2hvdWxkIHR5cGlj YWxseSBjb250YWluIG9uZSBjb21wcmVzc2VkIGZyYW1lLiBGb3IgYXVkaW8gaXQgbWF5CisrICog Y29udGFpbiBzZXZlcmFsIGNvbXByZXNzZWQgZnJhbWVzLiBFbmNvZGVycyBhcmUgYWxsb3dlZCB0 byBvdXRwdXQgZW1wdHkKKysgKiBwYWNrZXRzLCB3aXRoIG5vIGNvbXByZXNzZWQgZGF0YSwgY29u dGFpbmluZyBvbmx5IHNpZGUgZGF0YQorKyAqIChlLmcuIHRvIHVwZGF0ZSBzb21lIHN0cmVhbSBw YXJhbWV0ZXJzIGF0IHRoZSBlbmQgb2YgZW5jb2RpbmcpLgorKyAqCisrICogVGhlIHNlbWFudGlj cyBvZiBkYXRhIG93bmVyc2hpcCBkZXBlbmRzIG9uIHRoZSBidWYgZmllbGQuCisrICogSWYgaXQg aXMgc2V0LCB0aGUgcGFja2V0IGRhdGEgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBpcwor KyAqIHZhbGlkIGluZGVmaW5pdGVseSB1bnRpbCBhIGNhbGwgdG8gYXZfcGFja2V0X3VucmVmKCkg cmVkdWNlcyB0aGUKKysgKiByZWZlcmVuY2UgY291bnQgdG8gMC4KKysgKgorKyAqIElmIHRoZSBi dWYgZmllbGQgaXMgbm90IHNldCBhdl9wYWNrZXRfcmVmKCkgd291bGQgbWFrZSBhIGNvcHkgaW5z dGVhZAorKyAqIG9mIGluY3JlYXNpbmcgdGhlIHJlZmVyZW5jZSBjb3VudC4KKysgKgorKyAqIFRo ZSBzaWRlIGRhdGEgaXMgYWx3YXlzIGFsbG9jYXRlZCB3aXRoIGF2X21hbGxvYygpLCBjb3BpZWQg YnkKKysgKiBhdl9wYWNrZXRfcmVmKCkgYW5kIGZyZWVkIGJ5IGF2X3BhY2tldF91bnJlZigpLgor KyAqCisrICogc2l6ZW9mKEFWUGFja2V0KSBiZWluZyBhIHBhcnQgb2YgdGhlIHB1YmxpYyBBQkkg aXMgZGVwcmVjYXRlZC4gb25jZQorKyAqIGF2X2luaXRfcGFja2V0KCkgaXMgcmVtb3ZlZCwgbmV3 IHBhY2tldHMgd2lsbCBvbmx5IGJlIGFibGUgdG8gYmUgYWxsb2NhdGVkCisrICogd2l0aCBhdl9w YWNrZXRfYWxsb2MoKSwgYW5kIG5ldyBmaWVsZHMgbWF5IGJlIGFkZGVkIHRvIHRoZSBlbmQgb2Yg dGhlIHN0cnVjdAorKyAqIHdpdGggYSBtaW5vciBidW1wLgorKyAqCisrICogQHNlZSBhdl9wYWNr ZXRfYWxsb2MKKysgKiBAc2VlIGF2X3BhY2tldF9yZWYKKysgKiBAc2VlIGF2X3BhY2tldF91bnJl ZgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWUGFja2V0IHsKKysgICAgLyoqCisrICAgICAqIEEg cmVmZXJlbmNlIHRvIHRoZSByZWZlcmVuY2UtY291bnRlZCBidWZmZXIgd2hlcmUgdGhlIHBhY2tl dCBkYXRhIGlzCisrICAgICAqIHN0b3JlZC4KKysgICAgICogTWF5IGJlIE5VTEwsIHRoZW4gdGhl IHBhY2tldCBkYXRhIGlzIG5vdCByZWZlcmVuY2UtY291bnRlZC4KKysgICAgICovCisrICAgIEFW QnVmZmVyUmVmICpidWY7CisrICAgIC8qKgorKyAgICAgKiBQcmVzZW50YXRpb24gdGltZXN0YW1w IGluIEFWU3RyZWFtLT50aW1lX2Jhc2UgdW5pdHM7IHRoZSB0aW1lIGF0IHdoaWNoCisrICAgICAq IHRoZSBkZWNvbXByZXNzZWQgcGFja2V0IHdpbGwgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgor KyAgICAgKiBDYW4gYmUgQVZfTk9QVFNfVkFMVUUgaWYgaXQgaXMgbm90IHN0b3JlZCBpbiB0aGUg ZmlsZS4KKysgICAgICogcHRzIE1VU1QgYmUgbGFyZ2VyIG9yIGVxdWFsIHRvIGR0cyBhcyBwcmVz ZW50YXRpb24gY2Fubm90IGhhcHBlbiBiZWZvcmUKKysgICAgICogZGVjb21wcmVzc2lvbiwgdW5s ZXNzIG9uZSB3YW50cyB0byB2aWV3IGhleCBkdW1wcy4gU29tZSBmb3JtYXRzIG1pc3VzZQorKyAg ICAgKiB0aGUgdGVybXMgZHRzIGFuZCBwdHMvY3RzIHRvIG1lYW4gc29tZXRoaW5nIGRpZmZlcmVu dC4gU3VjaCB0aW1lc3RhbXBzCisrICAgICAqIG11c3QgYmUgY29udmVydGVkIHRvIHRydWUgcHRz L2R0cyBiZWZvcmUgdGhleSBhcmUgc3RvcmVkIGluIEFWUGFja2V0LgorKyAgICAgKi8KKysgICAg aW50NjRfdCBwdHM7CisrICAgIC8qKgorKyAgICAgKiBEZWNvbXByZXNzaW9uIHRpbWVzdGFtcCBp biBBVlN0cmVhbS0+dGltZV9iYXNlIHVuaXRzOyB0aGUgdGltZSBhdCB3aGljaAorKyAgICAgKiB0 aGUgcGFja2V0IGlzIGRlY29tcHJlc3NlZC4KKysgICAgICogQ2FuIGJlIEFWX05PUFRTX1ZBTFVF IGlmIGl0IGlzIG5vdCBzdG9yZWQgaW4gdGhlIGZpbGUuCisrICAgICAqLworKyAgICBpbnQ2NF90 IGR0czsKKysgICAgdWludDhfdCAqZGF0YTsKKysgICAgaW50ICAgc2l6ZTsKKysgICAgaW50ICAg c3RyZWFtX2luZGV4OworKyAgICAvKioKKysgICAgICogQSBjb21iaW5hdGlvbiBvZiBBVl9QS1Rf RkxBRyB2YWx1ZXMKKysgICAgICovCisrICAgIGludCAgIGZsYWdzOworKyAgICAvKioKKysgICAg ICogQWRkaXRpb25hbCBwYWNrZXQgZGF0YSB0aGF0IGNhbiBiZSBwcm92aWRlZCBieSB0aGUgY29u dGFpbmVyLgorKyAgICAgKiBQYWNrZXQgY2FuIGNvbnRhaW4gc2V2ZXJhbCB0eXBlcyBvZiBzaWRl IGluZm9ybWF0aW9uLgorKyAgICAgKi8KKysgICAgQVZQYWNrZXRTaWRlRGF0YSAqc2lkZV9kYXRh OworKyAgICBpbnQgc2lkZV9kYXRhX2VsZW1zOworKworKyAgICAvKioKKysgICAgICogRHVyYXRp b24gb2YgdGhpcyBwYWNrZXQgaW4gQVZTdHJlYW0tPnRpbWVfYmFzZSB1bml0cywgMCBpZiB1bmtu b3duLgorKyAgICAgKiBFcXVhbHMgbmV4dF9wdHMgLSB0aGlzX3B0cyBpbiBwcmVzZW50YXRpb24g b3JkZXIuCisrICAgICAqLworKyAgICBpbnQ2NF90IGR1cmF0aW9uOworKworKyAgICBpbnQ2NF90 IHBvczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vPCBieXRlIHBvc2l0aW9uIGluIHN0 cmVhbSwgLTEgaWYgdW5rbm93bgorKworKyAgICAvKioKKysgICAgICogZm9yIHNvbWUgcHJpdmF0 ZSBkYXRhIG9mIHRoZSB1c2VyCisrICAgICAqLworKyAgICB2b2lkICpvcGFxdWU7CisrCisrICAg IC8qKgorKyAgICAgKiBBVkJ1ZmZlclJlZiBmb3IgZnJlZSB1c2UgYnkgdGhlIEFQSSB1c2VyLiBG Rm1wZWcgd2lsbCBuZXZlciBjaGVjayB0aGUKKysgICAgICogY29udGVudHMgb2YgdGhlIGJ1ZmZl ciByZWYuIEZGbXBlZyBjYWxscyBhdl9idWZmZXJfdW5yZWYoKSBvbiBpdCB3aGVuCisrICAgICAq IHRoZSBwYWNrZXQgaXMgdW5yZWZlcmVuY2VkLiBhdl9wYWNrZXRfY29weV9wcm9wcygpIGNhbGxz IGNyZWF0ZSBhIG5ldworKyAgICAgKiByZWZlcmVuY2Ugd2l0aCBhdl9idWZmZXJfcmVmKCkgZm9y IHRoZSB0YXJnZXQgcGFja2V0J3Mgb3BhcXVlX3JlZiBmaWVsZC4KKysgICAgICoKKysgICAgICog VGhpcyBpcyB1bnJlbGF0ZWQgdG8gdGhlIG9wYXF1ZSBmaWVsZCwgYWx0aG91Z2ggaXQgc2VydmVz IGEgc2ltaWxhcgorKyAgICAgKiBwdXJwb3NlLgorKyAgICAgKi8KKysgICAgQVZCdWZmZXJSZWYg Km9wYXF1ZV9yZWY7CisrCisrICAgIC8qKgorKyAgICAgKiBUaW1lIGJhc2Ugb2YgdGhlIHBhY2tl dCdzIHRpbWVzdGFtcHMuCisrICAgICAqIEluIHRoZSBmdXR1cmUsIHRoaXMgZmllbGQgbWF5IGJl IHNldCBvbiBwYWNrZXRzIG91dHB1dCBieSBlbmNvZGVycyBvcgorKyAgICAgKiBkZW11eGVycywg YnV0IGl0cyB2YWx1ZSB3aWxsIGJlIGJ5IGRlZmF1bHQgaWdub3JlZCBvbiBpbnB1dCB0byBkZWNv ZGVycworKyAgICAgKiBvciBtdXhlcnMuCisrICAgICAqLworKyAgICBBVlJhdGlvbmFsIHRpbWVf YmFzZTsKKyt9IEFWUGFja2V0OworKworKyNkZWZpbmUgQVZfUEtUX0ZMQUdfS0VZICAgICAweDAw MDEgLy8vPCBUaGUgcGFja2V0IGNvbnRhaW5zIGEga2V5ZnJhbWUKKysjZGVmaW5lIEFWX1BLVF9G TEFHX0NPUlJVUFQgMHgwMDAyIC8vLzwgVGhlIHBhY2tldCBjb250ZW50IGlzIGNvcnJ1cHRlZAor Ky8qKgorKyAqIEZsYWcgaXMgdXNlZCB0byBkaXNjYXJkIHBhY2tldHMgd2hpY2ggYXJlIHJlcXVp cmVkIHRvIG1haW50YWluIHZhbGlkCisrICogZGVjb2RlciBzdGF0ZSBidXQgYXJlIG5vdCByZXF1 aXJlZCBmb3Igb3V0cHV0IGFuZCBzaG91bGQgYmUgZHJvcHBlZAorKyAqIGFmdGVyIGRlY29kaW5n LgorKyAqKi8KKysjZGVmaW5lIEFWX1BLVF9GTEFHX0RJU0NBUkQgICAweDAwMDQKKysvKioKKysg KiBUaGUgcGFja2V0IGNvbWVzIGZyb20gYSB0cnVzdGVkIHNvdXJjZS4KKysgKgorKyAqIE90aGVy d2lzZS11bnNhZmUgY29uc3RydWN0cyBzdWNoIGFzIGFyYml0cmFyeSBwb2ludGVycyB0byBkYXRh CisrICogb3V0c2lkZSB0aGUgcGFja2V0IG1heSBiZSBmb2xsb3dlZC4KKysgKi8KKysjZGVmaW5l IEFWX1BLVF9GTEFHX1RSVVNURUQgICAweDAwMDgKKysvKioKKysgKiBGbGFnIGlzIHVzZWQgdG8g aW5kaWNhdGUgcGFja2V0cyB0aGF0IGNvbnRhaW4gZnJhbWVzIHRoYXQgY2FuCisrICogYmUgZGlz Y2FyZGVkIGJ5IHRoZSBkZWNvZGVyLiAgSS5lLiBOb24tcmVmZXJlbmNlIGZyYW1lcy4KKysgKi8K KysjZGVmaW5lIEFWX1BLVF9GTEFHX0RJU1BPU0FCTEUgMHgwMDEwCisrCisrZW51bSBBVlNpZGVE YXRhUGFyYW1DaGFuZ2VGbGFncyB7CisrICAgIEFWX1NJREVfREFUQV9QQVJBTV9DSEFOR0VfU0FN UExFX1JBVEUgICAgPSAweDAwMDQsCisrICAgIEFWX1NJREVfREFUQV9QQVJBTV9DSEFOR0VfRElN RU5TSU9OUyAgICAgPSAweDAwMDgsCisrfTsKKysKKysvKioKKysgKiBBbGxvY2F0ZSBhbiBBVlBh Y2tldCBhbmQgc2V0IGl0cyBmaWVsZHMgdG8gZGVmYXVsdCB2YWx1ZXMuICBUaGUgcmVzdWx0aW5n CisrICogc3RydWN0IG11c3QgYmUgZnJlZWQgdXNpbmcgYXZfcGFja2V0X2ZyZWUoKS4KKysgKgor KyAqIEByZXR1cm4gQW4gQVZQYWNrZXQgZmlsbGVkIHdpdGggZGVmYXVsdCB2YWx1ZXMgb3IgTlVM TCBvbiBmYWlsdXJlLgorKyAqCisrICogQG5vdGUgdGhpcyBvbmx5IGFsbG9jYXRlcyB0aGUgQVZQ YWNrZXQgaXRzZWxmLCBub3QgdGhlIGRhdGEgYnVmZmVycy4gVGhvc2UKKysgKiBtdXN0IGJlIGFs bG9jYXRlZCB0aHJvdWdoIG90aGVyIG1lYW5zIHN1Y2ggYXMgYXZfbmV3X3BhY2tldC4KKysgKgor KyAqIEBzZWUgYXZfbmV3X3BhY2tldAorKyAqLworK0FWUGFja2V0ICphdl9wYWNrZXRfYWxsb2Mo dm9pZCk7CisrCisrLyoqCisrICogQ3JlYXRlIGEgbmV3IHBhY2tldCB0aGF0IHJlZmVyZW5jZXMg dGhlIHNhbWUgZGF0YSBhcyBzcmMuCisrICoKKysgKiBUaGlzIGlzIGEgc2hvcnRjdXQgZm9yIGF2 X3BhY2tldF9hbGxvYygpK2F2X3BhY2tldF9yZWYoKS4KKysgKgorKyAqIEByZXR1cm4gbmV3bHkg Y3JlYXRlZCBBVlBhY2tldCBvbiBzdWNjZXNzLCBOVUxMIG9uIGVycm9yLgorKyAqCisrICogQHNl ZSBhdl9wYWNrZXRfYWxsb2MKKysgKiBAc2VlIGF2X3BhY2tldF9yZWYKKysgKi8KKytBVlBhY2tl dCAqYXZfcGFja2V0X2Nsb25lKGNvbnN0IEFWUGFja2V0ICpzcmMpOworKworKy8qKgorKyAqIEZy ZWUgdGhlIHBhY2tldCwgaWYgdGhlIHBhY2tldCBpcyByZWZlcmVuY2UgY291bnRlZCwgaXQgd2ls bCBiZQorKyAqIHVucmVmZXJlbmNlZCBmaXJzdC4KKysgKgorKyAqIEBwYXJhbSBwa3QgcGFja2V0 IHRvIGJlIGZyZWVkLiBUaGUgcG9pbnRlciB3aWxsIGJlIHNldCB0byBOVUxMLgorKyAqIEBub3Rl IHBhc3NpbmcgTlVMTCBpcyBhIG5vLW9wLgorKyAqLworK3ZvaWQgYXZfcGFja2V0X2ZyZWUoQVZQ YWNrZXQgKipwa3QpOworKworKyNpZiBGRl9BUElfSU5JVF9QQUNLRVQKKysvKioKKysgKiBJbml0 aWFsaXplIG9wdGlvbmFsIGZpZWxkcyBvZiBhIHBhY2tldCB3aXRoIGRlZmF1bHQgdmFsdWVzLgor KyAqCisrICogTm90ZSwgdGhpcyBkb2VzIG5vdCB0b3VjaCB0aGUgZGF0YSBhbmQgc2l6ZSBtZW1i ZXJzLCB3aGljaCBoYXZlIHRvIGJlCisrICogaW5pdGlhbGl6ZWQgc2VwYXJhdGVseS4KKysgKgor KyAqIEBwYXJhbSBwa3QgcGFja2V0CisrICoKKysgKiBAc2VlIGF2X3BhY2tldF9hbGxvYworKyAq IEBzZWUgYXZfcGFja2V0X3VucmVmCisrICoKKysgKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9u IGlzIGRlcHJlY2F0ZWQuIE9uY2UgaXQncyByZW1vdmVkLAorKyAgICAgICAgICAgICAgIHNpemVv ZihBVlBhY2tldCkgd2lsbCBub3QgYmUgYSBwYXJ0IG9mIHRoZSBBQkkgYW55bW9yZS4KKysgKi8K KythdHRyaWJ1dGVfZGVwcmVjYXRlZAorK3ZvaWQgYXZfaW5pdF9wYWNrZXQoQVZQYWNrZXQgKnBr dCk7CisrI2VuZGlmCisrCisrLyoqCisrICogQWxsb2NhdGUgdGhlIHBheWxvYWQgb2YgYSBwYWNr ZXQgYW5kIGluaXRpYWxpemUgaXRzIGZpZWxkcyB3aXRoCisrICogZGVmYXVsdCB2YWx1ZXMuCisr ICoKKysgKiBAcGFyYW0gcGt0IHBhY2tldAorKyAqIEBwYXJhbSBzaXplIHdhbnRlZCBwYXlsb2Fk IHNpemUKKysgKiBAcmV0dXJuIDAgaWYgT0ssIEFWRVJST1JfeHh4IG90aGVyd2lzZQorKyAqLwor K2ludCBhdl9uZXdfcGFja2V0KEFWUGFja2V0ICpwa3QsIGludCBzaXplKTsKKysKKysvKioKKysg KiBSZWR1Y2UgcGFja2V0IHNpemUsIGNvcnJlY3RseSB6ZXJvaW5nIHBhZGRpbmcKKysgKgorKyAq IEBwYXJhbSBwa3QgcGFja2V0CisrICogQHBhcmFtIHNpemUgbmV3IHNpemUKKysgKi8KKyt2b2lk IGF2X3Nocmlua19wYWNrZXQoQVZQYWNrZXQgKnBrdCwgaW50IHNpemUpOworKworKy8qKgorKyAq IEluY3JlYXNlIHBhY2tldCBzaXplLCBjb3JyZWN0bHkgemVyb2luZyBwYWRkaW5nCisrICoKKysg KiBAcGFyYW0gcGt0IHBhY2tldAorKyAqIEBwYXJhbSBncm93X2J5IG51bWJlciBvZiBieXRlcyBi eSB3aGljaCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0CisrICovCisraW50IGF2 X2dyb3dfcGFja2V0KEFWUGFja2V0ICpwa3QsIGludCBncm93X2J5KTsKKysKKysvKioKKysgKiBJ bml0aWFsaXplIGEgcmVmZXJlbmNlLWNvdW50ZWQgcGFja2V0IGZyb20gYXZfbWFsbG9jKCllZCBk YXRhLgorKyAqCisrICogQHBhcmFtIHBrdCBwYWNrZXQgdG8gYmUgaW5pdGlhbGl6ZWQuIFRoaXMg ZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGRhdGEsIHNpemUsCisrICogICAgICAgIGFuZCBidWYgZmll bGRzLCBhbGwgb3RoZXJzIGFyZSBsZWZ0IHVudG91Y2hlZC4KKysgKiBAcGFyYW0gZGF0YSBEYXRh IGFsbG9jYXRlZCBieSBhdl9tYWxsb2MoKSB0byBiZSB1c2VkIGFzIHBhY2tldCBkYXRhLiBJZiB0 aGlzCisrICogICAgICAgIGZ1bmN0aW9uIHJldHVybnMgc3VjY2Vzc2Z1bGx5LCB0aGUgZGF0YSBp cyBvd25lZCBieSB0aGUgdW5kZXJseWluZyBBVkJ1ZmZlci4KKysgKiAgICAgICAgVGhlIGNhbGxl ciBtYXkgbm90IGFjY2VzcyB0aGUgZGF0YSB0aHJvdWdoIG90aGVyIG1lYW5zLgorKyAqIEBwYXJh bSBzaXplIHNpemUgb2YgZGF0YSBpbiBieXRlcywgd2l0aG91dCB0aGUgcGFkZGluZy4gSS5lLiB0 aGUgZnVsbCBidWZmZXIKKysgKiAgICAgICAgc2l6ZSBpcyBhc3N1bWVkIHRvIGJlIHNpemUgKyBB Vl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFLgorKyAqCisrICogQHJldHVybiAwIG9uIHN1Y2Nl c3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBvbiBlcnJvcgorKyAqLworK2ludCBhdl9wYWNrZXRfZnJv bV9kYXRhKEFWUGFja2V0ICpwa3QsIHVpbnQ4X3QgKmRhdGEsIGludCBzaXplKTsKKysKKysvKioK KysgKiBBbGxvY2F0ZSBuZXcgaW5mb3JtYXRpb24gb2YgYSBwYWNrZXQuCisrICoKKysgKiBAcGFy YW0gcGt0IHBhY2tldAorKyAqIEBwYXJhbSB0eXBlIHNpZGUgaW5mb3JtYXRpb24gdHlwZQorKyAq IEBwYXJhbSBzaXplIHNpZGUgaW5mb3JtYXRpb24gc2l6ZQorKyAqIEByZXR1cm4gcG9pbnRlciB0 byBmcmVzaCBhbGxvY2F0ZWQgZGF0YSBvciBOVUxMIG90aGVyd2lzZQorKyAqLworK3VpbnQ4X3Qq IGF2X3BhY2tldF9uZXdfc2lkZV9kYXRhKEFWUGFja2V0ICpwa3QsIGVudW0gQVZQYWNrZXRTaWRl RGF0YVR5cGUgdHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg c2l6ZSk7CisrCisrLyoqCisrICogV3JhcCBhbiBleGlzdGluZyBhcnJheSBhcyBhIHBhY2tldCBz aWRlIGRhdGEuCisrICoKKysgKiBAcGFyYW0gcGt0IHBhY2tldAorKyAqIEBwYXJhbSB0eXBlIHNp ZGUgaW5mb3JtYXRpb24gdHlwZQorKyAqIEBwYXJhbSBkYXRhIHRoZSBzaWRlIGRhdGEgYXJyYXku IEl0IG11c3QgYmUgYWxsb2NhdGVkIHdpdGggdGhlIGF2X21hbGxvYygpCisrICogICAgICAgICAg ICAgZmFtaWx5IG9mIGZ1bmN0aW9ucy4gVGhlIG93bmVyc2hpcCBvZiB0aGUgZGF0YSBpcyB0cmFu c2ZlcnJlZCB0bworKyAqICAgICAgICAgICAgIHBrdC4KKysgKiBAcGFyYW0gc2l6ZSBzaWRlIGlu Zm9ybWF0aW9uIHNpemUKKysgKiBAcmV0dXJuIGEgbm9uLW5lZ2F0aXZlIG51bWJlciBvbiBzdWNj ZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBvbgorKyAqICAgICAgICAgZmFpbHVyZS4gT24g ZmFpbHVyZSwgdGhlIHBhY2tldCBpcyB1bmNoYW5nZWQgYW5kIHRoZSBkYXRhIHJlbWFpbnMKKysg KiAgICAgICAgIG93bmVkIGJ5IHRoZSBjYWxsZXIuCisrICovCisraW50IGF2X3BhY2tldF9hZGRf c2lkZV9kYXRhKEFWUGFja2V0ICpwa3QsIGVudW0gQVZQYWNrZXRTaWRlRGF0YVR5cGUgdHlwZSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUp OworKworKy8qKgorKyAqIFNocmluayB0aGUgYWxyZWFkeSBhbGxvY2F0ZWQgc2lkZSBkYXRhIGJ1 ZmZlcgorKyAqCisrICogQHBhcmFtIHBrdCBwYWNrZXQKKysgKiBAcGFyYW0gdHlwZSBzaWRlIGlu Zm9ybWF0aW9uIHR5cGUKKysgKiBAcGFyYW0gc2l6ZSBuZXcgc2lkZSBpbmZvcm1hdGlvbiBzaXpl CisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIDwgMCBvbiBmYWlsdXJlCisrICovCisraW50IGF2 X3BhY2tldF9zaHJpbmtfc2lkZV9kYXRhKEFWUGFja2V0ICpwa3QsIGVudW0gQVZQYWNrZXRTaWRl RGF0YVR5cGUgdHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNp emUpOworKworKy8qKgorKyAqIEdldCBzaWRlIGluZm9ybWF0aW9uIGZyb20gcGFja2V0LgorKyAq CisrICogQHBhcmFtIHBrdCBwYWNrZXQKKysgKiBAcGFyYW0gdHlwZSBkZXNpcmVkIHNpZGUgaW5m b3JtYXRpb24gdHlwZQorKyAqIEBwYXJhbSBzaXplIElmIHN1cHBsaWVkLCAqc2l6ZSB3aWxsIGJl IHNldCB0byB0aGUgc2l6ZSBvZiB0aGUgc2lkZSBkYXRhCisrICogICAgICAgICAgICAgb3IgdG8g emVybyBpZiB0aGUgZGVzaXJlZCBzaWRlIGRhdGEgaXMgbm90IHByZXNlbnQuCisrICogQHJldHVy biBwb2ludGVyIHRvIGRhdGEgaWYgcHJlc2VudCBvciBOVUxMIG90aGVyd2lzZQorKyAqLworK3Vp bnQ4X3QqIGF2X3BhY2tldF9nZXRfc2lkZV9kYXRhKGNvbnN0IEFWUGFja2V0ICpwa3QsIGVudW0g QVZQYWNrZXRTaWRlRGF0YVR5cGUgdHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgKnNpemUpOworKworKy8qKgorKyAqIFBhY2sgYSBkaWN0aW9uYXJ5IGZvciB1 c2UgaW4gc2lkZV9kYXRhLgorKyAqCisrICogQHBhcmFtIGRpY3QgVGhlIGRpY3Rpb25hcnkgdG8g cGFjay4KKysgKiBAcGFyYW0gc2l6ZSBwb2ludGVyIHRvIHN0b3JlIHRoZSBzaXplIG9mIHRoZSBy ZXR1cm5lZCBkYXRhCisrICogQHJldHVybiBwb2ludGVyIHRvIGRhdGEgaWYgc3VjY2Vzc2Z1bCwg TlVMTCBvdGhlcndpc2UKKysgKi8KKyt1aW50OF90ICphdl9wYWNrZXRfcGFja19kaWN0aW9uYXJ5 KGNvbnN0IEFWRGljdGlvbmFyeSAqZGljdCwgc2l6ZV90ICpzaXplKTsKKysvKioKKysgKiBVbnBh Y2sgYSBkaWN0aW9uYXJ5IGZyb20gc2lkZV9kYXRhLgorKyAqCisrICogQHBhcmFtIGRhdGEgZGF0 YSBmcm9tIHNpZGVfZGF0YQorKyAqIEBwYXJhbSBzaXplIHNpemUgb2YgdGhlIGRhdGEKKysgKiBA cGFyYW0gZGljdCB0aGUgbWV0YWRhdGEgc3RvcmFnZSBkaWN0aW9uYXJ5CisrICogQHJldHVybiAw IG9uIHN1Y2Nlc3MsIDwgMCBvbiBmYWlsdXJlCisrICovCisraW50IGF2X3BhY2tldF91bnBhY2tf ZGljdGlvbmFyeShjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3Qgc2l6ZSwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFWRGljdGlvbmFyeSAqKmRpY3QpOworKworKy8qKgorKyAq IENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGZyZWUgYWxsIHRoZSBzaWRlIGRhdGEgc3RvcmVkLgor KyAqIEFsbCB0aGUgb3RoZXIgZmllbGRzIHN0YXkgdW50b3VjaGVkLgorKyAqCisrICogQHBhcmFt IHBrdCBwYWNrZXQKKysgKi8KKyt2b2lkIGF2X3BhY2tldF9mcmVlX3NpZGVfZGF0YShBVlBhY2tl dCAqcGt0KTsKKysKKysvKioKKysgKiBTZXR1cCBhIG5ldyByZWZlcmVuY2UgdG8gdGhlIGRhdGEg ZGVzY3JpYmVkIGJ5IGEgZ2l2ZW4gcGFja2V0CisrICoKKysgKiBJZiBzcmMgaXMgcmVmZXJlbmNl LWNvdW50ZWQsIHNldHVwIGRzdCBhcyBhIG5ldyByZWZlcmVuY2UgdG8gdGhlCisrICogYnVmZmVy IGluIHNyYy4gT3RoZXJ3aXNlIGFsbG9jYXRlIGEgbmV3IGJ1ZmZlciBpbiBkc3QgYW5kIGNvcHkg dGhlCisrICogZGF0YSBmcm9tIHNyYyBpbnRvIGl0LgorKyAqCisrICogQWxsIHRoZSBvdGhlciBm aWVsZHMgYXJlIGNvcGllZCBmcm9tIHNyYy4KKysgKgorKyAqIEBzZWUgYXZfcGFja2V0X3VucmVm CisrICoKKysgKiBAcGFyYW0gZHN0IERlc3RpbmF0aW9uIHBhY2tldC4gV2lsbCBiZSBjb21wbGV0 ZWx5IG92ZXJ3cml0dGVuLgorKyAqIEBwYXJhbSBzcmMgU291cmNlIHBhY2tldAorKyAqCisrICog QHJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBvbiBlcnJvci4gT24gZXJy b3IsIGRzdAorKyAqICAgICAgICAgd2lsbCBiZSBibGFuayAoYXMgaWYgcmV0dXJuZWQgYnkgYXZf cGFja2V0X2FsbG9jKCkpLgorKyAqLworK2ludCBhdl9wYWNrZXRfcmVmKEFWUGFja2V0ICpkc3Qs IGNvbnN0IEFWUGFja2V0ICpzcmMpOworKworKy8qKgorKyAqIFdpcGUgdGhlIHBhY2tldC4KKysg KgorKyAqIFVucmVmZXJlbmNlIHRoZSBidWZmZXIgcmVmZXJlbmNlZCBieSB0aGUgcGFja2V0IGFu ZCByZXNldCB0aGUKKysgKiByZW1haW5pbmcgcGFja2V0IGZpZWxkcyB0byB0aGVpciBkZWZhdWx0 IHZhbHVlcy4KKysgKgorKyAqIEBwYXJhbSBwa3QgVGhlIHBhY2tldCB0byBiZSB1bnJlZmVyZW5j ZWQuCisrICovCisrdm9pZCBhdl9wYWNrZXRfdW5yZWYoQVZQYWNrZXQgKnBrdCk7CisrCisrLyoq CisrICogTW92ZSBldmVyeSBmaWVsZCBpbiBzcmMgdG8gZHN0IGFuZCByZXNldCBzcmMuCisrICoK KysgKiBAc2VlIGF2X3BhY2tldF91bnJlZgorKyAqCisrICogQHBhcmFtIHNyYyBTb3VyY2UgcGFj a2V0LCB3aWxsIGJlIHJlc2V0CisrICogQHBhcmFtIGRzdCBEZXN0aW5hdGlvbiBwYWNrZXQKKysg Ki8KKyt2b2lkIGF2X3BhY2tldF9tb3ZlX3JlZihBVlBhY2tldCAqZHN0LCBBVlBhY2tldCAqc3Jj KTsKKysKKysvKioKKysgKiBDb3B5IG9ubHkgInByb3BlcnRpZXMiIGZpZWxkcyBmcm9tIHNyYyB0 byBkc3QuCisrICoKKysgKiBQcm9wZXJ0aWVzIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0 aW9uIGFyZSBhbGwgdGhlIGZpZWxkcworKyAqIGJlc2lkZSB0aG9zZSByZWxhdGVkIHRvIHRoZSBw YWNrZXQgZGF0YSAoYnVmLCBkYXRhLCBzaXplKQorKyAqCisrICogQHBhcmFtIGRzdCBEZXN0aW5h dGlvbiBwYWNrZXQKKysgKiBAcGFyYW0gc3JjIFNvdXJjZSBwYWNrZXQKKysgKgorKyAqIEByZXR1 cm4gMCBvbiBzdWNjZXNzIEFWRVJST1Igb24gZmFpbHVyZS4KKysgKi8KKytpbnQgYXZfcGFja2V0 X2NvcHlfcHJvcHMoQVZQYWNrZXQgKmRzdCwgY29uc3QgQVZQYWNrZXQgKnNyYyk7CisrCisrLyoq CisrICogRW5zdXJlIHRoZSBkYXRhIGRlc2NyaWJlZCBieSBhIGdpdmVuIHBhY2tldCBpcyByZWZl cmVuY2UgY291bnRlZC4KKysgKgorKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZW5z dXJlIHRoYXQgdGhlIHJlZmVyZW5jZSB3aWxsIGJlIHdyaXRhYmxlLgorKyAqICAgICAgIFVzZSBh dl9wYWNrZXRfbWFrZV93cml0YWJsZSBpbnN0ZWFkIGZvciB0aGF0IHB1cnBvc2UuCisrICoKKysg KiBAc2VlIGF2X3BhY2tldF9yZWYKKysgKiBAc2VlIGF2X3BhY2tldF9tYWtlX3dyaXRhYmxlCisr ICoKKysgKiBAcGFyYW0gcGt0IHBhY2tldCB3aG9zZSBkYXRhIHNob3VsZCBiZSBtYWRlIHJlZmVy ZW5jZSBjb3VudGVkLgorKyAqCisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUg QVZFUlJPUiBvbiBlcnJvci4gT24gZmFpbHVyZSwgdGhlCisrICogICAgICAgICBwYWNrZXQgaXMg dW5jaGFuZ2VkLgorKyAqLworK2ludCBhdl9wYWNrZXRfbWFrZV9yZWZjb3VudGVkKEFWUGFja2V0 ICpwa3QpOworKworKy8qKgorKyAqIENyZWF0ZSBhIHdyaXRhYmxlIHJlZmVyZW5jZSBmb3IgdGhl IGRhdGEgZGVzY3JpYmVkIGJ5IGEgZ2l2ZW4gcGFja2V0LAorKyAqIGF2b2lkaW5nIGRhdGEgY29w eSBpZiBwb3NzaWJsZS4KKysgKgorKyAqIEBwYXJhbSBwa3QgUGFja2V0IHdob3NlIGRhdGEgc2hv dWxkIGJlIG1hZGUgd3JpdGFibGUuCisrICoKKysgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgYSBu ZWdhdGl2ZSBBVkVSUk9SIG9uIGZhaWx1cmUuIE9uIGZhaWx1cmUsIHRoZQorKyAqICAgICAgICAg cGFja2V0IGlzIHVuY2hhbmdlZC4KKysgKi8KKytpbnQgYXZfcGFja2V0X21ha2Vfd3JpdGFibGUo QVZQYWNrZXQgKnBrdCk7CisrCisrLyoqCisrICogQ29udmVydCB2YWxpZCB0aW1pbmcgZmllbGRz ICh0aW1lc3RhbXBzIC8gZHVyYXRpb25zKSBpbiBhIHBhY2tldCBmcm9tIG9uZQorKyAqIHRpbWVi YXNlIHRvIGFub3RoZXIuIFRpbWVzdGFtcHMgd2l0aCB1bmtub3duIHZhbHVlcyAoQVZfTk9QVFNf VkFMVUUpIHdpbGwgYmUKKysgKiBpZ25vcmVkLgorKyAqCisrICogQHBhcmFtIHBrdCBwYWNrZXQg b24gd2hpY2ggdGhlIGNvbnZlcnNpb24gd2lsbCBiZSBwZXJmb3JtZWQKKysgKiBAcGFyYW0gdGJf c3JjIHNvdXJjZSB0aW1lYmFzZSwgaW4gd2hpY2ggdGhlIHRpbWluZyBmaWVsZHMgaW4gcGt0IGFy ZQorKyAqICAgICAgICAgICAgICAgZXhwcmVzc2VkCisrICogQHBhcmFtIHRiX2RzdCBkZXN0aW5h dGlvbiB0aW1lYmFzZSwgdG8gd2hpY2ggdGhlIHRpbWluZyBmaWVsZHMgd2lsbCBiZQorKyAqICAg ICAgICAgICAgICAgY29udmVydGVkCisrICovCisrdm9pZCBhdl9wYWNrZXRfcmVzY2FsZV90cyhB VlBhY2tldCAqcGt0LCBBVlJhdGlvbmFsIHRiX3NyYywgQVZSYXRpb25hbCB0Yl9kc3QpOworKwor Ky8qKgorKyAqIEFsbG9jYXRlIGFuIEFWQ29udGFpbmVyRmlmbyBpbnN0YW5jZSBmb3IgQVZQYWNr ZXQuCisrICoKKysgKiBAcGFyYW0gZmxhZ3MgY3VycmVudGx5IHVudXNlZAorKyAqLworK3N0cnVj dCBBVkNvbnRhaW5lckZpZm8gKmF2X2NvbnRhaW5lcl9maWZvX2FsbG9jX2F2cGFja2V0KHVuc2ln bmVkIGZsYWdzKTsKKysKKysvKioKKysgKiBAfQorKyAqLworKworKyNlbmRpZiAvLyBBVkNPREVD X1BBQ0tFVF9ICitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90 aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmNvZGVjL3ZlcnNpb24uaC5mZm1wZWc5IE11c2VTY29y ZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29k ZWMvdmVyc2lvbi5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhp cmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZjb2RlYy92ZXJzaW9uLmguZmZtcGVnOQkyMDI2LTA5LTA3 IDEyOjIzOjQ3LjY3NDUwOTY5MiArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3 b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Y29kZWMvdmVyc2lvbi5oCTIwMjYt MDktMDcgMTI6MjM6NDcuNjc0NDg5MjAyICswMjAwCitAQCAtMCwwICsxLDQ1IEBACisrLyoKKysg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor KyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZu ZGVmIEFWQ09ERUNfVkVSU0lPTl9ICisrI2RlZmluZSBBVkNPREVDX1ZFUlNJT05fSAorKworKy8q KgorKyAqIEBmaWxlCisrICogQGluZ3JvdXAgbGliYXZjCisrICogTGliYXZjb2RlYyB2ZXJzaW9u IG1hY3Jvcy4KKysgKi8KKysKKysjaW5jbHVkZSAibGliYXZ1dGlsL3ZlcnNpb24uaCIKKysKKysj aW5jbHVkZSAidmVyc2lvbl9tYWpvci5oIgorKworKyNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9O X01JTk9SICAgMQorKyNkZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX01JQ1JPIDEwMAorKworKyNk ZWZpbmUgTElCQVZDT0RFQ19WRVJTSU9OX0lOVCAgQVZfVkVSU0lPTl9JTlQoTElCQVZDT0RFQ19W RVJTSU9OX01BSk9SLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMSUJBVkNPREVDX1ZFUlNJT05fTUlOT1IsIFwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQkFWQ09ERUNfVkVSU0lPTl9NSUNSTykKKysj ZGVmaW5lIExJQkFWQ09ERUNfVkVSU0lPTiAgICAgIEFWX1ZFUlNJT04oTElCQVZDT0RFQ19WRVJT SU9OX01BSk9SLCAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExJQkFWQ09ERUNfVkVSU0lPTl9NSU5PUiwgICAgXAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMSUJBVkNPREVDX1ZFUlNJT05fTUlDUk8pCisrI2RlZmlu ZSBMSUJBVkNPREVDX0JVSUxEICAgICAgICBMSUJBVkNPREVDX1ZFUlNJT05fSU5UCisrCisrI2Rl ZmluZSBMSUJBVkNPREVDX0lERU5UICAgICAgICAiTGF2YyIgQVZfU1RSSU5HSUZZKExJQkFWQ09E RUNfVkVSU0lPTikKKysKKysjZW5kaWYgLyogQVZDT0RFQ19WRVJTSU9OX0ggKi8KK2RpZmYgLXVw IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5 L2xpYmF2Y29kZWMvdmVyc2lvbl9tYWpvci5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9m cmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZjb2RlYy92ZXJzaW9uX21h am9yLmgKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5 L2ZmbXBlZy92OS9saWJhdmNvZGVjL3ZlcnNpb25fbWFqb3IuaC5mZm1wZWc5CTIwMjYtMDktMDcg MTI6MjM6NDcuNjc0NTgyNDQ1ICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdv cmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZjb2RlYy92ZXJzaW9uX21ham9yLmgJ MjAyNi0wOS0wNyAxMjoyMzo0Ny42NzQ1NjI3MDAgKzAyMDAKK0BAIC0wLDAgKzEsNDUgQEAKKysv KgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKysgKgorKyAqIEZGbXBlZyBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisr ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgor KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyAqLworKwor KyNpZm5kZWYgQVZDT0RFQ19WRVJTSU9OX01BSk9SX0gKKysjZGVmaW5lIEFWQ09ERUNfVkVSU0lP Tl9NQUpPUl9ICisrCisrLyoqCisrICogQGZpbGUKKysgKiBAaW5ncm91cCBsaWJhdmMKKysgKiBM aWJhdmNvZGVjIHZlcnNpb24gbWFjcm9zLgorKyAqLworKworKyNkZWZpbmUgTElCQVZDT0RFQ19W RVJTSU9OX01BSk9SICA2MworKworKy8qKgorKyAqIEZGX0FQSV8qIGRlZmluZXMgbWF5IGJlIHBs YWNlZCBiZWxvdyB0byBpbmRpY2F0ZSBwdWJsaWMgQVBJIHRoYXQgd2lsbCBiZQorKyAqIGRyb3Bw ZWQgYXQgYSBmdXR1cmUgdmVyc2lvbiBidW1wLiBUaGUgZGVmaW5lcyB0aGVtc2VsdmVzIGFyZSBu b3QgcGFydCBvZgorKyAqIHRoZSBwdWJsaWMgQVBJIGFuZCBtYXkgY2hhbmdlLCBicmVhayBvciBk aXNhcHBlYXIgYXQgYW55IHRpbWUuCisrICoKKysgKiBAbm90ZSwgd2hlbiBidW1waW5nIHRoZSBt YWpvciB2ZXJzaW9uIGl0IGlzIHJlY29tbWVuZGVkIHRvIG1hbnVhbGx5CisrICogZGlzYWJsZSBl YWNoIEZGX0FQSV8qIGluIGl0cyBvd24gY29tbWl0IGluc3RlYWQgb2YgZGlzYWJsaW5nIHRoZW0g YWxsCisrICogYXQgb25jZSB0aHJvdWdoIHRoZSBidW1wLiBUaGlzIGltcHJvdmVzIHRoZSBnaXQg YmlzZWN0LWFiaWxpdHkgb2YgdGhlIGNoYW5nZS4KKysgKi8KKysKKysjZGVmaW5lIEZGX0FQSV9J TklUX1BBQ0tFVCAgICAgICAgIChMSUJBVkNPREVDX1ZFUlNJT05fTUFKT1IgPCA2NCkKKysKKysj ZGVmaW5lIEZGX0FQSV9JTlRSQV9EQ19QUkVDSVNJT04gIChMSUJBVkNPREVDX1ZFUlNJT05fTUFK T1IgPCA2NCkKKysjZGVmaW5lIEZGX0FQSV9NSlBFR19FWFRFUk5fSFVGRiAgIChMSUJBVkNPREVD X1ZFUlNJT05fTUFKT1IgPCA2NCkKKysKKysjZW5kaWYgLyogQVZDT0RFQ19WRVJTSU9OX01BSk9S X0ggKi8KK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJk cGFydHkvZmZtcGVnL3Y5L2xpYmF2Zm9ybWF0L2F2Zm9ybWF0LmguZmZtcGVnOSBNdXNlU2NvcmUt NC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmZvcm1h dC9hdmZvcm1hdC5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhp cmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZmb3JtYXQvYXZmb3JtYXQuaC5mZm1wZWc5CTIwMjYtMDkt MDcgMTI6MjM6NDcuNjc1MjE5MTExICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFt ZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZmb3JtYXQvYXZmb3JtYXQuaAky MDI2LTA5LTA3IDEyOjIzOjQ3LjY3NTA3ODk5NCArMDIwMAorQEAgLTAsMCArMSwzMTkyIEBACisr LyoKKysgKiBjb3B5cmlnaHQgKGMpIDIwMDEgRmFicmljZSBCZWxsYXJkCisrICoKKysgKiBUaGlz IGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVmIEFW Rk9STUFUX0FWRk9STUFUX0gKKysjZGVmaW5lIEFWRk9STUFUX0FWRk9STUFUX0gKKysKKysvKioK KysgKiBAZmlsZQorKyAqIEBpbmdyb3VwIGxpYmF2ZgorKyAqIE1haW4gbGliYXZmb3JtYXQgcHVi bGljIEFQSSBoZWFkZXIKKysgKi8KKysKKysvKioKKysgKiBAZGVmZ3JvdXAgbGliYXZmIGxpYmF2 Zm9ybWF0CisrICogSS9PIGFuZCBNdXhpbmcvRGVtdXhpbmcgTGlicmFyeQorKyAqCisrICogTGli YXZmb3JtYXQgKGxhdmYpIGlzIGEgbGlicmFyeSBmb3IgZGVhbGluZyB3aXRoIHZhcmlvdXMgbWVk aWEgY29udGFpbmVyCisrICogZm9ybWF0cy4gSXRzIG1haW4gdHdvIHB1cnBvc2VzIGFyZSBkZW11 eGluZyAtIGkuZS4gc3BsaXR0aW5nIGEgbWVkaWEgZmlsZQorKyAqIGludG8gY29tcG9uZW50IHN0 cmVhbXMsIGFuZCB0aGUgcmV2ZXJzZSBwcm9jZXNzIG9mIG11eGluZyAtIHdyaXRpbmcgc3VwcGxp ZWQKKysgKiBkYXRhIGluIGEgc3BlY2lmaWVkIGNvbnRhaW5lciBmb3JtYXQuIEl0IGFsc28gaGFz IGFuIEByZWYgbGF2Zl9pbworKyAqICJJL08gbW9kdWxlIiB3aGljaCBzdXBwb3J0cyBhIG51bWJl ciBvZiBwcm90b2NvbHMgZm9yIGFjY2Vzc2luZyB0aGUgZGF0YSAoZS5nLgorKyAqIGZpbGUsIHRj cCwgaHR0cCBhbmQgb3RoZXJzKS4KKysgKiBVbmxlc3MgeW91IGFyZSBhYnNvbHV0ZWx5IHN1cmUg eW91IHdvbid0IHVzZSBsaWJhdmZvcm1hdCdzIG5ldHdvcmsKKysgKiBjYXBhYmlsaXRpZXMsIHlv dSBzaG91bGQgYWxzbyBjYWxsIGF2Zm9ybWF0X25ldHdvcmtfaW5pdCgpLgorKyAqCisrICogQSBz dXBwb3J0ZWQgaW5wdXQgZm9ybWF0IGlzIGRlc2NyaWJlZCBieSBhbiBBVklucHV0Rm9ybWF0IHN0 cnVjdCwgY29udmVyc2VseQorKyAqIGFuIG91dHB1dCBmb3JtYXQgaXMgZGVzY3JpYmVkIGJ5IEFW T3V0cHV0Rm9ybWF0LiBZb3UgY2FuIGl0ZXJhdGUgb3ZlciBhbGwKKysgKiBpbnB1dC9vdXRwdXQg Zm9ybWF0cyB1c2luZyB0aGUgIGF2X2RlbXV4ZXJfaXRlcmF0ZSAvIGF2X211eGVyX2l0ZXJhdGUo KSBmdW5jdGlvbnMuCisrICogVGhlIHByb3RvY29scyBsYXllciBpcyBub3QgcGFydCBvZiB0aGUg cHVibGljIEFQSSwgc28geW91IGNhbiBvbmx5IGdldCB0aGUgbmFtZXMKKysgKiBvZiBzdXBwb3J0 ZWQgcHJvdG9jb2xzIHdpdGggdGhlIGF2aW9fZW51bV9wcm90b2NvbHMoKSBmdW5jdGlvbi4KKysg KgorKyAqIE1haW4gbGF2ZiBzdHJ1Y3R1cmUgdXNlZCBmb3IgYm90aCBtdXhpbmcgYW5kIGRlbXV4 aW5nIGlzIEFWRm9ybWF0Q29udGV4dCwKKysgKiB3aGljaCBleHBvcnRzIGFsbCBpbmZvcm1hdGlv biBhYm91dCB0aGUgZmlsZSBiZWluZyByZWFkIG9yIHdyaXR0ZW4uIEFzIHdpdGgKKysgKiBtb3N0 IExpYmF2Zm9ybWF0IHN0cnVjdHVyZXMsIGl0cyBzaXplIGlzIG5vdCBwYXJ0IG9mIHB1YmxpYyBB QkksIHNvIGl0IGNhbm5vdCBiZQorKyAqIGFsbG9jYXRlZCBvbiBzdGFjayBvciBkaXJlY3RseSB3 aXRoIGF2X21hbGxvYygpLiBUbyBjcmVhdGUgYW4KKysgKiBBVkZvcm1hdENvbnRleHQsIHVzZSBh dmZvcm1hdF9hbGxvY19jb250ZXh0KCkgKHNvbWUgZnVuY3Rpb25zLCBsaWtlCisrICogYXZmb3Jt YXRfb3Blbl9pbnB1dCgpIG1pZ2h0IGRvIHRoYXQgZm9yIHlvdSkuCisrICoKKysgKiBNb3N0IGlt cG9ydGFudGx5IGFuIEFWRm9ybWF0Q29udGV4dCBjb250YWluczoKKysgKiBAbGkgdGhlIEByZWYg QVZGb3JtYXRDb250ZXh0Lmlmb3JtYXQgImlucHV0IiBvciBAcmVmIEFWRm9ybWF0Q29udGV4dC5v Zm9ybWF0CisrICogIm91dHB1dCIgZm9ybWF0LiBJdCBpcyBlaXRoZXIgYXV0b2RldGVjdGVkIG9y IHNldCBieSB1c2VyIGZvciBpbnB1dDsKKysgKiBhbHdheXMgc2V0IGJ5IHVzZXIgZm9yIG91dHB1 dC4KKysgKiBAbGkgYW4gQHJlZiBBVkZvcm1hdENvbnRleHQuc3RyZWFtcyAiYXJyYXkiIG9mIEFW U3RyZWFtcywgd2hpY2ggZGVzY3JpYmUgYWxsCisrICogZWxlbWVudGFyeSBzdHJlYW1zIHN0b3Jl ZCBpbiB0aGUgZmlsZS4gQVZTdHJlYW1zIGFyZSB0eXBpY2FsbHkgcmVmZXJyZWQgdG8KKysgKiB1 c2luZyB0aGVpciBpbmRleCBpbiB0aGlzIGFycmF5LgorKyAqIEBsaSBhbiBAcmVmIEFWRm9ybWF0 Q29udGV4dC5wYiAiSS9PIGNvbnRleHQiLiBJdCBpcyBlaXRoZXIgb3BlbmVkIGJ5IGxhdmYgb3IK KysgKiBzZXQgYnkgdXNlciBmb3IgaW5wdXQsIGFsd2F5cyBzZXQgYnkgdXNlciBmb3Igb3V0cHV0 ICh1bmxlc3MgeW91IGFyZSBkZWFsaW5nCisrICogd2l0aCBhbiBBVkZNVF9OT0ZJTEUgZm9ybWF0 KS4KKysgKgorKyAqIEBzZWN0aW9uIGxhdmZfb3B0aW9ucyBQYXNzaW5nIG9wdGlvbnMgdG8gKGRl KW11eGVycworKyAqIEl0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBsYXZmIG11eGVycyBhbmQg ZGVtdXhlcnMgdXNpbmcgdGhlIEByZWYgYXZvcHRpb25zCisrICogbWVjaGFuaXNtLiBHZW5lcmlj IChmb3JtYXQtaW5kZXBlbmRlbnQpIGxpYmF2Zm9ybWF0IG9wdGlvbnMgYXJlIHByb3ZpZGVkIGJ5 CisrICogQVZGb3JtYXRDb250ZXh0LCB0aGV5IGNhbiBiZSBleGFtaW5lZCBmcm9tIGEgdXNlciBw cm9ncmFtIGJ5IGNhbGxpbmcKKysgKiBhdl9vcHRfbmV4dCgpIC8gYXZfb3B0X2ZpbmQoKSBvbiBh biBhbGxvY2F0ZWQgQVZGb3JtYXRDb250ZXh0IChvciBpdHMgQVZDbGFzcworKyAqIGZyb20gYXZm b3JtYXRfZ2V0X2NsYXNzKCkpLiBQcml2YXRlIChmb3JtYXQtc3BlY2lmaWMpIG9wdGlvbnMgYXJl IHByb3ZpZGVkIGJ5CisrICogQVZGb3JtYXRDb250ZXh0LnByaXZfZGF0YSBpZiBhbmQgb25seSBp ZiBBVklucHV0Rm9ybWF0LnByaXZfY2xhc3MgLworKyAqIEFWT3V0cHV0Rm9ybWF0LnByaXZfY2xh c3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZm9ybWF0IHN0cnVjdCBpcyBub24tTlVMTC4KKysgKiBG dXJ0aGVyIG9wdGlvbnMgbWF5IGJlIHByb3ZpZGVkIGJ5IHRoZSBAcmVmIEFWRm9ybWF0Q29udGV4 dC5wYiAiSS9PIGNvbnRleHQiLAorKyAqIGlmIGl0cyBBVkNsYXNzIGlzIG5vbi1OVUxMLCBhbmQg dGhlIHByb3RvY29scyBsYXllci4gU2VlIHRoZSBkaXNjdXNzaW9uIG9uCisrICogbmVzdGluZyBp biBAcmVmIGF2b3B0aW9ucyBkb2N1bWVudGF0aW9uIHRvIGxlYXJuIGhvdyB0byBhY2Nlc3MgdGhv c2UuCisrICoKKysgKiBAc2VjdGlvbiB1cmxzCisrICogVVJMIHN0cmluZ3MgaW4gbGliYXZmb3Jt YXQgYXJlIG1hZGUgb2YgYSBzY2hlbWUvcHJvdG9jb2wsIGEgJzonLCBhbmQgYQorKyAqIHNjaGVt ZSBzcGVjaWZpYyBzdHJpbmcuIFVSTHMgd2l0aG91dCBhIHNjaGVtZSBhbmQgJzonIHVzZWQgZm9y IGxvY2FsIGZpbGVzCisrICogYXJlIHN1cHBvcnRlZCBidXQgZGVwcmVjYXRlZC4gImZpbGU6IiBz aG91bGQgYmUgdXNlZCBmb3IgbG9jYWwgZmlsZXMuCisrICoKKysgKiBJdCBpcyBpbXBvcnRhbnQg dGhhdCB0aGUgc2NoZW1lIHN0cmluZyBpcyBub3QgdGFrZW4gZnJvbSB1bnRydXN0ZWQKKysgKiBz b3VyY2VzIHdpdGhvdXQgY2hlY2tzLgorKyAqCisrICogTm90ZSB0aGF0IHNvbWUgc2NoZW1lcy9w cm90b2NvbHMgYXJlIHF1aXRlIHBvd2VyZnVsLCBhbGxvd2luZyBhY2Nlc3MgdG8KKysgKiBib3Ro IGxvY2FsIGFuZCByZW1vdGUgZmlsZXMsIHBhcnRzIG9mIHRoZW0sIGNvbmNhdGVuYXRpb25zIG9m IHRoZW0sIGxvY2FsCisrICogYXVkaW8gYW5kIHZpZGVvIGRldmljZXMgYW5kIHNvIG9uLgorKyAq CisrICogQHsKKysgKgorKyAqIEBkZWZncm91cCBsYXZmX2RlY29kaW5nIERlbXV4aW5nCisrICog QHsKKysgKiBEZW11eGVycyByZWFkIGEgbWVkaWEgZmlsZSBhbmQgc3BsaXQgaXQgaW50byBjaHVu a3Mgb2YgZGF0YSAoQGVtIHBhY2tldHMpLiBBCisrICogQHJlZiBBVlBhY2tldCAicGFja2V0IiBj b250YWlucyBvbmUgb3IgbW9yZSBlbmNvZGVkIGZyYW1lcyB3aGljaCBiZWxvbmdzIHRvIGEKKysg KiBzaW5nbGUgZWxlbWVudGFyeSBzdHJlYW0uIEluIHRoZSBsYXZmIEFQSSB0aGlzIHByb2Nlc3Mg aXMgcmVwcmVzZW50ZWQgYnkgdGhlCisrICogYXZmb3JtYXRfb3Blbl9pbnB1dCgpIGZ1bmN0aW9u IGZvciBvcGVuaW5nIGEgZmlsZSwgYXZfcmVhZF9mcmFtZSgpIGZvcgorKyAqIHJlYWRpbmcgYSBz aW5nbGUgcGFja2V0IGFuZCBmaW5hbGx5IGF2Zm9ybWF0X2Nsb3NlX2lucHV0KCksIHdoaWNoIGRv ZXMgdGhlCisrICogY2xlYW51cC4KKysgKgorKyAqIEBzZWN0aW9uIGxhdmZfZGVjb2Rpbmdfb3Bl biBPcGVuaW5nIGEgbWVkaWEgZmlsZQorKyAqIFRoZSBtaW5pbXVtIGluZm9ybWF0aW9uIHJlcXVp cmVkIHRvIG9wZW4gYSBmaWxlIGlzIGl0cyBVUkwsIHdoaWNoCisrICogaXMgcGFzc2VkIHRvIGF2 Zm9ybWF0X29wZW5faW5wdXQoKSwgYXMgaW4gdGhlIGZvbGxvd2luZyBjb2RlOgorKyAqIEBjb2Rl CisrICogY29uc3QgY2hhciAgICAqdXJsID0gImZpbGU6aW4ubXAzIjsKKysgKiBBVkZvcm1hdENv bnRleHQgKnMgPSBOVUxMOworKyAqIGludCByZXQgPSBhdmZvcm1hdF9vcGVuX2lucHV0KCZzLCB1 cmwsIE5VTEwsIE5VTEwpOworKyAqIGlmIChyZXQgPCAwKQorKyAqICAgICBhYm9ydCgpOworKyAq IEBlbmRjb2RlCisrICogVGhlIGFib3ZlIGNvZGUgYXR0ZW1wdHMgdG8gYWxsb2NhdGUgYW4gQVZG b3JtYXRDb250ZXh0LCBvcGVuIHRoZQorKyAqIHNwZWNpZmllZCBmaWxlIChhdXRvZGV0ZWN0aW5n IHRoZSBmb3JtYXQpIGFuZCByZWFkIHRoZSBoZWFkZXIsIGV4cG9ydGluZyB0aGUKKysgKiBpbmZv cm1hdGlvbiBzdG9yZWQgdGhlcmUgaW50byBzLiBTb21lIGZvcm1hdHMgZG8gbm90IGhhdmUgYSBo ZWFkZXIgb3IgZG8gbm90CisrICogc3RvcmUgZW5vdWdoIGluZm9ybWF0aW9uIHRoZXJlLCBzbyBp dCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjYWxsIHRoZQorKyAqIGF2Zm9ybWF0X2ZpbmRfc3Ry ZWFtX2luZm8oKSBmdW5jdGlvbiB3aGljaCB0cmllcyB0byByZWFkIGFuZCBkZWNvZGUgYSBmZXcK KysgKiBmcmFtZXMgdG8gZmluZCBtaXNzaW5nIGluZm9ybWF0aW9uLgorKyAqCisrICogSW4gc29t ZSBjYXNlcyB5b3UgbWlnaHQgd2FudCB0byBwcmVhbGxvY2F0ZSBhbiBBVkZvcm1hdENvbnRleHQg eW91cnNlbGYgd2l0aAorKyAqIGF2Zm9ybWF0X2FsbG9jX2NvbnRleHQoKSBhbmQgZG8gc29tZSB0 d2Vha2luZyBvbiBpdCBiZWZvcmUgcGFzc2luZyBpdCB0bworKyAqIGF2Zm9ybWF0X29wZW5faW5w dXQoKS4gT25lIHN1Y2ggY2FzZSBpcyB3aGVuIHlvdSB3YW50IHRvIHVzZSBjdXN0b20gZnVuY3Rp b25zCisrICogZm9yIHJlYWRpbmcgaW5wdXQgZGF0YSBpbnN0ZWFkIG9mIGxhdmYgaW50ZXJuYWwg SS9PIGxheWVyLgorKyAqIFRvIGRvIHRoYXQsIGNyZWF0ZSB5b3VyIG93biBBVklPQ29udGV4dCB3 aXRoIGF2aW9fYWxsb2NfY29udGV4dCgpLCBwYXNzaW5nCisrICogeW91ciByZWFkaW5nIGNhbGxi YWNrcyB0byBpdC4gVGhlbiBzZXQgdGhlIEBlbSBwYiBmaWVsZCBvZiB5b3VyCisrICogQVZGb3Jt YXRDb250ZXh0IHRvIG5ld2x5IGNyZWF0ZWQgQVZJT0NvbnRleHQuCisrICoKKysgKiBTaW5jZSB0 aGUgZm9ybWF0IG9mIHRoZSBvcGVuZWQgZmlsZSBpcyBpbiBnZW5lcmFsIG5vdCBrbm93biB1bnRp bCBhZnRlcgorKyAqIGF2Zm9ybWF0X29wZW5faW5wdXQoKSBoYXMgcmV0dXJuZWQsIGl0IGlzIG5v dCBwb3NzaWJsZSB0byBzZXQgZGVtdXhlciBwcml2YXRlCisrICogb3B0aW9ucyBvbiBhIHByZWFs bG9jYXRlZCBjb250ZXh0LiBJbnN0ZWFkLCB0aGUgb3B0aW9ucyBzaG91bGQgYmUgcGFzc2VkIHRv CisrICogYXZmb3JtYXRfb3Blbl9pbnB1dCgpIHdyYXBwZWQgaW4gYW4gQVZEaWN0aW9uYXJ5Ogor KyAqIEBjb2RlCisrICogQVZEaWN0aW9uYXJ5ICpvcHRpb25zID0gTlVMTDsKKysgKiBhdl9kaWN0 X3NldCgmb3B0aW9ucywgInZpZGVvX3NpemUiLCAiNjQweDQ4MCIsIDApOworKyAqIGF2X2RpY3Rf c2V0KCZvcHRpb25zLCAicGl4ZWxfZm9ybWF0IiwgInJnYjI0IiwgMCk7CisrICoKKysgKiBpZiAo YXZmb3JtYXRfb3Blbl9pbnB1dCgmcywgdXJsLCBOVUxMLCAmb3B0aW9ucykgPCAwKQorKyAqICAg ICBhYm9ydCgpOworKyAqIGF2X2RpY3RfZnJlZSgmb3B0aW9ucyk7CisrICogQGVuZGNvZGUKKysg KiBUaGlzIGNvZGUgcGFzc2VzIHRoZSBwcml2YXRlIG9wdGlvbnMgJ3ZpZGVvX3NpemUnIGFuZCAn cGl4ZWxfZm9ybWF0JyB0byB0aGUKKysgKiBkZW11eGVyLiBUaGV5IHdvdWxkIGJlIG5lY2Vzc2Fy eSBmb3IgZS5nLiB0aGUgcmF3dmlkZW8gZGVtdXhlciwgc2luY2UgaXQKKysgKiBjYW5ub3Qga25v dyBob3cgdG8gaW50ZXJwcmV0IHJhdyB2aWRlbyBkYXRhIG90aGVyd2lzZS4gSWYgdGhlIGZvcm1h dCB0dXJucworKyAqIG91dCB0byBiZSBzb21ldGhpbmcgZGlmZmVyZW50IHRoYW4gcmF3IHZpZGVv LCB0aG9zZSBvcHRpb25zIHdpbGwgbm90IGJlCisrICogcmVjb2duaXplZCBieSB0aGUgZGVtdXhl ciBhbmQgdGhlcmVmb3JlIHdpbGwgbm90IGJlIGFwcGxpZWQuIFN1Y2ggdW5yZWNvZ25pemVkCisr ICogb3B0aW9ucyBhcmUgdGhlbiByZXR1cm5lZCBpbiB0aGUgb3B0aW9ucyBkaWN0aW9uYXJ5IChy ZWNvZ25pemVkIG9wdGlvbnMgYXJlCisrICogY29uc3VtZWQpLiBUaGUgY2FsbGluZyBwcm9ncmFt IGNhbiBoYW5kbGUgc3VjaCB1bnJlY29nbml6ZWQgb3B0aW9ucyBhcyBpdAorKyAqIHdpc2hlcywg ZS5nLgorKyAqIEBjb2RlCisrICogY29uc3QgQVZEaWN0aW9uYXJ5RW50cnkgKmU7CisrICogaWYg KChlID0gYXZfZGljdF9pdGVyYXRlKG9wdGlvbnMsIE5VTEwpKSkgeworKyAqICAgICBmcHJpbnRm KHN0ZGVyciwgIk9wdGlvbiAlcyBub3QgcmVjb2duaXplZCBieSB0aGUgZGVtdXhlci5cbiIsIGUt PmtleSk7CisrICogICAgIGFib3J0KCk7CisrICogfQorKyAqIEBlbmRjb2RlCisrICoKKysgKiBB ZnRlciB5b3UgaGF2ZSBmaW5pc2hlZCByZWFkaW5nIHRoZSBmaWxlLCB5b3UgbXVzdCBjbG9zZSBp dCB3aXRoCisrICogYXZmb3JtYXRfY2xvc2VfaW5wdXQoKS4gSXQgd2lsbCBmcmVlIGV2ZXJ5dGhp bmcgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlLgorKyAqCisrICogQHNlY3Rpb24gbGF2Zl9kZWNv ZGluZ19yZWFkIFJlYWRpbmcgZnJvbSBhbiBvcGVuZWQgZmlsZQorKyAqIFJlYWRpbmcgZGF0YSBm cm9tIGFuIG9wZW5lZCBBVkZvcm1hdENvbnRleHQgaXMgZG9uZSBieSByZXBlYXRlZGx5IGNhbGxp bmcKKysgKiBhdl9yZWFkX2ZyYW1lKCkgb24gaXQuIEVhY2ggY2FsbCwgaWYgc3VjY2Vzc2Z1bCwg d2lsbCByZXR1cm4gYW4gQVZQYWNrZXQKKysgKiBjb250YWluaW5nIGVuY29kZWQgZGF0YSBmb3Ig b25lIEFWU3RyZWFtLCBpZGVudGlmaWVkIGJ5CisrICogQVZQYWNrZXQuc3RyZWFtX2luZGV4LiBU aGlzIHBhY2tldCBtYXkgYmUgcGFzc2VkIHN0cmFpZ2h0IGludG8gdGhlIGxpYmF2Y29kZWMKKysg KiBkZWNvZGluZyBmdW5jdGlvbnMgYXZjb2RlY19zZW5kX3BhY2tldCgpIG9yIGF2Y29kZWNfZGVj b2RlX3N1YnRpdGxlMigpIGlmIHRoZQorKyAqIGNhbGxlciB3aXNoZXMgdG8gZGVjb2RlIHRoZSBk YXRhLgorKyAqCisrICogQVZQYWNrZXQucHRzLCBBVlBhY2tldC5kdHMgYW5kIEFWUGFja2V0LmR1 cmF0aW9uIHRpbWluZyBpbmZvcm1hdGlvbiB3aWxsIGJlCisrICogc2V0IGlmIGtub3duLiBUaGV5 IG1heSBhbHNvIGJlIHVuc2V0IChpLmUuIEFWX05PUFRTX1ZBTFVFIGZvcgorKyAqIHB0cy9kdHMs IDAgZm9yIGR1cmF0aW9uKSBpZiB0aGUgc3RyZWFtIGRvZXMgbm90IHByb3ZpZGUgdGhlbS4gVGhl IHRpbWluZworKyAqIGluZm9ybWF0aW9uIHdpbGwgYmUgaW4gQVZTdHJlYW0udGltZV9iYXNlIHVu aXRzLCBpLmUuIGl0IGhhcyB0byBiZQorKyAqIG11bHRpcGxpZWQgYnkgdGhlIHRpbWViYXNlIHRv IGNvbnZlcnQgdGhlbSB0byBzZWNvbmRzLgorKyAqCisrICogQSBwYWNrZXQgcmV0dXJuZWQgYnkg YXZfcmVhZF9mcmFtZSgpIGlzIGFsd2F5cyByZWZlcmVuY2UtY291bnRlZCwKKysgKiBpLmUuIEFW UGFja2V0LmJ1ZiBpcyBzZXQgYW5kIHRoZSB1c2VyIG1heSBrZWVwIGl0IGluZGVmaW5pdGVseS4K KysgKiBUaGUgcGFja2V0IG11c3QgYmUgZnJlZWQgd2l0aCBhdl9wYWNrZXRfdW5yZWYoKSB3aGVu IGl0IGlzIG5vCisrICogbG9uZ2VyIG5lZWRlZC4KKysgKgorKyAqIEBzZWN0aW9uIGxhdmZfZGVj b2Rpbmdfc2VlayBTZWVraW5nCisrICogQH0KKysgKgorKyAqIEBkZWZncm91cCBsYXZmX2VuY29k aW5nIE11eGluZworKyAqIEB7CisrICogTXV4ZXJzIHRha2UgZW5jb2RlZCBkYXRhIGluIHRoZSBm b3JtIG9mIEByZWYgQVZQYWNrZXQgIkFWUGFja2V0cyIgYW5kIHdyaXRlCisrICogaXQgaW50byBm aWxlcyBvciBvdGhlciBvdXRwdXQgYnl0ZXN0cmVhbXMgaW4gdGhlIHNwZWNpZmllZCBjb250YWlu ZXIgZm9ybWF0LgorKyAqCisrICogVGhlIG1haW4gQVBJIGZ1bmN0aW9ucyBmb3IgbXV4aW5nIGFy ZSBhdmZvcm1hdF93cml0ZV9oZWFkZXIoKSBmb3Igd3JpdGluZyB0aGUKKysgKiBmaWxlIGhlYWRl ciwgYXZfd3JpdGVfZnJhbWUoKSAvIGF2X2ludGVybGVhdmVkX3dyaXRlX2ZyYW1lKCkgZm9yIHdy aXRpbmcgdGhlCisrICogcGFja2V0cyBhbmQgYXZfd3JpdGVfdHJhaWxlcigpIGZvciBmaW5hbGl6 aW5nIHRoZSBmaWxlLgorKyAqCisrICogQXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbXV4aW5nIHBy b2Nlc3MsIHRoZSBjYWxsZXIgbXVzdCBmaXJzdCBjYWxsCisrICogYXZmb3JtYXRfYWxsb2NfY29u dGV4dCgpIHRvIGNyZWF0ZSBhIG11eGluZyBjb250ZXh0LiBUaGUgY2FsbGVyIHRoZW4gc2V0cyB1 cAorKyAqIHRoZSBtdXhlciBieSBmaWxsaW5nIHRoZSB2YXJpb3VzIGZpZWxkcyBpbiB0aGlzIGNv bnRleHQ6CisrICoKKysgKiAtIFRoZSBAcmVmIEFWRm9ybWF0Q29udGV4dC5vZm9ybWF0ICJvZm9y bWF0IiBmaWVsZCBtdXN0IGJlIHNldCB0byBzZWxlY3QgdGhlCisrICogICBtdXhlciB0aGF0IHdp bGwgYmUgdXNlZC4KKysgKiAtIFVubGVzcyB0aGUgZm9ybWF0IGlzIG9mIHRoZSBBVkZNVF9OT0ZJ TEUgdHlwZSwgdGhlIEByZWYgQVZGb3JtYXRDb250ZXh0LnBiCisrICogICAicGIiIGZpZWxkIG11 c3QgYmUgc2V0IHRvIGFuIG9wZW5lZCBJTyBjb250ZXh0LCBlaXRoZXIgcmV0dXJuZWQgZnJvbQor KyAqICAgYXZpb19vcGVuMigpIG9yIGEgY3VzdG9tIG9uZS4KKysgKiAtIFVubGVzcyB0aGUgZm9y bWF0IGlzIG9mIHRoZSBBVkZNVF9OT1NUUkVBTVMgdHlwZSwgYXQgbGVhc3Qgb25lIHN0cmVhbSBt dXN0CisrICogICBiZSBjcmVhdGVkIHdpdGggdGhlIGF2Zm9ybWF0X25ld19zdHJlYW0oKSBmdW5j dGlvbi4gVGhlIGNhbGxlciBzaG91bGQgZmlsbAorKyAqICAgdGhlIEByZWYgQVZTdHJlYW0uY29k ZWNwYXIgInN0cmVhbSBjb2RlYyBwYXJhbWV0ZXJzIiBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUK KysgKiAgIGNvZGVjIEByZWYgQVZDb2RlY1BhcmFtZXRlcnMuY29kZWNfdHlwZSAidHlwZSIsIEBy ZWYgQVZDb2RlY1BhcmFtZXRlcnMuY29kZWNfaWQKKysgKiAgICJpZCIgYW5kIG90aGVyIHBhcmFt ZXRlcnMgKGUuZy4gd2lkdGggLyBoZWlnaHQsIHRoZSBwaXhlbCBvciBzYW1wbGUgZm9ybWF0LAor KyAqICAgZXRjLikgYXMga25vd24uIFRoZSBAcmVmIEFWU3RyZWFtLnRpbWVfYmFzZSAic3RyZWFt IHRpbWViYXNlIiBzaG91bGQKKysgKiAgIGJlIHNldCB0byB0aGUgdGltZWJhc2UgdGhhdCB0aGUg Y2FsbGVyIGRlc2lyZXMgdG8gdXNlIGZvciB0aGlzIHN0cmVhbSAobm90ZQorKyAqICAgdGhhdCB0 aGUgdGltZWJhc2UgYWN0dWFsbHkgdXNlZCBieSB0aGUgbXV4ZXIgY2FuIGJlIGRpZmZlcmVudCwg YXMgd2lsbCBiZQorKyAqICAgZGVzY3JpYmVkIGxhdGVyKS4KKysgKiAtIEl0IGlzIGFkdmlzZWQg dG8gbWFudWFsbHkgaW5pdGlhbGl6ZSBvbmx5IHRoZSByZWxldmFudCBmaWVsZHMgaW4KKysgKiAg IEFWQ29kZWNQYXJhbWV0ZXJzLCByYXRoZXIgdGhhbiB1c2luZyBAcmVmIGF2Y29kZWNfcGFyYW1l dGVyc19jb3B5KCkgZHVyaW5nCisrICogICByZW11eGluZzogdGhlcmUgaXMgbm8gZ3VhcmFudGVl IHRoYXQgdGhlIGNvZGVjIGNvbnRleHQgdmFsdWVzIHJlbWFpbiB2YWxpZAorKyAqICAgZm9yIGJv dGggaW5wdXQgYW5kIG91dHB1dCBmb3JtYXQgY29udGV4dHMuCisrICogLSBUaGUgY2FsbGVyIG1h eSBmaWxsIGluIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHN1Y2ggYXMgQHJlZgorKyAqICAgQVZG b3JtYXRDb250ZXh0Lm1ldGFkYXRhICJnbG9iYWwiIG9yIEByZWYgQVZTdHJlYW0ubWV0YWRhdGEg InBlci1zdHJlYW0iCisrICogICBtZXRhZGF0YSwgQHJlZiBBVkZvcm1hdENvbnRleHQuY2hhcHRl cnMgImNoYXB0ZXJzIiwgQHJlZgorKyAqICAgQVZGb3JtYXRDb250ZXh0LnByb2dyYW1zICJwcm9n cmFtcyIsIGV0Yy4gYXMgZGVzY3JpYmVkIGluIHRoZQorKyAqICAgQVZGb3JtYXRDb250ZXh0IGRv Y3VtZW50YXRpb24uIFdoZXRoZXIgc3VjaCBpbmZvcm1hdGlvbiB3aWxsIGFjdHVhbGx5IGJlCisr ICogICBzdG9yZWQgaW4gdGhlIG91dHB1dCBkZXBlbmRzIG9uIHdoYXQgdGhlIGNvbnRhaW5lciBm b3JtYXQgYW5kIHRoZSBtdXhlcgorKyAqICAgc3VwcG9ydC4KKysgKgorKyAqIFdoZW4gdGhlIG11 eGluZyBjb250ZXh0IGlzIGZ1bGx5IHNldCB1cCwgdGhlIGNhbGxlciBtdXN0IGNhbGwKKysgKiBh dmZvcm1hdF93cml0ZV9oZWFkZXIoKSB0byBpbml0aWFsaXplIHRoZSBtdXhlciBpbnRlcm5hbHMg YW5kIHdyaXRlIHRoZSBmaWxlCisrICogaGVhZGVyLiBXaGV0aGVyIGFueXRoaW5nIGFjdHVhbGx5 IGlzIHdyaXR0ZW4gdG8gdGhlIElPIGNvbnRleHQgYXQgdGhpcyBzdGVwCisrICogZGVwZW5kcyBv biB0aGUgbXV4ZXIsIGJ1dCB0aGlzIGZ1bmN0aW9uIG11c3QgYWx3YXlzIGJlIGNhbGxlZC4gQW55 IG11eGVyCisrICogcHJpdmF0ZSBvcHRpb25zIG11c3QgYmUgcGFzc2VkIGluIHRoZSBvcHRpb25z IHBhcmFtZXRlciB0byB0aGlzIGZ1bmN0aW9uLgorKyAqCisrICogVGhlIGRhdGEgaXMgdGhlbiBz ZW50IHRvIHRoZSBtdXhlciBieSByZXBlYXRlZGx5IGNhbGxpbmcgYXZfd3JpdGVfZnJhbWUoKSBv cgorKyAqIGF2X2ludGVybGVhdmVkX3dyaXRlX2ZyYW1lKCkgKGNvbnN1bHQgdGhvc2UgZnVuY3Rp b25zJyBkb2N1bWVudGF0aW9uIGZvcgorKyAqIGRpc2N1c3Npb24gb24gdGhlIGRpZmZlcmVuY2Ug YmV0d2VlbiB0aGVtOyBvbmx5IG9uZSBvZiB0aGVtIG1heSBiZSB1c2VkIHdpdGgKKysgKiBhIHNp bmdsZSBtdXhpbmcgY29udGV4dCwgdGhleSBzaG91bGQgbm90IGJlIG1peGVkKS4gRG8gbm90ZSB0 aGF0IHRoZSB0aW1pbmcKKysgKiBpbmZvcm1hdGlvbiBvbiB0aGUgcGFja2V0cyBzZW50IHRvIHRo ZSBtdXhlciBtdXN0IGJlIGluIHRoZSBjb3JyZXNwb25kaW5nCisrICogQVZTdHJlYW0ncyB0aW1l YmFzZS4gVGhhdCB0aW1lYmFzZSBpcyBzZXQgYnkgdGhlIG11eGVyIChpbiB0aGUKKysgKiBhdmZv cm1hdF93cml0ZV9oZWFkZXIoKSBzdGVwKSBhbmQgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSB0 aW1lYmFzZQorKyAqIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLgorKyAqCisrICogT25jZSBhbGwg dGhlIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiwgdGhlIGNhbGxlciBtdXN0IGNhbGwgYXZfd3JpdGVf dHJhaWxlcigpCisrICogdG8gZmx1c2ggYW55IGJ1ZmZlcmVkIHBhY2tldHMgYW5kIGZpbmFsaXpl IHRoZSBvdXRwdXQgZmlsZSwgdGhlbiBjbG9zZSB0aGUgSU8KKysgKiBjb250ZXh0IChpZiBhbnkp IGFuZCBmaW5hbGx5IGZyZWUgdGhlIG11eGluZyBjb250ZXh0IHdpdGgKKysgKiBhdmZvcm1hdF9m cmVlX2NvbnRleHQoKS4KKysgKiBAfQorKyAqCisrICogQGRlZmdyb3VwIGxhdmZfaW8gSS9PIFJl YWQvV3JpdGUKKysgKiBAeworKyAqIEBzZWN0aW9uIGxhdmZfaW9fZGlybGlzdCBEaXJlY3Rvcnkg bGlzdGluZworKyAqIFRoZSBkaXJlY3RvcnkgbGlzdGluZyBBUEkgbWFrZXMgaXQgcG9zc2libGUg dG8gbGlzdCBmaWxlcyBvbiByZW1vdGUgc2VydmVycy4KKysgKgorKyAqIFNvbWUgb2YgcG9zc2li bGUgdXNlIGNhc2VzOgorKyAqIC0gYW4gIm9wZW4gZmlsZSIgZGlhbG9nIHRvIGNob29zZSBmaWxl cyBmcm9tIGEgcmVtb3RlIGxvY2F0aW9uLAorKyAqIC0gYSByZWN1cnNpdmUgbWVkaWEgZmluZGVy IHByb3ZpZGluZyBhIHBsYXllciB3aXRoIGFuIGFiaWxpdHkgdG8gcGxheSBhbGwKKysgKiBmaWxl cyBmcm9tIGEgZ2l2ZW4gZGlyZWN0b3J5LgorKyAqCisrICogQHN1YnNlY3Rpb24gbGF2Zl9pb19k aXJsaXN0X29wZW4gT3BlbmluZyBhIGRpcmVjdG9yeQorKyAqIEF0IGZpcnN0LCBhIGRpcmVjdG9y eSBuZWVkcyB0byBiZSBvcGVuZWQgYnkgY2FsbGluZyBhdmlvX29wZW5fZGlyKCkKKysgKiBzdXBw bGllZCB3aXRoIGEgVVJMIGFuZCwgb3B0aW9uYWxseSwgOjpBVkRpY3Rpb25hcnkgY29udGFpbmlu ZworKyAqIHByb3RvY29sLXNwZWNpZmljIHBhcmFtZXRlcnMuIFRoZSBmdW5jdGlvbiByZXR1cm5z IHplcm8gb3IgcG9zaXRpdmUKKysgKiBpbnRlZ2VyIGFuZCBhbGxvY2F0ZXMgQVZJT0RpckNvbnRl eHQgb24gc3VjY2Vzcy4KKysgKgorKyAqIEBjb2RlCisrICogQVZJT0RpckNvbnRleHQgKmN0eCA9 IE5VTEw7CisrICogaWYgKGF2aW9fb3Blbl9kaXIoJmN0eCwgInNtYjovL2V4YW1wbGUuY29tL3Nv bWVfZGlyIiwgTlVMTCkgPCAwKSB7CisrICogICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IG9w ZW4gZGlyZWN0b3J5LlxuIik7CisrICogICAgIGFib3J0KCk7CisrICogfQorKyAqIEBlbmRjb2Rl CisrICoKKysgKiBUaGlzIGNvZGUgdHJpZXMgdG8gb3BlbiBhIHNhbXBsZSBkaXJlY3RvcnkgdXNp bmcgc21iIHByb3RvY29sIHdpdGhvdXQKKysgKiBhbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXJzLgor KyAqCisrICogQHN1YnNlY3Rpb24gbGF2Zl9pb19kaXJsaXN0X3JlYWQgUmVhZGluZyBlbnRyaWVz CisrICogRWFjaCBkaXJlY3RvcnkncyBlbnRyeSAoaS5lLiBmaWxlLCBhbm90aGVyIGRpcmVjdG9y eSwgYW55dGhpbmcgZWxzZQorKyAqIHdpdGhpbiA6OkFWSU9EaXJFbnRyeVR5cGUpIGlzIHJlcHJl c2VudGVkIGJ5IEFWSU9EaXJFbnRyeS4KKysgKiBSZWFkaW5nIGNvbnNlY3V0aXZlIGVudHJpZXMg ZnJvbSBhbiBvcGVuZWQgQVZJT0RpckNvbnRleHQgaXMgZG9uZSBieQorKyAqIHJlcGVhdGVkbHkg Y2FsbGluZyBhdmlvX3JlYWRfZGlyKCkgb24gaXQuIEVhY2ggY2FsbCByZXR1cm5zIHplcm8gb3IK KysgKiBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHN1Y2Nlc3NmdWwuIFJlYWRpbmcgY2FuIGJlIHN0b3Bw ZWQgcmlnaHQgYWZ0ZXIgdGhlCisrICogTlVMTCBlbnRyeSBoYXMgYmVlbiByZWFkIC0tIGl0IG1l YW5zIHRoZXJlIGFyZSBubyBlbnRyaWVzIGxlZnQgdG8gYmUKKysgKiByZWFkLiBUaGUgZm9sbG93 aW5nIGNvZGUgcmVhZHMgYWxsIGVudHJpZXMgZnJvbSBhIGRpcmVjdG9yeSBhc3NvY2lhdGVkCisr ICogd2l0aCBjdHggYW5kIHByaW50cyB0aGVpciBuYW1lcyB0byBzdGFuZGFyZCBvdXRwdXQuCisr ICogQGNvZGUKKysgKiBBVklPRGlyRW50cnkgKmVudHJ5ID0gTlVMTDsKKysgKiBmb3IgKDs7KSB7 CisrICogICAgIGlmIChhdmlvX3JlYWRfZGlyKGN0eCwgJmVudHJ5KSA8IDApIHsKKysgKiAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IGxpc3QgZGlyZWN0b3J5LlxuIik7CisrICogICAg ICAgICBhYm9ydCgpOworKyAqICAgICB9CisrICogICAgIGlmICghZW50cnkpCisrICogICAgICAg ICBicmVhazsKKysgKiAgICAgcHJpbnRmKCIlc1xuIiwgZW50cnktPm5hbWUpOworKyAqICAgICBh dmlvX2ZyZWVfZGlyZWN0b3J5X2VudHJ5KCZlbnRyeSk7CisrICogfQorKyAqIEBlbmRjb2RlCisr ICogQH0KKysgKgorKyAqIEBkZWZncm91cCBsYXZmX2NvZGVjIERlbXV4ZXJzCisrICogQHsKKysg KiBAZGVmZ3JvdXAgbGF2Zl9jb2RlY19uYXRpdmUgTmF0aXZlIERlbXV4ZXJzCisrICogQHsKKysg KiBAfQorKyAqIEBkZWZncm91cCBsYXZmX2NvZGVjX3dyYXBwZXJzIEV4dGVybmFsIGxpYnJhcnkg d3JhcHBlcnMKKysgKiBAeworKyAqIEB9CisrICogQH0KKysgKiBAZGVmZ3JvdXAgbGF2Zl9wcm90 b3MgSS9PIFByb3RvY29scworKyAqIEB7CisrICogQH0KKysgKiBAZGVmZ3JvdXAgbGF2Zl9pbnRl cm5hbCBJbnRlcm5hbAorKyAqIEB7CisrICogQH0KKysgKiBAfQorKyAqLworKworKyNpbmNsdWRl IDxzdGRpby5oPiAgLyogRklMRSAqLworKworKyNpbmNsdWRlICJsaWJhdmNvZGVjL2NvZGVjX3Bh ci5oIgorKyNpbmNsdWRlICJsaWJhdmNvZGVjL2RlZnMuaCIKKysjaW5jbHVkZSAibGliYXZjb2Rl Yy9wYWNrZXQuaCIKKysKKysjaW5jbHVkZSAibGliYXZ1dGlsL2RpY3QuaCIKKysjaW5jbHVkZSAi bGliYXZ1dGlsL2xvZy5oIgorKworKyNpbmNsdWRlICJhdmlvLmgiCisrI2luY2x1ZGUgImxpYmF2 Zm9ybWF0L3ZlcnNpb25fbWFqb3IuaCIKKysjaWZuZGVmIEhBVkVfQVZfQ09ORklHX0gKKysvKiBX aGVuIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlIGZmbXBlZyBidWlsZCwgb25seSBpbmNsdWRlIHRo ZSBtYWpvciB2ZXJzaW9uCisrICogdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmVidWlsZHMuIFdoZW4g aW5jbHVkZWQgZXh0ZXJuYWxseSwga2VlcCBpbmNsdWRpbmcKKysgKiB0aGUgZnVsbCB2ZXJzaW9u IGluZm9ybWF0aW9uLiAqLworKyNpbmNsdWRlICJsaWJhdmZvcm1hdC92ZXJzaW9uLmgiCisrCisr I2luY2x1ZGUgImxpYmF2dXRpbC9mcmFtZS5oIgorKyNpbmNsdWRlICJsaWJhdmNvZGVjL2NvZGVj LmgiCisrI2VuZGlmCisrCisrc3RydWN0IEFWRm9ybWF0Q29udGV4dDsKKytzdHJ1Y3QgQVZGcmFt ZTsKKysKKysvKioKKysgKiBAZGVmZ3JvdXAgbWV0YWRhdGFfYXBpIFB1YmxpYyBNZXRhZGF0YSBB UEkKKysgKiBAeworKyAqIEBpbmdyb3VwIGxpYmF2ZgorKyAqIFRoZSBtZXRhZGF0YSBBUEkgYWxs b3dzIGxpYmF2Zm9ybWF0IHRvIGV4cG9ydCBtZXRhZGF0YSB0YWdzIHRvIGEgY2xpZW50CisrICog YXBwbGljYXRpb24gd2hlbiBkZW11eGluZy4gQ29udmVyc2VseSBpdCBhbGxvd3MgYSBjbGllbnQg YXBwbGljYXRpb24gdG8KKysgKiBzZXQgbWV0YWRhdGEgd2hlbiBtdXhpbmcuCisrICoKKysgKiBN ZXRhZGF0YSBpcyBleHBvcnRlZCBvciBzZXQgYXMgcGFpcnMgb2Yga2V5L3ZhbHVlIHN0cmluZ3Mg aW4gdGhlICdtZXRhZGF0YScKKysgKiBmaWVsZHMgb2YgdGhlIEFWRm9ybWF0Q29udGV4dCwgQVZT dHJlYW0sIEFWQ2hhcHRlciBhbmQgQVZQcm9ncmFtIHN0cnVjdHMKKysgKiB1c2luZyB0aGUgQHJl ZiBsYXZ1X2RpY3QgIkFWRGljdGlvbmFyeSIgQVBJLiBMaWtlIGFsbCBzdHJpbmdzIGluIEZGbXBl ZywKKysgKiBtZXRhZGF0YSBpcyBhc3N1bWVkIHRvIGJlIFVURi04IGVuY29kZWQgVW5pY29kZS4g Tm90ZSB0aGF0IG1ldGFkYXRhCisrICogZXhwb3J0ZWQgYnkgZGVtdXhlcnMgaXNuJ3QgY2hlY2tl ZCB0byBiZSB2YWxpZCBVVEYtOCBpbiBtb3N0IGNhc2VzLgorKyAqCisrICogSW1wb3J0YW50IGNv bmNlcHRzIHRvIGtlZXAgaW4gbWluZDoKKysgKiAtICBLZXlzIGFyZSB1bmlxdWU7IHRoZXJlIGNh biBuZXZlciBiZSAyIHRhZ3Mgd2l0aCB0aGUgc2FtZSBrZXkuIFRoaXMgaXMKKysgKiAgICBhbHNv IG1lYW50IHNlbWFudGljYWxseSwgaS5lLiwgYSBkZW11eGVyIHNob3VsZCBub3Qga25vd2luZ2x5 IHByb2R1Y2UKKysgKiAgICBzZXZlcmFsIGtleXMgdGhhdCBhcmUgbGl0ZXJhbGx5IGRpZmZlcmVu dCBidXQgc2VtYW50aWNhbGx5IGlkZW50aWNhbC4KKysgKiAgICBFLmcuLCBrZXk9QXV0aG9yNSwg a2V5PUF1dGhvcjYuIEluIHRoaXMgZXhhbXBsZSwgYWxsIGF1dGhvcnMgbXVzdCBiZQorKyAqICAg IHBsYWNlZCBpbiB0aGUgc2FtZSB0YWcuCisrICogLSAgTWV0YWRhdGEgaXMgZmxhdCwgbm90IGhp ZXJhcmNoaWNhbDsgdGhlcmUgYXJlIG5vIHN1YnRhZ3MuIElmIHlvdQorKyAqICAgIHdhbnQgdG8g c3RvcmUsIGUuZy4sIHRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSBjaGlsZCBvZiBwcm9kdWNlciBB bGljZQorKyAqICAgIGFuZCBhY3RvciBCb2IsIHRoYXQgY291bGQgaGF2ZSBrZXk9YWxpY2VfYW5k X2JvYnNfY2hpbGRzX2VtYWlsX2FkZHJlc3MuCisrICogLSAgU2V2ZXJhbCBtb2RpZmllcnMgY2Fu IGJlIGFwcGxpZWQgdG8gdGhlIHRhZyBuYW1lLiBUaGlzIGlzIGRvbmUgYnkKKysgKiAgICBhcHBl bmRpbmcgYSBkYXNoIGNoYXJhY3RlciAoJy0nKSBhbmQgdGhlIG1vZGlmaWVyIG5hbWUgaW4gdGhl IG9yZGVyCisrICogICAgdGhleSBhcHBlYXIgaW4gdGhlIGxpc3QgYmVsb3cgLS0gZS5nLiBmb28t ZW5nLXNvcnQsIG5vdCBmb28tc29ydC1lbmcuCisrICogICAgLSAgbGFuZ3VhZ2UgLS0gYSB0YWcg d2hvc2UgdmFsdWUgaXMgbG9jYWxpemVkIGZvciBhIHBhcnRpY3VsYXIgbGFuZ3VhZ2UKKysgKiAg ICAgICBpcyBhcHBlbmRlZCB3aXRoIHRoZSBJU08gNjM5LTIvQiAzLWxldHRlciBsYW5ndWFnZSBj b2RlLgorKyAqICAgICAgIEZvciBleGFtcGxlOiBBdXRob3ItZ2VyPU1pY2hhZWwsIEF1dGhvci1l bmc9TWlrZQorKyAqICAgICAgIFRoZSBvcmlnaW5hbC9kZWZhdWx0IGxhbmd1YWdlIGlzIGluIHRo ZSB1bnF1YWxpZmllZCAiQXV0aG9yIiB0YWcuCisrICogICAgICAgQSBkZW11eGVyIHNob3VsZCBz ZXQgYSBkZWZhdWx0IGlmIGl0IHNldHMgYW55IHRyYW5zbGF0ZWQgdGFnLgorKyAqICAgIC0gIHNv cnRpbmcgIC0tIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBhIHRhZyB0aGF0IHNob3VsZCBiZSB1c2Vk IGZvcgorKyAqICAgICAgIHNvcnRpbmcgd2lsbCBoYXZlICctc29ydCcgYXBwZW5kZWQuIEUuZy4g YXJ0aXN0PSJUaGUgQmVhdGxlcyIsCisrICogICAgICAgYXJ0aXN0LXNvcnQ9IkJlYXRsZXMsIFRo ZSIuCisrICogLSBTb21lIHByb3RvY29scyBhbmQgZGVtdXhlcnMgc3VwcG9ydCBtZXRhZGF0YSB1 cGRhdGVzLiBBZnRlciBhIHN1Y2Nlc3NmdWwKKysgKiAgIGNhbGwgdG8gYXZfcmVhZF9mcmFtZSgp LCBBVkZvcm1hdENvbnRleHQuZXZlbnRfZmxhZ3Mgb3IgQVZTdHJlYW0uZXZlbnRfZmxhZ3MKKysg KiAgIHdpbGwgYmUgdXBkYXRlZCB0byBpbmRpY2F0ZSBpZiBtZXRhZGF0YSBjaGFuZ2VkLiBJbiBv cmRlciB0byBkZXRlY3QgbWV0YWRhdGEKKysgKiAgIGNoYW5nZXMgb24gYSBzdHJlYW0sIHlvdSBu ZWVkIHRvIGxvb3AgdGhyb3VnaCBhbGwgc3RyZWFtcyBpbiB0aGUgQVZGb3JtYXRDb250ZXh0Cisr ICogICBhbmQgY2hlY2sgdGhlaXIgaW5kaXZpZHVhbCBldmVudF9mbGFncy4KKysgKgorKyAqIC0g IERlbXV4ZXJzIGF0dGVtcHQgdG8gZXhwb3J0IG1ldGFkYXRhIGluIGEgZ2VuZXJpYyBmb3JtYXQs IGhvd2V2ZXIgdGFncworKyAqICAgIHdpdGggbm8gZ2VuZXJpYyBlcXVpdmFsZW50cyBhcmUgbGVm dCBhcyB0aGV5IGFyZSBzdG9yZWQgaW4gdGhlIGNvbnRhaW5lci4KKysgKiAgICBGb2xsb3dzIGEg bGlzdCBvZiBnZW5lcmljIHRhZyBuYW1lczoKKysgKgorKyBAdmVyYmF0aW0KKysgYWxidW0gICAg ICAgIC0tIG5hbWUgb2YgdGhlIHNldCB0aGlzIHdvcmsgYmVsb25ncyB0bworKyBhbGJ1bV9hcnRp c3QgLS0gbWFpbiBjcmVhdG9yIG9mIHRoZSBzZXQvYWxidW0sIGlmIGRpZmZlcmVudCBmcm9tIGFy dGlzdC4KKysgICAgICAgICAgICAgICAgIGUuZy4gIlZhcmlvdXMgQXJ0aXN0cyIgZm9yIGNvbXBp bGF0aW9uIGFsYnVtcy4KKysgYXJ0aXN0ICAgICAgIC0tIG1haW4gY3JlYXRvciBvZiB0aGUgd29y aworKyBjb21tZW50ICAgICAgLS0gYW55IGFkZGl0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIGZp bGUuCisrIGNvbXBvc2VyICAgICAtLSB3aG8gY29tcG9zZWQgdGhlIHdvcmssIGlmIGRpZmZlcmVu dCBmcm9tIGFydGlzdC4KKysgY29weXJpZ2h0ICAgIC0tIG5hbWUgb2YgY29weXJpZ2h0IGhvbGRl ci4KKysgY3JlYXRpb25fdGltZS0tIGRhdGUgd2hlbiB0aGUgZmlsZSB3YXMgY3JlYXRlZCwgcHJl ZmVyYWJseSBpbiBJU08gODYwMS4KKysgZGF0ZSAgICAgICAgIC0tIGRhdGUgd2hlbiB0aGUgd29y ayB3YXMgY3JlYXRlZCwgcHJlZmVyYWJseSBpbiBJU08gODYwMS4KKysgZGlzYyAgICAgICAgIC0t IG51bWJlciBvZiBhIHN1YnNldCwgZS5nLiBkaXNjIGluIGEgbXVsdGktZGlzYyBjb2xsZWN0aW9u LgorKyBkaXNjX3N1YnRpdGxlLS0gdGl0bGUgb2YgYSBzdWJzZXQsIGUuZy4gZGlzYyBzdWJ0aXRs ZSBpbiBhIG11bHRpLWRpc2MgY29sbGVjdGlvbi4KKysgZW5jb2RlciAgICAgIC0tIG5hbWUvc2V0 dGluZ3Mgb2YgdGhlIHNvZnR3YXJlL2hhcmR3YXJlIHRoYXQgcHJvZHVjZWQgdGhlIGZpbGUuCisr IGVuY29kZWRfYnkgICAtLSBwZXJzb24vZ3JvdXAgd2hvIGNyZWF0ZWQgdGhlIGZpbGUuCisrIGZp bGVuYW1lICAgICAtLSBvcmlnaW5hbCBuYW1lIG9mIHRoZSBmaWxlLgorKyBnZW5yZSAgICAgICAg LS0gPHNlbGYtZXZpZGVudD4uCisrIGxhbmd1YWdlICAgICAtLSBtYWluIGxhbmd1YWdlIGluIHdo aWNoIHRoZSB3b3JrIGlzIHBlcmZvcm1lZCwgcHJlZmVyYWJseQorKyAgICAgICAgICAgICAgICAg aW4gSVNPIDYzOS0yIGZvcm1hdC4gTXVsdGlwbGUgbGFuZ3VhZ2VzIGNhbiBiZSBzcGVjaWZpZWQg YnkKKysgICAgICAgICAgICAgICAgIHNlcGFyYXRpbmcgdGhlbSB3aXRoIGNvbW1hcy4KKysgcGVy Zm9ybWVyICAgIC0tIGFydGlzdCB3aG8gcGVyZm9ybWVkIHRoZSB3b3JrLCBpZiBkaWZmZXJlbnQg ZnJvbSBhcnRpc3QuCisrICAgICAgICAgICAgICAgICBFLmcgZm9yICJBbHNvIHNwcmFjaCBaYXJh dGh1c3RyYSIsIGFydGlzdCB3b3VsZCBiZSAiUmljaGFyZAorKyAgICAgICAgICAgICAgICAgU3Ry YXVzcyIgYW5kIHBlcmZvcm1lciAiTG9uZG9uIFBoaWxoYXJtb25pYyBPcmNoZXN0cmEiLgorKyBw dWJsaXNoZXIgICAgLS0gbmFtZSBvZiB0aGUgbGFiZWwvcHVibGlzaGVyLgorKyBzZXJ2aWNlX25h bWUgICAgIC0tIG5hbWUgb2YgdGhlIHNlcnZpY2UgaW4gYnJvYWRjYXN0aW5nIChjaGFubmVsIG5h bWUpLgorKyBzZXJ2aWNlX3Byb3ZpZGVyIC0tIG5hbWUgb2YgdGhlIHNlcnZpY2UgcHJvdmlkZXIg aW4gYnJvYWRjYXN0aW5nLgorKyB0aXRsZSAgICAgICAgLS0gbmFtZSBvZiB0aGUgd29yay4KKysg dHJhY2sgICAgICAgIC0tIG51bWJlciBvZiB0aGlzIHdvcmsgaW4gdGhlIHNldCwgY2FuIGJlIGlu IGZvcm0gY3VycmVudC90b3RhbC4KKysgdmFyaWFudF9iaXRyYXRlIC0tIHRoZSB0b3RhbCBiaXRy YXRlIG9mIHRoZSBiaXRyYXRlIHZhcmlhbnQgdGhhdCB0aGUgY3VycmVudCBzdHJlYW0gaXMgcGFy dCBvZgorKyBAZW5kdmVyYmF0aW0KKysgKgorKyAqIExvb2sgaW4gdGhlIGV4YW1wbGVzIHNlY3Rp b24gZm9yIGFuIGFwcGxpY2F0aW9uIGV4YW1wbGUgaG93IHRvIHVzZSB0aGUgTWV0YWRhdGEgQVBJ LgorKyAqCisrICogQH0KKysgKi8KKysKKysvKiBwYWNrZXQgZnVuY3Rpb25zICovCisrCisrCisr LyoqCisrICogQWxsb2NhdGUgYW5kIHJlYWQgdGhlIHBheWxvYWQgb2YgYSBwYWNrZXQgYW5kIGlu aXRpYWxpemUgaXRzCisrICogZmllbGRzIHdpdGggZGVmYXVsdCB2YWx1ZXMuCisrICoKKysgKiBA cGFyYW0gcyAgICBhc3NvY2lhdGVkIElPIGNvbnRleHQKKysgKiBAcGFyYW0gcGt0IHBhY2tldAor KyAqIEBwYXJhbSBzaXplIGRlc2lyZWQgcGF5bG9hZCBzaXplCisrICogQHJldHVybiA+MCAocmVh ZCBzaXplKSBpZiBPSywgQVZFUlJPUl94eHggb3RoZXJ3aXNlCisrICovCisraW50IGF2X2dldF9w YWNrZXQoQVZJT0NvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QsIGludCBzaXplKTsKKysKKysKKysv KioKKysgKiBSZWFkIGRhdGEgYW5kIGFwcGVuZCBpdCB0byB0aGUgY3VycmVudCBjb250ZW50IG9m IHRoZSBBVlBhY2tldC4KKysgKiBJZiBwa3QtPnNpemUgaXMgMCB0aGlzIGlzIGlkZW50aWNhbCB0 byBhdl9nZXRfcGFja2V0LgorKyAqIE5vdGUgdGhhdCB0aGlzIHVzZXMgYXZfZ3Jvd19wYWNrZXQg YW5kIHRodXMgaW52b2x2ZXMgYSByZWFsbG9jCisrICogd2hpY2ggaXMgaW5lZmZpY2llbnQuIFRo dXMgdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkCisrICogd2hlbiB0aGVyZSBpcyBu byByZWFzb25hYmxlIHdheSB0byBrbm93IChhbiB1cHBlciBib3VuZCBvZikKKysgKiB0aGUgZmlu YWwgc2l6ZS4KKysgKgorKyAqIEBwYXJhbSBzICAgIGFzc29jaWF0ZWQgSU8gY29udGV4dAorKyAq IEBwYXJhbSBwa3QgcGFja2V0CisrICogQHBhcmFtIHNpemUgYW1vdW50IG9mIGRhdGEgdG8gcmVh ZAorKyAqIEByZXR1cm4gPjAgKHJlYWQgc2l6ZSkgaWYgT0ssIEFWRVJST1JfeHh4IG90aGVyd2lz ZSwgcHJldmlvdXMgZGF0YQorKyAqICAgICAgICAgd2lsbCBub3QgYmUgbG9zdCBldmVuIGlmIGFu IGVycm9yIG9jY3Vycy4KKysgKi8KKytpbnQgYXZfYXBwZW5kX3BhY2tldChBVklPQ29udGV4dCAq cywgQVZQYWNrZXQgKnBrdCwgaW50IHNpemUpOworKworKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8qIGlucHV0L291dHB1dCBmb3JtYXRzICov CisrCisrc3RydWN0IEFWQ29kZWNUYWc7CisrCisrLyoqCisrICogVGhpcyBzdHJ1Y3R1cmUgY29u dGFpbnMgdGhlIGRhdGEgYSBmb3JtYXQgaGFzIHRvIHByb2JlIGEgZmlsZS4KKysgKi8KKyt0eXBl ZGVmIHN0cnVjdCBBVlByb2JlRGF0YSB7CisrICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOworKyAg ICB1bnNpZ25lZCBjaGFyICpidWY7IC8qKjwgQnVmZmVyIG11c3QgaGF2ZSBBVlBST0JFX1BBRERJ TkdfU0laRSBvZiBleHRyYSBhbGxvY2F0ZWQgYnl0ZXMgZmlsbGVkIHdpdGggemVyby4gKi8KKysg ICAgaW50IGJ1Zl9zaXplOyAgICAgICAvKio8IFNpemUgb2YgYnVmIGV4Y2VwdCBleHRyYSBhbGxv Y2F0ZWQgYnl0ZXMgKi8KKysgICAgY29uc3QgY2hhciAqbWltZV90eXBlOyAvKio8IG1pbWVfdHlw ZSwgd2hlbiBrbm93bi4gKi8KKyt9IEFWUHJvYmVEYXRhOworKworKyNkZWZpbmUgQVZQUk9CRV9T Q09SRV9SRVRSWSAoQVZQUk9CRV9TQ09SRV9NQVgvNCkKKysjZGVmaW5lIEFWUFJPQkVfU0NPUkVf U1RSRUFNX1JFVFJZIChBVlBST0JFX1NDT1JFX01BWC80LTEpCisrCisrI2RlZmluZSBBVlBST0JF X1NDT1JFX0VYVEVOU0lPTiAgNTAgLy8vPCBzY29yZSBmb3IgZmlsZSBleHRlbnNpb24KKysjZGVm aW5lIEFWUFJPQkVfU0NPUkVfTUlNRV9CT05VUyAzMCAvLy88IHNjb3JlIGFkZGVkIGZvciBtYXRj aGluZyBtaW1lIHR5cGUKKysjZGVmaW5lIEFWUFJPQkVfU0NPUkVfTUFYICAgICAgIDEwMCAvLy88 IG1heGltdW0gc2NvcmUKKysKKysjZGVmaW5lIEFWUFJPQkVfUEFERElOR19TSVpFIDMyICAgICAg ICAgICAgIC8vLzwgZXh0cmEgYWxsb2NhdGVkIGJ5dGVzIGF0IHRoZSBlbmQgb2YgdGhlIHByb2Jl IGJ1ZmZlcgorKworKy8vLyBEZW11eGVyIHdpbGwgdXNlIGF2aW9fb3Blbiwgbm8gb3BlbmVkIGZp bGUgc2hvdWxkIGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCisrI2RlZmluZSBBVkZNVF9OT0ZJ TEUgICAgICAgIDB4MDAwMQorKyNkZWZpbmUgQVZGTVRfTkVFRE5VTUJFUiAgICAweDAwMDIgLyoq PCBOZWVkcyAnJWQnIGluIGZpbGVuYW1lLiAqLworKy8qKgorKyAqIFRoZSBtdXhlci9kZW11eGVy IGlzIGV4cGVyaW1lbnRhbCBhbmQgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLgorKyAqCisr ICogSXQgd2lsbCBub3QgYmUgc2VsZWN0ZWQgYXV0b21hdGljYWxseSwgYW5kIG11c3QgYmUgc3Bl Y2lmaWVkIGV4cGxpY2l0bHkuCisrICovCisrI2RlZmluZSBBVkZNVF9FWFBFUklNRU5UQUwgIDB4 MDAwNAorKyNkZWZpbmUgQVZGTVRfU0hPV19JRFMgICAgICAweDAwMDggLyoqPCBTaG93IGZvcm1h dCBzdHJlYW0gSURzIG51bWJlcnMuICovCisrI2RlZmluZSBBVkZNVF9HTE9CQUxIRUFERVIgIDB4 MDA0MCAvKio8IEZvcm1hdCB3YW50cyBnbG9iYWwgaGVhZGVyLiAqLworKyNkZWZpbmUgQVZGTVRf Tk9USU1FU1RBTVBTICAweDAwODAgLyoqPCBGb3JtYXQgZG9lcyBub3QgbmVlZCAvIGhhdmUgYW55 IHRpbWVzdGFtcHMuICovCisrI2RlZmluZSBBVkZNVF9HRU5FUklDX0lOREVYIDB4MDEwMCAvKio8 IFVzZSBnZW5lcmljIGluZGV4IGJ1aWxkaW5nIGNvZGUuICovCisrI2RlZmluZSBBVkZNVF9UU19E SVNDT05UICAgIDB4MDIwMCAvKio8IEZvcm1hdCBhbGxvd3MgdGltZXN0YW1wIGRpc2NvbnRpbnVp dGllcy4gTm90ZSwgbXV4ZXJzIGFsd2F5cyByZXF1aXJlIHZhbGlkIChtb25vdG9uZSkgdGltZXN0 YW1wcyAqLworKyNkZWZpbmUgQVZGTVRfVkFSSUFCTEVfRlBTICAweDA0MDAgLyoqPCBGb3JtYXQg YWxsb3dzIHZhcmlhYmxlIGZwcy4gKi8KKysjZGVmaW5lIEFWRk1UX05PRElNRU5TSU9OUyAgMHgw ODAwIC8qKjwgRm9ybWF0IGRvZXMgbm90IG5lZWQgd2lkdGgvaGVpZ2h0ICovCisrI2RlZmluZSBB VkZNVF9OT1NUUkVBTVMgICAgIDB4MTAwMCAvKio8IEZvcm1hdCBkb2VzIG5vdCByZXF1aXJlIGFu eSBzdHJlYW1zICovCisrI2RlZmluZSBBVkZNVF9OT0JJTlNFQVJDSCAgIDB4MjAwMCAvKio8IEZv cm1hdCBkb2VzIG5vdCBhbGxvdyB0byBmYWxsIGJhY2sgb24gYmluYXJ5IHNlYXJjaCB2aWEgcmVh ZF90aW1lc3RhbXAgKi8KKysjZGVmaW5lIEFWRk1UX05PR0VOU0VBUkNIICAgMHg0MDAwIC8qKjwg Rm9ybWF0IGRvZXMgbm90IGFsbG93IHRvIGZhbGwgYmFjayBvbiBnZW5lcmljIHNlYXJjaCAqLwor KyNkZWZpbmUgQVZGTVRfTk9fQllURV9TRUVLICAweDgwMDAgLyoqPCBGb3JtYXQgZG9lcyBub3Qg YWxsb3cgc2Vla2luZyBieSBieXRlcyAqLworKyNkZWZpbmUgQVZGTVRfVFNfTk9OU1RSSUNUIDB4 MjAwMDAgLyoqPCBGb3JtYXQgZG9lcyBub3QgcmVxdWlyZSBzdHJpY3RseQorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nIHRpbWVzdGFtcHMsIGJ1dCB0 aGV5IG11c3QKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGwg YmUgbW9ub3RvbmljICovCisrI2RlZmluZSBBVkZNVF9UU19ORUdBVElWRSAgMHg0MDAwMCAvKio8 IEZvcm1hdCBhbGxvd3MgbXV4aW5nIG5lZ2F0aXZlCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRpbWVzdGFtcHMuIElmIG5vdCBzZXQgdGhlIHRpbWVzdGFtcAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHNoaWZ0ZWQgaW4g YXZfd3JpdGVfZnJhbWUgYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGF2X2ludGVybGVhdmVkX3dyaXRlX2ZyYW1lIHNvIHRoZXkKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgZnJvbSAwLgorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBUaGUgdXNlciBvciBtdXhlciBjYW4gb3ZlcnJpZGUgdGhp cyB0aHJvdWdoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRm9y bWF0Q29udGV4dC5hdm9pZF9uZWdhdGl2ZV90cworKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqLworKyNkZWZpbmUgQVZGTVRfRklYRURfRlJBTUVTSVpFIDB4ODAwMDAg LyoqPCBGb3JtYXQgd2FudHMgQHJlZiBBVkNvZGVjUGFyYW1ldGVycy5mcmFtZV9zaXplICJmaXhl ZCBzaXplIGF1ZGlvIGZyYW1lcy4iICovCisrCisrI2RlZmluZSBBVkZNVF9TRUVLX1RPX1BUUyAg IDB4NDAwMDAwMCAvKio8IFNlZWtpbmcgaXMgYmFzZWQgb24gUFRTICovCisrCisrLyoqCisrICog QGFkZHRvZ3JvdXAgbGF2Zl9lbmNvZGluZworKyAqIEB7CisrICovCisrdHlwZWRlZiBzdHJ1Y3Qg QVZPdXRwdXRGb3JtYXQgeworKyAgICBjb25zdCBjaGFyICpuYW1lOworKyAgICAvKioKKysgICAg ICogRGVzY3JpcHRpdmUgbmFtZSBmb3IgdGhlIGZvcm1hdCwgbWVhbnQgdG8gYmUgbW9yZSBodW1h bi1yZWFkYWJsZQorKyAgICAgKiB0aGFuIG5hbWUuIFlvdSBzaG91bGQgdXNlIHRoZSBOVUxMX0lG X0NPTkZJR19TTUFMTCgpIG1hY3JvCisrICAgICAqIHRvIGRlZmluZSBpdC4KKysgICAgICovCisr ICAgIGNvbnN0IGNoYXIgKmxvbmdfbmFtZTsKKysgICAgY29uc3QgY2hhciAqbWltZV90eXBlOwor KyAgICBjb25zdCBjaGFyICpleHRlbnNpb25zOyAvKio8IGNvbW1hLXNlcGFyYXRlZCBmaWxlbmFt ZSBleHRlbnNpb25zICovCisrICAgIC8qIG91dHB1dCBzdXBwb3J0ICovCisrICAgIGVudW0gQVZD b2RlY0lEIGF1ZGlvX2NvZGVjOyAgICAvKio8IGRlZmF1bHQgYXVkaW8gY29kZWMgKi8KKysgICAg ZW51bSBBVkNvZGVjSUQgdmlkZW9fY29kZWM7ICAgIC8qKjwgZGVmYXVsdCB2aWRlbyBjb2RlYyAq LworKyAgICBlbnVtIEFWQ29kZWNJRCBzdWJ0aXRsZV9jb2RlYzsgLyoqPCBkZWZhdWx0IHN1YnRp dGxlIGNvZGVjICovCisrICAgIC8qKgorKyAgICAgKiBjYW4gdXNlIGZsYWdzOiBBVkZNVF9OT0ZJ TEUsIEFWRk1UX05FRUROVU1CRVIsIEFWRk1UX0VYUEVSSU1FTlRBTCwKKysgICAgICogQVZGTVRf R0xPQkFMSEVBREVSLCBBVkZNVF9OT1RJTUVTVEFNUFMsIEFWRk1UX1ZBUklBQkxFX0ZQUywKKysg ICAgICogQVZGTVRfTk9ESU1FTlNJT05TLCBBVkZNVF9OT1NUUkVBTVMsCisrICAgICAqIEFWRk1U X1RTX05PTlNUUklDVCwgQVZGTVRfVFNfTkVHQVRJVkUsIEFWRk1UX0ZJWEVEX0ZSQU1FU0laRQor KyAgICAgKi8KKysgICAgaW50IGZsYWdzOworKworKyAgICAvKioKKysgICAgICogTGlzdCBvZiBz dXBwb3J0ZWQgY29kZWNfaWQtY29kZWNfdGFnIHBhaXJzLCBvcmRlcmVkIGJ5ICJiZXR0ZXIKKysg ICAgICogY2hvaWNlIGZpcnN0Ii4gVGhlIGFycmF5cyBhcmUgYWxsIHRlcm1pbmF0ZWQgYnkgQVZf Q09ERUNfSURfTk9ORS4KKysgICAgICovCisrICAgIGNvbnN0IHN0cnVjdCBBVkNvZGVjVGFnICog Y29uc3QgKmNvZGVjX3RhZzsKKysKKysKKysgICAgY29uc3QgQVZDbGFzcyAqcHJpdl9jbGFzczsg Ly8vPCBBVkNsYXNzIGZvciB0aGUgcHJpdmF0ZSBjb250ZXh0CisrfSBBVk91dHB1dEZvcm1hdDsK KysvKioKKysgKiBAfQorKyAqLworKworKy8qKgorKyAqIEBhZGR0b2dyb3VwIGxhdmZfZGVjb2Rp bmcKKysgKiBAeworKyAqLworK3R5cGVkZWYgc3RydWN0IEFWSW5wdXRGb3JtYXQgeworKyAgICAv KioKKysgICAgICogQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzaG9ydCBuYW1lcyBmb3IgdGhl IGZvcm1hdC4gTmV3IG5hbWVzCisrICAgICAqIG1heSBiZSBhcHBlbmRlZCB3aXRoIGEgbWlub3Ig YnVtcC4KKysgICAgICovCisrICAgIGNvbnN0IGNoYXIgKm5hbWU7CisrCisrICAgIC8qKgorKyAg ICAgKiBEZXNjcmlwdGl2ZSBuYW1lIGZvciB0aGUgZm9ybWF0LCBtZWFudCB0byBiZSBtb3JlIGh1 bWFuLXJlYWRhYmxlCisrICAgICAqIHRoYW4gbmFtZS4gWW91IHNob3VsZCB1c2UgdGhlIE5VTExf SUZfQ09ORklHX1NNQUxMKCkgbWFjcm8KKysgICAgICogdG8gZGVmaW5lIGl0LgorKyAgICAgKi8K KysgICAgY29uc3QgY2hhciAqbG9uZ19uYW1lOworKworKyAgICAvKioKKysgICAgICogQ2FuIHVz ZSBmbGFnczogQVZGTVRfTk9GSUxFLCBBVkZNVF9ORUVETlVNQkVSLCBBVkZNVF9FWFBFUklNRU5U QUwsCisrICAgICAqIEFWRk1UX1NIT1dfSURTLCBBVkZNVF9OT1RJTUVTVEFNUFMsIEFWRk1UX0dF TkVSSUNfSU5ERVgsCisrICAgICAqIEFWRk1UX1RTX0RJU0NPTlQsIEFWRk1UX05PQklOU0VBUkNI LCBBVkZNVF9OT0dFTlNFQVJDSCwKKysgICAgICogQVZGTVRfTk9fQllURV9TRUVLLCBBVkZNVF9T RUVLX1RPX1BUUy4KKysgICAgICovCisrICAgIGludCBmbGFnczsKKysKKysgICAgLyoqCisrICAg ICAqIElmIGV4dGVuc2lvbnMgYXJlIGRlZmluZWQsIHRoZW4gbm8gcHJvYmUgaXMgZG9uZS4gWW91 IHNob3VsZAorKyAgICAgKiB1c3VhbGx5IG5vdCB1c2UgZXh0ZW5zaW9uIGZvcm1hdCBndWVzc2lu ZyBiZWNhdXNlIGl0IGlzIG5vdAorKyAgICAgKiByZWxpYWJsZSBlbm91Z2gKKysgICAgICovCisr ICAgIGNvbnN0IGNoYXIgKmV4dGVuc2lvbnM7CisrCisrICAgIGNvbnN0IHN0cnVjdCBBVkNvZGVj VGFnICogY29uc3QgKmNvZGVjX3RhZzsKKysKKysgICAgY29uc3QgQVZDbGFzcyAqcHJpdl9jbGFz czsgLy8vPCBBVkNsYXNzIGZvciB0aGUgcHJpdmF0ZSBjb250ZXh0CisrCisrICAgIC8qKgorKyAg ICAgKiBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtaW1lIHR5cGVzLgorKyAgICAgKiBJdCBpcyB1 c2VkIGNoZWNrIGZvciBtYXRjaGluZyBtaW1lIHR5cGVzIHdoaWxlIHByb2JpbmcuCisrICAgICAq IEBzZWUgYXZfcHJvYmVfaW5wdXRfZm9ybWF0MgorKyAgICAgKi8KKysgICAgY29uc3QgY2hhciAq bWltZV90eXBlOworK30gQVZJbnB1dEZvcm1hdDsKKysvKioKKysgKiBAfQorKyAqLworKworK2Vu dW0gQVZTdHJlYW1QYXJzZVR5cGUgeworKyAgICBBVlNUUkVBTV9QQVJTRV9OT05FLAorKyAgICBB VlNUUkVBTV9QQVJTRV9GVUxMLCAgICAgICAvKio8IGZ1bGwgcGFyc2luZyBhbmQgcmVwYWNrICov CisrICAgIEFWU1RSRUFNX1BBUlNFX0hFQURFUlMsICAgIC8qKjwgT25seSBwYXJzZSBoZWFkZXJz LCBkbyBub3QgcmVwYWNrLiAqLworKyAgICBBVlNUUkVBTV9QQVJTRV9USU1FU1RBTVBTLCAvKio8 IGZ1bGwgcGFyc2luZyBhbmQgaW50ZXJwb2xhdGlvbiBvZiB0aW1lc3RhbXBzIGZvciBmcmFtZXMg bm90IHN0YXJ0aW5nIG9uIGEgcGFja2V0IGJvdW5kYXJ5ICovCisrICAgIEFWU1RSRUFNX1BBUlNF X0ZVTExfT05DRSwgIC8qKjwgZnVsbCBwYXJzaW5nIGFuZCByZXBhY2sgb2YgdGhlIGZpcnN0IGZy YW1lIG9ubHksIG9ubHkgaW1wbGVtZW50ZWQgZm9yIEguMjY0IGN1cnJlbnRseSAqLworKyAgICBB VlNUUkVBTV9QQVJTRV9GVUxMX1JBVywgICAvKio8IGZ1bGwgcGFyc2luZyBhbmQgcmVwYWNrIHdp dGggdGltZXN0YW1wIGFuZCBwb3NpdGlvbiBnZW5lcmF0aW9uIGJ5IHBhcnNlciBmb3IgcmF3Cisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBhc3N1bWVzIHRoYXQgZWFj aCBwYWNrZXQgaW4gdGhlIGZpbGUgY29udGFpbnMgbm8gZGVtdXhlciBsZXZlbCBoZWFkZXJzIGFu ZAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3QgY29kZWMgbGV2ZWwg ZGF0YSwgb3RoZXJ3aXNlIHBvc2l0aW9uIGdlbmVyYXRpb24gd291bGQgZmFpbCAqLworK307Cisr CisrdHlwZWRlZiBzdHJ1Y3QgQVZJbmRleEVudHJ5IHsKKysgICAgaW50NjRfdCBwb3M7CisrICAg IGludDY0X3QgdGltZXN0YW1wOyAgICAgICAgLyoqPAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqIFRpbWVzdGFtcCBpbiBBVlN0cmVhbS50aW1lX2Jhc2UgdW5pdHMsIHByZWZlcmFi bHkgdGhlIHRpbWUgZnJvbSB3aGljaCBvbiBjb3JyZWN0bHkgZGVjb2RlZCBmcmFtZXMgYXJlIGF2 YWlsYWJsZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHdoZW4gc2Vla2luZyB0 byB0aGlzIGVudHJ5LiBUaGF0IG1lYW5zIHByZWZlcmFibGUgUFRTIG9uIGtleWZyYW1lIGJhc2Vk IGZvcm1hdHMuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQnV0IGRlbXV4ZXJz IGNhbiBjaG9vc2UgdG8gc3RvcmUgYSBkaWZmZXJlbnQgdGltZXN0YW1wLCBpZiBpdCBpcyBtb3Jl IGNvbnZlbmllbnQgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvciBub3RoaW5nIGJldHRlcgorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlzIGtub3duCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCisrI2RlZmluZSBBVklOREVYX0tFWUZSQU1FIDB4MDAwMQorKyNk ZWZpbmUgQVZJTkRFWF9ESVNDQVJEX0ZSQU1FICAweDAwMDIgICAgLyoqCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBGbGFnIGlzIHVzZWQgdG8gaW5kaWNhdGUg d2hpY2ggZnJhbWUgc2hvdWxkIGJlIGRpc2NhcmRlZCBhZnRlciBkZWNvZGluZy4KKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworKyAgICBpbnQgZmxhZ3M6MjsK KysgICAgaW50IHNpemU6MzA7IC8vWWVhaCwgdHJ5aW5nIHRvIGtlZXAgdGhlIHNpemUgb2YgdGhp cyBzbWFsbCB0byByZWR1Y2UgbWVtb3J5IHJlcXVpcmVtZW50cyAoaXQgaXMgMjQgdnMuIDMyIGJ5 dGVzIGR1ZSB0byBwb3NzaWJsZSA4LWJ5dGUgYWxpZ25tZW50KS4KKysgICAgaW50IG1pbl9kaXN0 YW5jZTsgICAgICAgICAvKio8IE1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0aGlzIGFuZCB0aGUg cHJldmlvdXMga2V5ZnJhbWUsIHVzZWQgdG8gYXZvaWQgdW5uZWVkZWQgc2VhcmNoaW5nLiAqLwor K30gQVZJbmRleEVudHJ5OworKworKy8qKgorKyAqIFRoZSBzdHJlYW0gc2hvdWxkIGJlIGNob3Nl biBieSBkZWZhdWx0IGFtb25nIG90aGVyIHN0cmVhbXMgb2YgdGhlIHNhbWUgdHlwZSwKKysgKiB1 bmxlc3MgdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIG90aGVyd2lzZS4KKysgKi8K KysjZGVmaW5lIEFWX0RJU1BPU0lUSU9OX0RFRkFVTFQgICAgICAgICAgICAgICgxIDw8IDApCisr LyoqCisrICogVGhlIHN0cmVhbSBpcyBub3QgaW4gb3JpZ2luYWwgbGFuZ3VhZ2UuCisrICoKKysg KiBAbm90ZSBBVl9ESVNQT1NJVElPTl9PUklHSU5BTCBpcyB0aGUgaW52ZXJzZSBvZiB0aGlzIGRp c3Bvc2l0aW9uLiBBdCBtb3N0CisrICogICAgICAgb25lIG9mIHRoZW0gc2hvdWxkIGJlIHNldCBp biBwcm9wZXJseSB0YWdnZWQgc3RyZWFtcy4KKysgKiBAbm90ZSBUaGlzIGRpc3Bvc2l0aW9uIG1h eSBhcHBseSB0byBhbnkgc3RyZWFtIHR5cGUsIG5vdCBqdXN0IGF1ZGlvLgorKyAqLworKyNkZWZp bmUgQVZfRElTUE9TSVRJT05fRFVCICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKysvKioKKysg KiBUaGUgc3RyZWFtIGlzIGluIG9yaWdpbmFsIGxhbmd1YWdlLgorKyAqCisrICogQHNlZSB0aGUg bm90ZXMgZm9yIEFWX0RJU1BPU0lUSU9OX0RVQgorKyAqLworKyNkZWZpbmUgQVZfRElTUE9TSVRJ T05fT1JJR0lOQUwgICAgICAgICAgICAgKDEgPDwgMikKKysvKioKKysgKiBUaGUgc3RyZWFtIGlz IGEgY29tbWVudGFyeSB0cmFjay4KKysgKi8KKysjZGVmaW5lIEFWX0RJU1BPU0lUSU9OX0NPTU1F TlQgICAgICAgICAgICAgICgxIDw8IDMpCisrLyoqCisrICogVGhlIHN0cmVhbSBjb250YWlucyBz b25nIGx5cmljcy4KKysgKi8KKysjZGVmaW5lIEFWX0RJU1BPU0lUSU9OX0xZUklDUyAgICAgICAg ICAgICAgICgxIDw8IDQpCisrLyoqCisrICogVGhlIHN0cmVhbSBjb250YWlucyBrYXJhb2tlIGF1 ZGlvLgorKyAqLworKyNkZWZpbmUgQVZfRElTUE9TSVRJT05fS0FSQU9LRSAgICAgICAgICAgICAg KDEgPDwgNSkKKysKKysvKioKKysgKiBUcmFjayBzaG91bGQgYmUgdXNlZCBkdXJpbmcgcGxheWJh Y2sgYnkgZGVmYXVsdC4KKysgKiBVc2VmdWwgZm9yIHN1YnRpdGxlIHRyYWNrIHRoYXQgc2hvdWxk IGJlIGRpc3BsYXllZAorKyAqIGV2ZW4gd2hlbiB1c2VyIGRpZCBub3QgZXhwbGljaXRseSBhc2sg Zm9yIHN1YnRpdGxlcy4KKysgKi8KKysjZGVmaW5lIEFWX0RJU1BPU0lUSU9OX0ZPUkNFRCAgICAg ICAgICAgICAgICgxIDw8IDYpCisrLyoqCisrICogVGhlIHN0cmVhbSBpcyBpbnRlbmRlZCBmb3Ig aGVhcmluZyBpbXBhaXJlZCBhdWRpZW5jZXMuCisrICovCisrI2RlZmluZSBBVl9ESVNQT1NJVElP Tl9IRUFSSU5HX0lNUEFJUkVEICAgICAoMSA8PCA3KQorKy8qKgorKyAqIFRoZSBzdHJlYW0gaXMg aW50ZW5kZWQgZm9yIHZpc3VhbGx5IGltcGFpcmVkIGF1ZGllbmNlcy4KKysgKi8KKysjZGVmaW5l IEFWX0RJU1BPU0lUSU9OX1ZJU1VBTF9JTVBBSVJFRCAgICAgICgxIDw8IDgpCisrLyoqCisrICog VGhlIGF1ZGlvIHN0cmVhbSBjb250YWlucyBtdXNpYyBhbmQgc291bmQgZWZmZWN0cyB3aXRob3V0 IHZvaWNlLgorKyAqLworKyNkZWZpbmUgQVZfRElTUE9TSVRJT05fQ0xFQU5fRUZGRUNUUyAgICAg ICAgKDEgPDwgOSkKKysvKioKKysgKiBUaGUgc3RyZWFtIGlzIHN0b3JlZCBpbiB0aGUgZmlsZSBh cyBhbiBhdHRhY2hlZCBwaWN0dXJlLyJjb3ZlciBhcnQiIChlLmcuCisrICogQVBJQyBmcmFtZSBp biBJRDN2MikuIFRoZSBmaXJzdCAodXN1YWxseSBvbmx5KSBwYWNrZXQgYXNzb2NpYXRlZCB3aXRo IGl0CisrICogd2lsbCBiZSByZXR1cm5lZCBhbW9uZyB0aGUgZmlyc3QgZmV3IHBhY2tldHMgcmVh ZCBmcm9tIHRoZSBmaWxlIHVubGVzcworKyAqIHNlZWtpbmcgdGFrZXMgcGxhY2UuIEl0IGNhbiBh bHNvIGJlIGFjY2Vzc2VkIGF0IGFueSB0aW1lIGluCisrICogQVZTdHJlYW0uYXR0YWNoZWRfcGlj LgorKyAqLworKyNkZWZpbmUgQVZfRElTUE9TSVRJT05fQVRUQUNIRURfUElDICAgICAgICAgKDEg PDwgMTApCisrLyoqCisrICogVGhlIHN0cmVhbSBpcyBzcGFyc2UsIGFuZCBjb250YWlucyB0aHVt Ym5haWwgaW1hZ2VzLCBvZnRlbiBjb3JyZXNwb25kaW5nCisrICogdG8gY2hhcHRlciBtYXJrZXJz LiBPbmx5IGV2ZXIgdXNlZCB3aXRoIEFWX0RJU1BPU0lUSU9OX0FUVEFDSEVEX1BJQy4KKysgKi8K KysjZGVmaW5lIEFWX0RJU1BPU0lUSU9OX1RJTUVEX1RIVU1CTkFJTFMgICAgICgxIDw8IDExKQor KworKy8qKgorKyAqIFRoZSBzdHJlYW0gaXMgaW50ZW5kZWQgdG8gYmUgbWl4ZWQgd2l0aCBhIHNw YXRpYWwgYXVkaW8gdHJhY2suIEZvciBleGFtcGxlLAorKyAqIGl0IGNvdWxkIGJlIHVzZWQgZm9y IG5hcnJhdGlvbiBvciBzdGVyZW8gbXVzaWMsIGFuZCBtYXkgcmVtYWluIHVuY2hhbmdlZCBieQor KyAqIGxpc3RlbmVyIGhlYWQgcm90YXRpb24uCisrICovCisrI2RlZmluZSBBVl9ESVNQT1NJVElP Tl9OT05fRElFR0VUSUMgICAgICAgICAoMSA8PCAxMikKKysKKysvKioKKysgKiBUaGUgc3VidGl0 bGUgc3RyZWFtIGNvbnRhaW5zIGNhcHRpb25zLCBwcm92aWRpbmcgYSB0cmFuc2NyaXB0aW9uIGFu ZCBwb3NzaWJseQorKyAqIGEgdHJhbnNsYXRpb24gb2YgYXVkaW8uIFR5cGljYWxseSBpbnRlbmRl ZCBmb3IgaGVhcmluZy1pbXBhaXJlZCBhdWRpZW5jZXMuCisrICovCisrI2RlZmluZSBBVl9ESVNQ T1NJVElPTl9DQVBUSU9OUyAgICAgICAgICAgICAoMSA8PCAxNikKKysvKioKKysgKiBUaGUgc3Vi dGl0bGUgc3RyZWFtIGNvbnRhaW5zIGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgdmlkZW8g Y29udGVudC4KKysgKiBUeXBpY2FsbHkgaW50ZW5kZWQgZm9yIHZpc3VhbGx5LWltcGFpcmVkIGF1 ZGllbmNlcyBvciBmb3IgdGhlIGNhc2VzIHdoZXJlIHRoZQorKyAqIHZpZGVvIGNhbm5vdCBiZSBz ZWVuLgorKyAqLworKyNkZWZpbmUgQVZfRElTUE9TSVRJT05fREVTQ1JJUFRJT05TICAgICAgICAg KDEgPDwgMTcpCisrLyoqCisrICogVGhlIHN1YnRpdGxlIHN0cmVhbSBjb250YWlucyB0aW1lLWFs aWduZWQgbWV0YWRhdGEgdGhhdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUKKysgKiBkaXJlY3RseSBw cmVzZW50ZWQgdG8gdGhlIHVzZXIuCisrICovCisrI2RlZmluZSBBVl9ESVNQT1NJVElPTl9NRVRB REFUQSAgICAgICAgICAgICAoMSA8PCAxOCkKKysvKioKKysgKiBUaGUgc3RyZWFtIGlzIGludGVu ZGVkIHRvIGJlIG1peGVkIHdpdGggYW5vdGhlciBzdHJlYW0gYmVmb3JlIHByZXNlbnRhdGlvbi4K KysgKiBVc2VkIGZvciBleGFtcGxlIHRvIHNpZ25hbCB0aGUgc3RyZWFtIGNvbnRhaW5zIGFuIGlt YWdlIHBhcnQgb2YgYSBIRUlGIGdyaWQsCisrICogb3IgZm9yIG1peF90eXBlPTAgaW4gbXBlZ3Rz LgorKyAqLworKyNkZWZpbmUgQVZfRElTUE9TSVRJT05fREVQRU5ERU5UICAgICAgICAgICAgKDEg PDwgMTkpCisrLyoqCisrICogVGhlIHZpZGVvIHN0cmVhbSBjb250YWlucyBzdGlsbCBpbWFnZXMu CisrICovCisrI2RlZmluZSBBVl9ESVNQT1NJVElPTl9TVElMTF9JTUFHRSAgICAgICAgICAoMSA8 PCAyMCkKKysvKioKKysgKiBUaGUgdmlkZW8gc3RyZWFtIGNvbnRhaW5zIG11bHRpcGxlIGxheWVy cywgZS5nLiBzdGVyZW9zY29waWMgdmlld3MgKGNmLiBILjI2NAorKyAqIEFubmV4IEcvSCwgb3Ig SEVWQyBBbm5leCBGKS4KKysgKi8KKysjZGVmaW5lIEFWX0RJU1BPU0lUSU9OX01VTFRJTEFZRVIg ICAgICAgICAgICgxIDw8IDIxKQorKworKy8qKgorKyAqIEByZXR1cm4gVGhlIEFWX0RJU1BPU0lU SU9OXyogZmxhZyBjb3JyZXNwb25kaW5nIHRvIGRpc3Agb3IgYSBuZWdhdGl2ZSBlcnJvcgorKyAq ICAgICAgICAgY29kZSBpZiBkaXNwIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBrbm93biBzdHJl YW0gZGlzcG9zaXRpb24uCisrICovCisraW50IGF2X2Rpc3Bvc2l0aW9uX2Zyb21fc3RyaW5nKGNv bnN0IGNoYXIgKmRpc3ApOworKworKy8qKgorKyAqIEBwYXJhbSBkaXNwb3NpdGlvbiBhIGNvbWJp bmF0aW9uIG9mIEFWX0RJU1BPU0lUSU9OXyogdmFsdWVzCisrICogQHJldHVybiBUaGUgc3RyaW5n IGRlc2NyaXB0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxvd2VzdCBzZXQgYml0IGluCisrICog ICAgICAgICBkaXNwb3NpdGlvbi4gTlVMTCB3aGVuIHRoZSBsb3dlc3Qgc2V0IGJpdCBkb2VzIG5v dCBjb3JyZXNwb25kCisrICogICAgICAgICB0byBhIGtub3duIGRpc3Bvc2l0aW9uIG9yIHdoZW4g ZGlzcG9zaXRpb24gaXMgMC4KKysgKi8KKytjb25zdCBjaGFyICphdl9kaXNwb3NpdGlvbl90b19z dHJpbmcoaW50IGRpc3Bvc2l0aW9uKTsKKysKKysvKioKKysgKiBPcHRpb25zIGZvciBiZWhhdmlv ciBvbiB0aW1lc3RhbXAgd3JhcCBkZXRlY3Rpb24uCisrICovCisrI2RlZmluZSBBVl9QVFNfV1JB UF9JR05PUkUgICAgICAwICAgLy8vPCBpZ25vcmUgdGhlIHdyYXAKKysjZGVmaW5lIEFWX1BUU19X UkFQX0FERF9PRkZTRVQgIDEgICAvLy88IGFkZCB0aGUgZm9ybWF0IHNwZWNpZmljIG9mZnNldCBv biB3cmFwIGRldGVjdGlvbgorKyNkZWZpbmUgQVZfUFRTX1dSQVBfU1VCX09GRlNFVCAgLTEgIC8v Lzwgc3VidHJhY3QgdGhlIGZvcm1hdCBzcGVjaWZpYyBvZmZzZXQgb24gd3JhcCBkZXRlY3Rpb24K KysKKysvKioKKysgKiBTdHJlYW0gc3RydWN0dXJlLgorKyAqIE5ldyBmaWVsZHMgY2FuIGJlIGFk ZGVkIHRvIHRoZSBlbmQgd2l0aCBtaW5vciB2ZXJzaW9uIGJ1bXBzLgorKyAqIFJlbW92YWwsIHJl b3JkZXJpbmcgYW5kIGNoYW5nZXMgdG8gZXhpc3RpbmcgZmllbGRzIHJlcXVpcmUgYSBtYWpvcgor KyAqIHZlcnNpb24gYnVtcC4KKysgKiBzaXplb2YoQVZTdHJlYW0pIG11c3Qgbm90IGJlIHVzZWQg b3V0c2lkZSBsaWJhdiouCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZTdHJlYW0geworKyAgICAv KioKKysgICAgICogQSBjbGFzcyBmb3IgQHJlZiBhdm9wdGlvbnMuIFNldCBvbiBzdHJlYW0gY3Jl YXRpb24uCisrICAgICAqLworKyAgICBjb25zdCBBVkNsYXNzICphdl9jbGFzczsKKysKKysgICAg aW50IGluZGV4OyAgICAvKio8IHN0cmVhbSBpbmRleCBpbiBBVkZvcm1hdENvbnRleHQgKi8KKysg ICAgLyoqCisrICAgICAqIEZvcm1hdC1zcGVjaWZpYyBzdHJlYW0gSUQuCisrICAgICAqIGRlY29k aW5nOiBzZXQgYnkgbGliYXZmb3JtYXQKKysgICAgICogZW5jb2Rpbmc6IHNldCBieSB0aGUgdXNl ciwgcmVwbGFjZWQgYnkgbGliYXZmb3JtYXQgaWYgbGVmdCB1bnNldAorKyAgICAgKi8KKysgICAg aW50IGlkOworKworKyAgICAvKioKKysgICAgICogQ29kZWMgcGFyYW1ldGVycyBhc3NvY2lhdGVk IHdpdGggdGhpcyBzdHJlYW0uIEFsbG9jYXRlZCBhbmQgZnJlZWQgYnkKKysgICAgICogbGliYXZm b3JtYXQgaW4gYXZmb3JtYXRfbmV3X3N0cmVhbSgpIGFuZCBhdmZvcm1hdF9mcmVlX2NvbnRleHQo KQorKyAgICAgKiByZXNwZWN0aXZlbHkuCisrICAgICAqCisrICAgICAqIC0gZGVtdXhpbmc6IGZp bGxlZCBieSBsaWJhdmZvcm1hdCBvbiBzdHJlYW0gY3JlYXRpb24gb3IgaW4KKysgICAgICogICAg ICAgICAgICAgYXZmb3JtYXRfZmluZF9zdHJlYW1faW5mbygpCisrICAgICAqIC0gbXV4aW5nOiBm aWxsZWQgYnkgdGhlIGNhbGxlciBiZWZvcmUgYXZmb3JtYXRfd3JpdGVfaGVhZGVyKCkKKysgICAg ICovCisrICAgIEFWQ29kZWNQYXJhbWV0ZXJzICpjb2RlY3BhcjsKKysKKysgICAgdm9pZCAqcHJp dl9kYXRhOworKworKyAgICAvKioKKysgICAgICogVGhpcyBpcyB0aGUgZnVuZGFtZW50YWwgdW5p dCBvZiB0aW1lIChpbiBzZWNvbmRzKSBpbiB0ZXJtcworKyAgICAgKiBvZiB3aGljaCBmcmFtZSB0 aW1lc3RhbXBzIGFyZSByZXByZXNlbnRlZC4KKysgICAgICoKKysgICAgICogZGVjb2Rpbmc6IHNl dCBieSBsaWJhdmZvcm1hdAorKyAgICAgKiBlbmNvZGluZzogTWF5IGJlIHNldCBieSB0aGUgY2Fs bGVyIGJlZm9yZSBhdmZvcm1hdF93cml0ZV9oZWFkZXIoKSB0bworKyAgICAgKiAgICAgICAgICAg cHJvdmlkZSBhIGhpbnQgdG8gdGhlIG11eGVyIGFib3V0IHRoZSBkZXNpcmVkIHRpbWViYXNlLiBJ bgorKyAgICAgKiAgICAgICAgICAgYXZmb3JtYXRfd3JpdGVfaGVhZGVyKCksIHRoZSBtdXhlciB3 aWxsIG92ZXJ3cml0ZSB0aGlzIGZpZWxkCisrICAgICAqICAgICAgICAgICB3aXRoIHRoZSB0aW1l YmFzZSB0aGF0IHdpbGwgYWN0dWFsbHkgYmUgdXNlZCBmb3IgdGhlIHRpbWVzdGFtcHMKKysgICAg ICogICAgICAgICAgIHdyaXR0ZW4gaW50byB0aGUgZmlsZSAod2hpY2ggbWF5IG9yIG1heSBub3Qg YmUgcmVsYXRlZCB0byB0aGUKKysgICAgICogICAgICAgICAgIHVzZXItcHJvdmlkZWQgb25lLCBk ZXBlbmRpbmcgb24gdGhlIGZvcm1hdCkuCisrICAgICAqLworKyAgICBBVlJhdGlvbmFsIHRpbWVf YmFzZTsKKysKKysgICAgLyoqCisrICAgICAqIERlY29kaW5nOiBwdHMgb2YgdGhlIGZpcnN0IGZy YW1lIG9mIHRoZSBzdHJlYW0gaW4gcHJlc2VudGF0aW9uIG9yZGVyLCBpbiBzdHJlYW0gdGltZSBi YXNlLgorKyAgICAgKiBPbmx5IHNldCB0aGlzIGlmIHlvdSBhcmUgYWJzb2x1dGVseSAxMDAlIHN1 cmUgdGhhdCB0aGUgdmFsdWUgeW91IHNldAorKyAgICAgKiBpdCB0byByZWFsbHkgaXMgdGhlIHB0 cyBvZiB0aGUgZmlyc3QgZnJhbWUuCisrICAgICAqIFRoaXMgbWF5IGJlIHVuZGVmaW5lZCAoQVZf Tk9QVFNfVkFMVUUpLgorKyAgICAgKiBAbm90ZSBUaGUgQVNGIGhlYWRlciBkb2VzIE5PVCBjb250 YWluIGEgY29ycmVjdCBzdGFydF90aW1lIHRoZSBBU0YKKysgICAgICogZGVtdXhlciBtdXN0IE5P VCBzZXQgdGhpcy4KKysgICAgICovCisrICAgIGludDY0X3Qgc3RhcnRfdGltZTsKKysKKysgICAg LyoqCisrICAgICAqIERlY29kaW5nOiBkdXJhdGlvbiBvZiB0aGUgc3RyZWFtLCBpbiBzdHJlYW0g dGltZSBiYXNlLgorKyAgICAgKiBJZiBhIHNvdXJjZSBmaWxlIGRvZXMgbm90IHNwZWNpZnkgYSBk dXJhdGlvbiwgYnV0IGRvZXMgc3BlY2lmeQorKyAgICAgKiBhIGJpdHJhdGUsIHRoaXMgdmFsdWUg d2lsbCBiZSBlc3RpbWF0ZWQgZnJvbSBiaXRyYXRlIGFuZCBmaWxlIHNpemUuCisrICAgICAqCisr ICAgICAqIEVuY29kaW5nOiBNYXkgYmUgc2V0IGJ5IHRoZSBjYWxsZXIgYmVmb3JlIGF2Zm9ybWF0 X3dyaXRlX2hlYWRlcigpIHRvCisrICAgICAqIHByb3ZpZGUgYSBoaW50IHRvIHRoZSBtdXhlciBh Ym91dCB0aGUgZXN0aW1hdGVkIGR1cmF0aW9uLgorKyAgICAgKi8KKysgICAgaW50NjRfdCBkdXJh dGlvbjsKKysKKysgICAgaW50NjRfdCBuYl9mcmFtZXM7ICAgICAgICAgICAgICAgICAvLy88IG51 bWJlciBvZiBmcmFtZXMgaW4gdGhpcyBzdHJlYW0gaWYga25vd24gb3IgMAorKworKyAgICAvKioK KysgICAgICogU3RyZWFtIGRpc3Bvc2l0aW9uIC0gYSBjb21iaW5hdGlvbiBvZiBBVl9ESVNQT1NJ VElPTl8qIGZsYWdzLgorKyAgICAgKiAtIGRlbXV4aW5nOiBzZXQgYnkgbGliYXZmb3JtYXQgd2hl biBjcmVhdGluZyB0aGUgc3RyZWFtIG9yIGluCisrICAgICAqICAgICAgICAgICAgIGF2Zm9ybWF0 X2ZpbmRfc3RyZWFtX2luZm8oKS4KKysgICAgICogLSBtdXhpbmc6IG1heSBiZSBzZXQgYnkgdGhl IGNhbGxlciBiZWZvcmUgYXZmb3JtYXRfd3JpdGVfaGVhZGVyKCkuCisrICAgICAqLworKyAgICBp bnQgZGlzcG9zaXRpb247CisrCisrICAgIGVudW0gQVZEaXNjYXJkIGRpc2NhcmQ7IC8vLzwgU2Vs ZWN0cyB3aGljaCBwYWNrZXRzIGNhbiBiZSBkaXNjYXJkZWQgYXQgd2lsbCBhbmQgZG8gbm90IG5l ZWQgdG8gYmUgZGVtdXhlZC4KKysKKysgICAgLyoqCisrICAgICAqIHNhbXBsZSBhc3BlY3QgcmF0 aW8gKDAgaWYgdW5rbm93bikKKysgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuCisrICAg ICAqIC0gZGVjb2Rpbmc6IFNldCBieSBsaWJhdmZvcm1hdC4KKysgICAgICovCisrICAgIEFWUmF0 aW9uYWwgc2FtcGxlX2FzcGVjdF9yYXRpbzsKKysKKysgICAgQVZEaWN0aW9uYXJ5ICptZXRhZGF0 YTsKKysKKysgICAgLyoqCisrICAgICAqIEF2ZXJhZ2UgZnJhbWVyYXRlCisrICAgICAqCisrICAg ICAqIC0gZGVtdXhpbmc6IE1heSBiZSBzZXQgYnkgbGliYXZmb3JtYXQgd2hlbiBjcmVhdGluZyB0 aGUgc3RyZWFtIG9yIGluCisrICAgICAqICAgICAgICAgICAgIGF2Zm9ybWF0X2ZpbmRfc3RyZWFt X2luZm8oKS4KKysgICAgICogLSBtdXhpbmc6IE1heSBiZSBzZXQgYnkgdGhlIGNhbGxlciBiZWZv cmUgYXZmb3JtYXRfd3JpdGVfaGVhZGVyKCkuCisrICAgICAqLworKyAgICBBVlJhdGlvbmFsIGF2 Z19mcmFtZV9yYXRlOworKworKyAgICAvKioKKysgICAgICogRm9yIHN0cmVhbXMgd2l0aCBBVl9E SVNQT1NJVElPTl9BVFRBQ0hFRF9QSUMgZGlzcG9zaXRpb24sIHRoaXMgcGFja2V0CisrICAgICAq IHdpbGwgY29udGFpbiB0aGUgYXR0YWNoZWQgcGljdHVyZS4KKysgICAgICoKKysgICAgICogZGVj b2Rpbmc6IHNldCBieSBsaWJhdmZvcm1hdCwgbXVzdCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGNh bGxlci4KKysgICAgICogZW5jb2Rpbmc6IHVudXNlZAorKyAgICAgKi8KKysgICAgQVZQYWNrZXQg YXR0YWNoZWRfcGljOworKworKyAgICAvKioKKysgICAgICogRmxhZ3MgaW5kaWNhdGluZyBldmVu dHMgaGFwcGVuaW5nIG9uIHRoZSBzdHJlYW0sIGEgY29tYmluYXRpb24gb2YKKysgICAgICogQVZT VFJFQU1fRVZFTlRfRkxBR18qLgorKyAgICAgKgorKyAgICAgKiAtIGRlbXV4aW5nOiBtYXkgYmUg c2V0IGJ5IHRoZSBkZW11eGVyIGluIGF2Zm9ybWF0X29wZW5faW5wdXQoKSwKKysgICAgICogICBh dmZvcm1hdF9maW5kX3N0cmVhbV9pbmZvKCkgYW5kIGF2X3JlYWRfZnJhbWUoKS4gRmxhZ3MgbXVz dCBiZSBjbGVhcmVkCisrICAgICAqICAgYnkgdGhlIHVzZXIgb25jZSB0aGUgZXZlbnQgaGFzIGJl ZW4gaGFuZGxlZC4KKysgICAgICogLSBtdXhpbmc6IG1heSBiZSBzZXQgYnkgdGhlIHVzZXIgYWZ0 ZXIgYXZmb3JtYXRfd3JpdGVfaGVhZGVyKCkuIHRvCisrICAgICAqICAgaW5kaWNhdGUgYSB1c2Vy LXRyaWdnZXJlZCBldmVudC4gIFRoZSBtdXhlciB3aWxsIGNsZWFyIHRoZSBmbGFncyBmb3IKKysg ICAgICogICBldmVudHMgaXQgaGFzIGhhbmRsZWQgaW4gYXZfW2ludGVybGVhdmVkXV93cml0ZV9m cmFtZSgpLgorKyAgICAgKi8KKysgICAgaW50IGV2ZW50X2ZsYWdzOworKy8qKgorKyAqIC0gZGVt dXhpbmc6IHRoZSBkZW11eGVyIHJlYWQgbmV3IG1ldGFkYXRhIGZyb20gdGhlIGZpbGUgYW5kIHVw ZGF0ZWQKKysgKiAgICAgQVZTdHJlYW0ubWV0YWRhdGEgYWNjb3JkaW5nbHkKKysgKiAtIG11eGlu ZzogdGhlIHVzZXIgdXBkYXRlZCBBVlN0cmVhbS5tZXRhZGF0YSBhbmQgd2lzaGVzIHRoZSBtdXhl ciB0byB3cml0ZQorKyAqICAgICBpdCBpbnRvIHRoZSBmaWxlCisrICovCisrI2RlZmluZSBBVlNU UkVBTV9FVkVOVF9GTEFHX01FVEFEQVRBX1VQREFURUQgMHgwMDAxCisrLyoqCisrICogLSBkZW11 eGluZzogbmV3IHBhY2tldHMgZm9yIHRoaXMgc3RyZWFtIHdlcmUgcmVhZCBmcm9tIHRoZSBmaWxl LiBUaGlzCisrICogICBldmVudCBpcyBpbmZvcm1hdGlvbmFsIG9ubHkgYW5kIGRvZXMgbm90IGd1 YXJhbnRlZSB0aGF0IG5ldyBwYWNrZXRzCisrICogICBmb3IgdGhpcyBzdHJlYW0gd2lsbCBuZWNl c3NhcmlseSBiZSByZXR1cm5lZCBmcm9tIGF2X3JlYWRfZnJhbWUoKS4KKysgKi8KKysjZGVmaW5l IEFWU1RSRUFNX0VWRU5UX0ZMQUdfTkVXX1BBQ0tFVFMgKDEgPDwgMSkKKysKKysgICAgLyoqCisr ICAgICAqIFJlYWwgYmFzZSBmcmFtZXJhdGUgb2YgdGhlIHN0cmVhbS4KKysgICAgICogVGhpcyBp cyB0aGUgbG93ZXN0IGZyYW1lcmF0ZSB3aXRoIHdoaWNoIGFsbCB0aW1lc3RhbXBzIGNhbiBiZQor KyAgICAgKiByZXByZXNlbnRlZCBhY2N1cmF0ZWx5IChpdCBpcyB0aGUgbGVhc3QgY29tbW9uIG11 bHRpcGxlIG9mIGFsbAorKyAgICAgKiBmcmFtZXJhdGVzIGluIHRoZSBzdHJlYW0pLiBOb3RlLCB0 aGlzIHZhbHVlIGlzIGp1c3QgYSBndWVzcyEKKysgICAgICogRm9yIGV4YW1wbGUsIGlmIHRoZSB0 aW1lIGJhc2UgaXMgMS85MDAwMCBhbmQgYWxsIGZyYW1lcyBoYXZlIGVpdGhlcgorKyAgICAgKiBh cHByb3hpbWF0ZWx5IDM2MDAgb3IgMTgwMCB0aW1lciB0aWNrcywgdGhlbiByX2ZyYW1lX3JhdGUg d2lsbCBiZSA1MC8xLgorKyAgICAgKi8KKysgICAgQVZSYXRpb25hbCByX2ZyYW1lX3JhdGU7Cisr CisrICAgIC8qKgorKyAgICAgKiBOdW1iZXIgb2YgYml0cyBpbiB0aW1lc3RhbXBzLiBVc2VkIGZv ciB3cmFwcGluZyBjb250cm9sLgorKyAgICAgKgorKyAgICAgKiAtIGRlbXV4aW5nOiBzZXQgYnkg bGliYXZmb3JtYXQKKysgICAgICogLSBtdXhpbmc6IHNldCBieSBsaWJhdmZvcm1hdAorKyAgICAg KgorKyAgICAgKi8KKysgICAgaW50IHB0c193cmFwX2JpdHM7CisrfSBBVlN0cmVhbTsKKysKKysv KioKKysgKiBBVlN0cmVhbUdyb3VwVGlsZUdyaWQgaG9sZHMgaW5mb3JtYXRpb24gb24gaG93IHRv IGNvbWJpbmUgc2V2ZXJhbAorKyAqIGluZGVwZW5kZW50IGltYWdlcyBvbiBhIHNpbmdsZSBjYW52 YXMgZm9yIHByZXNlbnRhdGlvbi4KKysgKgorKyAqIFRoZSBvdXRwdXQgc2hvdWxkIGJlIGEgQHJl ZiBBVlN0cmVhbUdyb3VwVGlsZUdyaWQuYmFja2dyb3VuZCAiYmFja2dyb3VuZCIKKysgKiBjb2xv cmVkIEByZWYgQVZTdHJlYW1Hcm91cFRpbGVHcmlkLmNvZGVkX3dpZHRoICJjb2RlZF93aWR0aCIg eAorKyAqIEByZWYgQVZTdHJlYW1Hcm91cFRpbGVHcmlkLmNvZGVkX2hlaWdodCAiY29kZWRfaGVp Z2h0IiBjYW52YXMgd2hlcmUgYQorKyAqIEByZWYgQVZTdHJlYW1Hcm91cFRpbGVHcmlkLm5iX3Rp bGVzICJuYl90aWxlcyIgYW1vdW50IG9mIHRpbGVzIGFyZSBwbGFjZWQgaW4KKysgKiB0aGUgb3Jk ZXIgdGhleSBhcHBlYXIgaW4gdGhlIEByZWYgQVZTdHJlYW1Hcm91cFRpbGVHcmlkLm9mZnNldHMg Im9mZnNldHMiCisrICogYXJyYXksIGF0IHRoZSBleGFjdCBvZmZzZXQgZGVzY3JpYmVkIGZvciB0 aGVtLiBJbiBwYXJ0aWN1bGFyLCBpZiB0d28gb3IgbW9yZQorKyAqIHRpbGVzIG92ZXJsYXAsIHRo ZSBpbWFnZSB3aXRoIGhpZ2hlciBpbmRleCBpbiB0aGUKKysgKiBAcmVmIEFWU3RyZWFtR3JvdXBU aWxlR3JpZC5vZmZzZXRzICJvZmZzZXRzIiBhcnJheSB0YWtlcyBwcmlvcml0eS4KKysgKiBOb3Rl IHRoYXQgYSBzaW5nbGUgaW1hZ2UgbWF5IGJlIHVzZWQgbXVsdGlwbGUgdGltZXMsIGkuZS4gbXVs dGlwbGUgZW50cmllcworKyAqIGluIEByZWYgQVZTdHJlYW1Hcm91cFRpbGVHcmlkLm9mZnNldHMg Im9mZnNldHMiIG1heSBoYXZlIHRoZSBzYW1lIHZhbHVlIG9mCisrICogaWR4LgorKyAqCisrICog VGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIGdyaWQgd2l0aCAzIHJvd3Mg YW5kIDQgY29sdW1uczoKKysgKgorKyAqICstLS0rLS0tKy0tLSstLS0rCisrICogfCAwIHwgMSB8 IDIgfCAzIHwKKysgKiArLS0tKy0tLSstLS0rLS0tKworKyAqIHwgNCB8IDUgfCA2IHwgNyB8Cisr ICogKy0tLSstLS0rLS0tKy0tLSsKKysgKiB8IDggfCA5IHwxMCB8MTEgfAorKyAqICstLS0rLS0t Ky0tLSstLS0rCisrICoKKysgKiBBc3N1bWluZyBhbGwgdGlsZXMgaGF2ZSBhIGRpbWVuc2lvbiBv ZiA1MTJ4NTEyLCB0aGUKKysgKiBAcmVmIEFWU3RyZWFtR3JvdXBUaWxlR3JpZC5vZmZzZXRzICJv ZmZzZXQiIG9mIHRoZSB0b3BsZWZ0IHBpeGVsIG9mCisrICogdGhlIGZpcnN0IEByZWYgQVZTdHJl YW1Hcm91cC5zdHJlYW1zICJzdHJlYW0iIGluIHRoZSBncm91cCBpcyAiMCwwIiwgdGhlCisrICog QHJlZiBBVlN0cmVhbUdyb3VwVGlsZUdyaWQub2Zmc2V0cyAib2Zmc2V0IiBvZiB0aGUgdG9wbGVm dCBwaXhlbCBvZgorKyAqIHRoZSBzZWNvbmQgQHJlZiBBVlN0cmVhbUdyb3VwLnN0cmVhbXMgInN0 cmVhbSIgaW4gdGhlIGdyb3VwIGlzICI1MTIsMCIsIHRoZQorKyAqIEByZWYgQVZTdHJlYW1Hcm91 cFRpbGVHcmlkLm9mZnNldHMgIm9mZnNldCIgb2YgdGhlIHRvcGxlZnQgcGl4ZWwgb2YKKysgKiB0 aGUgZmlmdGggQHJlZiBBVlN0cmVhbUdyb3VwLnN0cmVhbXMgInN0cmVhbSIgaW4gdGhlIGdyb3Vw IGlzICIwLDUxMiIsIHRoZQorKyAqIEByZWYgQVZTdHJlYW1Hcm91cFRpbGVHcmlkLm9mZnNldHMg Im9mZnNldCIsIG9mIHRoZSB0b3BsZWZ0IHBpeGVsIG9mCisrICogdGhlIHNpeHRoIEByZWYgQVZT dHJlYW1Hcm91cC5zdHJlYW1zICJzdHJlYW0iIGluIHRoZSBncm91cCBpcyAiNTEyLDUxMiIsCisr ICogZXRjLgorKyAqCisrICogVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgY2FudmFz IHdpdGggb3ZlcmxhcHBpbmcgdGlsZXM6CisrICoKKysgKiArLS0tLS0tLS0tLS0rCisrICogfCAg ICUlJSUlICAgfAorKyAqIHwqKiolJTMlJUBAQHwKKysgKiB8KiowJSUlJSUyQEB8CisrICogfCoq KiMjMUBAQEBAfAorKyAqIHwgICAjIyMjIyAgIHwKKysgKiArLS0tLS0tLS0tLS0rCisrICoKKysg KiBBc3N1bWluZyBhIGNhbnZhcyB3aXRoIHNpemUgMTAyNHgxMDI0IGFuZCBhbGwgdGlsZXMgd2l0 aCBhIGRpbWVuc2lvbiBvZgorKyAqIDUxMng1MTIsIGEgcG9zc2libGUgQHJlZiBBVlN0cmVhbUdy b3VwVGlsZUdyaWQub2Zmc2V0cyAib2Zmc2V0IiBmb3IgdGhlCisrICogdG9wbGVmdCBwaXhlbCBv ZiB0aGUgZmlyc3QgQHJlZiBBVlN0cmVhbUdyb3VwLnN0cmVhbXMgInN0cmVhbSIgaW4gdGhlIGdy b3VwCisrICogd291bGQgYmUgMHgyNTYsIHRoZSBAcmVmIEFWU3RyZWFtR3JvdXBUaWxlR3JpZC5v ZmZzZXRzICJvZmZzZXQiIGZvciB0aGUKKysgKiB0b3BsZWZ0IHBpeGVsIG9mIHRoZSBzZWNvbmQg QHJlZiBBVlN0cmVhbUdyb3VwLnN0cmVhbXMgInN0cmVhbSIgaW4gdGhlIGdyb3VwCisrICogd291 bGQgYmUgMjU2eDUxMiwgdGhlIEByZWYgQVZTdHJlYW1Hcm91cFRpbGVHcmlkLm9mZnNldHMgIm9m ZnNldCIgZm9yIHRoZQorKyAqIHRvcGxlZnQgcGl4ZWwgb2YgdGhlIHRoaXJkIEByZWYgQVZTdHJl YW1Hcm91cC5zdHJlYW1zICJzdHJlYW0iIGluIHRoZSBncm91cAorKyAqIHdvdWxkIGJlIDUxMngy NTYsIGFuZCB0aGUgQHJlZiBBVlN0cmVhbUdyb3VwVGlsZUdyaWQub2Zmc2V0cyAib2Zmc2V0IiBm b3IKKysgKiB0aGUgdG9wbGVmdCBwaXhlbCBvZiB0aGUgZm91cnRoIEByZWYgQVZTdHJlYW1Hcm91 cC5zdHJlYW1zICJzdHJlYW0iIGluIHRoZQorKyAqIGdyb3VwIHdvdWxkIGJlIDI1NngwLgorKyAq CisrICogc2l6ZW9mKEFWU3RyZWFtR3JvdXBUaWxlR3JpZCkgaXMgbm90IGEgcGFydCBvZiB0aGUg QUJJIGFuZCBtYXkgb25seSBiZQorKyAqIGFsbG9jYXRlZCBieSBhdmZvcm1hdF9zdHJlYW1fZ3Jv dXBfY3JlYXRlKCkuCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZTdHJlYW1Hcm91cFRpbGVHcmlk IHsKKysgICAgY29uc3QgQVZDbGFzcyAqYXZfY2xhc3M7CisrCisrICAgIC8qKgorKyAgICAgKiBB bW91bnQgb2YgdGlsZXMgaW4gdGhlIGdyaWQuCisrICAgICAqCisrICAgICAqIE11c3QgYmUgPiAw LgorKyAgICAgKi8KKysgICAgdW5zaWduZWQgaW50IG5iX3RpbGVzOworKworKyAgICAvKioKKysg ICAgICogV2lkdGggb2YgdGhlIGNhbnZhcy4KKysgICAgICoKKysgICAgICogTXVzdCBiZSA+IDAu CisrICAgICAqLworKyAgICBpbnQgY29kZWRfd2lkdGg7CisrICAgIC8qKgorKyAgICAgKiBXaWR0 aCBvZiB0aGUgY2FudmFzLgorKyAgICAgKgorKyAgICAgKiBNdXN0IGJlID4gMC4KKysgICAgICov CisrICAgIGludCBjb2RlZF9oZWlnaHQ7CisrCisrICAgIC8qKgorKyAgICAgKiBBbiBAcmVmIG5i X3RpbGVzIHNpemVkIGFycmF5IG9mIG9mZnNldHMgaW4gcGl4ZWxzIGZyb20gdGhlIHRvcGxlZnQg ZWRnZQorKyAgICAgKiBvZiB0aGUgY2FudmFzLCBpbmRpY2F0aW5nIHdoZXJlIGVhY2ggc3RyZWFt IHNob3VsZCBiZSBwbGFjZWQuCisrICAgICAqIEl0IG11c3QgYmUgYWxsb2NhdGVkIHdpdGggdGhl IGF2X21hbGxvYygpIGZhbWlseSBvZiBmdW5jdGlvbnMuCisrICAgICAqCisrICAgICAqIC0gZGVt dXhpbmc6IHNldCBieSBsaWJhdmZvcm1hdCwgbXVzdCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGNh bGxlci4KKysgICAgICogLSBtdXhpbmc6IHNldCBieSB0aGUgY2FsbGVyIGJlZm9yZSBhdmZvcm1h dF93cml0ZV9oZWFkZXIoKS4KKysgICAgICoKKysgICAgICogRnJlZWQgYnkgbGliYXZmb3JtYXQg aW4gYXZmb3JtYXRfZnJlZV9jb250ZXh0KCkuCisrICAgICAqLworKyAgICBzdHJ1Y3QgeworKyAg ICAgICAgLyoqCisrICAgICAgICAgKiBJbmRleCBvZiB0aGUgc3RyZWFtIGluIHRoZSBncm91cCB0 aGlzIHRpbGUgcmVmZXJlbmNlcy4KKysgICAgICAgICAqCisrICAgICAgICAgKiBNdXN0IGJlIDwg QHJlZiBBVlN0cmVhbUdyb3VwLm5iX3N0cmVhbXMgIm5iX3N0cmVhbXMiLgorKyAgICAgICAgICov CisrICAgICAgICB1bnNpZ25lZCBpbnQgaWR4OworKyAgICAgICAgLyoqCisrICAgICAgICAgKiBP ZmZzZXQgaW4gcGl4ZWxzIGZyb20gdGhlIGxlZnQgZWRnZSBvZiB0aGUgY2FudmFzIHdoZXJlIHRo ZSB0aWxlCisrICAgICAgICAgKiBzaG91bGQgYmUgcGxhY2VkLgorKyAgICAgICAgICovCisrICAg ICAgICBpbnQgaG9yaXpvbnRhbDsKKysgICAgICAgIC8qKgorKyAgICAgICAgICogT2Zmc2V0IGlu IHBpeGVscyBmcm9tIHRoZSB0b3AgZWRnZSBvZiB0aGUgY2FudmFzIHdoZXJlIHRoZSB0aWxlCisr ICAgICAgICAgKiBzaG91bGQgYmUgcGxhY2VkLgorKyAgICAgICAgICovCisrICAgICAgICBpbnQg dmVydGljYWw7CisrICAgIH0gKm9mZnNldHM7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGUgcGl4 ZWwgdmFsdWUgcGVyIGNoYW5uZWwgaW4gUkdCQSBmb3JtYXQgdXNlZCBpZiBubyBwaXhlbCBvZiBh bnkgdGlsZQorKyAgICAgKiBpcyBsb2NhdGVkIGF0IGEgcGFydGljdWxhciBwaXhlbCBsb2NhdGlv bi4KKysgICAgICoKKysgICAgICogQHNlZSBhdl9pbWFnZV9maWxsX2NvbG9yKCkuCisrICAgICAq IEBzZWUgYXZfcGFyc2VfY29sb3IoKS4KKysgICAgICovCisrICAgIHVpbnQ4X3QgYmFja2dyb3Vu ZFs0XTsKKysKKysgICAgLyoqCisrICAgICAqIE9mZnNldCBpbiBwaXhlbHMgZnJvbSB0aGUgbGVm dCBlZGdlIG9mIHRoZSBjYW52YXMgd2hlcmUgdGhlIGFjdHVhbCBpbWFnZQorKyAgICAgKiBtZWFu dCBmb3IgcHJlc2VudGF0aW9uIHN0YXJ0cy4KKysgICAgICoKKysgICAgICogVGhpcyBmaWVsZCBt dXN0IGJlID49IDAgYW5kIDwgQHJlZiBjb2RlZF93aWR0aC4KKysgICAgICovCisrICAgIGludCBo b3Jpem9udGFsX29mZnNldDsKKysgICAgLyoqCisrICAgICAqIE9mZnNldCBpbiBwaXhlbHMgZnJv bSB0aGUgdG9wIGVkZ2Ugb2YgdGhlIGNhbnZhcyB3aGVyZSB0aGUgYWN0dWFsIGltYWdlCisrICAg ICAqIG1lYW50IGZvciBwcmVzZW50YXRpb24gc3RhcnRzLgorKyAgICAgKgorKyAgICAgKiBUaGlz IGZpZWxkIG11c3QgYmUgPj0gMCBhbmQgPCBAcmVmIGNvZGVkX2hlaWdodC4KKysgICAgICovCisr ICAgIGludCB2ZXJ0aWNhbF9vZmZzZXQ7CisrCisrICAgIC8qKgorKyAgICAgKiBXaWR0aCBvZiB0 aGUgZmluYWwgaW1hZ2UgZm9yIHByZXNlbnRhdGlvbi4KKysgICAgICoKKysgICAgICogTXVzdCBi ZSA+IDAgYW5kIDw9IChAcmVmIGNvZGVkX3dpZHRoIC0gQHJlZiBob3Jpem9udGFsX29mZnNldCku CisrICAgICAqIFdoZW4gaXQncyBub3QgZXF1YWwgdG8gKEByZWYgY29kZWRfd2lkdGggLSBAcmVm IGhvcml6b250YWxfb2Zmc2V0KSwgdGhlCisrICAgICAqIHJlc3VsdCBvZiAoQHJlZiBjb2RlZF93 aWR0aCAtIHdpZHRoIC0gQHJlZiBob3Jpem9udGFsX29mZnNldCkgaXMgdGhlCisrICAgICAqIGFt b3VudCBhbW91bnQgb2YgcGl4ZWxzIHRvIGJlIGNyb3BwZWQgZnJvbSB0aGUgcmlnaHQgZWRnZSBv ZiB0aGUKKysgICAgICogZmluYWwgaW1hZ2UgYmVmb3JlIHByZXNlbnRhdGlvbi4KKysgICAgICov CisrICAgIGludCB3aWR0aDsKKysgICAgLyoqCisrICAgICAqIEhlaWdodCBvZiB0aGUgZmluYWwg aW1hZ2UgZm9yIHByZXNlbnRhdGlvbi4KKysgICAgICoKKysgICAgICogTXVzdCBiZSA+IDAgYW5k IDw9IChAcmVmIGNvZGVkX2hlaWdodCAtIEByZWYgdmVydGljYWxfb2Zmc2V0KS4KKysgICAgICog V2hlbiBpdCdzIG5vdCBlcXVhbCB0byAoQHJlZiBjb2RlZF9oZWlnaHQgLSBAcmVmIHZlcnRpY2Fs X29mZnNldCksIHRoZQorKyAgICAgKiByZXN1bHQgb2YgKEByZWYgY29kZWRfaGVpZ2h0IC0gaGVp Z2h0IC0gQHJlZiB2ZXJ0aWNhbF9vZmZzZXQpIGlzIHRoZQorKyAgICAgKiBhbW91bnQgYW1vdW50 IG9mIHBpeGVscyB0byBiZSBjcm9wcGVkIGZyb20gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZQorKyAg ICAgKiBmaW5hbCBpbWFnZSBiZWZvcmUgcHJlc2VudGF0aW9uLgorKyAgICAgKi8KKysgICAgaW50 IGhlaWdodDsKKysKKysgICAgLyoqCisrICAgICAqIEFkZGl0aW9uYWwgZGF0YSBhc3NvY2lhdGVk IHdpdGggdGhlIGdyaWQuCisrICAgICAqCisrICAgICAqIFNob3VsZCBiZSBhbGxvY2F0ZWQgd2l0 aCBhdl9wYWNrZXRfc2lkZV9kYXRhX25ldygpIG9yCisrICAgICAqIGF2X3BhY2tldF9zaWRlX2Rh dGFfYWRkKCksIGFuZCB3aWxsIGJlIGZyZWVkIGJ5IGF2Zm9ybWF0X2ZyZWVfY29udGV4dCgpLgor KyAgICAgKi8KKysgICAgQVZQYWNrZXRTaWRlRGF0YSAqY29kZWRfc2lkZV9kYXRhOworKworKyAg ICAvKioKKysgICAgICogQW1vdW50IG9mIGVudHJpZXMgaW4gQHJlZiBjb2RlZF9zaWRlX2RhdGEu CisrICAgICAqLworKyAgICBpbnQgbmJfY29kZWRfc2lkZV9kYXRhOworK30gQVZTdHJlYW1Hcm91 cFRpbGVHcmlkOworKworKy8qKgorKyAqIEFWU3RyZWFtR3JvdXBMYXllcmVkVmlkZW8gaXMgbWVh bnQgdG8gZGVmaW5lIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGEgYmFzZQorKyAqIGxheWVyIHZpZGVv IHN0cmVhbSBhbmQgYSBzZXBhcmF0ZSBlbmhhbmNlbWVudCBsYXllciBzdHJlYW0gdGhhdCB0b2dl dGhlcgorKyAqIGZvcm0gYSBzaW5nbGUgbGF5ZXJlZCB2aWRlbyBwcmVzZW50YXRpb24gKGZvciBl eGFtcGxlIGEgdmlkZW8gc3RyZWFtIGFuZCBhCisrICogZGF0YSBzdHJlYW0gY29udGFpbmluZyBM Q0VWQyBlbmhhbmNlbWVudCBsYXllciBOQUxVcywgb3IgRG9sYnkgVmlzaW9uCisrICogUHJvZmls ZSA3IGR1YWwtbGF5ZXIgZW5jb2RpbmcpLgorKyAqCisrICogVGhlIGVuaGFuY2VtZW50IGxheWVy IHN0cmVhbSBpcyBpZGVudGlmaWVkIGJ5IEByZWYgZWxfaW5kZXguCisrICovCisrdHlwZWRlZiBz dHJ1Y3QgQVZTdHJlYW1Hcm91cExheWVyZWRWaWRlbyB7CisrICAgIGNvbnN0IEFWQ2xhc3MgKmF2 X2NsYXNzOworKworKyAgICAvKioKKysgICAgICogSW5kZXggb2YgdGhlIGVuaGFuY2VtZW50IGxh eWVyIHN0cmVhbSBpbiBBVlN0cmVhbUdyb3VwLgorKyAgICAgKi8KKysjaWYgRkZfQVBJX0xDRVZD X1NUUlVDVAorKyAgICB1bmlvbiB7CisrI2VuZGlmCisrICAgICAgICB1bnNpZ25lZCBpbnQgZWxf aW5kZXg7CisrI2lmIEZGX0FQSV9MQ0VWQ19TVFJVQ1QKKysgICAgICAgIC8qKgorKyAgICAgICAg ICogQWxpYXMgZm9yIEByZWYgZWxfaW5kZXgsIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxp dHkuCisrICAgICAgICAgKi8KKysgICAgICAgIGF0dHJpYnV0ZV9kZXByZWNhdGVkCisrICAgICAg ICB1bnNpZ25lZCBpbnQgbGNldmNfaW5kZXg7CisrICAgIH07CisrI2VuZGlmCisrICAgIC8qKgor KyAgICAgKiBXaWR0aCBvZiB0aGUgZmluYWwgc3RyZWFtIGZvciBwcmVzZW50YXRpb24uCisrICAg ICAqLworKyAgICBpbnQgd2lkdGg7CisrICAgIC8qKgorKyAgICAgKiBIZWlnaHQgb2YgdGhlIGZp bmFsIGltYWdlIGZvciBwcmVzZW50YXRpb24uCisrICAgICAqLworKyAgICBpbnQgaGVpZ2h0Owor K30gQVZTdHJlYW1Hcm91cExheWVyZWRWaWRlbzsKKysKKysjaWYgRkZfQVBJX0xDRVZDX1NUUlVD VAorKy8qKgorKyAqIEFsaWFzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisrICoK KysgKiBBVlN0cmVhbUdyb3VwTENFVkMgd2FzIHJlbmFtZWQgdG8gQHJlZiBBVlN0cmVhbUdyb3Vw TGF5ZXJlZFZpZGVvLgorKyAqLworKyNkZWZpbmUgQVZTdHJlYW1Hcm91cExDRVZDIEFWU3RyZWFt R3JvdXBMYXllcmVkVmlkZW8KKysjZW5kaWYKKysKKysvKioKKysgKiBBVlN0cmVhbUdyb3VwVFJF RiBpcyBtZWFudCB0byBkZWZpbmUgdGhlIHJlbGF0aW9uIGJldHdlZW4gdmlkZW8sIGF1ZGlvLAor KyAqIG9yIHN1YnRpdGxlIHN0cmVhbXMsIGFuZCBhIGRhdGEgc3RyZWFtIGNvbnRhaW5pbmcgbWV0 YWRhdGEuCisrICoKKysgKiBObyBtb3JlIHRoYW4gb25lIHN0cmVhbSBvZiBAcmVmIEFWQ29kZWNQ YXJhbWV0ZXJzLmNvZGVjX3R5cGUgImNvZGVjX3R5cGUiCisrICogQVZNRURJQV9UWVBFX0RBVEEg c2hhbGwgYmUgcHJlc2VudC4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVlN0cmVhbUdyb3VwVFJF RiB7CisrICAgIGNvbnN0IEFWQ2xhc3MgKmF2X2NsYXNzOworKworKyAgICAvKioKKysgICAgICog SW5kZXggb2YgdGhlIG1ldGFkYXRhIHN0cmVhbSBpbiB0aGUgQVZTdHJlYW1Hcm91cC4KKysgICAg ICovCisrICAgIHVuc2lnbmVkIGludCBtZXRhZGF0YV9pbmRleDsKKyt9IEFWU3RyZWFtR3JvdXBU UkVGOworKworK2VudW0gQVZTdHJlYW1Hcm91cFBhcmFtc1R5cGUgeworKyAgICBBVl9TVFJFQU1f R1JPVVBfUEFSQU1TX05PTkUsCisrICAgIEFWX1NUUkVBTV9HUk9VUF9QQVJBTVNfSUFNRl9BVURJ T19FTEVNRU5ULAorKyAgICBBVl9TVFJFQU1fR1JPVVBfUEFSQU1TX0lBTUZfTUlYX1BSRVNFTlRB VElPTiwKKysgICAgQVZfU1RSRUFNX0dST1VQX1BBUkFNU19USUxFX0dSSUQsCisrICAgIEFWX1NU UkVBTV9HUk9VUF9QQVJBTVNfTENFVkMsCisrICAgIEFWX1NUUkVBTV9HUk9VUF9QQVJBTVNfVFJF RiwKKysgICAgQVZfU1RSRUFNX0dST1VQX1BBUkFNU19ET0xCWV9WSVNJT04sCisrfTsKKysKKytz dHJ1Y3QgQVZJQU1GQXVkaW9FbGVtZW50OworK3N0cnVjdCBBVklBTUZNaXhQcmVzZW50YXRpb247 CisrCisrdHlwZWRlZiBzdHJ1Y3QgQVZTdHJlYW1Hcm91cCB7CisrICAgIC8qKgorKyAgICAgKiBB IGNsYXNzIGZvciBAcmVmIGF2b3B0aW9ucy4gU2V0IGJ5IGF2Zm9ybWF0X3N0cmVhbV9ncm91cF9j cmVhdGUoKS4KKysgICAgICovCisrICAgIGNvbnN0IEFWQ2xhc3MgKmF2X2NsYXNzOworKworKyAg ICB2b2lkICpwcml2X2RhdGE7CisrCisrICAgIC8qKgorKyAgICAgKiBHcm91cCBpbmRleCBpbiBB VkZvcm1hdENvbnRleHQuCisrICAgICAqLworKyAgICB1bnNpZ25lZCBpbnQgaW5kZXg7CisrCisr ICAgIC8qKgorKyAgICAgKiBHcm91cCB0eXBlLXNwZWNpZmljIGdyb3VwIElELgorKyAgICAgKgor KyAgICAgKiBkZWNvZGluZzogc2V0IGJ5IGxpYmF2Zm9ybWF0CisrICAgICAqIGVuY29kaW5nOiBt YXkgc2V0IGJ5IHRoZSB1c2VyCisrICAgICAqLworKyAgICBpbnQ2NF90IGlkOworKworKyAgICAv KioKKysgICAgICogR3JvdXAgdHlwZQorKyAgICAgKgorKyAgICAgKiBkZWNvZGluZzogc2V0IGJ5 IGxpYmF2Zm9ybWF0IG9uIGdyb3VwIGNyZWF0aW9uCisrICAgICAqIGVuY29kaW5nOiBzZXQgYnkg YXZmb3JtYXRfc3RyZWFtX2dyb3VwX2NyZWF0ZSgpCisrICAgICAqLworKyAgICBlbnVtIEFWU3Ry ZWFtR3JvdXBQYXJhbXNUeXBlIHR5cGU7CisrCisrICAgIC8qKgorKyAgICAgKiBHcm91cCB0eXBl LXNwZWNpZmljIHBhcmFtZXRlcnMKKysgICAgICovCisrICAgIHVuaW9uIHsKKysgICAgICAgIHN0 cnVjdCBBVklBTUZBdWRpb0VsZW1lbnQgKmlhbWZfYXVkaW9fZWxlbWVudDsKKysgICAgICAgIHN0 cnVjdCBBVklBTUZNaXhQcmVzZW50YXRpb24gKmlhbWZfbWl4X3ByZXNlbnRhdGlvbjsKKysgICAg ICAgIHN0cnVjdCBBVlN0cmVhbUdyb3VwVGlsZUdyaWQgKnRpbGVfZ3JpZDsKKysgICAgICAgIHN0 cnVjdCBBVlN0cmVhbUdyb3VwTGF5ZXJlZFZpZGVvICpsYXllcmVkX3ZpZGVvOworKyNpZiBGRl9B UElfTENFVkNfU1RSVUNUCisrICAgICAgICAvKioKKysgICAgICAgICAqIGRlcHJlY2F0ZWQsIHVz ZSBsYXllcmVkX3ZpZGVvLgorKyAgICAgICAgICovCisrICAgICAgICBhdHRyaWJ1dGVfZGVwcmVj YXRlZAorKyAgICAgICAgc3RydWN0IEFWU3RyZWFtR3JvdXBMQ0VWQyAqbGNldmM7CisrI2VuZGlm CisrICAgICAgICBzdHJ1Y3QgQVZTdHJlYW1Hcm91cFRSRUYgKnRyZWY7CisrICAgIH0gcGFyYW1z OworKworKyAgICAvKioKKysgICAgICogTWV0YWRhdGEgdGhhdCBhcHBsaWVzIHRvIHRoZSB3aG9s ZSBncm91cC4KKysgICAgICoKKysgICAgICogLSBkZW11eGluZzogc2V0IGJ5IGxpYmF2Zm9ybWF0 IG9uIGdyb3VwIGNyZWF0aW9uCisrICAgICAqIC0gbXV4aW5nOiBtYXkgYmUgc2V0IGJ5IHRoZSBj YWxsZXIgYmVmb3JlIGF2Zm9ybWF0X3dyaXRlX2hlYWRlcigpCisrICAgICAqCisrICAgICAqIEZy ZWVkIGJ5IGxpYmF2Zm9ybWF0IGluIGF2Zm9ybWF0X2ZyZWVfY29udGV4dCgpLgorKyAgICAgKi8K KysgICAgQVZEaWN0aW9uYXJ5ICptZXRhZGF0YTsKKysKKysgICAgLyoqCisrICAgICAqIE51bWJl ciBvZiBlbGVtZW50cyBpbiBBVlN0cmVhbUdyb3VwLnN0cmVhbXMuCisrICAgICAqCisrICAgICAq IFNldCBieSBhdmZvcm1hdF9zdHJlYW1fZ3JvdXBfYWRkX3N0cmVhbSgpIG11c3Qgbm90IGJlIG1v ZGlmaWVkIGJ5IGFueSBvdGhlciBjb2RlLgorKyAgICAgKi8KKysgICAgdW5zaWduZWQgaW50IG5i X3N0cmVhbXM7CisrCisrICAgIC8qKgorKyAgICAgKiBBIGxpc3Qgb2Ygc3RyZWFtcyBpbiB0aGUg Z3JvdXAuIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIHdpdGgKKysgICAgICogYXZmb3JtYXRfc3Ry ZWFtX2dyb3VwX2FkZF9zdHJlYW0oKS4KKysgICAgICoKKysgICAgICogLSBkZW11eGluZzogZW50 cmllcyBhcmUgY3JlYXRlZCBieSBsaWJhdmZvcm1hdCBvbiBncm91cCBjcmVhdGlvbi4KKysgICAg ICogICAgICAgICAgICAgSWYgQVZGTVRDVFhfTk9IRUFERVIgaXMgc2V0IGluIGN0eF9mbGFncywg dGhlbiBuZXcgZW50cmllcyBtYXkgYWxzbworKyAgICAgKiAgICAgICAgICAgICBhcHBlYXIgaW4g YXZfcmVhZF9mcmFtZSgpLgorKyAgICAgKiAtIG11eGluZzogZW50cmllcyBhcmUgY3JlYXRlZCBi eSB0aGUgdXNlciBiZWZvcmUgYXZmb3JtYXRfd3JpdGVfaGVhZGVyKCkuCisrICAgICAqCisrICAg ICAqIEZyZWVkIGJ5IGxpYmF2Zm9ybWF0IGluIGF2Zm9ybWF0X2ZyZWVfY29udGV4dCgpLgorKyAg ICAgKi8KKysgICAgQVZTdHJlYW0gKipzdHJlYW1zOworKworKyAgICAvKioKKysgICAgICogU3Ry ZWFtIGdyb3VwIGRpc3Bvc2l0aW9uIC0gYSBjb21iaW5hdGlvbiBvZiBBVl9ESVNQT1NJVElPTl8q IGZsYWdzLgorKyAgICAgKiBUaGlzIGZpZWxkIGN1cnJlbnRseSBhcHBsaWVzIHRvIGFsbCBkZWZp bmVkIEFWU3RyZWFtR3JvdXBQYXJhbXNUeXBlLgorKyAgICAgKgorKyAgICAgKiAtIGRlbXV4aW5n OiBzZXQgYnkgbGliYXZmb3JtYXQgd2hlbiBjcmVhdGluZyB0aGUgZ3JvdXAgb3IgaW4KKysgICAg ICogICAgICAgICAgICAgYXZmb3JtYXRfZmluZF9zdHJlYW1faW5mbygpLgorKyAgICAgKiAtIG11 eGluZzogbWF5IGJlIHNldCBieSB0aGUgY2FsbGVyIGJlZm9yZSBhdmZvcm1hdF93cml0ZV9oZWFk ZXIoKS4KKysgICAgICovCisrICAgIGludCBkaXNwb3NpdGlvbjsKKyt9IEFWU3RyZWFtR3JvdXA7 CisrCisrc3RydWN0IEFWQ29kZWNQYXJzZXJDb250ZXh0ICphdl9zdHJlYW1fZ2V0X3BhcnNlcihj b25zdCBBVlN0cmVhbSAqcyk7CisrCisrI2RlZmluZSBBVl9QUk9HUkFNX1JVTk5JTkcgMQorKwor Ky8qKgorKyAqIE5ldyBmaWVsZHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBlbmQgd2l0aCBtaW5vciB2 ZXJzaW9uIGJ1bXBzLgorKyAqIFJlbW92YWwsIHJlb3JkZXJpbmcgYW5kIGNoYW5nZXMgdG8gZXhp c3RpbmcgZmllbGRzIHJlcXVpcmUgYSBtYWpvcgorKyAqIHZlcnNpb24gYnVtcC4KKysgKiBzaXpl b2YoQVZQcm9ncmFtKSBtdXN0IG5vdCBiZSB1c2VkIG91dHNpZGUgbGliYXYqLgorKyAqLworK3R5 cGVkZWYgc3RydWN0IEFWUHJvZ3JhbSB7CisrICAgIGludCAgICAgICAgICAgIGlkOworKyAgICBp bnQgICAgICAgICAgICBmbGFnczsKKysgICAgZW51bSBBVkRpc2NhcmQgZGlzY2FyZDsgICAgICAg IC8vLzwgc2VsZWN0cyB3aGljaCBwcm9ncmFtIHRvIGRpc2NhcmQgYW5kIHdoaWNoIHRvIGZlZWQg dG8gdGhlIGNhbGxlcgorKyAgICB1bnNpZ25lZCBpbnQgICAqc3RyZWFtX2luZGV4OworKyAgICB1 bnNpZ25lZCBpbnQgICBuYl9zdHJlYW1faW5kZXhlczsKKysgICAgQVZEaWN0aW9uYXJ5ICptZXRh ZGF0YTsKKysKKysgICAgaW50IHByb2dyYW1fbnVtOworKyAgICBpbnQgcG10X3BpZDsKKysgICAg aW50IHBjcl9waWQ7CisrICAgIGludCBwbXRfdmVyc2lvbjsKKysKKysgICAgLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisr ICAgICAqIEFsbCBmaWVsZHMgYmVsb3cgdGhpcyBsaW5lIGFyZSBub3QgcGFydCBvZiB0aGUgcHVi bGljIEFQSS4gVGhleQorKyAgICAgKiBtYXkgbm90IGJlIHVzZWQgb3V0c2lkZSBvZiBsaWJhdmZv cm1hdCBhbmQgY2FuIGJlIGNoYW5nZWQgYW5kCisrICAgICAqIHJlbW92ZWQgYXQgd2lsbC4KKysg ICAgICogTmV3IHB1YmxpYyBmaWVsZHMgc2hvdWxkIGJlIGFkZGVkIHJpZ2h0IGFib3ZlLgorKyAg ICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKysgICAgICovCisrICAgIGludDY0X3Qgc3RhcnRfdGltZTsKKysgICAgaW50 NjRfdCBlbmRfdGltZTsKKysKKysgICAgaW50NjRfdCBwdHNfd3JhcF9yZWZlcmVuY2U7ICAgIC8v LzwgcmVmZXJlbmNlIGR0cyBmb3Igd3JhcCBkZXRlY3Rpb24KKysgICAgaW50IHB0c193cmFwX2Jl aGF2aW9yOyAgICAgICAgIC8vLzwgYmVoYXZpb3Igb24gd3JhcCBkZXRlY3Rpb24KKyt9IEFWUHJv Z3JhbTsKKysKKysjZGVmaW5lIEFWRk1UQ1RYX05PSEVBREVSICAgICAgMHgwMDAxIC8qKjwgc2ln bmFsIHRoYXQgbm8gaGVhZGVyIGlzIHByZXNlbnQKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChzdHJlYW1zIGFyZSBhZGRlZCBkeW5hbWljYWxseSkgKi8KKysjZGVm aW5lIEFWRk1UQ1RYX1VOU0VFS0FCTEUgICAgMHgwMDAyIC8qKjwgc2lnbmFsIHRoYXQgdGhlIHN0 cmVhbSBpcyBkZWZpbml0ZWx5CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBub3Qgc2Vla2FibGUsIGFuZCBhdHRlbXB0cyB0byBjYWxsIHRoZQorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlayBmdW5jdGlvbiB3aWxsIGZhaWwuIEZv ciBzb21lCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3Jr IHByb3RvY29scyAoZS5nLiBITFMpLCB0aGlzIGNhbgorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhbmdlIGR5bmFtaWNhbGx5IGF0IHJ1bnRpbWUuICovCisrCisr dHlwZWRlZiBzdHJ1Y3QgQVZDaGFwdGVyIHsKKysgICAgaW50NjRfdCBpZDsgICAgICAgICAgICAg Ly8vPCB1bmlxdWUgSUQgdG8gaWRlbnRpZnkgdGhlIGNoYXB0ZXIKKysgICAgQVZSYXRpb25hbCB0 aW1lX2Jhc2U7ICAgLy8vPCB0aW1lIGJhc2UgaW4gd2hpY2ggdGhlIHN0YXJ0L2VuZCB0aW1lc3Rh bXBzIGFyZSBzcGVjaWZpZWQKKysgICAgaW50NjRfdCBzdGFydCwgZW5kOyAgICAgLy8vPCBjaGFw dGVyIHN0YXJ0L2VuZCB0aW1lIGluIHRpbWVfYmFzZSB1bml0cworKyAgICBBVkRpY3Rpb25hcnkg Km1ldGFkYXRhOworK30gQVZDaGFwdGVyOworKworKworKy8qKgorKyAqIENhbGxiYWNrIHVzZWQg YnkgZGV2aWNlcyB0byBjb21tdW5pY2F0ZSB3aXRoIGFwcGxpY2F0aW9uLgorKyAqLworK3R5cGVk ZWYgaW50ICgqYXZfZm9ybWF0X2NvbnRyb2xfbWVzc2FnZSkoc3RydWN0IEFWRm9ybWF0Q29udGV4 dCAqcywgaW50IHR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9zaXplKTsKKysKKyt0eXBlZGVmIGludCAoKkFWT3Bl bkNhbGxiYWNrKShzdHJ1Y3QgQVZGb3JtYXRDb250ZXh0ICpzLCBBVklPQ29udGV4dCAqKnBiLCBj b25zdCBjaGFyICp1cmwsIGludCBmbGFncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBBVklPSW50ZXJydXB0Q0IgKmludF9jYiwgQVZEaWN0aW9uYXJ5ICoqb3B0aW9ucyk7 CisrCisrLyoqCisrICogVGhlIGR1cmF0aW9uIG9mIGEgdmlkZW8gY2FuIGJlIGVzdGltYXRlZCB0 aHJvdWdoIHZhcmlvdXMgd2F5cywgYW5kIHRoaXMgZW51bSBjYW4gYmUgdXNlZAorKyAqIHRvIGtu b3cgaG93IHRoZSBkdXJhdGlvbiB3YXMgZXN0aW1hdGVkLgorKyAqLworK2VudW0gQVZEdXJhdGlv bkVzdGltYXRpb25NZXRob2QgeworKyAgICBBVkZNVF9EVVJBVElPTl9GUk9NX1BUUywgICAgLy8v PCBEdXJhdGlvbiBhY2N1cmF0ZWx5IGVzdGltYXRlZCBmcm9tIFBUU2VzCisrICAgIEFWRk1UX0RV UkFUSU9OX0ZST01fU1RSRUFNLCAvLy88IER1cmF0aW9uIGVzdGltYXRlZCBmcm9tIGEgc3RyZWFt IHdpdGggYSBrbm93biBkdXJhdGlvbgorKyAgICBBVkZNVF9EVVJBVElPTl9GUk9NX0JJVFJBVEUg Ly8vPCBEdXJhdGlvbiBlc3RpbWF0ZWQgZnJvbSBiaXRyYXRlIChsZXNzIGFjY3VyYXRlKQorK307 CisrCisrLyoqCisrICogRm9ybWF0IEkvTyBjb250ZXh0LgorKyAqIE5ldyBmaWVsZHMgY2FuIGJl IGFkZGVkIHRvIHRoZSBlbmQgd2l0aCBtaW5vciB2ZXJzaW9uIGJ1bXBzLgorKyAqIFJlbW92YWws IHJlb3JkZXJpbmcgYW5kIGNoYW5nZXMgdG8gZXhpc3RpbmcgZmllbGRzIHJlcXVpcmUgYSBtYWpv cgorKyAqIHZlcnNpb24gYnVtcC4KKysgKiBzaXplb2YoQVZGb3JtYXRDb250ZXh0KSBtdXN0IG5v dCBiZSB1c2VkIG91dHNpZGUgbGliYXYqLCB1c2UKKysgKiBhdmZvcm1hdF9hbGxvY19jb250ZXh0 KCkgdG8gY3JlYXRlIGFuIEFWRm9ybWF0Q29udGV4dC4KKysgKgorKyAqIEZpZWxkcyBjYW4gYmUg YWNjZXNzZWQgdGhyb3VnaCBBVk9wdGlvbnMgKGF2X29wdCopLAorKyAqIHRoZSBuYW1lIHN0cmlu ZyB1c2VkIG1hdGNoZXMgdGhlIGFzc29jaWF0ZWQgY29tbWFuZCBsaW5lIHBhcmFtZXRlciBuYW1l IGFuZAorKyAqIGNhbiBiZSBmb3VuZCBpbiBsaWJhdmZvcm1hdC9vcHRpb25zX3RhYmxlLmguCisr ICogVGhlIEFWT3B0aW9uL2NvbW1hbmQgbGluZSBwYXJhbWV0ZXIgbmFtZXMgZGlmZmVyIGluIHNv bWUgY2FzZXMgZnJvbSB0aGUgQworKyAqIHN0cnVjdHVyZSBmaWVsZCBuYW1lcyBmb3IgaGlzdG9y aWMgcmVhc29ucyBvciBicmV2aXR5LgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWRm9ybWF0Q29u dGV4dCB7CisrICAgIC8qKgorKyAgICAgKiBBIGNsYXNzIGZvciBsb2dnaW5nIGFuZCBAcmVmIGF2 b3B0aW9ucy4gU2V0IGJ5IGF2Zm9ybWF0X2FsbG9jX2NvbnRleHQoKS4KKysgICAgICogRXhwb3J0 cyAoZGUpbXV4ZXIgcHJpdmF0ZSBvcHRpb25zIGlmIHRoZXkgZXhpc3QuCisrICAgICAqLworKyAg ICBjb25zdCBBVkNsYXNzICphdl9jbGFzczsKKysKKysgICAgLyoqCisrICAgICAqIFRoZSBpbnB1 dCBjb250YWluZXIgZm9ybWF0LgorKyAgICAgKgorKyAgICAgKiBEZW11eGluZyBvbmx5LCBzZXQg YnkgYXZmb3JtYXRfb3Blbl9pbnB1dCgpLgorKyAgICAgKi8KKysgICAgY29uc3Qgc3RydWN0IEFW SW5wdXRGb3JtYXQgKmlmb3JtYXQ7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGUgb3V0cHV0IGNv bnRhaW5lciBmb3JtYXQuCisrICAgICAqCisrICAgICAqIE11eGluZyBvbmx5LCBtdXN0IGJlIHNl dCBieSB0aGUgY2FsbGVyIGJlZm9yZSBhdmZvcm1hdF93cml0ZV9oZWFkZXIoKS4KKysgICAgICov CisrICAgIGNvbnN0IHN0cnVjdCBBVk91dHB1dEZvcm1hdCAqb2Zvcm1hdDsKKysKKysgICAgLyoq CisrICAgICAqIEZvcm1hdCBwcml2YXRlIGRhdGEuIFRoaXMgaXMgYW4gQVZPcHRpb25zLWVuYWJs ZWQgc3RydWN0CisrICAgICAqIGlmIGFuZCBvbmx5IGlmIGlmb3JtYXQvb2Zvcm1hdC5wcml2X2Ns YXNzIGlzIG5vdCBOVUxMLgorKyAgICAgKgorKyAgICAgKiAtIG11eGluZzogc2V0IGJ5IGF2Zm9y bWF0X3dyaXRlX2hlYWRlcigpCisrICAgICAqIC0gZGVtdXhpbmc6IHNldCBieSBhdmZvcm1hdF9v cGVuX2lucHV0KCkKKysgICAgICovCisrICAgIHZvaWQgKnByaXZfZGF0YTsKKysKKysgICAgLyoq CisrICAgICAqIEkvTyBjb250ZXh0LgorKyAgICAgKgorKyAgICAgKiAtIGRlbXV4aW5nOiBlaXRo ZXIgc2V0IGJ5IHRoZSB1c2VyIGJlZm9yZSBhdmZvcm1hdF9vcGVuX2lucHV0KCkgKHRoZW4KKysg ICAgICogICAgICAgICAgICAgdGhlIHVzZXIgbXVzdCBjbG9zZSBpdCBtYW51YWxseSkgb3Igc2V0 IGJ5IGF2Zm9ybWF0X29wZW5faW5wdXQoKS4KKysgICAgICogLSBtdXhpbmc6IHNldCBieSB0aGUg dXNlciBiZWZvcmUgYXZmb3JtYXRfd3JpdGVfaGVhZGVyKCkuIFRoZSBjYWxsZXIgbXVzdAorKyAg ICAgKiAgICAgICAgICAgdGFrZSBjYXJlIG9mIGNsb3NpbmcgLyBmcmVlaW5nIHRoZSBJTyBjb250 ZXh0LgorKyAgICAgKgorKyAgICAgKiBEbyBOT1Qgc2V0IHRoaXMgZmllbGQgaWYgQVZGTVRfTk9G SUxFIGZsYWcgaXMgc2V0IGluCisrICAgICAqIGlmb3JtYXQvb2Zvcm1hdC5mbGFncy4gSW4gc3Vj aCBhIGNhc2UsIHRoZSAoZGUpbXV4ZXIgd2lsbCBoYW5kbGUKKysgICAgICogSS9PIGluIHNvbWUg b3RoZXIgd2F5IGFuZCB0aGlzIGZpZWxkIHdpbGwgYmUgTlVMTC4KKysgICAgICovCisrICAgIEFW SU9Db250ZXh0ICpwYjsKKysKKysgICAgLyogc3RyZWFtIGluZm8gKi8KKysgICAgLyoqCisrICAg ICAqIEZsYWdzIHNpZ25hbGxpbmcgc3RyZWFtIHByb3BlcnRpZXMuIEEgY29tYmluYXRpb24gb2Yg QVZGTVRDVFhfKi4KKysgICAgICogU2V0IGJ5IGxpYmF2Zm9ybWF0LgorKyAgICAgKi8KKysgICAg aW50IGN0eF9mbGFnczsKKysKKysgICAgLyoqCisrICAgICAqIE51bWJlciBvZiBlbGVtZW50cyBp biBBVkZvcm1hdENvbnRleHQuc3RyZWFtcy4KKysgICAgICoKKysgICAgICogU2V0IGJ5IGF2Zm9y bWF0X25ld19zdHJlYW0oKSwgbXVzdCBub3QgYmUgbW9kaWZpZWQgYnkgYW55IG90aGVyIGNvZGUu CisrICAgICAqLworKyAgICB1bnNpZ25lZCBpbnQgbmJfc3RyZWFtczsKKysgICAgLyoqCisrICAg ICAqIEEgbGlzdCBvZiBhbGwgc3RyZWFtcyBpbiB0aGUgZmlsZS4gTmV3IHN0cmVhbXMgYXJlIGNy ZWF0ZWQgd2l0aAorKyAgICAgKiBhdmZvcm1hdF9uZXdfc3RyZWFtKCkuCisrICAgICAqCisrICAg ICAqIC0gZGVtdXhpbmc6IHN0cmVhbXMgYXJlIGNyZWF0ZWQgYnkgbGliYXZmb3JtYXQgaW4gYXZm b3JtYXRfb3Blbl9pbnB1dCgpLgorKyAgICAgKiAgICAgICAgICAgICBJZiBBVkZNVENUWF9OT0hF QURFUiBpcyBzZXQgaW4gY3R4X2ZsYWdzLCB0aGVuIG5ldyBzdHJlYW1zIG1heSBhbHNvCisrICAg ICAqICAgICAgICAgICAgIGFwcGVhciBpbiBhdl9yZWFkX2ZyYW1lKCkuCisrICAgICAqIC0gbXV4 aW5nOiBzdHJlYW1zIGFyZSBjcmVhdGVkIGJ5IHRoZSB1c2VyIGJlZm9yZSBhdmZvcm1hdF93cml0 ZV9oZWFkZXIoKS4KKysgICAgICoKKysgICAgICogRnJlZWQgYnkgbGliYXZmb3JtYXQgaW4gYXZm b3JtYXRfZnJlZV9jb250ZXh0KCkuCisrICAgICAqLworKyAgICBBVlN0cmVhbSAqKnN0cmVhbXM7 CisrCisrICAgIC8qKgorKyAgICAgKiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gQVZGb3JtYXRDb250 ZXh0LnN0cmVhbV9ncm91cHMuCisrICAgICAqCisrICAgICAqIFNldCBieSBhdmZvcm1hdF9zdHJl YW1fZ3JvdXBfY3JlYXRlKCksIG11c3Qgbm90IGJlIG1vZGlmaWVkIGJ5IGFueSBvdGhlciBjb2Rl LgorKyAgICAgKi8KKysgICAgdW5zaWduZWQgaW50IG5iX3N0cmVhbV9ncm91cHM7CisrICAgIC8q KgorKyAgICAgKiBBIGxpc3Qgb2YgYWxsIHN0cmVhbSBncm91cHMgaW4gdGhlIGZpbGUuIE5ldyBn cm91cHMgYXJlIGNyZWF0ZWQgd2l0aAorKyAgICAgKiBhdmZvcm1hdF9zdHJlYW1fZ3JvdXBfY3Jl YXRlKCksIGFuZCBmaWxsZWQgd2l0aCBhdmZvcm1hdF9zdHJlYW1fZ3JvdXBfYWRkX3N0cmVhbSgp LgorKyAgICAgKgorKyAgICAgKiAtIGRlbXV4aW5nOiBncm91cHMgbWF5IGJlIGNyZWF0ZWQgYnkg bGliYXZmb3JtYXQgaW4gYXZmb3JtYXRfb3Blbl9pbnB1dCgpLgorKyAgICAgKiAgICAgICAgICAg ICBJZiBBVkZNVENUWF9OT0hFQURFUiBpcyBzZXQgaW4gY3R4X2ZsYWdzLCB0aGVuIG5ldyBncm91 cHMgbWF5IGFsc28KKysgICAgICogICAgICAgICAgICAgYXBwZWFyIGluIGF2X3JlYWRfZnJhbWUo KS4KKysgICAgICogLSBtdXhpbmc6IGdyb3VwcyBtYXkgYmUgY3JlYXRlZCBieSB0aGUgdXNlciBi ZWZvcmUgYXZmb3JtYXRfd3JpdGVfaGVhZGVyKCkuCisrICAgICAqCisrICAgICAqIEZyZWVkIGJ5 IGxpYmF2Zm9ybWF0IGluIGF2Zm9ybWF0X2ZyZWVfY29udGV4dCgpLgorKyAgICAgKi8KKysgICAg QVZTdHJlYW1Hcm91cCAqKnN0cmVhbV9ncm91cHM7CisrCisrICAgIC8qKgorKyAgICAgKiBOdW1i ZXIgb2YgY2hhcHRlcnMgaW4gQVZDaGFwdGVyIGFycmF5LgorKyAgICAgKiBXaGVuIG11eGluZywg Y2hhcHRlcnMgYXJlIG5vcm1hbGx5IHdyaXR0ZW4gaW4gdGhlIGZpbGUgaGVhZGVyLAorKyAgICAg KiBzbyBuYl9jaGFwdGVycyBzaG91bGQgbm9ybWFsbHkgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHdy aXRlX2hlYWRlcgorKyAgICAgKiBpcyBjYWxsZWQuIFNvbWUgbXV4ZXJzIChlLmcuIG1vdiBhbmQg bWt2KSBjYW4gYWxzbyB3cml0ZSBjaGFwdGVycworKyAgICAgKiBpbiB0aGUgdHJhaWxlci4gIFRv IHdyaXRlIGNoYXB0ZXJzIGluIHRoZSB0cmFpbGVyLCBuYl9jaGFwdGVycworKyAgICAgKiBtdXN0 IGJlIHplcm8gd2hlbiB3cml0ZV9oZWFkZXIgaXMgY2FsbGVkIGFuZCBub24temVybyB3aGVuCisr ICAgICAqIHdyaXRlX3RyYWlsZXIgaXMgY2FsbGVkLgorKyAgICAgKiAtIG11eGluZzogc2V0IGJ5 IHVzZXIKKysgICAgICogLSBkZW11eGluZzogc2V0IGJ5IGxpYmF2Zm9ybWF0CisrICAgICAqLwor KyAgICB1bnNpZ25lZCBpbnQgbmJfY2hhcHRlcnM7CisrICAgIEFWQ2hhcHRlciAqKmNoYXB0ZXJz OworKworKyAgICAvKioKKysgICAgICogaW5wdXQgb3Igb3V0cHV0IFVSTC4gVW5saWtlIHRoZSBv bGQgZmlsZW5hbWUgZmllbGQsIHRoaXMgZmllbGQgaGFzIG5vCisrICAgICAqIGxlbmd0aCByZXN0 cmljdGlvbi4KKysgICAgICoKKysgICAgICogLSBkZW11eGluZzogc2V0IGJ5IGF2Zm9ybWF0X29w ZW5faW5wdXQoKSwgaW5pdGlhbGl6ZWQgdG8gYW4gZW1wdHkKKysgICAgICogICAgICAgICAgICAg c3RyaW5nIGlmIHVybCBwYXJhbWV0ZXIgd2FzIE5VTEwgaW4gYXZmb3JtYXRfb3Blbl9pbnB1dCgp LgorKyAgICAgKiAtIG11eGluZzogbWF5IGJlIHNldCBieSB0aGUgY2FsbGVyIGJlZm9yZSBjYWxs aW5nIGF2Zm9ybWF0X3dyaXRlX2hlYWRlcigpCisrICAgICAqICAgICAgICAgICAob3IgYXZmb3Jt YXRfaW5pdF9vdXRwdXQoKSBpZiB0aGF0IGlzIGNhbGxlZCBmaXJzdCkgdG8gYSBzdHJpbmcKKysg ICAgICogICAgICAgICAgIHdoaWNoIGlzIGZyZWVhYmxlIGJ5IGF2X2ZyZWUoKS4gU2V0IHRvIGFu IGVtcHR5IHN0cmluZyBpZiBpdAorKyAgICAgKiAgICAgICAgICAgd2FzIE5VTEwgaW4gYXZmb3Jt YXRfaW5pdF9vdXRwdXQoKS4KKysgICAgICoKKysgICAgICogRnJlZWQgYnkgbGliYXZmb3JtYXQg aW4gYXZmb3JtYXRfZnJlZV9jb250ZXh0KCkuCisrICAgICAqLworKyAgICBjaGFyICp1cmw7Cisr CisrICAgIC8qKgorKyAgICAgKiBQb3NpdGlvbiBvZiB0aGUgZmlyc3QgZnJhbWUgb2YgdGhlIGNv bXBvbmVudCwgaW4KKysgICAgICogQVZfVElNRV9CQVNFIGZyYWN0aW9uYWwgc2Vjb25kcy4gTkVW RVIgc2V0IHRoaXMgdmFsdWUgZGlyZWN0bHk6CisrICAgICAqIEl0IGlzIGRlZHVjZWQgZnJvbSB0 aGUgQVZTdHJlYW0gdmFsdWVzLgorKyAgICAgKgorKyAgICAgKiBEZW11eGluZyBvbmx5LCBzZXQg YnkgbGliYXZmb3JtYXQuCisrICAgICAqLworKyAgICBpbnQ2NF90IHN0YXJ0X3RpbWU7CisrCisr ICAgIC8qKgorKyAgICAgKiBEdXJhdGlvbiBvZiB0aGUgc3RyZWFtLCBpbiBBVl9USU1FX0JBU0Ug ZnJhY3Rpb25hbAorKyAgICAgKiBzZWNvbmRzLiBPbmx5IHNldCB0aGlzIHZhbHVlIGlmIHlvdSBr bm93IG5vbmUgb2YgdGhlIGluZGl2aWR1YWwgc3RyZWFtCisrICAgICAqIGR1cmF0aW9ucyBhbmQg YWxzbyBkbyBub3Qgc2V0IGFueSBvZiB0aGVtLiBUaGlzIGlzIGRlZHVjZWQgZnJvbSB0aGUKKysg ICAgICogQVZTdHJlYW0gdmFsdWVzIGlmIG5vdCBzZXQuCisrICAgICAqCisrICAgICAqIERlbXV4 aW5nIG9ubHksIHNldCBieSBsaWJhdmZvcm1hdC4KKysgICAgICovCisrICAgIGludDY0X3QgZHVy YXRpb247CisrCisrICAgIC8qKgorKyAgICAgKiBUb3RhbCBzdHJlYW0gYml0cmF0ZSBpbiBiaXQv cywgMCBpZiBub3QKKysgICAgICogYXZhaWxhYmxlLiBOZXZlciBzZXQgaXQgZGlyZWN0bHkgaWYg dGhlIGZpbGVfc2l6ZSBhbmQgdGhlCisrICAgICAqIGR1cmF0aW9uIGFyZSBrbm93biBhcyBGRm1w ZWcgY2FuIGNvbXB1dGUgaXQgYXV0b21hdGljYWxseS4KKysgICAgICovCisrICAgIGludDY0X3Qg Yml0X3JhdGU7CisrCisrICAgIHVuc2lnbmVkIGludCBwYWNrZXRfc2l6ZTsKKysgICAgaW50IG1h eF9kZWxheTsKKysKKysgICAgLyoqCisrICAgICAqIEZsYWdzIG1vZGlmeWluZyB0aGUgKGRlKW11 eGVyIGJlaGF2aW91ci4gQSBjb21iaW5hdGlvbiBvZiBBVkZNVF9GTEFHXyouCisrICAgICAqIFNl dCBieSB0aGUgdXNlciBiZWZvcmUgYXZmb3JtYXRfb3Blbl9pbnB1dCgpIC8gYXZmb3JtYXRfd3Jp dGVfaGVhZGVyKCkuCisrICAgICAqLworKyAgICBpbnQgZmxhZ3M7CisrI2RlZmluZSBBVkZNVF9G TEFHX0dFTlBUUyAgICAgICAweDAwMDEgLy8vPCBHZW5lcmF0ZSBtaXNzaW5nIHB0cyBldmVuIGlm IGl0IHJlcXVpcmVzIHBhcnNpbmcgZnV0dXJlIGZyYW1lcy4KKysjZGVmaW5lIEFWRk1UX0ZMQUdf SUdOSURYICAgICAgIDB4MDAwMiAvLy88IElnbm9yZSBpbmRleC4KKysjZGVmaW5lIEFWRk1UX0ZM QUdfTk9OQkxPQ0sgICAgIDB4MDAwNCAvLy88IERvIG5vdCBibG9jayB3aGVuIHJlYWRpbmcgcGFj a2V0cyBmcm9tIGlucHV0LgorKyNkZWZpbmUgQVZGTVRfRkxBR19JR05EVFMgICAgICAgMHgwMDA4 IC8vLzwgSWdub3JlIERUUyBvbiBmcmFtZXMgdGhhdCBjb250YWluIGJvdGggRFRTICYgUFRTCisr I2RlZmluZSBBVkZNVF9GTEFHX05PRklMTElOICAgICAweDAwMTAgLy8vPCBEbyBub3QgaW5mZXIg YW55IHZhbHVlcyBmcm9tIG90aGVyIHZhbHVlcywganVzdCByZXR1cm4gd2hhdCBpcyBzdG9yZWQg aW4gdGhlIGNvbnRhaW5lcgorKyNkZWZpbmUgQVZGTVRfRkxBR19OT1BBUlNFICAgICAgMHgwMDIw IC8vLzwgRG8gbm90IHVzZSBBVlBhcnNlcnMsIHlvdSBhbHNvIG11c3Qgc2V0IEFWRk1UX0ZMQUdf Tk9GSUxMSU4gYXMgdGhlIGZpbGxpbmcgY29kZSB3b3JrcyBvbiBmcmFtZXMgYW5kIG5vIHBhcnNp bmcgLT4gbm8gZnJhbWVzLiBBbHNvIHNlZWtpbmcgdG8gZnJhbWVzIGNhbiBub3Qgd29yayBpZiBw YXJzaW5nIHRvIGZpbmQgZnJhbWUgYm91bmRhcmllcyBoYXMgYmVlbiBkaXNhYmxlZAorKyNkZWZp bmUgQVZGTVRfRkxBR19OT0JVRkZFUiAgICAgMHgwMDQwIC8vLzwgRG8gbm90IGJ1ZmZlciBmcmFt ZXMgd2hlbiBwb3NzaWJsZQorKyNkZWZpbmUgQVZGTVRfRkxBR19DVVNUT01fSU8gICAgMHgwMDgw IC8vLzwgVGhlIGNhbGxlciBoYXMgc3VwcGxpZWQgYSBjdXN0b20gQVZJT0NvbnRleHQsIGRvbid0 IGF2aW9fY2xvc2UoKSBpdC4KKysjZGVmaW5lIEFWRk1UX0ZMQUdfRElTQ0FSRF9DT1JSVVBUICAw eDAxMDAgLy8vPCBEaXNjYXJkIGZyYW1lcyBtYXJrZWQgY29ycnVwdGVkCisrI2RlZmluZSBBVkZN VF9GTEFHX0ZMVVNIX1BBQ0tFVFMgICAgMHgwMjAwIC8vLzwgRmx1c2ggdGhlIEFWSU9Db250ZXh0 IGV2ZXJ5IHBhY2tldC4KKysvKioKKysgKiBXaGVuIG11eGluZywgdHJ5IHRvIGF2b2lkIHdyaXRp bmcgYW55IHJhbmRvbS92b2xhdGlsZSBkYXRhIHRvIHRoZSBvdXRwdXQuCisrICogVGhpcyBpbmNs dWRlcyBhbnkgcmFuZG9tIElEcywgcmVhbC10aW1lIHRpbWVzdGFtcHMvZGF0ZXMsIG11eGVyIHZl cnNpb24sIGV0Yy4KKysgKgorKyAqIFRoaXMgZmxhZyBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIHRl c3RpbmcuCisrICovCisrI2RlZmluZSBBVkZNVF9GTEFHX0JJVEVYQUNUICAgICAgICAgMHgwNDAw CisrI2RlZmluZSBBVkZNVF9GTEFHX1NPUlRfRFRTICAgIDB4MTAwMDAgLy8vPCB0cnkgdG8gaW50 ZXJsZWF2ZSBvdXRwdXR0ZWQgcGFja2V0cyBieSBkdHMgKHVzaW5nIHRoaXMgZmxhZyBjYW4gc2xv dyBkZW11eGluZyBkb3duKQorKyNkZWZpbmUgQVZGTVRfRkxBR19GQVNUX1NFRUsgICAweDgwMDAw IC8vLzwgRW5hYmxlIGZhc3QsIGJ1dCBpbmFjY3VyYXRlIHNlZWtzIGZvciBzb21lIGZvcm1hdHMK KysjZGVmaW5lIEFWRk1UX0ZMQUdfQVVUT19CU0YgICAweDIwMDAwMCAvLy88IEFkZCBiaXRzdHJl YW0gZmlsdGVycyBhcyByZXF1ZXN0ZWQgYnkgdGhlIG11eGVyCisrCisrICAgIC8qKgorKyAgICAg KiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gaW5wdXQgaW4gb3JkZXIgdG8gZGV0 ZXJtaW5lIHN0cmVhbQorKyAgICAgKiBwcm9wZXJ0aWVzLiBVc2VkIHdoZW4gcmVhZGluZyB0aGUg Z2xvYmFsIGhlYWRlciBhbmQgaW4KKysgICAgICogYXZmb3JtYXRfZmluZF9zdHJlYW1faW5mbygp LgorKyAgICAgKgorKyAgICAgKiBEZW11eGluZyBvbmx5LCBzZXQgYnkgdGhlIGNhbGxlciBiZWZv cmUgYXZmb3JtYXRfb3Blbl9pbnB1dCgpLgorKyAgICAgKgorKyAgICAgKiBAbm90ZSB0aGlzIGlz IFxlIG5vdCAgdXNlZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIFxyZWYgQVZJbnB1dEZvcm1hdAorKyAg ICAgKiAgICAgICAiaW5wdXQgZm9ybWF0IgorKyAgICAgKiBAc2VlIGZvcm1hdF9wcm9iZXNpemUK KysgICAgICovCisrICAgIGludDY0X3QgcHJvYmVzaXplOworKworKyAgICAvKioKKysgICAgICog TWF4aW11bSBkdXJhdGlvbiAoaW4gQVZfVElNRV9CQVNFIHVuaXRzKSBvZiB0aGUgZGF0YSByZWFk CisrICAgICAqIGZyb20gaW5wdXQgaW4gYXZmb3JtYXRfZmluZF9zdHJlYW1faW5mbygpLgorKyAg ICAgKiBEZW11eGluZyBvbmx5LCBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgYXZmb3JtYXRfZmlu ZF9zdHJlYW1faW5mbygpLgorKyAgICAgKiBDYW4gYmUgc2V0IHRvIDAgdG8gbGV0IGF2Zm9ybWF0 IGNob29zZSB1c2luZyBhIGhldXJpc3RpYy4KKysgICAgICovCisrICAgIGludDY0X3QgbWF4X2Fu YWx5emVfZHVyYXRpb247CisrCisrICAgIGNvbnN0IHVpbnQ4X3QgKmtleTsKKysgICAgaW50IGtl eWxlbjsKKysKKysgICAgdW5zaWduZWQgaW50IG5iX3Byb2dyYW1zOworKyAgICBBVlByb2dyYW0g Kipwcm9ncmFtczsKKysKKysgICAgLyoqCisrICAgICAqIEZvcmNlZCB2aWRlbyBjb2RlY19pZC4K KysgICAgICogRGVtdXhpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKi8KKysgICAgZW51bSBBVkNv ZGVjSUQgdmlkZW9fY29kZWNfaWQ7CisrCisrICAgIC8qKgorKyAgICAgKiBGb3JjZWQgYXVkaW8g Y29kZWNfaWQuCisrICAgICAqIERlbXV4aW5nOiBTZXQgYnkgdXNlci4KKysgICAgICovCisrICAg IGVudW0gQVZDb2RlY0lEIGF1ZGlvX2NvZGVjX2lkOworKworKyAgICAvKioKKysgICAgICogRm9y Y2VkIHN1YnRpdGxlIGNvZGVjX2lkLgorKyAgICAgKiBEZW11eGluZzogU2V0IGJ5IHVzZXIuCisr ICAgICAqLworKyAgICBlbnVtIEFWQ29kZWNJRCBzdWJ0aXRsZV9jb2RlY19pZDsKKysKKysgICAg LyoqCisrICAgICAqIEZvcmNlZCBEYXRhIGNvZGVjX2lkLgorKyAgICAgKiBEZW11eGluZzogU2V0 IGJ5IHVzZXIuCisrICAgICAqLworKyAgICBlbnVtIEFWQ29kZWNJRCBkYXRhX2NvZGVjX2lkOwor KworKyAgICAvKioKKysgICAgICogTWV0YWRhdGEgdGhhdCBhcHBsaWVzIHRvIHRoZSB3aG9sZSBm aWxlLgorKyAgICAgKgorKyAgICAgKiAtIGRlbXV4aW5nOiBzZXQgYnkgbGliYXZmb3JtYXQgaW4g YXZmb3JtYXRfb3Blbl9pbnB1dCgpCisrICAgICAqIC0gbXV4aW5nOiBtYXkgYmUgc2V0IGJ5IHRo ZSBjYWxsZXIgYmVmb3JlIGF2Zm9ybWF0X3dyaXRlX2hlYWRlcigpCisrICAgICAqCisrICAgICAq IEZyZWVkIGJ5IGxpYmF2Zm9ybWF0IGluIGF2Zm9ybWF0X2ZyZWVfY29udGV4dCgpLgorKyAgICAg Ki8KKysgICAgQVZEaWN0aW9uYXJ5ICptZXRhZGF0YTsKKysKKysgICAgLyoqCisrICAgICAqIFN0 YXJ0IHRpbWUgb2YgdGhlIHN0cmVhbSBpbiByZWFsIHdvcmxkIHRpbWUsIGluIG1pY3Jvc2Vjb25k cworKyAgICAgKiBzaW5jZSB0aGUgVW5peCBlcG9jaCAoMDA6MDAgMXN0IEphbnVhcnkgMTk3MCku IFRoYXQgaXMsIHB0cz0wIGluIHRoZQorKyAgICAgKiBzdHJlYW0gd2FzIGNhcHR1cmVkIGF0IHRo aXMgcmVhbCB3b3JsZCB0aW1lLgorKyAgICAgKiAtIG11eGluZzogU2V0IGJ5IHRoZSBjYWxsZXIg YmVmb3JlIGF2Zm9ybWF0X3dyaXRlX2hlYWRlcigpLiBJZiBzZXQgdG8KKysgICAgICogICAgICAg ICAgIGVpdGhlciAwIG9yIEFWX05PUFRTX1ZBTFVFLCB0aGVuIHRoZSBjdXJyZW50IHdhbGwtdGlt ZSB3aWxsCisrICAgICAqICAgICAgICAgICBiZSB1c2VkLgorKyAgICAgKiAtIGRlbXV4aW5nOiBT ZXQgYnkgbGliYXZmb3JtYXQuIEFWX05PUFRTX1ZBTFVFIGlmIHVua25vd24uIE5vdGUgdGhhdAor KyAgICAgKiAgICAgICAgICAgICB0aGUgdmFsdWUgbWF5IGJlY29tZSBrbm93biBhZnRlciBzb21l IG51bWJlciBvZiBmcmFtZXMKKysgICAgICogICAgICAgICAgICAgaGF2ZSBiZWVuIHJlY2VpdmVk LgorKyAgICAgKi8KKysgICAgaW50NjRfdCBzdGFydF90aW1lX3JlYWx0aW1lOworKworKyAgICAv KioKKysgICAgICogVGhlIG51bWJlciBvZiBmcmFtZXMgdXNlZCBmb3IgZGV0ZXJtaW5pbmcgdGhl IGZyYW1lcmF0ZSBpbgorKyAgICAgKiBhdmZvcm1hdF9maW5kX3N0cmVhbV9pbmZvKCkuCisrICAg ICAqIERlbXV4aW5nIG9ubHksIHNldCBieSB0aGUgY2FsbGVyIGJlZm9yZSBhdmZvcm1hdF9maW5k X3N0cmVhbV9pbmZvKCkuCisrICAgICAqLworKyAgICBpbnQgZnBzX3Byb2JlX3NpemU7CisrCisr ICAgIC8qKgorKyAgICAgKiBFcnJvciByZWNvZ25pdGlvbjsgaGlnaGVyIHZhbHVlcyB3aWxsIGRl dGVjdCBtb3JlIGVycm9ycyBidXQgbWF5CisrICAgICAqIG1pc2RldGVjdCBzb21lIG1vcmUgb3Ig bGVzcyB2YWxpZCBwYXJ0cyBhcyBlcnJvcnMuCisrICAgICAqIERlbXV4aW5nIG9ubHksIHNldCBi eSB0aGUgY2FsbGVyIGJlZm9yZSBhdmZvcm1hdF9vcGVuX2lucHV0KCkuCisrICAgICAqLworKyAg ICBpbnQgZXJyb3JfcmVjb2duaXRpb247CisrCisrICAgIC8qKgorKyAgICAgKiBDdXN0b20gaW50 ZXJydXB0IGNhbGxiYWNrcyBmb3IgdGhlIEkvTyBsYXllci4KKysgICAgICoKKysgICAgICogZGVt dXhpbmc6IHNldCBieSB0aGUgdXNlciBiZWZvcmUgYXZmb3JtYXRfb3Blbl9pbnB1dCgpLgorKyAg ICAgKiBtdXhpbmc6IHNldCBieSB0aGUgdXNlciBiZWZvcmUgYXZmb3JtYXRfd3JpdGVfaGVhZGVy KCkKKysgICAgICogKG1haW5seSB1c2VmdWwgZm9yIEFWRk1UX05PRklMRSBmb3JtYXRzKS4gVGhl IGNhbGxiYWNrCisrICAgICAqIHNob3VsZCBhbHNvIGJlIHBhc3NlZCB0byBhdmlvX29wZW4yKCkg aWYgaXQncyB1c2VkIHRvCisrICAgICAqIG9wZW4gdGhlIGZpbGUuCisrICAgICAqLworKyAgICBB VklPSW50ZXJydXB0Q0IgaW50ZXJydXB0X2NhbGxiYWNrOworKworKyAgICAvKioKKysgICAgICog RmxhZ3MgdG8gZW5hYmxlIGRlYnVnZ2luZy4KKysgICAgICovCisrICAgIGludCBkZWJ1ZzsKKysj ZGVmaW5lIEFWX0ZERUJVR19UUyAgICAgICAgMHgwMDAxCisrI2RlZmluZSBBVl9GREVCVUdfSUQz VjIgICAgIDB4MDAwMgorKworKyNpZiBGRl9BUElfRkRFQlVHX1RTCisrI2RlZmluZSBGRl9GREVC VUdfVFMgQVZfRkRFQlVHX1RTCisrI2VuZGlmCisrCisrICAgIC8qKgorKyAgICAgKiBUaGUgbWF4 aW11bSBudW1iZXIgb2Ygc3RyZWFtcy4KKysgICAgICogLSBlbmNvZGluZzogdW51c2VkCisrICAg ICAqIC0gZGVjb2Rpbmc6IHNldCBieSB1c2VyCisrICAgICAqLworKyAgICBpbnQgbWF4X3N0cmVh bXM7CisrCisrICAgIC8qKgorKyAgICAgKiBNYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgaW4gYnl0 ZXMgdG8gdXNlIGZvciB0aGUgaW5kZXggb2YgZWFjaCBzdHJlYW0uCisrICAgICAqIElmIHRoZSBp bmRleCBleGNlZWRzIHRoaXMgc2l6ZSwgZW50cmllcyB3aWxsIGJlIGRpc2NhcmRlZCBhcworKyAg ICAgKiBuZWVkZWQgdG8gbWFpbnRhaW4gYSBzbWFsbGVyIHNpemUuIFRoaXMgY2FuIGxlYWQgdG8g c2xvd2VyIG9yIGxlc3MKKysgICAgICogYWNjdXJhdGUgc2Vla2luZyAoZGVwZW5kcyBvbiBkZW11 eGVyKS4KKysgICAgICogRGVtdXhlcnMgZm9yIHdoaWNoIGEgZnVsbCBpbi1tZW1vcnkgaW5kZXgg aXMgbWFuZGF0b3J5IHdpbGwgaWdub3JlCisrICAgICAqIHRoaXMuCisrICAgICAqIC0gbXV4aW5n OiB1bnVzZWQKKysgICAgICogLSBkZW11eGluZzogc2V0IGJ5IHVzZXIKKysgICAgICovCisrICAg IHVuc2lnbmVkIGludCBtYXhfaW5kZXhfc2l6ZTsKKysKKysgICAgLyoqCisrICAgICAqIE1heGlt dW0gYW1vdW50IG9mIG1lbW9yeSBpbiBieXRlcyB0byB1c2UgZm9yIGJ1ZmZlcmluZyBmcmFtZXMK KysgICAgICogb2J0YWluZWQgZnJvbSByZWFsdGltZSBjYXB0dXJlIGRldmljZXMuCisrICAgICAq LworKyAgICB1bnNpZ25lZCBpbnQgbWF4X3BpY3R1cmVfYnVmZmVyOworKworKyAgICAvKioKKysg ICAgICogTWF4aW11bSBidWZmZXJpbmcgZHVyYXRpb24gZm9yIGludGVybGVhdmluZy4KKysgICAg ICoKKysgICAgICogVG8gZW5zdXJlIGFsbCB0aGUgc3RyZWFtcyBhcmUgaW50ZXJsZWF2ZWQgY29y cmVjdGx5LAorKyAgICAgKiBhdl9pbnRlcmxlYXZlZF93cml0ZV9mcmFtZSgpIHdpbGwgd2FpdCB1 bnRpbCBpdCBoYXMgYXQgbGVhc3Qgb25lIHBhY2tldAorKyAgICAgKiBmb3IgZWFjaCBzdHJlYW0g YmVmb3JlIGFjdHVhbGx5IHdyaXRpbmcgYW55IHBhY2tldHMgdG8gdGhlIG91dHB1dCBmaWxlLgor KyAgICAgKiBXaGVuIHNvbWUgc3RyZWFtcyBhcmUgInNwYXJzZSIgKGkuZS4gdGhlcmUgYXJlIGxh cmdlIGdhcHMgYmV0d2VlbgorKyAgICAgKiBzdWNjZXNzaXZlIHBhY2tldHMpLCB0aGlzIGNhbiBy ZXN1bHQgaW4gZXhjZXNzaXZlIGJ1ZmZlcmluZy4KKysgICAgICoKKysgICAgICogVGhpcyBmaWVs ZCBzcGVjaWZpZXMgdGhlIG1heGltdW0gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0aW1lc3RhbXBz IG9mIHRoZQorKyAgICAgKiBmaXJzdCBhbmQgdGhlIGxhc3QgcGFja2V0IGluIHRoZSBtdXhpbmcg cXVldWUsIGFib3ZlIHdoaWNoIGxpYmF2Zm9ybWF0CisrICAgICAqIHdpbGwgb3V0cHV0IGEgcGFj a2V0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBoYXMgcXVldWVkIGEgcGFja2V0IGZvciBhbGwK KysgICAgICogdGhlIHN0cmVhbXMuCisrICAgICAqCisrICAgICAqIE11eGluZyBvbmx5LCBzZXQg YnkgdGhlIGNhbGxlciBiZWZvcmUgYXZmb3JtYXRfd3JpdGVfaGVhZGVyKCkuCisrICAgICAqLwor KyAgICBpbnQ2NF90IG1heF9pbnRlcmxlYXZlX2RlbHRhOworKworKyAgICAvKioKKysgICAgICog TWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0byByZWFkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBm aXJzdCB0aW1lc3RhbXAuCisrICAgICAqIERlY29kaW5nIG9ubHkuCisrICAgICAqLworKyAgICBp bnQgbWF4X3RzX3Byb2JlOworKworKyAgICAvKioKKysgICAgICogTWF4IGNodW5rIHRpbWUgaW4g bWljcm9zZWNvbmRzLgorKyAgICAgKiBOb3RlLCBub3QgYWxsIGZvcm1hdHMgc3VwcG9ydCB0aGlz IGFuZCB1bnByZWRpY3RhYmxlIHRoaW5ncyBtYXkgaGFwcGVuIGlmIGl0IGlzIHVzZWQgd2hlbiBu b3Qgc3VwcG9ydGVkLgorKyAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlcgorKyAgICAgKiAt IGRlY29kaW5nOiB1bnVzZWQKKysgICAgICovCisrICAgIGludCBtYXhfY2h1bmtfZHVyYXRpb247 CisrCisrICAgIC8qKgorKyAgICAgKiBNYXggY2h1bmsgc2l6ZSBpbiBieXRlcworKyAgICAgKiBO b3RlLCBub3QgYWxsIGZvcm1hdHMgc3VwcG9ydCB0aGlzIGFuZCB1bnByZWRpY3RhYmxlIHRoaW5n cyBtYXkgaGFwcGVuIGlmIGl0IGlzIHVzZWQgd2hlbiBub3Qgc3VwcG9ydGVkLgorKyAgICAgKiAt IGVuY29kaW5nOiBTZXQgYnkgdXNlcgorKyAgICAgKiAtIGRlY29kaW5nOiB1bnVzZWQKKysgICAg ICovCisrICAgIGludCBtYXhfY2h1bmtfc2l6ZTsKKysKKysgICAgLyoqCisrICAgICAqIE1heGlt dW0gbnVtYmVyIG9mIHBhY2tldHMgdGhhdCBjYW4gYmUgcHJvYmVkCisrICAgICAqIC0gZW5jb2Rp bmc6IHVudXNlZAorKyAgICAgKiAtIGRlY29kaW5nOiBzZXQgYnkgdXNlcgorKyAgICAgKi8KKysg ICAgaW50IG1heF9wcm9iZV9wYWNrZXRzOworKworKyAgICAvKioKKysgICAgICogQWxsb3cgbm9u LXN0YW5kYXJkIGFuZCBleHBlcmltZW50YWwgZXh0ZW5zaW9uCisrICAgICAqIEBzZWUgQVZDb2Rl Y0NvbnRleHQuc3RyaWN0X3N0ZF9jb21wbGlhbmNlCisrICAgICAqLworKyAgICBpbnQgc3RyaWN0 X3N0ZF9jb21wbGlhbmNlOworKworKyAgICAvKioKKysgICAgICogRmxhZ3MgaW5kaWNhdGluZyBl dmVudHMgaGFwcGVuaW5nIG9uIHRoZSBmaWxlLCBhIGNvbWJpbmF0aW9uIG9mCisrICAgICAqIEFW Rk1UX0VWRU5UX0ZMQUdfKi4KKysgICAgICoKKysgICAgICogLSBkZW11eGluZzogbWF5IGJlIHNl dCBieSB0aGUgZGVtdXhlciBpbiBhdmZvcm1hdF9vcGVuX2lucHV0KCksCisrICAgICAqICAgYXZm b3JtYXRfZmluZF9zdHJlYW1faW5mbygpIGFuZCBhdl9yZWFkX2ZyYW1lKCkuIEZsYWdzIG11c3Qg YmUgY2xlYXJlZAorKyAgICAgKiAgIGJ5IHRoZSB1c2VyIG9uY2UgdGhlIGV2ZW50IGhhcyBiZWVu IGhhbmRsZWQuCisrICAgICAqIC0gbXV4aW5nOiBtYXkgYmUgc2V0IGJ5IHRoZSB1c2VyIGFmdGVy IGF2Zm9ybWF0X3dyaXRlX2hlYWRlcigpIHRvCisrICAgICAqICAgaW5kaWNhdGUgYSB1c2VyLXRy aWdnZXJlZCBldmVudC4gIFRoZSBtdXhlciB3aWxsIGNsZWFyIHRoZSBmbGFncyBmb3IKKysgICAg ICogICBldmVudHMgaXQgaGFzIGhhbmRsZWQgaW4gYXZfW2ludGVybGVhdmVkXV93cml0ZV9mcmFt ZSgpLgorKyAgICAgKi8KKysgICAgaW50IGV2ZW50X2ZsYWdzOworKy8qKgorKyAqIC0gZGVtdXhp bmc6IHRoZSBkZW11eGVyIHJlYWQgbmV3IG1ldGFkYXRhIGZyb20gdGhlIGZpbGUgYW5kIHVwZGF0 ZWQKKysgKiAgIEFWRm9ybWF0Q29udGV4dC5tZXRhZGF0YSBhY2NvcmRpbmdseQorKyAqIC0gbXV4 aW5nOiB0aGUgdXNlciB1cGRhdGVkIEFWRm9ybWF0Q29udGV4dC5tZXRhZGF0YSBhbmQgd2lzaGVz IHRoZSBtdXhlciB0bworKyAqICAgd3JpdGUgaXQgaW50byB0aGUgZmlsZQorKyAqLworKyNkZWZp bmUgQVZGTVRfRVZFTlRfRkxBR19NRVRBREFUQV9VUERBVEVEIDB4MDAwMQorKworKworKyAgICAv KioKKysgICAgICogQXZvaWQgbmVnYXRpdmUgdGltZXN0YW1wcyBkdXJpbmcgbXV4aW5nLgorKyAg ICAgKiBBbnkgdmFsdWUgb2YgdGhlIEFWRk1UX0FWT0lEX05FR19UU18qIGNvbnN0YW50cy4KKysg ICAgICogTm90ZSwgdGhpcyB3b3JrcyBiZXR0ZXIgd2hlbiB1c2luZyBhdl9pbnRlcmxlYXZlZF93 cml0ZV9mcmFtZSgpLgorKyAgICAgKiAtIG11eGluZzogU2V0IGJ5IHVzZXIKKysgICAgICogLSBk ZW11eGluZzogdW51c2VkCisrICAgICAqLworKyAgICBpbnQgYXZvaWRfbmVnYXRpdmVfdHM7Cisr I2RlZmluZSBBVkZNVF9BVk9JRF9ORUdfVFNfQVVUTyAgICAgICAgICAgICAtMSAvLy88IEVuYWJs ZWQgd2hlbiByZXF1aXJlZCBieSB0YXJnZXQgZm9ybWF0CisrI2RlZmluZSBBVkZNVF9BVk9JRF9O RUdfVFNfRElTQUJMRUQgICAgICAgICAgMCAvLy88IERvIG5vdCBzaGlmdCB0aW1lc3RhbXBzIGV2 ZW4gd2hlbiB0aGV5IGFyZSBuZWdhdGl2ZS4KKysjZGVmaW5lIEFWRk1UX0FWT0lEX05FR19UU19N QUtFX05PTl9ORUdBVElWRSAxIC8vLzwgU2hpZnQgdGltZXN0YW1wcyBzbyB0aGV5IGFyZSBub24g bmVnYXRpdmUKKysjZGVmaW5lIEFWRk1UX0FWT0lEX05FR19UU19NQUtFX1pFUk8gICAgICAgICAy IC8vLzwgU2hpZnQgdGltZXN0YW1wcyBzbyB0aGF0IHRoZXkgc3RhcnQgYXQgMAorKworKyAgICAv KioKKysgICAgICogQXVkaW8gcHJlbG9hZCBpbiBtaWNyb3NlY29uZHMuCisrICAgICAqIE5vdGUs IG5vdCBhbGwgZm9ybWF0cyBzdXBwb3J0IHRoaXMgYW5kIHVucHJlZGljdGFibGUgdGhpbmdzIG1h eSBoYXBwZW4gaWYgaXQgaXMgdXNlZCB3aGVuIG5vdCBzdXBwb3J0ZWQuCisrICAgICAqIC0gZW5j b2Rpbmc6IFNldCBieSB1c2VyCisrICAgICAqIC0gZGVjb2Rpbmc6IHVudXNlZAorKyAgICAgKi8K KysgICAgaW50IGF1ZGlvX3ByZWxvYWQ7CisrCisrICAgIC8qKgorKyAgICAgKiBmb3JjZXMgdGhl IHVzZSBvZiB3YWxsY2xvY2sgdGltZXN0YW1wcyBhcyBwdHMvZHRzIG9mIHBhY2tldHMKKysgICAg ICogVGhpcyBoYXMgdW5kZWZpbmVkIHJlc3VsdHMgaW4gdGhlIHByZXNlbmNlIG9mIEIgZnJhbWVz LgorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5 IHVzZXIKKysgICAgICovCisrICAgIGludCB1c2Vfd2FsbGNsb2NrX2FzX3RpbWVzdGFtcHM7Cisr CisrICAgIC8qKgorKyAgICAgKiBTa2lwIGR1cmF0aW9uIGNhbGN1bGF0aW9uIGluIGVzdGltYXRl X3RpbWluZ3NfZnJvbV9wdHMuCisrICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZAorKyAgICAgKiAt IGRlY29kaW5nOiBzZXQgYnkgdXNlcgorKyAgICAgKgorKyAgICAgKiBAc2VlIGR1cmF0aW9uX3By b2Jlc2l6ZQorKyAgICAgKi8KKysgICAgaW50IHNraXBfZXN0aW1hdGVfZHVyYXRpb25fZnJvbV9w dHM7CisrCisrICAgIC8qKgorKyAgICAgKiBhdmlvIGZsYWdzLCB1c2VkIHRvIGZvcmNlIEFWSU9f RkxBR19ESVJFQ1QuCisrICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZAorKyAgICAgKiAtIGRlY29k aW5nOiBTZXQgYnkgdXNlcgorKyAgICAgKi8KKysgICAgaW50IGF2aW9fZmxhZ3M7CisrCisrICAg IC8qKgorKyAgICAgKiBUaGUgZHVyYXRpb24gZmllbGQgY2FuIGJlIGVzdGltYXRlZCB0aHJvdWdo IHZhcmlvdXMgd2F5cywgYW5kIHRoaXMgZmllbGQgY2FuIGJlIHVzZWQKKysgICAgICogdG8ga25v dyBob3cgdGhlIGR1cmF0aW9uIHdhcyBlc3RpbWF0ZWQuCisrICAgICAqIC0gZW5jb2Rpbmc6IHVu dXNlZAorKyAgICAgKiAtIGRlY29kaW5nOiBSZWFkIGJ5IHVzZXIKKysgICAgICovCisrICAgIGVu dW0gQVZEdXJhdGlvbkVzdGltYXRpb25NZXRob2QgZHVyYXRpb25fZXN0aW1hdGlvbl9tZXRob2Q7 CisrCisrICAgIC8qKgorKyAgICAgKiBTa2lwIGluaXRpYWwgYnl0ZXMgd2hlbiBvcGVuaW5nIHN0 cmVhbQorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzogU2V0 IGJ5IHVzZXIKKysgICAgICovCisrICAgIGludDY0X3Qgc2tpcF9pbml0aWFsX2J5dGVzOworKwor KyAgICAvKioKKysgICAgICogQ29ycmVjdCBzaW5nbGUgdGltZXN0YW1wIG92ZXJmbG93cworKyAg ICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IHVzZXIK KysgICAgICovCisrICAgIHVuc2lnbmVkIGludCBjb3JyZWN0X3RzX292ZXJmbG93OworKworKyAg ICAvKioKKysgICAgICogRm9yY2Ugc2Vla2luZyB0byBhbnkgKGFsc28gbm9uIGtleSkgZnJhbWVz LgorKyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5 IHVzZXIKKysgICAgICovCisrICAgIGludCBzZWVrMmFueTsKKysKKysgICAgLyoqCisrICAgICAq IEZsdXNoIHRoZSBJL08gY29udGV4dCBhZnRlciBlYWNoIHBhY2tldC4KKysgICAgICogLSBlbmNv ZGluZzogU2V0IGJ5IHVzZXIKKysgICAgICogLSBkZWNvZGluZzogdW51c2VkCisrICAgICAqLwor KyAgICBpbnQgZmx1c2hfcGFja2V0czsKKysKKysgICAgLyoqCisrICAgICAqIGZvcm1hdCBwcm9i aW5nIHNjb3JlLgorKyAgICAgKiBUaGUgbWF4aW1hbCBzY29yZSBpcyBBVlBST0JFX1NDT1JFX01B WCwgaXRzIHNldCB3aGVuIHRoZSBkZW11eGVyIHByb2JlcworKyAgICAgKiB0aGUgZm9ybWF0Lgor KyAgICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzogc2V0IGJ5IGF2 Zm9ybWF0LCByZWFkIGJ5IHVzZXIKKysgICAgICovCisrICAgIGludCBwcm9iZV9zY29yZTsKKysK KysgICAgLyoqCisrICAgICAqIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgZnJvbSBpbnB1 dCBpbiBvcmRlciB0byBpZGVudGlmeSB0aGUKKysgICAgICogXHJlZiBBVklucHV0Rm9ybWF0ICJp bnB1dCBmb3JtYXQiLiBPbmx5IHVzZWQgd2hlbiB0aGUgZm9ybWF0IGlzIG5vdCBzZXQKKysgICAg ICogZXhwbGljaXRseSBieSB0aGUgY2FsbGVyLgorKyAgICAgKgorKyAgICAgKiBEZW11eGluZyBv bmx5LCBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgYXZmb3JtYXRfb3Blbl9pbnB1dCgpLgorKyAg ICAgKgorKyAgICAgKiBAc2VlIHByb2Jlc2l6ZQorKyAgICAgKi8KKysgICAgaW50IGZvcm1hdF9w cm9iZXNpemU7CisrCisrICAgIC8qKgorKyAgICAgKiAnLCcgc2VwYXJhdGVkIGxpc3Qgb2YgYWxs b3dlZCBkZWNvZGVycy4KKysgICAgICogSWYgTlVMTCB0aGVuIGFsbCBhcmUgYWxsb3dlZAorKyAg ICAgKiAtIGVuY29kaW5nOiB1bnVzZWQKKysgICAgICogLSBkZWNvZGluZzogc2V0IGJ5IHVzZXIK KysgICAgICovCisrICAgIGNoYXIgKmNvZGVjX3doaXRlbGlzdDsKKysKKysgICAgLyoqCisrICAg ICAqICcsJyBzZXBhcmF0ZWQgbGlzdCBvZiBhbGxvd2VkIGRlbXV4ZXJzLgorKyAgICAgKiBJZiBO VUxMIHRoZW4gYWxsIGFyZSBhbGxvd2VkCisrICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZAorKyAg ICAgKiAtIGRlY29kaW5nOiBzZXQgYnkgdXNlcgorKyAgICAgKi8KKysgICAgY2hhciAqZm9ybWF0 X3doaXRlbGlzdDsKKysKKysgICAgLyoqCisrICAgICAqICcsJyBzZXBhcmF0ZWQgbGlzdCBvZiBh bGxvd2VkIHByb3RvY29scy4KKysgICAgICogLSBlbmNvZGluZzogdW51c2VkCisrICAgICAqIC0g ZGVjb2Rpbmc6IHNldCBieSB1c2VyCisrICAgICAqLworKyAgICBjaGFyICpwcm90b2NvbF93aGl0 ZWxpc3Q7CisrCisrICAgIC8qKgorKyAgICAgKiAnLCcgc2VwYXJhdGVkIGxpc3Qgb2YgZGlzYWxs b3dlZCBwcm90b2NvbHMuCisrICAgICAqIC0gZW5jb2Rpbmc6IHVudXNlZAorKyAgICAgKiAtIGRl Y29kaW5nOiBzZXQgYnkgdXNlcgorKyAgICAgKi8KKysgICAgY2hhciAqcHJvdG9jb2xfYmxhY2ts aXN0OworKworKyAgICAvKioKKysgICAgICogSU8gcmVwb3NpdGlvbmVkIGZsYWcuCisrICAgICAq IFRoaXMgaXMgc2V0IGJ5IGF2Zm9ybWF0IHdoZW4gdGhlIHVuZGVybHlpbmcgSU8gY29udGV4dCBy ZWFkIHBvaW50ZXIKKysgICAgICogaXMgcmVwb3NpdGlvbmVkLCBmb3IgZXhhbXBsZSB3aGVuIGRv aW5nIGJ5dGUgYmFzZWQgc2Vla2luZy4KKysgICAgICogRGVtdXhlcnMgY2FuIHVzZSB0aGUgZmxh ZyB0byBkZXRlY3Qgc3VjaCBjaGFuZ2VzLgorKyAgICAgKi8KKysgICAgaW50IGlvX3JlcG9zaXRp b25lZDsKKysKKysgICAgLyoqCisrICAgICAqIEZvcmNlZCB2aWRlbyBjb2RlYy4KKysgICAgICog VGhpcyBhbGxvd3MgZm9yY2luZyBhIHNwZWNpZmljIGRlY29kZXIsIGV2ZW4gd2hlbiB0aGVyZSBh cmUgbXVsdGlwbGUgd2l0aAorKyAgICAgKiB0aGUgc2FtZSBjb2RlY19pZC4KKysgICAgICogRGVt dXhpbmc6IFNldCBieSB1c2VyCisrICAgICAqLworKyAgICBjb25zdCBzdHJ1Y3QgQVZDb2RlYyAq dmlkZW9fY29kZWM7CisrCisrICAgIC8qKgorKyAgICAgKiBGb3JjZWQgYXVkaW8gY29kZWMuCisr ICAgICAqIFRoaXMgYWxsb3dzIGZvcmNpbmcgYSBzcGVjaWZpYyBkZWNvZGVyLCBldmVuIHdoZW4g dGhlcmUgYXJlIG11bHRpcGxlIHdpdGgKKysgICAgICogdGhlIHNhbWUgY29kZWNfaWQuCisrICAg ICAqIERlbXV4aW5nOiBTZXQgYnkgdXNlcgorKyAgICAgKi8KKysgICAgY29uc3Qgc3RydWN0IEFW Q29kZWMgKmF1ZGlvX2NvZGVjOworKworKyAgICAvKioKKysgICAgICogRm9yY2VkIHN1YnRpdGxl IGNvZGVjLgorKyAgICAgKiBUaGlzIGFsbG93cyBmb3JjaW5nIGEgc3BlY2lmaWMgZGVjb2Rlciwg ZXZlbiB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSB3aXRoCisrICAgICAqIHRoZSBzYW1lIGNvZGVj X2lkLgorKyAgICAgKiBEZW11eGluZzogU2V0IGJ5IHVzZXIKKysgICAgICovCisrICAgIGNvbnN0 IHN0cnVjdCBBVkNvZGVjICpzdWJ0aXRsZV9jb2RlYzsKKysKKysgICAgLyoqCisrICAgICAqIEZv cmNlZCBkYXRhIGNvZGVjLgorKyAgICAgKiBUaGlzIGFsbG93cyBmb3JjaW5nIGEgc3BlY2lmaWMg ZGVjb2RlciwgZXZlbiB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSB3aXRoCisrICAgICAqIHRoZSBz YW1lIGNvZGVjX2lkLgorKyAgICAgKiBEZW11eGluZzogU2V0IGJ5IHVzZXIKKysgICAgICovCisr ICAgIGNvbnN0IHN0cnVjdCBBVkNvZGVjICpkYXRhX2NvZGVjOworKworKyAgICAvKioKKysgICAg ICogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4gYXMgcGFkZGluZyBpbiBhIG1ldGFkYXRh IGhlYWRlci4KKysgICAgICogRGVtdXhpbmc6IFVudXNlZC4KKysgICAgICogTXV4aW5nOiBTZXQg YnkgdXNlci4KKysgICAgICovCisrICAgIGludCBtZXRhZGF0YV9oZWFkZXJfcGFkZGluZzsKKysK KysgICAgLyoqCisrICAgICAqIFVzZXIgZGF0YS4KKysgICAgICogVGhpcyBpcyBhIHBsYWNlIGZv ciBzb21lIHByaXZhdGUgZGF0YSBvZiB0aGUgdXNlci4KKysgICAgICovCisrICAgIHZvaWQgKm9w YXF1ZTsKKysKKysgICAgLyoqCisrICAgICAqIENhbGxiYWNrIHVzZWQgYnkgZGV2aWNlcyB0byBj b21tdW5pY2F0ZSB3aXRoIGFwcGxpY2F0aW9uLgorKyAgICAgKi8KKysgICAgYXZfZm9ybWF0X2Nv bnRyb2xfbWVzc2FnZSBjb250cm9sX21lc3NhZ2VfY2I7CisrCisrICAgIC8qKgorKyAgICAgKiBP dXRwdXQgdGltZXN0YW1wIG9mZnNldCwgaW4gbWljcm9zZWNvbmRzLgorKyAgICAgKiBNdXhpbmc6 IHNldCBieSB1c2VyCisrICAgICAqLworKyAgICBpbnQ2NF90IG91dHB1dF90c19vZmZzZXQ7Cisr CisrICAgIC8qKgorKyAgICAgKiBkdW1wIGZvcm1hdCBzZXBhcmF0b3IuCisrICAgICAqIGNhbiBi ZSAiLCAiIG9yICJcbiAgICAgICIgb3IgYW55dGhpbmcgZWxzZQorKyAgICAgKiAtIG11eGluZzog U2V0IGJ5IHVzZXIuCisrICAgICAqIC0gZGVtdXhpbmc6IFNldCBieSB1c2VyLgorKyAgICAgKi8K KysgICAgdWludDhfdCAqZHVtcF9zZXBhcmF0b3I7CisrCisrICAgIC8qKgorKyAgICAgKiBBIGNh bGxiYWNrIGZvciBvcGVuaW5nIG5ldyBJTyBzdHJlYW1zLgorKyAgICAgKgorKyAgICAgKiBXaGVu ZXZlciBhIG11eGVyIG9yIGEgZGVtdXhlciBuZWVkcyB0byBvcGVuIGFuIElPIHN0cmVhbSAodHlw aWNhbGx5IGZyb20KKysgICAgICogYXZmb3JtYXRfb3Blbl9pbnB1dCgpIGZvciBkZW11eGVycywg YnV0IGZvciBjZXJ0YWluIGZvcm1hdHMgY2FuIGhhcHBlbiBhdAorKyAgICAgKiBvdGhlciB0aW1l cyBhcyB3ZWxsKSwgaXQgd2lsbCBjYWxsIHRoaXMgY2FsbGJhY2sgdG8gb2J0YWluIGFuIElPIGNv bnRleHQuCisrICAgICAqCisrICAgICAqIEBwYXJhbSBzIHRoZSBmb3JtYXQgY29udGV4dAorKyAg ICAgKiBAcGFyYW0gcGIgb24gc3VjY2VzcywgdGhlIG5ld2x5IG9wZW5lZCBJTyBjb250ZXh0IHNo b3VsZCBiZSByZXR1cm5lZCBoZXJlCisrICAgICAqIEBwYXJhbSB1cmwgdGhlIHVybCB0byBvcGVu CisrICAgICAqIEBwYXJhbSBmbGFncyBhIGNvbWJpbmF0aW9uIG9mIEFWSU9fRkxBR18qCisrICAg ICAqIEBwYXJhbSBvcHRpb25zIGEgZGljdGlvbmFyeSBvZiBhZGRpdGlvbmFsIG9wdGlvbnMsIHdp dGggdGhlIHNhbWUKKysgICAgICogICAgICAgICAgICAgICAgc2VtYW50aWNzIGFzIGluIGF2aW9f b3BlbjIoKQorKyAgICAgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBBVkVSUk9S IGNvZGUgb24gZmFpbHVyZQorKyAgICAgKgorKyAgICAgKiBAbm90ZSBDZXJ0YWluIG11eGVycyBh bmQgZGVtdXhlcnMgZG8gbmVzdGluZywgaS5lLiB0aGV5IG9wZW4gb25lIG9yIG1vcmUKKysgICAg ICogYWRkaXRpb25hbCBpbnRlcm5hbCBmb3JtYXQgY29udGV4dHMuIFRodXMgdGhlIEFWRm9ybWF0 Q29udGV4dCBwb2ludGVyCisrICAgICAqIHBhc3NlZCB0byB0aGlzIGNhbGxiYWNrIG1heSBiZSBk aWZmZXJlbnQgZnJvbSB0aGUgb25lIGZhY2luZyB0aGUgY2FsbGVyLgorKyAgICAgKiBJdCB3aWxs LCBob3dldmVyLCBoYXZlIHRoZSBzYW1lICdvcGFxdWUnIGZpZWxkLgorKyAgICAgKi8KKysgICAg aW50ICgqaW9fb3Blbikoc3RydWN0IEFWRm9ybWF0Q29udGV4dCAqcywgQVZJT0NvbnRleHQgKipw YiwgY29uc3QgY2hhciAqdXJsLAorKyAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsIEFWRGlj dGlvbmFyeSAqKm9wdGlvbnMpOworKworKyAgICAvKioKKysgICAgICogQSBjYWxsYmFjayBmb3Ig Y2xvc2luZyB0aGUgc3RyZWFtcyBvcGVuZWQgd2l0aCBBVkZvcm1hdENvbnRleHQuaW9fb3Blbigp LgorKyAgICAgKgorKyAgICAgKiBAcGFyYW0gcyB0aGUgZm9ybWF0IGNvbnRleHQKKysgICAgICog QHBhcmFtIHBiIElPIGNvbnRleHQgdG8gYmUgY2xvc2VkIGFuZCBmcmVlZAorKyAgICAgKiBAcmV0 dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBBVkVSUk9SIGNvZGUgb24gZmFpbHVyZQorKyAg ICAgKi8KKysgICAgaW50ICgqaW9fY2xvc2UyKShzdHJ1Y3QgQVZGb3JtYXRDb250ZXh0ICpzLCBB VklPQ29udGV4dCAqcGIpOworKworKyAgICAvKioKKysgICAgICogTWF4aW11bSBudW1iZXIgb2Yg Ynl0ZXMgcmVhZCBmcm9tIGlucHV0IGluIG9yZGVyIHRvIGRldGVybWluZSBzdHJlYW0gZHVyYXRp b25zCisrICAgICAqIHdoZW4gdXNpbmcgZXN0aW1hdGVfdGltaW5nc19mcm9tX3B0cyBpbiBhdmZv cm1hdF9maW5kX3N0cmVhbV9pbmZvKCkuCisrICAgICAqIERlbXV4aW5nIG9ubHksIHNldCBieSB0 aGUgY2FsbGVyIGJlZm9yZSBhdmZvcm1hdF9maW5kX3N0cmVhbV9pbmZvKCkuCisrICAgICAqIENh biBiZSBzZXQgdG8gMCB0byBsZXQgYXZmb3JtYXQgY2hvb3NlIHVzaW5nIGEgaGV1cmlzdGljLgor KyAgICAgKgorKyAgICAgKiBAc2VlIHNraXBfZXN0aW1hdGVfZHVyYXRpb25fZnJvbV9wdHMKKysg ICAgICovCisrICAgIGludDY0X3QgZHVyYXRpb25fcHJvYmVzaXplOworKworKyAgICAvKioKKysg ICAgICogTmFtZSBvZiB0aGlzIGZvcm1hdCBjb250ZXh0LCBvbmx5IHVzZWQgZm9yIGxvZ2dpbmcg cHVycG9zZXMuCisrICAgICAqLworKyAgICBjaGFyICpuYW1lOworK30gQVZGb3JtYXRDb250ZXh0 OworKworKy8qKgorKyAqIEBkZWZncm91cCBsYXZmX2NvcmUgQ29yZSBmdW5jdGlvbnMKKysgKiBA aW5ncm91cCBsaWJhdmYKKysgKgorKyAqIEZ1bmN0aW9ucyBmb3IgcXVlcnlpbmcgbGliYXZmb3Jt YXQgY2FwYWJpbGl0aWVzLCBhbGxvY2F0aW5nIGNvcmUgc3RydWN0dXJlcywKKysgKiBldGMuCisr ICogQHsKKysgKi8KKysKKysvKioKKysgKiBSZXR1cm4gdGhlIExJQkFWRk9STUFUX1ZFUlNJT05f SU5UIGNvbnN0YW50LgorKyAqLworK3Vuc2lnbmVkIGF2Zm9ybWF0X3ZlcnNpb24odm9pZCk7Cisr CisrLyoqCisrICogUmV0dXJuIHRoZSBsaWJhdmZvcm1hdCBidWlsZC10aW1lIGNvbmZpZ3VyYXRp b24uCisrICovCisrY29uc3QgY2hhciAqYXZmb3JtYXRfY29uZmlndXJhdGlvbih2b2lkKTsKKysK KysvKioKKysgKiBSZXR1cm4gdGhlIGxpYmF2Zm9ybWF0IGxpY2Vuc2UuCisrICovCisrY29uc3Qg Y2hhciAqYXZmb3JtYXRfbGljZW5zZSh2b2lkKTsKKysKKysvKioKKysgKiBEbyBnbG9iYWwgaW5p dGlhbGl6YXRpb24gb2YgbmV0d29yayBsaWJyYXJpZXMuIFRoaXMgaXMgb3B0aW9uYWwsCisrICog YW5kIG5vdCByZWNvbW1lbmRlZCBhbnltb3JlLgorKyAqCisrICogVGhpcyBmdW5jdGlvbnMgb25s eSBleGlzdHMgdG8gd29yayBhcm91bmQgdGhyZWFkLXNhZmV0eSBpc3N1ZXMKKysgKiB3aXRoIG9s ZGVyIEdudVRMUyBvciBPcGVuU1NMIGxpYnJhcmllcy4gSWYgbGliYXZmb3JtYXQgaXMgbGlua2Vk CisrICogdG8gbmV3ZXIgdmVyc2lvbnMgb2YgdGhvc2UgbGlicmFyaWVzLCBvciBpZiB5b3UgZG8g bm90IHVzZSB0aGVtLAorKyAqIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpcyB1bm5lY2Vzc2FyeS4g T3RoZXJ3aXNlLCB5b3UgbmVlZCB0byBjYWxsCisrICogdGhpcyBmdW5jdGlvbiBiZWZvcmUgYW55 IG90aGVyIHRocmVhZHMgdXNpbmcgdGhlbSBhcmUgc3RhcnRlZC4KKysgKgorKyAqIFRoaXMgZnVu Y3Rpb24gd2lsbCBiZSBkZXByZWNhdGVkIG9uY2Ugc3VwcG9ydCBmb3Igb2xkZXIgR251VExTIGFu ZAorKyAqIE9wZW5TU0wgbGlicmFyaWVzIGlzIHJlbW92ZWQsIGFuZCB0aGlzIGZ1bmN0aW9uIGhh cyBubyBwdXJwb3NlCisrICogYW55bW9yZS4KKysgKi8KKytpbnQgYXZmb3JtYXRfbmV0d29ya19p bml0KHZvaWQpOworKworKy8qKgorKyAqIFVuZG8gdGhlIGluaXRpYWxpemF0aW9uIGRvbmUgYnkg YXZmb3JtYXRfbmV0d29ya19pbml0LiBDYWxsIGl0IG9ubHkKKysgKiBvbmNlIGZvciBlYWNoIHRp bWUgeW91IGNhbGxlZCBhdmZvcm1hdF9uZXR3b3JrX2luaXQuCisrICovCisraW50IGF2Zm9ybWF0 X25ldHdvcmtfZGVpbml0KHZvaWQpOworKworKy8qKgorKyAqIEl0ZXJhdGUgb3ZlciBhbGwgcmVn aXN0ZXJlZCBtdXhlcnMuCisrICoKKysgKiBAcGFyYW0gb3BhcXVlIGEgcG9pbnRlciB3aGVyZSBs aWJhdmZvcm1hdCB3aWxsIHN0b3JlIHRoZSBpdGVyYXRpb24gc3RhdGUuIE11c3QKKysgKiAgICAg ICAgICAgICAgIHBvaW50IHRvIE5VTEwgdG8gc3RhcnQgdGhlIGl0ZXJhdGlvbi4KKysgKgorKyAq IEByZXR1cm4gdGhlIG5leHQgcmVnaXN0ZXJlZCBtdXhlciBvciBOVUxMIHdoZW4gdGhlIGl0ZXJh dGlvbiBpcworKyAqICAgICAgICAgZmluaXNoZWQKKysgKi8KKytjb25zdCBBVk91dHB1dEZvcm1h dCAqYXZfbXV4ZXJfaXRlcmF0ZSh2b2lkICoqb3BhcXVlKTsKKysKKysvKioKKysgKiBJdGVyYXRl IG92ZXIgYWxsIHJlZ2lzdGVyZWQgZGVtdXhlcnMuCisrICoKKysgKiBAcGFyYW0gb3BhcXVlIGEg cG9pbnRlciB3aGVyZSBsaWJhdmZvcm1hdCB3aWxsIHN0b3JlIHRoZSBpdGVyYXRpb24gc3RhdGUu CisrICogICAgICAgICAgICAgICBNdXN0IHBvaW50IHRvIE5VTEwgdG8gc3RhcnQgdGhlIGl0ZXJh dGlvbi4KKysgKgorKyAqIEByZXR1cm4gdGhlIG5leHQgcmVnaXN0ZXJlZCBkZW11eGVyIG9yIE5V TEwgd2hlbiB0aGUgaXRlcmF0aW9uIGlzCisrICogICAgICAgICBmaW5pc2hlZAorKyAqLworK2Nv bnN0IEFWSW5wdXRGb3JtYXQgKmF2X2RlbXV4ZXJfaXRlcmF0ZSh2b2lkICoqb3BhcXVlKTsKKysK KysvKioKKysgKiBBbGxvY2F0ZSBhbiBBVkZvcm1hdENvbnRleHQuCisrICogYXZmb3JtYXRfZnJl ZV9jb250ZXh0KCkgY2FuIGJlIHVzZWQgdG8gZnJlZSB0aGUgY29udGV4dCBhbmQgZXZlcnl0aGlu ZworKyAqIGFsbG9jYXRlZCBieSB0aGUgZnJhbWV3b3JrIHdpdGhpbiBpdC4KKysgKi8KKytBVkZv cm1hdENvbnRleHQgKmF2Zm9ybWF0X2FsbG9jX2NvbnRleHQodm9pZCk7CisrCisrLyoqCisrICog RnJlZSBhbiBBVkZvcm1hdENvbnRleHQgYW5kIGFsbCBpdHMgc3RyZWFtcy4KKysgKiBAcGFyYW0g cyBjb250ZXh0IHRvIGZyZWUKKysgKi8KKyt2b2lkIGF2Zm9ybWF0X2ZyZWVfY29udGV4dChBVkZv cm1hdENvbnRleHQgKnMpOworKworKy8qKgorKyAqIEdldCB0aGUgQVZDbGFzcyBmb3IgQVZGb3Jt YXRDb250ZXh0LiBJdCBjYW4gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoCisrICogQVZfT1BU X1NFQVJDSF9GQUtFX09CSiBmb3IgZXhhbWluaW5nIG9wdGlvbnMuCisrICoKKysgKiBAc2VlIGF2 X29wdF9maW5kKCkuCisrICovCisrY29uc3QgQVZDbGFzcyAqYXZmb3JtYXRfZ2V0X2NsYXNzKHZv aWQpOworKworKy8qKgorKyAqIEdldCB0aGUgQVZDbGFzcyBmb3IgQVZTdHJlYW0uIEl0IGNhbiBi ZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGgKKysgKiBBVl9PUFRfU0VBUkNIX0ZBS0VfT0JKIGZv ciBleGFtaW5pbmcgb3B0aW9ucy4KKysgKgorKyAqIEBzZWUgYXZfb3B0X2ZpbmQoKS4KKysgKi8K Kytjb25zdCBBVkNsYXNzICphdl9zdHJlYW1fZ2V0X2NsYXNzKHZvaWQpOworKworKy8qKgorKyAq IEdldCB0aGUgQVZDbGFzcyBmb3IgQVZTdHJlYW1Hcm91cC4gSXQgY2FuIGJlIHVzZWQgaW4gY29t YmluYXRpb24gd2l0aAorKyAqIEFWX09QVF9TRUFSQ0hfRkFLRV9PQkogZm9yIGV4YW1pbmluZyBv cHRpb25zLgorKyAqCisrICogQHNlZSBhdl9vcHRfZmluZCgpLgorKyAqLworK2NvbnN0IEFWQ2xh c3MgKmF2X3N0cmVhbV9ncm91cF9nZXRfY2xhc3Modm9pZCk7CisrCisrLyoqCisrICogQHJldHVy biBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgc3RyZWFtIGdyb3VwIHR5cGUsIG9yIE5VTEwgaWYg dW5rbm93bgorKyAqLworK2NvbnN0IGNoYXIgKmF2Zm9ybWF0X3N0cmVhbV9ncm91cF9uYW1lKGVu dW0gQVZTdHJlYW1Hcm91cFBhcmFtc1R5cGUgdHlwZSk7CisrCisrLyoqCisrICogQWRkIGEgbmV3 IGVtcHR5IHN0cmVhbSBncm91cCB0byBhIG1lZGlhIGZpbGUuCisrICoKKysgKiBXaGVuIGRlbXV4 aW5nLCBpdCBtYXkgYmUgY2FsbGVkIGJ5IHRoZSBkZW11eGVyIGluIHJlYWRfaGVhZGVyKCkuIElm IHRoZQorKyAqIGZsYWcgQVZGTVRDVFhfTk9IRUFERVIgaXMgc2V0IGluIHMuY3R4X2ZsYWdzLCB0 aGVuIGl0IG1heSBhbHNvCisrICogYmUgY2FsbGVkIGluIHJlYWRfcGFja2V0KCkuCisrICoKKysg KiBXaGVuIG11eGluZywgbWF5IGJlIGNhbGxlZCBieSB0aGUgdXNlciBiZWZvcmUgYXZmb3JtYXRf d3JpdGVfaGVhZGVyKCkuCisrICoKKysgKiBVc2VyIGlzIHJlcXVpcmVkIHRvIGNhbGwgYXZmb3Jt YXRfZnJlZV9jb250ZXh0KCkgdG8gY2xlYW4gdXAgdGhlIGFsbG9jYXRpb24KKysgKiBieSBhdmZv cm1hdF9zdHJlYW1fZ3JvdXBfY3JlYXRlKCkuCisrICoKKysgKiBOZXcgc3RyZWFtcyBjYW4gYmUg YWRkZWQgdG8gdGhlIGdyb3VwIHdpdGggYXZmb3JtYXRfc3RyZWFtX2dyb3VwX2FkZF9zdHJlYW0o KS4KKysgKgorKyAqIEBwYXJhbSBzIG1lZGlhIGZpbGUgaGFuZGxlCisrICoKKysgKiBAcmV0dXJu IG5ld2x5IGNyZWF0ZWQgZ3JvdXAgb3IgTlVMTCBvbiBlcnJvci4KKysgKiBAc2VlIGF2Zm9ybWF0 X25ld19zdHJlYW0sIGF2Zm9ybWF0X3N0cmVhbV9ncm91cF9hZGRfc3RyZWFtLgorKyAqLworK0FW U3RyZWFtR3JvdXAgKmF2Zm9ybWF0X3N0cmVhbV9ncm91cF9jcmVhdGUoQVZGb3JtYXRDb250ZXh0 ICpzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBB VlN0cmVhbUdyb3VwUGFyYW1zVHlwZSB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQVZEaWN0aW9uYXJ5ICoqb3B0aW9ucyk7CisrCisrLyoqCisrICog QWRkIGEgbmV3IHN0cmVhbSB0byBhIG1lZGlhIGZpbGUuCisrICoKKysgKiBXaGVuIGRlbXV4aW5n LCBpdCBpcyBjYWxsZWQgYnkgdGhlIGRlbXV4ZXIgaW4gcmVhZF9oZWFkZXIoKS4gSWYgdGhlCisr ICogZmxhZyBBVkZNVENUWF9OT0hFQURFUiBpcyBzZXQgaW4gcy5jdHhfZmxhZ3MsIHRoZW4gaXQg bWF5IGFsc28KKysgKiBiZSBjYWxsZWQgaW4gcmVhZF9wYWNrZXQoKS4KKysgKgorKyAqIFdoZW4g bXV4aW5nLCBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSB1c2VyIGJlZm9yZSBhdmZvcm1hdF93cml0 ZV9oZWFkZXIoKS4KKysgKgorKyAqIFVzZXIgaXMgcmVxdWlyZWQgdG8gY2FsbCBhdmZvcm1hdF9m cmVlX2NvbnRleHQoKSB0byBjbGVhbiB1cCB0aGUgYWxsb2NhdGlvbgorKyAqIGJ5IGF2Zm9ybWF0 X25ld19zdHJlYW0oKS4KKysgKgorKyAqIEBwYXJhbSBzIG1lZGlhIGZpbGUgaGFuZGxlCisrICog QHBhcmFtIGMgdW51c2VkLCBkb2VzIG5vdGhpbmcKKysgKgorKyAqIEByZXR1cm4gbmV3bHkgY3Jl YXRlZCBzdHJlYW0gb3IgTlVMTCBvbiBlcnJvci4KKysgKi8KKytBVlN0cmVhbSAqYXZmb3JtYXRf bmV3X3N0cmVhbShBVkZvcm1hdENvbnRleHQgKnMsIGNvbnN0IHN0cnVjdCBBVkNvZGVjICpjKTsK KysKKysvKioKKysgKiBBZGQgYW4gYWxyZWFkeSBhbGxvY2F0ZWQgc3RyZWFtIHRvIGEgc3RyZWFt IGdyb3VwLgorKyAqCisrICogV2hlbiBkZW11eGluZywgaXQgbWF5IGJlIGNhbGxlZCBieSB0aGUg ZGVtdXhlciBpbiByZWFkX2hlYWRlcigpLiBJZiB0aGUKKysgKiBmbGFnIEFWRk1UQ1RYX05PSEVB REVSIGlzIHNldCBpbiBzLmN0eF9mbGFncywgdGhlbiBpdCBtYXkgYWxzbworKyAqIGJlIGNhbGxl ZCBpbiByZWFkX3BhY2tldCgpLgorKyAqCisrICogV2hlbiBtdXhpbmcsIG1heSBiZSBjYWxsZWQg YnkgdGhlIHVzZXIgYmVmb3JlIGF2Zm9ybWF0X3dyaXRlX2hlYWRlcigpIGFmdGVyCisrICogaGF2 aW5nIGFsbG9jYXRlZCBhIG5ldyBncm91cCB3aXRoIGF2Zm9ybWF0X3N0cmVhbV9ncm91cF9jcmVh dGUoKSBhbmQgc3RyZWFtIHdpdGgKKysgKiBhdmZvcm1hdF9uZXdfc3RyZWFtKCkuCisrICoKKysg KiBVc2VyIGlzIHJlcXVpcmVkIHRvIGNhbGwgYXZmb3JtYXRfZnJlZV9jb250ZXh0KCkgdG8gY2xl YW4gdXAgdGhlIGFsbG9jYXRpb24KKysgKiBieSBhdmZvcm1hdF9zdHJlYW1fZ3JvdXBfYWRkX3N0 cmVhbSgpLgorKyAqCisrICogQHBhcmFtIHN0ZyBzdHJlYW0gZ3JvdXAgYmVsb25naW5nIHRvIGEg bWVkaWEgZmlsZS4KKysgKiBAcGFyYW0gc3QgIHN0cmVhbSBpbiB0aGUgbWVkaWEgZmlsZSB0byBh ZGQgdG8gdGhlIGdyb3VwLgorKyAqCisrICogQHJldHZhbCAwICAgICAgICAgICAgICAgICBzdWNj ZXNzCisrICogQHJldHZhbCBBVkVSUk9SKEVFWElTVCkgICB0aGUgc3RyZWFtIHdhcyBhbHJlYWR5 IGluIHRoZSBncm91cAorKyAqIEByZXR2YWwgImFub3RoZXIgbmVnYXRpdmUgZXJyb3IgY29kZSIg bGVnaXRpbWF0ZSBlcnJvcnMKKysgKgorKyAqIEBzZWUgYXZmb3JtYXRfbmV3X3N0cmVhbSwgYXZm b3JtYXRfc3RyZWFtX2dyb3VwX2NyZWF0ZS4KKysgKi8KKytpbnQgYXZmb3JtYXRfc3RyZWFtX2dy b3VwX2FkZF9zdHJlYW0oQVZTdHJlYW1Hcm91cCAqc3RnLCBBVlN0cmVhbSAqc3QpOworKworK0FW UHJvZ3JhbSAqYXZfbmV3X3Byb2dyYW0oQVZGb3JtYXRDb250ZXh0ICpzLCBpbnQgaWQpOworKwor KworKyNkZWZpbmUgQVZGTVRfUFJPR0NPUFlfTUFUQ0hfQllfSUQgICAgICAgICAgKDEgPDwgMCkg Ly8vPCBtYXRjaCBzdHJlYW1zIHVzaW5nIHN0cmVhbSBpZAorKyNkZWZpbmUgQVZGTVRfUFJPR0NP UFlfTUFUQ0hfQllfSU5ERVggICAgICAgKDEgPDwgMSkgLy8vPCBtYXRjaCBzdHJlYW1zIHVzaW5n IHN0cmVhbSBpbmRleAorKyNkZWZpbmUgQVZGTVRfUFJPR0NPUFlfT1ZFUldSSVRFICAgICAgICAg ICAgKDEgPDwgOCkgLy8vPCBvdmVyd3JpdGUgcHJlLWV4aXN0aW5nIHByb2dyYW0gaGF2aW5nIHNh bWUgSUQKKysKKysvKioKKysgKiBDb3B5IGFuIEFWUHJvZ3JhbSBmcm9tIG9uZSBBVkZvcm1hdENv bnRleHQgdG8gYW5vdGhlci4KKysgKgorKyAqIFN0cmVhbXMgaW4gdGhlIGRlc3RpbmF0aW9uIGNv bnRleHQgd2hvc2UgZGVzaWduYXRlZCBhdHRyaWJ1dGUgbWF0Y2ggdGhlIGF0dHJpYnV0ZSBvZgor KyAqIHRoZSBzdHJlYW1zIGluIHRoZSBzb3VyY2UgQVZQcm9ncmFtIGluZGV4IGFyZSBhZGRlZCB0 byB0aGUgc3RyZWFtIGluZGV4IG9mIHRoZSBjb3BpZWQKKysgKiBBVlByb2dyYW0uIFRoZSBhdHRy aWJ1dGUgaXMgZGVzaWduYXRlZCB1c2luZyBBVkZNVF9QUk9HQ09QWV9NQVRDSF8gZmxhZ3MuCisr ICoKKysgKiBJZiBhIG5ldyBwcm9ncmFtIGhhcyB0byBiZSBhZGRlZCwgdGhlIGZ1bmN0aW9uIGV4 cGVjdHMgYW5kIHJlcXVpcmVzIGFueSBleGlzdGluZyBidWZmZXIKKysgKiBob2xkaW5nIHRoZSBh cnJheSBvZiBwb2ludGVycyB0byBBVlByb2dyYW1zIGluIHRoZSBkZXN0aW5hdGlvbiBjb250ZXh0 IHRvIGhhdmUgaXRzIHNpemUKKysgKiBiZSBhIHBvd2VyLW9mLXR3byB2YWx1ZS4gVGhpcyBzaG91 bGQgYmUgdGhlIGNhc2UgaWYgYWxsIGVhcmxpZXIgcHJvZ3JhbXMgd2VyZSBjcmVhdGVkCisrICog dXNpbmcgYXZfbmV3X3Byb2dyYW0gb3IgdGhpcyBmdW5jdGlvbi4KKysgKgorKyAqIEBwYXJhbSBk c3QgICAgICAgICAgIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBtdXhlciBjb250ZXh0CisrICogQHBh cmFtIHNyYyAgICAgICAgICAgcG9pbnRlciB0byB0aGUgc291cmNlIG11eGVyIGNvbnRleHQKKysg KiBAcGFyYW0gcHJvZ2lkICAgICAgICBJRCBvZiB0aGUgcHJvZ3JhbSB0byBiZSBjb3BpZWQKKysg KiBAcGFyYW0gZmxhZ3MgICAgICAgICBjb21iaW5hdGlvbiBvZiBmbGFncyB3aGljaCBkZXRlcm1p bmUgaG93IHN0cmVhbXMgYXJlIG1hdGNoZWQgYW5kCisrICogICAgICAgICAgICAgICAgICAgICAg d2hldGhlciBwcmUtZXhpc3RpbmcgQVZQcm9ncmFtIGluIHRhcmdldCBpcyBvdmVyd3JpdHRlbi4K KysgKiAgICAgICAgICAgICAgICAgICAgICBJZiBubyBtYXRjaCBjb25kaXRpb24gaXMgc2V0LCBz dHJlYW1zIHdpbGwgYmUgbWF0Y2hlZCBieSBpZHMgaWYKKysgKiAgICAgICAgICAgICAgICAgICAg ICBhbGwgc291cmNlIHN0cmVhbSBpZHMgYXJlIG5vbi16ZXJvIGFuZCB1bmlxdWUsIGVsc2UgYnkg aW5kZXguCisrICoKKysgKiBAcmV0dXJuICA+PSAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgRXJyb3Ig RUVYSVNUIGlmIHRhcmdldCBhbHJlYWR5IGhhcyBwcm9ncmFtIHdpdGggc2FtZSBJRAorKyAqICAg ICAgICAgIGFuZCBvdmVyd3JpdGUgZmxhZyBpc24ndCBzZXQsIGVsc2UgYSBuZWdhdGl2ZSBBVkVS Uk9SIGNvZGUgaW4gY2FzZSBvZiBvdGhlcgorKyAqICAgICAgICAgIGZhaWx1cmVzLgorKyAqLwor K2ludCBhdl9wcm9ncmFtX2NvcHkoQVZGb3JtYXRDb250ZXh0ICpkc3QsIGNvbnN0IEFWRm9ybWF0 Q29udGV4dCAqc3JjLCBpbnQgcHJvZ2lkLCBpbnQgZmxhZ3MpOworKworKy8qKgorKyAqIEB9Cisr ICovCisrCisrCisrLyoqCisrICogQWxsb2NhdGUgYW4gQVZGb3JtYXRDb250ZXh0IGZvciBhbiBv dXRwdXQgZm9ybWF0LgorKyAqIGF2Zm9ybWF0X2ZyZWVfY29udGV4dCgpIGNhbiBiZSB1c2VkIHRv IGZyZWUgdGhlIGNvbnRleHQgYW5kCisrICogZXZlcnl0aGluZyBhbGxvY2F0ZWQgYnkgdGhlIGZy YW1ld29yayB3aXRoaW4gaXQuCisrICoKKysgKiBAcGFyYW0gY3R4ICAgICAgICAgICBwb2ludGVl IGlzIHNldCB0byB0aGUgY3JlYXRlZCBmb3JtYXQgY29udGV4dCwKKysgKiAgICAgICAgICAgICAg ICAgICAgICBvciB0byBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZQorKyAqIEBwYXJhbSBvZm9ybWF0 ICAgICAgIGZvcm1hdCB0byB1c2UgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbnRleHQsIGlmIE5VTEwK KysgKiAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfbmFtZSBhbmQgZmlsZW5hbWUgYXJlIHVz ZWQgaW5zdGVhZAorKyAqIEBwYXJhbSBmb3JtYXRfbmFtZSAgIHRoZSBuYW1lIG9mIG91dHB1dCBm b3JtYXQgdG8gdXNlIGZvciBhbGxvY2F0aW5nIHRoZQorKyAqICAgICAgICAgICAgICAgICAgICAg IGNvbnRleHQsIGlmIE5VTEwgZmlsZW5hbWUgaXMgdXNlZCBpbnN0ZWFkCisrICogQHBhcmFtIGZp bGVuYW1lICAgICAgdGhlIG5hbWUgb2YgdGhlIGZpbGVuYW1lIHRvIHVzZSBmb3IgYWxsb2NhdGlu ZyB0aGUKKysgKiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBtYXkgYmUgTlVMTAorKyAq CisrICogQHJldHVybiAgPj0gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJP UiBjb2RlIGluIGNhc2Ugb2YKKysgKiAgICAgICAgICBmYWlsdXJlCisrICovCisraW50IGF2Zm9y bWF0X2FsbG9jX291dHB1dF9jb250ZXh0MihBVkZvcm1hdENvbnRleHQgKipjdHgsIGNvbnN0IEFW T3V0cHV0Rm9ybWF0ICpvZm9ybWF0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqZm9ybWF0X25hbWUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKysKKysv KioKKysgKiBAYWRkdG9ncm91cCBsYXZmX2RlY29kaW5nCisrICogQHsKKysgKi8KKysKKysvKioK KysgKiBGaW5kIEFWSW5wdXRGb3JtYXQgYmFzZWQgb24gdGhlIHNob3J0IG5hbWUgb2YgdGhlIGlu cHV0IGZvcm1hdC4KKysgKi8KKytjb25zdCBBVklucHV0Rm9ybWF0ICphdl9maW5kX2lucHV0X2Zv cm1hdChjb25zdCBjaGFyICpzaG9ydF9uYW1lKTsKKysKKysvKioKKysgKiBHdWVzcyB0aGUgZmls ZSBmb3JtYXQuCisrICoKKysgKiBAcGFyYW0gcGQgICAgICAgIGRhdGEgdG8gYmUgcHJvYmVkCisr ICogQHBhcmFtIGlzX29wZW5lZCBXaGV0aGVyIHRoZSBmaWxlIGlzIGFscmVhZHkgb3BlbmVkOyBk ZXRlcm1pbmVzIHdoZXRoZXIKKysgKiAgICAgICAgICAgICAgICAgIGRlbXV4ZXJzIHdpdGggb3Ig d2l0aG91dCBBVkZNVF9OT0ZJTEUgYXJlIHByb2JlZC4KKysgKi8KKytjb25zdCBBVklucHV0Rm9y bWF0ICphdl9wcm9iZV9pbnB1dF9mb3JtYXQoY29uc3QgQVZQcm9iZURhdGEgKnBkLCBpbnQgaXNf b3BlbmVkKTsKKysKKysvKioKKysgKiBHdWVzcyB0aGUgZmlsZSBmb3JtYXQuCisrICoKKysgKiBA cGFyYW0gcGQgICAgICAgIGRhdGEgdG8gYmUgcHJvYmVkCisrICogQHBhcmFtIGlzX29wZW5lZCBX aGV0aGVyIHRoZSBmaWxlIGlzIGFscmVhZHkgb3BlbmVkOyBkZXRlcm1pbmVzIHdoZXRoZXIKKysg KiAgICAgICAgICAgICAgICAgIGRlbXV4ZXJzIHdpdGggb3Igd2l0aG91dCBBVkZNVF9OT0ZJTEUg YXJlIHByb2JlZC4KKysgKiBAcGFyYW0gc2NvcmVfbWF4IEEgcHJvYmUgc2NvcmUgbGFyZ2VyIHRo YXQgdGhpcyBpcyByZXF1aXJlZCB0byBhY2NlcHQgYQorKyAqICAgICAgICAgICAgICAgICAgZGV0 ZWN0aW9uLCB0aGUgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSBhY3R1YWwgZGV0ZWN0aW9uCisrICog ICAgICAgICAgICAgICAgICBzY29yZSBhZnRlcndhcmRzLgorKyAqICAgICAgICAgICAgICAgICAg SWYgdGhlIHNjb3JlIGlzIDw9IEFWUFJPQkVfU0NPUkVfTUFYIC8gNCBpdCBpcyByZWNvbW1lbmRl ZAorKyAqICAgICAgICAgICAgICAgICAgdG8gcmV0cnkgd2l0aCBhIGxhcmdlciBwcm9iZSBidWZm ZXIuCisrICovCisrY29uc3QgQVZJbnB1dEZvcm1hdCAqYXZfcHJvYmVfaW5wdXRfZm9ybWF0Mihj b25zdCBBVlByb2JlRGF0YSAqcGQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgaXNfb3BlbmVkLCBpbnQgKnNjb3JlX21heCk7CisrCisrLyoqCisrICog R3Vlc3MgdGhlIGZpbGUgZm9ybWF0LgorKyAqCisrICogQHBhcmFtIGlzX29wZW5lZCBXaGV0aGVy IHRoZSBmaWxlIGlzIGFscmVhZHkgb3BlbmVkOyBkZXRlcm1pbmVzIHdoZXRoZXIKKysgKiAgICAg ICAgICAgICAgICAgIGRlbXV4ZXJzIHdpdGggb3Igd2l0aG91dCBBVkZNVF9OT0ZJTEUgYXJlIHBy b2JlZC4KKysgKiBAcGFyYW0gc2NvcmVfcmV0IFRoZSBzY29yZSBvZiB0aGUgYmVzdCBkZXRlY3Rp b24uCisrICovCisrY29uc3QgQVZJbnB1dEZvcm1hdCAqYXZfcHJvYmVfaW5wdXRfZm9ybWF0Myhj b25zdCBBVlByb2JlRGF0YSAqcGQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgaXNfb3BlbmVkLCBpbnQgKnNjb3JlX3JldCk7CisrCisrLyoqCisrICog UHJvYmUgYSBieXRlc3RyZWFtIHRvIGRldGVybWluZSB0aGUgaW5wdXQgZm9ybWF0LiBFYWNoIHRp bWUgYSBwcm9iZSByZXR1cm5zCisrICogd2l0aCBhIHNjb3JlIHRoYXQgaXMgdG9vIGxvdywgdGhl IHByb2JlIGJ1ZmZlciBzaXplIGlzIGluY3JlYXNlZCBhbmQgYW5vdGhlcgorKyAqIGF0dGVtcHQg aXMgbWFkZS4gV2hlbiB0aGUgbWF4aW11bSBwcm9iZSBzaXplIGlzIHJlYWNoZWQsIHRoZSBpbnB1 dCBmb3JtYXQKKysgKiB3aXRoIHRoZSBoaWdoZXN0IHNjb3JlIGlzIHJldHVybmVkLgorKyAqCisr ICogQHBhcmFtIHBiICAgICAgICAgICAgIHRoZSBieXRlc3RyZWFtIHRvIHByb2JlCisrICogQHBh cmFtIGZtdCAgICAgICAgICAgIHRoZSBpbnB1dCBmb3JtYXQgaXMgcHV0IGhlcmUKKysgKiBAcGFy YW0gdXJsICAgICAgICAgICAgdGhlIHVybCBvZiB0aGUgc3RyZWFtCisrICogQHBhcmFtIGxvZ2N0 eCAgICAgICAgIHRoZSBsb2cgY29udGV4dAorKyAqIEBwYXJhbSBvZmZzZXQgICAgICAgICB0aGUg b2Zmc2V0IHdpdGhpbiB0aGUgYnl0ZXN0cmVhbSB0byBwcm9iZSBmcm9tCisrICogQHBhcmFtIG1h eF9wcm9iZV9zaXplIHRoZSBtYXhpbXVtIHByb2JlIGJ1ZmZlciBzaXplICh6ZXJvIGZvciBkZWZh dWx0KQorKyAqCisrICogQHJldHVybiB0aGUgc2NvcmUgaW4gY2FzZSBvZiBzdWNjZXNzLCBhIG5l Z2F0aXZlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4KKysgKiAgICAgICAgIHRoZSBtYXhpbWFs IHNjb3JlIGlzIEFWUFJPQkVfU0NPUkVfTUFYCisrICogICAgICAgICBBVkVSUk9SIGNvZGUgb3Ro ZXJ3aXNlCisrICovCisraW50IGF2X3Byb2JlX2lucHV0X2J1ZmZlcjIoQVZJT0NvbnRleHQgKnBi LCBjb25zdCBBVklucHV0Rm9ybWF0ICoqZm10LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKnVybCwgdm9pZCAqbG9nY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBtYXhfcHJvYmVfc2l6ZSk7Cisr CisrLyoqCisrICogTGlrZSBhdl9wcm9iZV9pbnB1dF9idWZmZXIyKCkgYnV0IHJldHVybnMgMCBv biBzdWNjZXNzCisrICovCisraW50IGF2X3Byb2JlX2lucHV0X2J1ZmZlcihBVklPQ29udGV4dCAq cGIsIGNvbnN0IEFWSW5wdXRGb3JtYXQgKipmbXQsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICp1cmwsIHZvaWQgKmxvZ2N0eCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBtYXhfcHJvYmVfc2l6ZSk7Cisr CisrLyoqCisrICogT3BlbiBhbiBpbnB1dCBzdHJlYW0gYW5kIHJlYWQgdGhlIGhlYWRlci4gVGhl IGNvZGVjcyBhcmUgbm90IG9wZW5lZC4KKysgKiBUaGUgc3RyZWFtIG11c3QgYmUgY2xvc2VkIHdp dGggYXZmb3JtYXRfY2xvc2VfaW5wdXQoKS4KKysgKgorKyAqIEBwYXJhbSBwcyAgICAgICBQb2lu dGVyIHRvIHVzZXItc3VwcGxpZWQgQVZGb3JtYXRDb250ZXh0IChhbGxvY2F0ZWQgYnkKKysgKiAg ICAgICAgICAgICAgICAgYXZmb3JtYXRfYWxsb2NfY29udGV4dCkuIE1heSBiZSBhIHBvaW50ZXIg dG8gTlVMTCwgaW4KKysgKiAgICAgICAgICAgICAgICAgd2hpY2ggY2FzZSBhbiBBVkZvcm1hdENv bnRleHQgaXMgYWxsb2NhdGVkIGJ5IHRoaXMKKysgKiAgICAgICAgICAgICAgICAgZnVuY3Rpb24g YW5kIHdyaXR0ZW4gaW50byBwcy4KKysgKiAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGEgdXNl ci1zdXBwbGllZCBBVkZvcm1hdENvbnRleHQgd2lsbCBiZSBmcmVlZAorKyAqICAgICAgICAgICAg ICAgICBvbiBmYWlsdXJlIGFuZCBpdHMgcG9pbnRlciBzZXQgdG8gTlVMTC4KKysgKiBAcGFyYW0g dXJsICAgICAgVVJMIG9mIHRoZSBzdHJlYW0gdG8gb3Blbi4KKysgKiBAcGFyYW0gZm10ICAgICAg SWYgbm9uLU5VTEwsIHRoaXMgcGFyYW1ldGVyIGZvcmNlcyBhIHNwZWNpZmljIGlucHV0IGZvcm1h dC4KKysgKiAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlIHRoZSBmb3JtYXQgaXMgYXV0b2RldGVj dGVkLgorKyAqIEBwYXJhbSBvcHRpb25zICBBIGRpY3Rpb25hcnkgZmlsbGVkIHdpdGggQVZGb3Jt YXRDb250ZXh0IGFuZCBkZW11eGVyLXByaXZhdGUKKysgKiAgICAgICAgICAgICAgICAgb3B0aW9u cy4KKysgKiAgICAgICAgICAgICAgICAgT24gcmV0dXJuIHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUg ZGVzdHJveWVkIGFuZCByZXBsYWNlZCB3aXRoCisrICogICAgICAgICAgICAgICAgIGEgZGljdCBj b250YWluaW5nIG9wdGlvbnMgdGhhdCB3ZXJlIG5vdCBmb3VuZC4gTWF5IGJlIE5VTEwuCisrICoK KysgKiBAcmV0dXJuIDAgb24gc3VjY2Vzczsgb24gZmFpbHVyZTogZnJlZXMgcHMsIHNldHMgaXRz IHBvaW50ZXIgdG8gTlVMTCwKKysgKiAgICAgICAgIGFuZCByZXR1cm5zIGEgbmVnYXRpdmUgQVZF UlJPUi4KKysgKgorKyAqIEBub3RlIElmIHlvdSB3YW50IHRvIHVzZSBjdXN0b20gSU8sIHByZWFs bG9jYXRlIHRoZSBmb3JtYXQgY29udGV4dCBhbmQgc2V0IGl0cyBwYiBmaWVsZC4KKysgKi8KKytp bnQgYXZmb3JtYXRfb3Blbl9pbnB1dChBVkZvcm1hdENvbnRleHQgKipwcywgY29uc3QgY2hhciAq dXJsLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWSW5wdXRGb3JtYXQgKmZtdCwg QVZEaWN0aW9uYXJ5ICoqb3B0aW9ucyk7CisrCisrLyoqCisrICogUmVhZCBwYWNrZXRzIG9mIGEg bWVkaWEgZmlsZSB0byBnZXQgc3RyZWFtIGluZm9ybWF0aW9uLiBUaGlzCisrICogaXMgdXNlZnVs IGZvciBmaWxlIGZvcm1hdHMgd2l0aCBubyBoZWFkZXJzIHN1Y2ggYXMgTVBFRy4gVGhpcworKyAq IGZ1bmN0aW9uIGFsc28gY29tcHV0ZXMgdGhlIHJlYWwgZnJhbWVyYXRlIGluIGNhc2Ugb2YgTVBF Ry0yIHJlcGVhdAorKyAqIGZyYW1lIG1vZGUuCisrICogVGhlIGxvZ2ljYWwgZmlsZSBwb3NpdGlv biBpcyBub3QgY2hhbmdlZCBieSB0aGlzIGZ1bmN0aW9uOworKyAqIGV4YW1pbmVkIHBhY2tldHMg bWF5IGJlIGJ1ZmZlcmVkIGZvciBsYXRlciBwcm9jZXNzaW5nLgorKyAqCisrICogQHBhcmFtIGlj IG1lZGlhIGZpbGUgaGFuZGxlCisrICogQHBhcmFtIG9wdGlvbnMgIElmIG5vbi1OVUxMLCBhbiBp Yy5uYl9zdHJlYW1zIGxvbmcgYXJyYXkgb2YgcG9pbnRlcnMgdG8KKysgKiAgICAgICAgICAgICAg ICAgZGljdGlvbmFyaWVzLCB3aGVyZSBpLXRoIG1lbWJlciBjb250YWlucyBvcHRpb25zIGZvcgor KyAqICAgICAgICAgICAgICAgICBjb2RlYyBjb3JyZXNwb25kaW5nIHRvIGktdGggc3RyZWFtLgor KyAqICAgICAgICAgICAgICAgICBPbiByZXR1cm4gZWFjaCBkaWN0aW9uYXJ5IHdpbGwgYmUgZmls bGVkIHdpdGggb3B0aW9ucyB0aGF0IHdlcmUgbm90IGZvdW5kLgorKyAqIEByZXR1cm4gPj0wIGlm IE9LLCBBVkVSUk9SX3h4eCBvbiBlcnJvcgorKyAqCisrICogQG5vdGUgdGhpcyBmdW5jdGlvbiBp c24ndCBndWFyYW50ZWVkIHRvIG9wZW4gYWxsIHRoZSBjb2RlY3MsIHNvCisrICogICAgICAgb3B0 aW9ucyBiZWluZyBub24tZW1wdHkgYXQgcmV0dXJuIGlzIGEgcGVyZmVjdGx5IG5vcm1hbCBiZWhh dmlvci4KKysgKgorKyAqIEB0b2RvIExldCB0aGUgdXNlciBkZWNpZGUgc29tZWhvdyB3aGF0IGlu Zm9ybWF0aW9uIGlzIG5lZWRlZCBzbyB0aGF0CisrICogICAgICAgd2UgZG8gbm90IHdhc3RlIHRp bWUgZ2V0dGluZyBzdHVmZiB0aGUgdXNlciBkb2VzIG5vdCBuZWVkLgorKyAqLworK2ludCBhdmZv cm1hdF9maW5kX3N0cmVhbV9pbmZvKEFWRm9ybWF0Q29udGV4dCAqaWMsIEFWRGljdGlvbmFyeSAq Km9wdGlvbnMpOworKworKy8qKgorKyAqIEZpbmQgdGhlIHByb2dyYW1zIHdoaWNoIGJlbG9uZyB0 byBhIGdpdmVuIHN0cmVhbS4KKysgKgorKyAqIEBwYXJhbSBpYyAgICBtZWRpYSBmaWxlIGhhbmRs ZQorKyAqIEBwYXJhbSBsYXN0ICB0aGUgbGFzdCBmb3VuZCBwcm9ncmFtLCB0aGUgc2VhcmNoIHdp bGwgc3RhcnQgYWZ0ZXIgdGhpcworKyAqICAgICAgICAgICAgICBwcm9ncmFtLCBvciBmcm9tIHRo ZSBiZWdpbm5pbmcgaWYgaXQgaXMgTlVMTAorKyAqIEBwYXJhbSBzICAgICBzdHJlYW0gaW5kZXgK KysgKgorKyAqIEByZXR1cm4gdGhlIG5leHQgcHJvZ3JhbSB3aGljaCBiZWxvbmdzIHRvIHMsIE5V TEwgaWYgbm8gcHJvZ3JhbSBpcyBmb3VuZCBvcgorKyAqICAgICAgICAgdGhlIGxhc3QgcHJvZ3Jh bSBpcyBub3QgYW1vbmcgdGhlIHByb2dyYW1zIG9mIGljLgorKyAqLworK0FWUHJvZ3JhbSAqYXZf ZmluZF9wcm9ncmFtX2Zyb21fc3RyZWFtKEFWRm9ybWF0Q29udGV4dCAqaWMsIEFWUHJvZ3JhbSAq bGFzdCwgaW50IHMpOworKworK3ZvaWQgYXZfcHJvZ3JhbV9hZGRfc3RyZWFtX2luZGV4KEFWRm9y bWF0Q29udGV4dCAqYWMsIGludCBwcm9naWQsIHVuc2lnbmVkIGludCBpZHgpOworKworKy8qKgor KyAqIEFkZCB0aGUgc3VwcGxpZWQgaW5kZXggb2YgYSBzdHJlYW0gdG8gdGhlIEFWUHJvZ3JhbSB3 aXRoIG1hdGNoaW5nIGlkLgorKyAqCisrICogQHBhcmFtIGFjICAgICAgdGhlIGZvcm1hdCBjb250 ZXh0IHdoaWNoIGNvbnRhaW5zIHRoZSB0YXJnZXQgQVZQcm9ncmFtCisrICogQHBhcmFtIHByb2dp ZCAgdGhlIElEIG9mIHRoZSBBVlByb2dyYW0gd2hvc2Ugc3RyZWFtIGluZGV4IGlzIHRvIGJlIHVw ZGF0ZWQKKysgKiBAcGFyYW0gaWR4ICAgICB0aGUgaW5kZXggb2YgdGhlIHN0cmVhbSB0byBiZSBh ZGRlZAorKyAqCisrICogQHJldHVybiA+PTAgdXBvbiBzdWNjZXNzZnVsIGFkZGl0aW9uIG9yIGlm IGluZGV4IHdhcyBhbHJlYWR5IHByZXNlbnQsCisrICogICAgICAgICBBVkVSUk9SIGlmIG5vIG1h dGNoaW5nIHByb2dyYW0gaXMgZm91bmQgb3Igc3RyZWFtIGluZGV4IGlzIGludmFsaWQgb3IKKysg KiAgICAgICAgIHRoZSBzdHJlYW0gaW5kZXggYXJyYXkgcmVhbGxvY2F0aW9uIGZhaWxlZC4KKysg Ki8KKytpbnQgYXZfcHJvZ3JhbV9hZGRfc3RyZWFtX2luZGV4MihBVkZvcm1hdENvbnRleHQgKmFj LCBpbnQgcHJvZ2lkLCB1bnNpZ25lZCBpbnQgaWR4KTsKKysKKysvKioKKysgKiBGaW5kIHRoZSAi YmVzdCIgc3RyZWFtIGluIHRoZSBmaWxlLgorKyAqIFRoZSBiZXN0IHN0cmVhbSBpcyBkZXRlcm1p bmVkIGFjY29yZGluZyB0byB2YXJpb3VzIGhldXJpc3RpY3MgYXMgdGhlIG1vc3QKKysgKiBsaWtl bHkgdG8gYmUgd2hhdCB0aGUgdXNlciBleHBlY3RzLgorKyAqIElmIHRoZSBkZWNvZGVyIHBhcmFt ZXRlciBpcyBub24tTlVMTCwgYXZfZmluZF9iZXN0X3N0cmVhbSB3aWxsIGZpbmQgdGhlCisrICog ZGVmYXVsdCBkZWNvZGVyIGZvciB0aGUgc3RyZWFtJ3MgY29kZWM7IHN0cmVhbXMgZm9yIHdoaWNo IG5vIGRlY29kZXIgY2FuCisrICogYmUgZm91bmQgYXJlIGlnbm9yZWQuCisrICoKKysgKiBAcGFy YW0gaWMgICAgICAgICAgICAgICAgbWVkaWEgZmlsZSBoYW5kbGUKKysgKiBAcGFyYW0gdHlwZSAg ICAgICAgICAgICAgc3RyZWFtIHR5cGU6IHZpZGVvLCBhdWRpbywgc3VidGl0bGVzLCBldGMuCisr ICogQHBhcmFtIHdhbnRlZF9zdHJlYW1fbmIgIHVzZXItcmVxdWVzdGVkIHN0cmVhbSBudW1iZXIs CisrICogICAgICAgICAgICAgICAgICAgICAgICAgIG9yIC0xIGZvciBhdXRvbWF0aWMgc2VsZWN0 aW9uCisrICogQHBhcmFtIHJlbGF0ZWRfc3RyZWFtICAgIHRyeSB0byBmaW5kIGEgc3RyZWFtIHJl bGF0ZWQgKGVnLiBpbiB0aGUgc2FtZQorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9n cmFtKSB0byB0aGlzIG9uZSwgb3IgLTEgaWYgbm9uZQorKyAqIEBwYXJhbSBkZWNvZGVyX3JldCAg ICAgICBpZiBub24tTlVMTCwgcmV0dXJucyB0aGUgZGVjb2RlciBmb3IgdGhlCisrICogICAgICAg ICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIHN0cmVhbQorKyAqIEBwYXJhbSBmbGFncyAgICAg ICAgICAgICBmbGFnczsgbm9uZSBhcmUgY3VycmVudGx5IGRlZmluZWQKKysgKgorKyAqIEByZXR1 cm4gIHRoZSBub24tbmVnYXRpdmUgc3RyZWFtIG51bWJlciBpbiBjYXNlIG9mIHN1Y2Nlc3MsCisr ICogICAgICAgICAgQVZFUlJPUl9TVFJFQU1fTk9UX0ZPVU5EIGlmIG5vIHN0cmVhbSB3aXRoIHRo ZSByZXF1ZXN0ZWQgdHlwZQorKyAqICAgICAgICAgIGNvdWxkIGJlIGZvdW5kLAorKyAqICAgICAg ICAgIEFWRVJST1JfREVDT0RFUl9OT1RfRk9VTkQgaWYgc3RyZWFtcyB3ZXJlIGZvdW5kIGJ1dCBu byBkZWNvZGVyCisrICoKKysgKiBAbm90ZSAgSWYgYXZfZmluZF9iZXN0X3N0cmVhbSByZXR1cm5z IHN1Y2Nlc3NmdWxseSBhbmQgZGVjb2Rlcl9yZXQgaXMgbm90CisrICogICAgICAgIE5VTEwsIHRo ZW4gKmRlY29kZXJfcmV0IGlzIGd1YXJhbnRlZWQgdG8gYmUgc2V0IHRvIGEgdmFsaWQgQVZDb2Rl Yy4KKysgKi8KKytpbnQgYXZfZmluZF9iZXN0X3N0cmVhbShBVkZvcm1hdENvbnRleHQgKmljLAor KyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZNZWRpYVR5cGUgdHlwZSwKKysgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgd2FudGVkX3N0cmVhbV9uYiwKKysgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgcmVsYXRlZF9zdHJlYW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgc3RydWN0IEFWQ29kZWMgKipkZWNvZGVyX3JldCwKKysgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgZmxhZ3MpOworKworKy8qKgorKyAqIFJldHVybiB0aGUgbmV4dCBmcmFtZSBvZiBhIHN0 cmVhbS4KKysgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgd2hhdCBpcyBzdG9yZWQgaW4gdGhlIGZp bGUsIGFuZCBkb2VzIG5vdCB2YWxpZGF0ZQorKyAqIHRoYXQgd2hhdCBpcyB0aGVyZSBhcmUgdmFs aWQgZnJhbWVzIGZvciB0aGUgZGVjb2Rlci4gSXQgd2lsbCBzcGxpdCB3aGF0IGlzCisrICogc3Rv cmVkIGluIHRoZSBmaWxlIGludG8gZnJhbWVzIGFuZCByZXR1cm4gb25lIGZvciBlYWNoIGNhbGwu IEl0IHdpbGwgbm90CisrICogb21pdCBpbnZhbGlkIGRhdGEgYmV0d2VlbiB2YWxpZCBmcmFtZXMg c28gYXMgdG8gZ2l2ZSB0aGUgZGVjb2RlciB0aGUgbWF4aW11bQorKyAqIGluZm9ybWF0aW9uIHBv c3NpYmxlIGZvciBkZWNvZGluZy4KKysgKgorKyAqIE9uIHN1Y2Nlc3MsIHRoZSByZXR1cm5lZCBw YWNrZXQgaXMgcmVmZXJlbmNlLWNvdW50ZWQgKHBrdC0+YnVmIGlzIHNldCkgYW5kCisrICogdmFs aWQgaW5kZWZpbml0ZWx5LiBUaGUgcGFja2V0IG11c3QgYmUgZnJlZWQgd2l0aCBhdl9wYWNrZXRf dW5yZWYoKSB3aGVuCisrICogaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gRm9yIHZpZGVvLCB0aGUg cGFja2V0IGNvbnRhaW5zIGV4YWN0bHkgb25lIGZyYW1lLgorKyAqIEZvciBhdWRpbywgaXQgY29u dGFpbnMgYW4gaW50ZWdlciBudW1iZXIgb2YgZnJhbWVzIGlmIGVhY2ggZnJhbWUgaGFzCisrICog YSBrbm93biBmaXhlZCBzaXplIChlLmcuIFBDTSBvciBBRFBDTSBkYXRhKS4gSWYgdGhlIGF1ZGlv IGZyYW1lcyBoYXZlCisrICogYSB2YXJpYWJsZSBzaXplIChlLmcuIE1QRUcgYXVkaW8pLCB0aGVu IGl0IGNvbnRhaW5zIG9uZSBmcmFtZS4KKysgKgorKyAqIHBrdC0+cHRzLCBwa3QtPmR0cyBhbmQg cGt0LT5kdXJhdGlvbiBhcmUgYWx3YXlzIHNldCB0byBjb3JyZWN0CisrICogdmFsdWVzIGluIEFW U3RyZWFtLnRpbWVfYmFzZSB1bml0cyAoYW5kIGd1ZXNzZWQgaWYgdGhlIGZvcm1hdCBjYW5ub3QK KysgKiBwcm92aWRlIHRoZW0pLiBwa3QtPnB0cyBjYW4gYmUgQVZfTk9QVFNfVkFMVUUgaWYgdGhl IHZpZGVvIGZvcm1hdAorKyAqIGhhcyBCLWZyYW1lcywgc28gaXQgaXMgYmV0dGVyIHRvIHJlbHkg b24gcGt0LT5kdHMgaWYgeW91IGRvIG5vdAorKyAqIGRlY29tcHJlc3MgdGhlIHBheWxvYWQuCisr ICoKKysgKiBAcmV0dXJuIDAgaWYgT0ssIDwgMCBvbiBlcnJvciBvciBlbmQgb2YgZmlsZS4gT24g ZXJyb3IsIHBrdCB3aWxsIGJlIGJsYW5rCisrICogICAgICAgICAoYXMgaWYgaXQgY2FtZSBmcm9t IGF2X3BhY2tldF9hbGxvYygpKS4KKysgKgorKyAqIEBub3RlIHBrdCB3aWxsIGJlIGluaXRpYWxp emVkLCBzbyBpdCBtYXkgYmUgdW5pbml0aWFsaXplZCwgYnV0IGl0IG11c3Qgbm90CisrICogICAg ICAgY29udGFpbiBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgZnJlZWQuCisrICovCisraW50IGF2X3Jl YWRfZnJhbWUoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0KTsKKysKKysvKioKKysg KiBTZWVrIHRvIHRoZSBrZXlmcmFtZSBhdCB0aW1lc3RhbXAuCisrICogJ3RpbWVzdGFtcCcgaW4g J3N0cmVhbV9pbmRleCcuCisrICoKKysgKiBAcGFyYW0gcyAgICAgICAgICAgIG1lZGlhIGZpbGUg aGFuZGxlCisrICogQHBhcmFtIHN0cmVhbV9pbmRleCBJZiBzdHJlYW1faW5kZXggaXMgKC0xKSwg YSBkZWZhdWx0IHN0cmVhbSBpcyBzZWxlY3RlZCwKKysgKiAgICAgICAgICAgICAgICAgICAgIGFu ZCB0aW1lc3RhbXAgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgZnJvbQorKyAqICAgICAgICAg ICAgICAgICAgICAgQVZfVElNRV9CQVNFIHVuaXRzIHRvIHRoZSBzdHJlYW0gc3BlY2lmaWMgdGlt ZV9iYXNlLgorKyAqIEBwYXJhbSB0aW1lc3RhbXAgICAgVGltZXN0YW1wIGluIEFWU3RyZWFtLnRp bWVfYmFzZSB1bml0cyBvciwgaWYgbm8gc3RyZWFtCisrICogICAgICAgICAgICAgICAgICAgICBp cyBzcGVjaWZpZWQsIGluIEFWX1RJTUVfQkFTRSB1bml0cy4KKysgKiBAcGFyYW0gZmxhZ3MgICAg ICAgIGZsYWdzIHdoaWNoIHNlbGVjdCBkaXJlY3Rpb24gYW5kIHNlZWtpbmcgbW9kZQorKyAqCisr ICogQHJldHVybiA+PSAwIG9uIHN1Y2Nlc3MKKysgKi8KKytpbnQgYXZfc2Vla19mcmFtZShBVkZv cm1hdENvbnRleHQgKnMsIGludCBzdHJlYW1faW5kZXgsIGludDY0X3QgdGltZXN0YW1wLAorKyAg ICAgICAgICAgICAgICAgIGludCBmbGFncyk7CisrCisrLyoqCisrICogU2VlayB0byB0aW1lc3Rh bXAgdHMuCisrICogU2Vla2luZyB3aWxsIGJlIGRvbmUgc28gdGhhdCB0aGUgcG9pbnQgZnJvbSB3 aGljaCBhbGwgYWN0aXZlIHN0cmVhbXMKKysgKiBjYW4gYmUgcHJlc2VudGVkIHN1Y2Nlc3NmdWxs eSB3aWxsIGJlIGNsb3Nlc3QgdG8gdHMgYW5kIHdpdGhpbiBtaW4vbWF4X3RzLgorKyAqIEFjdGl2 ZSBzdHJlYW1zIGFyZSBhbGwgc3RyZWFtcyB0aGF0IGhhdmUgQVZTdHJlYW0uZGlzY2FyZCA8IEFW RElTQ0FSRF9BTEwuCisrICoKKysgKiBJZiBmbGFncyBjb250YWluIEFWU0VFS19GTEFHX0JZVEUs IHRoZW4gYWxsIHRpbWVzdGFtcHMgYXJlIGluIGJ5dGVzIGFuZAorKyAqIGFyZSB0aGUgZmlsZSBw b3NpdGlvbiAodGhpcyBtYXkgbm90IGJlIHN1cHBvcnRlZCBieSBhbGwgZGVtdXhlcnMpLgorKyAq IElmIGZsYWdzIGNvbnRhaW4gQVZTRUVLX0ZMQUdfRlJBTUUsIHRoZW4gYWxsIHRpbWVzdGFtcHMg YXJlIGluIGZyYW1lcworKyAqIGluIHRoZSBzdHJlYW0gd2l0aCBzdHJlYW1faW5kZXggKHRoaXMg bWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkgYWxsIGRlbXV4ZXJzKS4KKysgKiBPdGhlcndpc2UgYWxs IHRpbWVzdGFtcHMgYXJlIGluIHVuaXRzIG9mIHRoZSBzdHJlYW0gc2VsZWN0ZWQgYnkgc3RyZWFt X2luZGV4CisrICogb3IgaWYgc3RyZWFtX2luZGV4IGlzIC0xLCBpbiBBVl9USU1FX0JBU0UgdW5p dHMuCisrICogSWYgZmxhZ3MgY29udGFpbiBBVlNFRUtfRkxBR19BTlksIHRoZW4gbm9uLWtleWZy YW1lcyBhcmUgdHJlYXRlZCBhcworKyAqIGtleWZyYW1lcyAodGhpcyBtYXkgbm90IGJlIHN1cHBv cnRlZCBieSBhbGwgZGVtdXhlcnMpLgorKyAqIElmIGZsYWdzIGNvbnRhaW4gQVZTRUVLX0ZMQUdf QkFDS1dBUkQsIGl0IGlzIGlnbm9yZWQuCisrICoKKysgKiBAcGFyYW0gcyAgICAgICAgICAgIG1l ZGlhIGZpbGUgaGFuZGxlCisrICogQHBhcmFtIHN0cmVhbV9pbmRleCBpbmRleCBvZiB0aGUgc3Ry ZWFtIHdoaWNoIGlzIHVzZWQgYXMgdGltZSBiYXNlIHJlZmVyZW5jZQorKyAqIEBwYXJhbSBtaW5f dHMgICAgICAgc21hbGxlc3QgYWNjZXB0YWJsZSB0aW1lc3RhbXAKKysgKiBAcGFyYW0gdHMgICAg ICAgICAgIHRhcmdldCB0aW1lc3RhbXAKKysgKiBAcGFyYW0gbWF4X3RzICAgICAgIGxhcmdlc3Qg YWNjZXB0YWJsZSB0aW1lc3RhbXAKKysgKiBAcGFyYW0gZmxhZ3MgICAgICAgIGZsYWdzCisrICog QHJldHVybiA+PTAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKKysgKgorKyAqIEBu b3RlIFRoaXMgaXMgcGFydCBvZiB0aGUgbmV3IHNlZWsgQVBJIHdoaWNoIGlzIHN0aWxsIHVuZGVy IGNvbnN0cnVjdGlvbi4KKysgKi8KKytpbnQgYXZmb3JtYXRfc2Vla19maWxlKEFWRm9ybWF0Q29u dGV4dCAqcywgaW50IHN0cmVhbV9pbmRleCwgaW50NjRfdCBtaW5fdHMsIGludDY0X3QgdHMsIGlu dDY0X3QgbWF4X3RzLCBpbnQgZmxhZ3MpOworKworKy8qKgorKyAqIERpc2NhcmQgYWxsIGludGVy bmFsbHkgYnVmZmVyZWQgZGF0YS4gVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4gZGVhbGluZyB3aXRo CisrICogZGlzY29udGludWl0aWVzIGluIHRoZSBieXRlIHN0cmVhbS4gR2VuZXJhbGx5IHdvcmtz IG9ubHkgd2l0aCBmb3JtYXRzIHRoYXQKKysgKiBjYW4gcmVzeW5jLiBUaGlzIGluY2x1ZGVzIGhl YWRlcmxlc3MgZm9ybWF0cyBsaWtlIE1QRUctVFMvVFMgYnV0IHNob3VsZCBhbHNvCisrICogd29y ayB3aXRoIE5VVCwgT2dnIGFuZCBpbiBhIGxpbWl0ZWQgd2F5IEFWSSBmb3IgZXhhbXBsZS4KKysg KgorKyAqIFRoZSBzZXQgb2Ygc3RyZWFtcywgdGhlIGRldGVjdGVkIGR1cmF0aW9uLCBzdHJlYW0g cGFyYW1ldGVycyBhbmQgY29kZWNzIGRvCisrICogbm90IGNoYW5nZSB3aGVuIGNhbGxpbmcgdGhp cyBmdW5jdGlvbi4gSWYgeW91IHdhbnQgYSBjb21wbGV0ZSByZXNldCwgaXQncworKyAqIGJldHRl ciB0byBvcGVuIGEgbmV3IEFWRm9ybWF0Q29udGV4dC4KKysgKgorKyAqIFRoaXMgZG9lcyBub3Qg Zmx1c2ggdGhlIEFWSU9Db250ZXh0IChzLT5wYikuIElmIG5lY2Vzc2FyeSwgY2FsbAorKyAqIGF2 aW9fZmx1c2gocy0+cGIpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisrICoKKysgKiBA cGFyYW0gcyBtZWRpYSBmaWxlIGhhbmRsZQorKyAqIEByZXR1cm4gPj0wIG9uIHN1Y2Nlc3MsIGVy cm9yIGNvZGUgb3RoZXJ3aXNlCisrICovCisraW50IGF2Zm9ybWF0X2ZsdXNoKEFWRm9ybWF0Q29u dGV4dCAqcyk7CisrCisrLyoqCisrICogU3RhcnQgcGxheWluZyBhIG5ldHdvcmstYmFzZWQgc3Ry ZWFtIChlLmcuIFJUU1Agc3RyZWFtKSBhdCB0aGUKKysgKiBjdXJyZW50IHBvc2l0aW9uLgorKyAq LworK2ludCBhdl9yZWFkX3BsYXkoQVZGb3JtYXRDb250ZXh0ICpzKTsKKysKKysvKioKKysgKiBQ YXVzZSBhIG5ldHdvcmstYmFzZWQgc3RyZWFtIChlLmcuIFJUU1Agc3RyZWFtKS4KKysgKgorKyAq IFVzZSBhdl9yZWFkX3BsYXkoKSB0byByZXN1bWUgaXQuCisrICovCisraW50IGF2X3JlYWRfcGF1 c2UoQVZGb3JtYXRDb250ZXh0ICpzKTsKKysKKysvKioKKysgKiBDb21tYW5kIElEcyB0aGF0IGNh biBiZSBzZW50IHRvIHRoZSBkZW11eGVyCisrICoKKysgKiBUaGUgZm9sbG93aW5nIGNvbW1hbmRz IGNhbiBiZSBzZW50IHRvIGEgZGVtdXhlcgorKyAqIHVzaW5nIDo6YXZmb3JtYXRfc2VuZF9jb21t YW5kLgorKyAqLworK2VudW0gQVZGb3JtYXRDb21tYW5kSUQgeworKyAgICAvKioKKysgICAgICog U2VuZCBhIFJUU1AgYFNFVF9QQVJBTUVURVJgIHJlcXVlc3QgdG8gdGhlIHNlcnZlcgorKyAgICAg KgorKyAgICAgKiBTZW5kcyBhbiBTRVRfUEFSQU1FVEVSIFJUU1AgY29tbWFuZCB0byB0aGUgc2Vy dmVyLAorKyAgICAgKiB3aXRoIGEgZGF0YSBwYXlsb2FkIG9mIHR5cGUgOjpBVlJUU1BDb21tYW5k UmVxdWVzdCwKKysgICAgICogb3duZXJzaGlwIG9mIGl0IGFuZCBpdHMgZGF0YSByZW1haW5zIHdp dGggdGhlIGNhbGxlci4KKysgICAgICoKKysgICAgICogQSByZXBseSByZXRyaWV2ZWQgaXMgb2Yg dHlwZSA6OkFWUlRTUFJlc3BvbnNlIGFuZCBpdAorKyAgICAgKiBhbmQgaXRzIGNvbnRlbnRzIG11 c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKysgICAgICovCisrICAgIEFWRk9STUFUX0NPTU1B TkRfUlRTUF9TRVRfUEFSQU1FVEVSLAorK307CisrCisrdHlwZWRlZiBzdHJ1Y3QgQVZSVFNQQ29t bWFuZFJlcXVlc3QgeworKyAgICAvKioKKysgICAgICogSGVhZGVycyBzZW50IGluIHRoZSByZXF1 ZXN0IHRvIHRoZSBzZXJ2ZXIKKysgICAgICovCisrICAgIEFWRGljdGlvbmFyeSAqaGVhZGVyczsK KysKKysgICAgLyoqCisrICAgICAqIEJvZHkgcGF5bG9hZCBzaXplCisrICAgICAqLworKyAgICBz aXplX3QgYm9keV9sZW47CisrCisrICAgIC8qKgorKyAgICAgKiBCb2R5IHBheWxvYWQKKysgICAg ICovCisrICAgIGNoYXIgKmJvZHk7CisrfSBBVlJUU1BDb21tYW5kUmVxdWVzdDsKKysKKyt0eXBl ZGVmIHN0cnVjdCBBVlJUU1BSZXNwb25zZSB7CisrICAgIC8qKgorKyAgICAgKiBSZXNwb25zZSBz dGF0dXMgY29kZSBmcm9tIHNlcnZlcgorKyAgICAgKi8KKysgICAgaW50IHN0YXR1c19jb2RlOwor KworKyAgICAvKioKKysgICAgICogUmVhc29uIHBocmFzZSBmcm9tIHRoZSBzZXJ2ZXIsIGRlc2Ny aWJpbmcgdGhlCisrICAgICAqIHN0YXR1cyBpbiBhIGh1bWFuLXJlYWRhYmxlIHdheS4KKysgICAg ICovCisrICAgIGNoYXIgKnJlYXNvbjsKKysKKysgICAgLyoqCisrICAgICAqIEJvZHkgcGF5bG9h ZCBzaXplCisrICAgICAqLworKyAgICBzaXplX3QgYm9keV9sZW47CisrCisrICAgIC8qKgorKyAg ICAgKiBCb2R5IHBheWxvYWQKKysgICAgICovCisrICAgIHVuc2lnbmVkIGNoYXIgKmJvZHk7Cisr fSBBVlJUU1BSZXNwb25zZTsKKysKKysvKioKKysgKiBTZW5kIGEgY29tbWFuZCB0byB0aGUgZGVt dXhlcgorKyAqCisrICogU2VuZHMgdGhlIHNwZWNpZmllZCBjb21tYW5kIGFuZCAoZGVwZW5kaW5n IG9uIHRoZSBjb21tYW5kKQorKyAqIG9wdGlvbmFsbHkgYSBjb21tYW5kLXNwZWNpZmljIHBheWxv YWQgdG8gdGhlIGRlbXV4ZXIgdG8gaGFuZGxlLgorKyAqCisrICogQHBhcmFtIHMgICAgIEZvcm1h dCBjb250ZXh0LCBtdXN0IGJlIGFsbG9jYXRlZCB3aXRoCisrICogICAgICAgICAgICAgIDo6YXZm b3JtYXRfYWxsb2NfY29udGV4dC4KKysgKiBAcGFyYW0gaWQgICAgSWRlbnRpZmllciBvZiB0eXBl IDo6QVZGb3JtYXRDb21tYW5kSUQsCisrICogICAgICAgICAgICAgIGluZGljYXRpbmcgdGhlIGNv bW1hbmQgdG8gc2VuZC4KKysgKiBAcGFyYW0gZGF0YSAgQ29tbWFuZC1zcGVjaWZpYyBkYXRhLCBh bGxvY2F0ZWQgYnkgdGhlIGNhbGxlcgorKyAqICAgICAgICAgICAgICBhbmQgb3duZXJzaGlwIHJl bWFpbnMgd2l0aCB0aGUgY2FsbGVyLgorKyAqICAgICAgICAgICAgICBGb3IgZGV0YWlscyB3aGF0 IGlzIGV4cGVjdGVkIGhlcmUsIGNvbnN1bHQgdGhlCisrICogICAgICAgICAgICAgIGRvY3VtZW50 YXRpb24gb2YgdGhlIHJlc3BlY3RpdmUgOjpBVkZvcm1hdENvbW1hbmRJRC4KKysgKi8KKytpbnQg YXZmb3JtYXRfc2VuZF9jb21tYW5kKEFWRm9ybWF0Q29udGV4dCAqcywgZW51bSBBVkZvcm1hdENv bW1hbmRJRCBpZCwgdm9pZCAqZGF0YSk7CisrCisrLyoqCisrICogUmVjZWl2ZSBhIGNvbW1hbmQg cmVwbHkgZnJvbSB0aGUgZGVtdXhlcgorKyAqCisrICogUmV0cmlldmVzIGEgcmVwbHkgZm9yIGEg cHJldmlvdXNseSBzZW50IGNvbW1hbmQgZnJvbSB0aGUgbXV4ZXIuCisrICoKKysgKiBAcGFyYW0g cyAgICAgICAgIEZvcm1hdCBjb250ZXh0LCBtdXN0IGJlIGFsbG9jYXRlZCB3aXRoCisrICogICAg ICAgICAgICAgICAgICA6OmF2Zm9ybWF0X2FsbG9jX2NvbnRleHQuCisrICogQHBhcmFtIGlkICAg ICAgICBJZGVudGlmaWVyIG9mIHR5cGUgOjpBVkZvcm1hdENvbW1hbmRJRCwKKysgKiAgICAgICAg ICAgICAgICAgIGluZGljYXRpbmcgdGhlIGNvbW1hbmQgZm9yIHdoaWNoIHRvIHJldHJpZXZlCisr ICogICAgICAgICAgICAgICAgICB0aGUgcmVwbHkuCisrICogQHBhcmFtIGRhdGFfb3V0ICBQb2lu dGVlIGlzIHNldCB0byB0aGUgY29tbWFuZCByZXBseSwgdGhlIGFjdHVhbAorKyAqICAgICAgICAg ICAgICAgICAgdHlwZSBkZXBlbmRzIG9uIHRoZSBjb21tYW5kLiBUaGlzIGlzIGFsbG9jYXRlZCBi eQorKyAqICAgICAgICAgICAgICAgICAgdGhlIG11eGVyIGFuZCBtdXN0IGJlIGZyZWVkIHdpdGgg Ojphdl9mcmVlLgorKyAqICAgICAgICAgICAgICAgICAgRm9yIGRldGFpbHMgb24gdGhlIGFjdHVh bCBkYXRhIHNldCBoZXJlLCBjb25zdWx0IHRoZQorKyAqICAgICAgICAgICAgICAgICAgZG9jdW1l bnRhdGlvbiBvZiB0aGUgcmVzcGVjdGl2ZSA6OkFWRm9ybWF0Q29tbWFuZElELgorKyAqLworK2lu dCBhdmZvcm1hdF9yZWNlaXZlX2NvbW1hbmRfcmVwbHkoQVZGb3JtYXRDb250ZXh0ICpzLCBlbnVt IEFWRm9ybWF0Q29tbWFuZElEIGlkLCB2b2lkICoqZGF0YV9vdXQpOworKworKy8qKgorKyAqIENs b3NlIGFuIG9wZW5lZCBpbnB1dCBBVkZvcm1hdENvbnRleHQuIEZyZWUgaXQgYW5kIGFsbCBpdHMg Y29udGVudHMKKysgKiBhbmQgc2V0ICpzIHRvIE5VTEwuCisrICovCisrdm9pZCBhdmZvcm1hdF9j bG9zZV9pbnB1dChBVkZvcm1hdENvbnRleHQgKipzKTsKKysvKioKKysgKiBAfQorKyAqLworKwor KyNkZWZpbmUgQVZTRUVLX0ZMQUdfQkFDS1dBUkQgMSAvLy88IHNlZWsgYmFja3dhcmQKKysjZGVm aW5lIEFWU0VFS19GTEFHX0JZVEUgICAgIDIgLy8vPCBzZWVraW5nIGJhc2VkIG9uIHBvc2l0aW9u IGluIGJ5dGVzCisrI2RlZmluZSBBVlNFRUtfRkxBR19BTlkgICAgICA0IC8vLzwgc2VlayB0byBh bnkgZnJhbWUsIGV2ZW4gbm9uLWtleWZyYW1lcworKyNkZWZpbmUgQVZTRUVLX0ZMQUdfRlJBTUUg ICAgOCAvLy88IHNlZWtpbmcgYmFzZWQgb24gZnJhbWUgbnVtYmVyCisrCisrLyoqCisrICogQGFk ZHRvZ3JvdXAgbGF2Zl9lbmNvZGluZworKyAqIEB7CisrICovCisrCisrI2RlZmluZSBBVlNUUkVB TV9JTklUX0lOX1dSSVRFX0hFQURFUiAwIC8vLzwgc3RyZWFtIHBhcmFtZXRlcnMgaW5pdGlhbGl6 ZWQgaW4gYXZmb3JtYXRfd3JpdGVfaGVhZGVyCisrI2RlZmluZSBBVlNUUkVBTV9JTklUX0lOX0lO SVRfT1VUUFVUICAxIC8vLzwgc3RyZWFtIHBhcmFtZXRlcnMgaW5pdGlhbGl6ZWQgaW4gYXZmb3Jt YXRfaW5pdF9vdXRwdXQKKysKKysvKioKKysgKiBBbGxvY2F0ZSB0aGUgc3RyZWFtIHByaXZhdGUg ZGF0YSBhbmQgd3JpdGUgdGhlIHN0cmVhbSBoZWFkZXIgdG8KKysgKiBhbiBvdXRwdXQgbWVkaWEg ZmlsZS4KKysgKgorKyAqIEBwYXJhbSBzICAgICAgICBNZWRpYSBmaWxlIGhhbmRsZSwgbXVzdCBi ZSBhbGxvY2F0ZWQgd2l0aAorKyAqICAgICAgICAgICAgICAgICBhdmZvcm1hdF9hbGxvY19jb250 ZXh0KCkuCisrICogICAgICAgICAgICAgICAgIEl0cyBccmVmIEFWRm9ybWF0Q29udGV4dC5vZm9y bWF0ICJvZm9ybWF0IiBmaWVsZCBtdXN0IGJlIHNldAorKyAqICAgICAgICAgICAgICAgICB0byB0 aGUgZGVzaXJlZCBvdXRwdXQgZm9ybWF0OworKyAqICAgICAgICAgICAgICAgICBJdHMgXHJlZiBB VkZvcm1hdENvbnRleHQucGIgInBiIiBmaWVsZCBtdXN0IGJlIHNldCB0byBhbgorKyAqICAgICAg ICAgICAgICAgICBhbHJlYWR5IG9wZW5lZCA6OkFWSU9Db250ZXh0LgorKyAqIEBwYXJhbSBvcHRp b25zICBBbiA6OkFWRGljdGlvbmFyeSBmaWxsZWQgd2l0aCBBVkZvcm1hdENvbnRleHQgYW5kCisr ICogICAgICAgICAgICAgICAgIG11eGVyLXByaXZhdGUgb3B0aW9ucy4KKysgKiAgICAgICAgICAg ICAgICAgT24gcmV0dXJuIHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgZGVzdHJveWVkIGFuZCByZXBs YWNlZCB3aXRoCisrICogICAgICAgICAgICAgICAgIGEgZGljdCBjb250YWluaW5nIG9wdGlvbnMg dGhhdCB3ZXJlIG5vdCBmb3VuZC4gTWF5IGJlIE5VTEwuCisrICoKKysgKiBAcmV0dmFsIEFWU1RS RUFNX0lOSVRfSU5fV1JJVEVfSEVBREVSIE9uIHN1Y2Nlc3MsIGlmIHRoZSBjb2RlYyBoYWQgbm90 IGFscmVhZHkgYmVlbgorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnVsbHkgaW5pdGlhbGl6ZWQgaW4gYXZmb3JtYXRfaW5pdF9vdXRwdXQoKS4KKysgKiBAcmV0dmFs IEFWU1RSRUFNX0lOSVRfSU5fSU5JVF9PVVRQVVQgIE9uIHN1Y2Nlc3MsIGlmIHRoZSBjb2RlYyBo YWQgYWxyZWFkeSBiZWVuIGZ1bGx5CisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbml0aWFsaXplZCBpbiBhdmZvcm1hdF9pbml0X291dHB1dCgpLgorKyAqIEByZXR2 YWwgQVZFUlJPUiAgICAgICAgICAgICAgICAgICAgICAgQSBuZWdhdGl2ZSBBVkVSUk9SIG9uIGZh aWx1cmUuCisrICoKKysgKiBAc2VlIGF2X29wdF9maW5kLCBhdl9kaWN0X3NldCwgYXZpb19vcGVu LCBhdl9vZm9ybWF0X25leHQsIGF2Zm9ybWF0X2luaXRfb3V0cHV0LgorKyAqLworK2F2X3dhcm5f dW51c2VkX3Jlc3VsdAorK2ludCBhdmZvcm1hdF93cml0ZV9oZWFkZXIoQVZGb3JtYXRDb250ZXh0 ICpzLCBBVkRpY3Rpb25hcnkgKipvcHRpb25zKTsKKysKKysvKioKKysgKiBBbGxvY2F0ZSB0aGUg c3RyZWFtIHByaXZhdGUgZGF0YSBhbmQgaW5pdGlhbGl6ZSB0aGUgY29kZWMsIGJ1dCBkbyBub3Qg d3JpdGUgdGhlIGhlYWRlci4KKysgKiBNYXkgb3B0aW9uYWxseSBiZSB1c2VkIGJlZm9yZSBhdmZv cm1hdF93cml0ZV9oZWFkZXIoKSB0byBpbml0aWFsaXplIHN0cmVhbSBwYXJhbWV0ZXJzCisrICog YmVmb3JlIGFjdHVhbGx5IHdyaXRpbmcgdGhlIGhlYWRlci4KKysgKiBJZiB1c2luZyB0aGlzIGZ1 bmN0aW9uLCBkbyBub3QgcGFzcyB0aGUgc2FtZSBvcHRpb25zIHRvIGF2Zm9ybWF0X3dyaXRlX2hl YWRlcigpLgorKyAqCisrICogQHBhcmFtIHMgICAgICAgIE1lZGlhIGZpbGUgaGFuZGxlLCBtdXN0 IGJlIGFsbG9jYXRlZCB3aXRoCisrICogICAgICAgICAgICAgICAgIGF2Zm9ybWF0X2FsbG9jX2Nv bnRleHQoKS4KKysgKiAgICAgICAgICAgICAgICAgSXRzIFxyZWYgQVZGb3JtYXRDb250ZXh0Lm9m b3JtYXQgIm9mb3JtYXQiIGZpZWxkIG11c3QgYmUgc2V0CisrICogICAgICAgICAgICAgICAgIHRv IHRoZSBkZXNpcmVkIG91dHB1dCBmb3JtYXQ7CisrICogICAgICAgICAgICAgICAgIEl0cyBccmVm IEFWRm9ybWF0Q29udGV4dC5wYiAicGIiIGZpZWxkIG11c3QgYmUgc2V0IHRvIGFuCisrICogICAg ICAgICAgICAgICAgIGFscmVhZHkgb3BlbmVkIDo6QVZJT0NvbnRleHQuCisrICogQHBhcmFtIG9w dGlvbnMgIEFuIDo6QVZEaWN0aW9uYXJ5IGZpbGxlZCB3aXRoIEFWRm9ybWF0Q29udGV4dCBhbmQK KysgKiAgICAgICAgICAgICAgICAgbXV4ZXItcHJpdmF0ZSBvcHRpb25zLgorKyAqICAgICAgICAg ICAgICAgICBPbiByZXR1cm4gdGhpcyBwYXJhbWV0ZXIgd2lsbCBiZSBkZXN0cm95ZWQgYW5kIHJl cGxhY2VkIHdpdGgKKysgKiAgICAgICAgICAgICAgICAgYSBkaWN0IGNvbnRhaW5pbmcgb3B0aW9u cyB0aGF0IHdlcmUgbm90IGZvdW5kLiBNYXkgYmUgTlVMTC4KKysgKgorKyAqIEByZXR2YWwgQVZT VFJFQU1fSU5JVF9JTl9XUklURV9IRUFERVIgT24gc3VjY2VzcywgaWYgdGhlIGNvZGVjIHJlcXVp cmVzCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmZvcm1hdF93 cml0ZV9oZWFkZXIgdG8gZnVsbHkgaW5pdGlhbGl6ZS4KKysgKiBAcmV0dmFsIEFWU1RSRUFNX0lO SVRfSU5fSU5JVF9PVVRQVVQgIE9uIHN1Y2Nlc3MsIGlmIHRoZSBjb2RlYyBoYXMgYmVlbiBmdWxs eQorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQu CisrICogQHJldHZhbCBBVkVSUk9SICAgICAgICAgICAgICAgICAgICAgICBBbmVnYXRpdmUgQVZF UlJPUiBvbiBmYWlsdXJlLgorKyAqCisrICogQHNlZSBhdl9vcHRfZmluZCwgYXZfZGljdF9zZXQs IGF2aW9fb3BlbiwgYXZfb2Zvcm1hdF9uZXh0LCBhdmZvcm1hdF93cml0ZV9oZWFkZXIuCisrICov CisrYXZfd2Fybl91bnVzZWRfcmVzdWx0CisraW50IGF2Zm9ybWF0X2luaXRfb3V0cHV0KEFWRm9y bWF0Q29udGV4dCAqcywgQVZEaWN0aW9uYXJ5ICoqb3B0aW9ucyk7CisrCisrLyoqCisrICogV3Jp dGUgYSBwYWNrZXQgdG8gYW4gb3V0cHV0IG1lZGlhIGZpbGUuCisrICoKKysgKiBUaGlzIGZ1bmN0 aW9uIHBhc3NlcyB0aGUgcGFja2V0IGRpcmVjdGx5IHRvIHRoZSBtdXhlciwgd2l0aG91dCBhbnkg YnVmZmVyaW5nCisrICogb3IgcmVvcmRlcmluZy4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBm b3IgY29ycmVjdGx5IGludGVybGVhdmluZyB0aGUKKysgKiBwYWNrZXRzIGlmIHRoZSBmb3JtYXQg cmVxdWlyZXMgaXQuIENhbGxlcnMgdGhhdCB3YW50IGxpYmF2Zm9ybWF0IHRvIGhhbmRsZQorKyAq IHRoZSBpbnRlcmxlYXZpbmcgc2hvdWxkIGNhbGwgYXZfaW50ZXJsZWF2ZWRfd3JpdGVfZnJhbWUo KSBpbnN0ZWFkIG9mIHRoaXMKKysgKiBmdW5jdGlvbi4KKysgKgorKyAqIEBwYXJhbSBzIG1lZGlh IGZpbGUgaGFuZGxlCisrICogQHBhcmFtIHBrdCBUaGUgcGFja2V0IGNvbnRhaW5pbmcgdGhlIGRh dGEgdG8gYmUgd3JpdHRlbi4gTm90ZSB0aGF0IHVubGlrZQorKyAqICAgICAgICAgICAgYXZfaW50 ZXJsZWF2ZWRfd3JpdGVfZnJhbWUoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlCisrICog ICAgICAgICAgICBvd25lcnNoaXAgb2YgdGhlIHBhY2tldCBwYXNzZWQgdG8gaXQgKHRob3VnaCBz b21lIG11eGVycyBtYXkgbWFrZQorKyAqICAgICAgICAgICAgYW4gaW50ZXJuYWwgcmVmZXJlbmNl IHRvIHRoZSBpbnB1dCBwYWNrZXQpLgorKyAqICAgICAgICAgICAgPGJyPgorKyAqICAgICAgICAg ICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIE5VTEwgKGF0IGFueSB0aW1lLCBub3QganVzdCBhdCB0 aGUgZW5kKSwgaW4KKysgKiAgICAgICAgICAgIG9yZGVyIHRvIGltbWVkaWF0ZWx5IGZsdXNoIGRh dGEgYnVmZmVyZWQgd2l0aGluIHRoZSBtdXhlciwgZm9yCisrICogICAgICAgICAgICBtdXhlcnMg dGhhdCBidWZmZXIgdXAgZGF0YSBpbnRlcm5hbGx5IGJlZm9yZSB3cml0aW5nIGl0IHRvIHRoZQor KyAqICAgICAgICAgICAgb3V0cHV0LgorKyAqICAgICAgICAgICAgPGJyPgorKyAqICAgICAgICAg ICAgUGFja2V0J3MgQHJlZiBBVlBhY2tldC5zdHJlYW1faW5kZXggInN0cmVhbV9pbmRleCIgZmll bGQgbXVzdCBiZQorKyAqICAgICAgICAgICAgc2V0IHRvIHRoZSBpbmRleCBvZiB0aGUgY29ycmVz cG9uZGluZyBzdHJlYW0gaW4gQHJlZgorKyAqICAgICAgICAgICAgQVZGb3JtYXRDb250ZXh0LnN0 cmVhbXMgInMtPnN0cmVhbXMiLgorKyAqICAgICAgICAgICAgPGJyPgorKyAqICAgICAgICAgICAg VGhlIHRpbWVzdGFtcHMgKEByZWYgQVZQYWNrZXQucHRzICJwdHMiLCBAcmVmIEFWUGFja2V0LmR0 cyAiZHRzIikKKysgKiAgICAgICAgICAgIG11c3QgYmUgc2V0IHRvIGNvcnJlY3QgdmFsdWVzIGlu IHRoZSBzdHJlYW0ncyB0aW1lYmFzZSAodW5sZXNzIHRoZQorKyAqICAgICAgICAgICAgb3V0cHV0 IGZvcm1hdCBpcyBmbGFnZ2VkIHdpdGggdGhlIEFWRk1UX05PVElNRVNUQU1QUyBmbGFnLCB0aGVu CisrICogICAgICAgICAgICB0aGV5IGNhbiBiZSBzZXQgdG8gQVZfTk9QVFNfVkFMVUUpLgorKyAq ICAgICAgICAgICAgVGhlIGR0cyBmb3Igc3Vic2VxdWVudCBwYWNrZXRzIHBhc3NlZCB0byB0aGlz IGZ1bmN0aW9uIG11c3QgYmUgc3RyaWN0bHkKKysgKiAgICAgICAgICAgIGluY3JlYXNpbmcgd2hl biBjb21wYXJlZCBpbiB0aGVpciByZXNwZWN0aXZlIHRpbWViYXNlcyAodW5sZXNzIHRoZQorKyAq ICAgICAgICAgICAgb3V0cHV0IGZvcm1hdCBpcyBmbGFnZ2VkIHdpdGggdGhlIEFWRk1UX1RTX05P TlNUUklDVCwgdGhlbiB0aGV5CisrICogICAgICAgICAgICBtZXJlbHkgaGF2ZSB0byBiZSBub25k ZWNyZWFzaW5nKS4gIEByZWYgQVZQYWNrZXQuZHVyYXRpb24KKysgKiAgICAgICAgICAgICJkdXJh dGlvbiIpIHNob3VsZCBhbHNvIGJlIHNldCBpZiBrbm93bi4KKysgKiBAcmV0dXJuIDwgMCBvbiBl cnJvciwgPSAwIGlmIE9LLCAxIGlmIGZsdXNoZWQgYW5kIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0 byBmbHVzaAorKyAqCisrICogQHNlZSBhdl9pbnRlcmxlYXZlZF93cml0ZV9mcmFtZSgpCisrICov CisraW50IGF2X3dyaXRlX2ZyYW1lKEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCk7 CisrCisrLyoqCisrICogV3JpdGUgYSBwYWNrZXQgdG8gYW4gb3V0cHV0IG1lZGlhIGZpbGUgZW5z dXJpbmcgY29ycmVjdCBpbnRlcmxlYXZpbmcuCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIHdpbGwg YnVmZmVyIHRoZSBwYWNrZXRzIGludGVybmFsbHkgYXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGUK KysgKiBwYWNrZXRzIGluIHRoZSBvdXRwdXQgZmlsZSBhcmUgcHJvcGVybHkgaW50ZXJsZWF2ZWQs IHVzdWFsbHkgb3JkZXJlZCBieQorKyAqIGluY3JlYXNpbmcgZHRzLiBDYWxsZXJzIGRvaW5nIHRo ZWlyIG93biBpbnRlcmxlYXZpbmcgc2hvdWxkIGNhbGwKKysgKiBhdl93cml0ZV9mcmFtZSgpIGlu c3RlYWQgb2YgdGhpcyBmdW5jdGlvbi4KKysgKgorKyAqIFVzaW5nIHRoaXMgZnVuY3Rpb24gaW5z dGVhZCBvZiBhdl93cml0ZV9mcmFtZSgpIGNhbiBnaXZlIG11eGVycyBhZHZhbmNlCisrICoga25v d2xlZGdlIG9mIGZ1dHVyZSBwYWNrZXRzLCBpbXByb3ZpbmcgZS5nLiB0aGUgYmVoYXZpb3VyIG9m IHRoZSBtcDQKKysgKiBtdXhlciBmb3IgVkZSIGNvbnRlbnQgaW4gZnJhZ21lbnRpbmcgbW9kZS4K KysgKgorKyAqIEBwYXJhbSBzIG1lZGlhIGZpbGUgaGFuZGxlCisrICogQHBhcmFtIHBrdCBUaGUg cGFja2V0IGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbi4KKysgKiAgICAgICAgICAg IDxicj4KKysgKiAgICAgICAgICAgIElmIHRoZSBwYWNrZXQgaXMgcmVmZXJlbmNlLWNvdW50ZWQs IHRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlCisrICogICAgICAgICAgICBvd25lcnNoaXAgb2YgdGhp cyByZWZlcmVuY2UgYW5kIHVucmVmZXJlbmNlIGl0IGxhdGVyIHdoZW4gaXQgc2VlcworKyAqICAg ICAgICAgICAgZml0LiBJZiB0aGUgcGFja2V0IGlzIG5vdCByZWZlcmVuY2UtY291bnRlZCwgbGli YXZmb3JtYXQgd2lsbAorKyAqICAgICAgICAgICAgbWFrZSBhIGNvcHkuCisrICogICAgICAgICAg ICBUaGUgcmV0dXJuZWQgcGFja2V0IHdpbGwgYmUgYmxhbmsgKGFzIGlmIHJldHVybmVkIGZyb20K KysgKiAgICAgICAgICAgIGF2X3BhY2tldF9hbGxvYygpKSwgZXZlbiBvbiBlcnJvci4KKysgKiAg ICAgICAgICAgIDxicj4KKysgKiAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBOVUxM IChhdCBhbnkgdGltZSwgbm90IGp1c3QgYXQgdGhlIGVuZCksIHRvCisrICogICAgICAgICAgICBm bHVzaCB0aGUgaW50ZXJsZWF2aW5nIHF1ZXVlcy4KKysgKiAgICAgICAgICAgIDxicj4KKysgKiAg ICAgICAgICAgIFBhY2tldCdzIEByZWYgQVZQYWNrZXQuc3RyZWFtX2luZGV4ICJzdHJlYW1faW5k ZXgiIGZpZWxkIG11c3QgYmUKKysgKiAgICAgICAgICAgIHNldCB0byB0aGUgaW5kZXggb2YgdGhl IGNvcnJlc3BvbmRpbmcgc3RyZWFtIGluIEByZWYKKysgKiAgICAgICAgICAgIEFWRm9ybWF0Q29u dGV4dC5zdHJlYW1zICJzLT5zdHJlYW1zIi4KKysgKiAgICAgICAgICAgIDxicj4KKysgKiAgICAg ICAgICAgIFRoZSB0aW1lc3RhbXBzIChAcmVmIEFWUGFja2V0LnB0cyAicHRzIiwgQHJlZiBBVlBh Y2tldC5kdHMgImR0cyIpCisrICogICAgICAgICAgICBtdXN0IGJlIHNldCB0byBjb3JyZWN0IHZh bHVlcyBpbiB0aGUgc3RyZWFtJ3MgdGltZWJhc2UgKHVubGVzcyB0aGUKKysgKiAgICAgICAgICAg IG91dHB1dCBmb3JtYXQgaXMgZmxhZ2dlZCB3aXRoIHRoZSBBVkZNVF9OT1RJTUVTVEFNUFMgZmxh ZywgdGhlbgorKyAqICAgICAgICAgICAgdGhleSBjYW4gYmUgc2V0IHRvIEFWX05PUFRTX1ZBTFVF KS4KKysgKiAgICAgICAgICAgIFRoZSBkdHMgZm9yIHN1YnNlcXVlbnQgcGFja2V0cyBpbiBvbmUg c3RyZWFtIG11c3QgYmUgc3RyaWN0bHkKKysgKiAgICAgICAgICAgIGluY3JlYXNpbmcgKHVubGVz cyB0aGUgb3V0cHV0IGZvcm1hdCBpcyBmbGFnZ2VkIHdpdGggdGhlCisrICogICAgICAgICAgICBB VkZNVF9UU19OT05TVFJJQ1QsIHRoZW4gdGhleSBtZXJlbHkgaGF2ZSB0byBiZSBub25kZWNyZWFz aW5nKS4KKysgKiAgICAgICAgICAgIEByZWYgQVZQYWNrZXQuZHVyYXRpb24gImR1cmF0aW9uIiBz aG91bGQgYWxzbyBiZSBzZXQgaWYga25vd24uCisrICoKKysgKiBAcmV0dXJuIDAgb24gc3VjY2Vz cywgYSBuZWdhdGl2ZSBBVkVSUk9SIG9uIGVycm9yLgorKyAqCisrICogQHNlZSBhdl93cml0ZV9m cmFtZSgpLCBBVkZvcm1hdENvbnRleHQubWF4X2ludGVybGVhdmVfZGVsdGEKKysgKi8KKytpbnQg YXZfaW50ZXJsZWF2ZWRfd3JpdGVfZnJhbWUoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAq cGt0KTsKKysKKysvKioKKysgKiBXcml0ZSBhbiB1bmNvZGVkIGZyYW1lIHRvIGFuIG91dHB1dCBt ZWRpYSBmaWxlLgorKyAqCisrICogVGhlIGZyYW1lIG11c3QgYmUgY29ycmVjdGx5IGludGVybGVh dmVkIGFjY29yZGluZyB0byB0aGUgY29udGFpbmVyCisrICogc3BlY2lmaWNhdGlvbjsgaWYgbm90 LCBhdl9pbnRlcmxlYXZlZF93cml0ZV91bmNvZGVkX2ZyYW1lKCkgbXVzdCBiZSB1c2VkLgorKyAq CisrICogU2VlIGF2X2ludGVybGVhdmVkX3dyaXRlX3VuY29kZWRfZnJhbWUoKSBmb3IgZGV0YWls cy4KKysgKi8KKytpbnQgYXZfd3JpdGVfdW5jb2RlZF9mcmFtZShBVkZvcm1hdENvbnRleHQgKnMs IGludCBzdHJlYW1faW5kZXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEFW RnJhbWUgKmZyYW1lKTsKKysKKysvKioKKysgKiBXcml0ZSBhbiB1bmNvZGVkIGZyYW1lIHRvIGFu IG91dHB1dCBtZWRpYSBmaWxlLgorKyAqCisrICogSWYgdGhlIG11eGVyIHN1cHBvcnRzIGl0LCB0 aGlzIGZ1bmN0aW9uIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHdyaXRlIGFuIEFWRnJhbWUKKysgKiBz dHJ1Y3R1cmUgZGlyZWN0bHksIHdpdGhvdXQgZW5jb2RpbmcgaXQgaW50byBhIHBhY2tldC4KKysg KiBJdCBpcyBtb3N0bHkgdXNlZnVsIGZvciBkZXZpY2VzIGFuZCBzaW1pbGFyIHNwZWNpYWwgbXV4 ZXJzIHRoYXQgdXNlIHJhdworKyAqIHZpZGVvIG9yIFBDTSBkYXRhIGFuZCB3aWxsIG5vdCBzZXJp YWxpemUgaXQgaW50byBhIGJ5dGUgc3RyZWFtLgorKyAqCisrICogVG8gdGVzdCB3aGV0aGVyIGl0 IGlzIHBvc3NpYmxlIHRvIHVzZSBpdCB3aXRoIGEgZ2l2ZW4gbXV4ZXIgYW5kIHN0cmVhbSwKKysg KiB1c2UgYXZfd3JpdGVfdW5jb2RlZF9mcmFtZV9xdWVyeSgpLgorKyAqCisrICogVGhlIGNhbGxl ciBnaXZlcyB1cCBvd25lcnNoaXAgb2YgdGhlIGZyYW1lIGFuZCBtdXN0IG5vdCBhY2Nlc3MgaXQK KysgKiBhZnRlcndhcmRzLgorKyAqCisrICogQHJldHVybiAgPj0wIGZvciBzdWNjZXNzLCBhIG5l Z2F0aXZlIGNvZGUgb24gZXJyb3IKKysgKi8KKytpbnQgYXZfaW50ZXJsZWF2ZWRfd3JpdGVfdW5j b2RlZF9mcmFtZShBVkZvcm1hdENvbnRleHQgKnMsIGludCBzdHJlYW1faW5kZXgsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEFWRnJhbWUgKmZyYW1lKTsK KysKKysvKioKKysgKiBUZXN0IHdoZXRoZXIgYSBtdXhlciBzdXBwb3J0cyB1bmNvZGVkIGZyYW1l LgorKyAqCisrICogQHJldHVybiAgPj0wIGlmIGFuIHVuY29kZWQgZnJhbWUgY2FuIGJlIHdyaXR0 ZW4gdG8gdGhhdCBtdXhlciBhbmQgc3RyZWFtLAorKyAqICAgICAgICAgIDwwIGlmIG5vdAorKyAq LworK2ludCBhdl93cml0ZV91bmNvZGVkX2ZyYW1lX3F1ZXJ5KEFWRm9ybWF0Q29udGV4dCAqcywg aW50IHN0cmVhbV9pbmRleCk7CisrCisrLyoqCisrICogV3JpdGUgdGhlIHN0cmVhbSB0cmFpbGVy IHRvIGFuIG91dHB1dCBtZWRpYSBmaWxlIGFuZCBmcmVlIHRoZQorKyAqIGZpbGUgcHJpdmF0ZSBk YXRhLgorKyAqCisrICogTWF5IG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxs IHRvIGF2Zm9ybWF0X3dyaXRlX2hlYWRlci4KKysgKgorKyAqIEBwYXJhbSBzIG1lZGlhIGZpbGUg aGFuZGxlCisrICogQHJldHVybiAwIGlmIE9LLCBBVkVSUk9SX3h4eCBvbiBlcnJvcgorKyAqLwor K2ludCBhdl93cml0ZV90cmFpbGVyKEFWRm9ybWF0Q29udGV4dCAqcyk7CisrCisrLyoqCisrICog UmV0dXJuIHRoZSBvdXRwdXQgZm9ybWF0IGluIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgb3V0cHV0 IGZvcm1hdHMKKysgKiB3aGljaCBiZXN0IG1hdGNoZXMgdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMs IG9yIHJldHVybiBOVUxMIGlmCisrICogdGhlcmUgaXMgbm8gbWF0Y2guCisrICoKKysgKiBAcGFy YW0gc2hvcnRfbmFtZSBpZiBub24tTlVMTCBjaGVja3MgaWYgc2hvcnRfbmFtZSBtYXRjaGVzIHdp dGggdGhlCisrICogICAgICAgICAgICAgICAgICAgbmFtZXMgb2YgdGhlIHJlZ2lzdGVyZWQgZm9y bWF0cworKyAqIEBwYXJhbSBmaWxlbmFtZSAgIGlmIG5vbi1OVUxMIGNoZWNrcyBpZiBmaWxlbmFt ZSB0ZXJtaW5hdGVzIHdpdGggdGhlCisrICogICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucyBv ZiB0aGUgcmVnaXN0ZXJlZCBmb3JtYXRzCisrICogQHBhcmFtIG1pbWVfdHlwZSAgaWYgbm9uLU5V TEwgY2hlY2tzIGlmIG1pbWVfdHlwZSBtYXRjaGVzIHdpdGggdGhlCisrICogICAgICAgICAgICAg ICAgICAgTUlNRSB0eXBlIG9mIHRoZSByZWdpc3RlcmVkIGZvcm1hdHMKKysgKi8KKytjb25zdCBB Vk91dHB1dEZvcm1hdCAqYXZfZ3Vlc3NfZm9ybWF0KGNvbnN0IGNoYXIgKnNob3J0X25hbWUsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFt ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1p bWVfdHlwZSk7CisrCisrLyoqCisrICogR3Vlc3MgdGhlIGNvZGVjIElEIGJhc2VkIHVwb24gbXV4 ZXIgYW5kIGZpbGVuYW1lLgorKyAqLworK2VudW0gQVZDb2RlY0lEIGF2X2d1ZXNzX2NvZGVjKGNv bnN0IEFWT3V0cHV0Rm9ybWF0ICpmbXQsIGNvbnN0IGNoYXIgKnNob3J0X25hbWUsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIg Km1pbWVfdHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWTWVkaWFU eXBlIHR5cGUpOworKworKy8qKgorKyAqIEdldCB0aW1pbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBk YXRhIGN1cnJlbnRseSBvdXRwdXQuCisrICogVGhlIGV4YWN0IG1lYW5pbmcgb2YgImN1cnJlbnRs eSBvdXRwdXQiIGRlcGVuZHMgb24gdGhlIGZvcm1hdC4KKysgKiBJdCBpcyBtb3N0bHkgcmVsZXZh bnQgZm9yIGRldmljZXMgdGhhdCBoYXZlIGFuIGludGVybmFsIGJ1ZmZlciBhbmQvb3IKKysgKiB3 b3JrIGluIHJlYWwgdGltZS4KKysgKiBAcGFyYW0gcyAgICAgICAgICBtZWRpYSBmaWxlIGhhbmRs ZQorKyAqIEBwYXJhbSBzdHJlYW0gICAgIHN0cmVhbSBpbiB0aGUgbWVkaWEgZmlsZQorKyAqIEBw YXJhbVtvdXRdIGR0cyAgIERUUyBvZiB0aGUgbGFzdCBwYWNrZXQgb3V0cHV0IGZvciB0aGUgc3Ry ZWFtLCBpbiBzdHJlYW0KKysgKiAgICAgICAgICAgICAgICAgICB0aW1lX2Jhc2UgdW5pdHMKKysg KiBAcGFyYW1bb3V0XSB3YWxsICBhYnNvbHV0ZSB0aW1lIHdoZW4gdGhhdCBwYWNrZXQgd2hhcyBv dXRwdXQsCisrICogICAgICAgICAgICAgICAgICAgaW4gbWljcm9zZWNvbmQKKysgKiBAcmV0dmFs ICAwICAgICAgICAgICAgICAgU3VjY2VzcworKyAqIEByZXR2YWwgIEFWRVJST1IoRU5PU1lTKSBU aGUgZm9ybWF0IGRvZXMgbm90IHN1cHBvcnQgaXQKKysgKgorKyAqIEBub3RlIFNvbWUgZm9ybWF0 cyBvciBkZXZpY2VzIG1heSBub3QgYWxsb3cgdG8gbWVhc3VyZSBkdHMgYW5kIHdhbGwKKysgKiAg ICAgICBhdG9taWNhbGx5LgorKyAqLworK2ludCBhdl9nZXRfb3V0cHV0X3RpbWVzdGFtcChzdHJ1 Y3QgQVZGb3JtYXRDb250ZXh0ICpzLCBpbnQgc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQ2NF90ICpkdHMsIGludDY0X3QgKndhbGwpOworKworKworKy8qKgorKyAqIEB9 CisrICovCisrCisrCisrLyoqCisrICogQGRlZmdyb3VwIGxhdmZfbWlzYyBVdGlsaXR5IGZ1bmN0 aW9ucworKyAqIEBpbmdyb3VwIGxpYmF2ZgorKyAqIEB7CisrICoKKysgKiBNaXNjZWxsYW5lb3Vz IHV0aWxpdHkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYm90aCBtdXhpbmcgYW5kIGRlbXV4aW5nCisr ICogKG9yIG5laXRoZXIpLgorKyAqLworKworKy8qKgorKyAqIFNlbmQgYSBuaWNlIGhleGFkZWNp bWFsIGR1bXAgb2YgYSBidWZmZXIgdG8gdGhlIHNwZWNpZmllZCBmaWxlIHN0cmVhbS4KKysgKgor KyAqIEBwYXJhbSBmIFRoZSBmaWxlIHN0cmVhbSBwb2ludGVyIHdoZXJlIHRoZSBkdW1wIHNob3Vs ZCBiZSBzZW50IHRvLgorKyAqIEBwYXJhbSBidWYgYnVmZmVyCisrICogQHBhcmFtIHNpemUgYnVm ZmVyIHNpemUKKysgKgorKyAqIEBzZWUgYXZfaGV4X2R1bXBfbG9nLCBhdl9wa3RfZHVtcDIsIGF2 X3BrdF9kdW1wX2xvZzIKKysgKi8KKyt2b2lkIGF2X2hleF9kdW1wKEZJTEUgKmYsIGNvbnN0IHVp bnQ4X3QgKmJ1ZiwgaW50IHNpemUpOworKworKy8qKgorKyAqIFNlbmQgYSBuaWNlIGhleGFkZWNp bWFsIGR1bXAgb2YgYSBidWZmZXIgdG8gdGhlIGxvZy4KKysgKgorKyAqIEBwYXJhbSBhdmNsIEEg cG9pbnRlciB0byBhbiBhcmJpdHJhcnkgc3RydWN0IG9mIHdoaWNoIHRoZSBmaXJzdCBmaWVsZCBp cyBhCisrICogcG9pbnRlciB0byBhbiBBVkNsYXNzIHN0cnVjdC4KKysgKiBAcGFyYW0gbGV2ZWwg VGhlIGltcG9ydGFuY2UgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UsIGxvd2VyIHZhbHVlcyBzaWduaWZ5 aW5nCisrICogaGlnaGVyIGltcG9ydGFuY2UuCisrICogQHBhcmFtIGJ1ZiBidWZmZXIKKysgKiBA cGFyYW0gc2l6ZSBidWZmZXIgc2l6ZQorKyAqCisrICogQHNlZSBhdl9oZXhfZHVtcCwgYXZfcGt0 X2R1bXAyLCBhdl9wa3RfZHVtcF9sb2cyCisrICovCisrdm9pZCBhdl9oZXhfZHVtcF9sb2codm9p ZCAqYXZjbCwgaW50IGxldmVsLCBjb25zdCB1aW50OF90ICpidWYsIGludCBzaXplKTsKKysKKysv KioKKysgKiBTZW5kIGEgbmljZSBkdW1wIG9mIGEgcGFja2V0IHRvIHRoZSBzcGVjaWZpZWQgZmls ZSBzdHJlYW0uCisrICoKKysgKiBAcGFyYW0gZiBUaGUgZmlsZSBzdHJlYW0gcG9pbnRlciB3aGVy ZSB0aGUgZHVtcCBzaG91bGQgYmUgc2VudCB0by4KKysgKiBAcGFyYW0gcGt0IHBhY2tldCB0byBk dW1wCisrICogQHBhcmFtIGR1bXBfcGF5bG9hZCBUcnVlIGlmIHRoZSBwYXlsb2FkIG11c3QgYmUg ZGlzcGxheWVkLCB0b28uCisrICogQHBhcmFtIHN0IEFWU3RyZWFtIHRoYXQgdGhlIHBhY2tldCBi ZWxvbmdzIHRvCisrICovCisrdm9pZCBhdl9wa3RfZHVtcDIoRklMRSAqZiwgY29uc3QgQVZQYWNr ZXQgKnBrdCwgaW50IGR1bXBfcGF5bG9hZCwgY29uc3QgQVZTdHJlYW0gKnN0KTsKKysKKysKKysv KioKKysgKiBTZW5kIGEgbmljZSBkdW1wIG9mIGEgcGFja2V0IHRvIHRoZSBsb2cuCisrICoKKysg KiBAcGFyYW0gYXZjbCBBIHBvaW50ZXIgdG8gYW4gYXJiaXRyYXJ5IHN0cnVjdCBvZiB3aGljaCB0 aGUgZmlyc3QgZmllbGQgaXMgYQorKyAqIHBvaW50ZXIgdG8gYW4gQVZDbGFzcyBzdHJ1Y3QuCisr ICogQHBhcmFtIGxldmVsIFRoZSBpbXBvcnRhbmNlIGxldmVsIG9mIHRoZSBtZXNzYWdlLCBsb3dl ciB2YWx1ZXMgc2lnbmlmeWluZworKyAqIGhpZ2hlciBpbXBvcnRhbmNlLgorKyAqIEBwYXJhbSBw a3QgcGFja2V0IHRvIGR1bXAKKysgKiBAcGFyYW0gZHVtcF9wYXlsb2FkIFRydWUgaWYgdGhlIHBh eWxvYWQgbXVzdCBiZSBkaXNwbGF5ZWQsIHRvby4KKysgKiBAcGFyYW0gc3QgQVZTdHJlYW0gdGhh dCB0aGUgcGFja2V0IGJlbG9uZ3MgdG8KKysgKi8KKyt2b2lkIGF2X3BrdF9kdW1wX2xvZzIodm9p ZCAqYXZjbCwgaW50IGxldmVsLCBjb25zdCBBVlBhY2tldCAqcGt0LCBpbnQgZHVtcF9wYXlsb2Fk LAorKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVlN0cmVhbSAqc3QpOworKworKy8qKgor KyAqIEdldCB0aGUgQVZDb2RlY0lEIGZvciB0aGUgZ2l2ZW4gY29kZWMgdGFnIHRhZy4KKysgKiBJ ZiBubyBjb2RlYyBpZCBpcyBmb3VuZCByZXR1cm5zIEFWX0NPREVDX0lEX05PTkUuCisrICoKKysg KiBAcGFyYW0gdGFncyBsaXN0IG9mIHN1cHBvcnRlZCBjb2RlY19pZC1jb2RlY190YWcgcGFpcnMs IGFzIHN0b3JlZAorKyAqIGluIEFWSW5wdXRGb3JtYXQuY29kZWNfdGFnIGFuZCBBVk91dHB1dEZv cm1hdC5jb2RlY190YWcKKysgKiBAcGFyYW0gdGFnICBjb2RlYyB0YWcgdG8gbWF0Y2ggdG8gYSBj b2RlYyBJRAorKyAqLworK2VudW0gQVZDb2RlY0lEIGF2X2NvZGVjX2dldF9pZChjb25zdCBzdHJ1 Y3QgQVZDb2RlY1RhZyAqIGNvbnN0ICp0YWdzLCB1bnNpZ25lZCBpbnQgdGFnKTsKKysKKysvKioK KysgKiBHZXQgdGhlIGNvZGVjIHRhZyBmb3IgdGhlIGdpdmVuIGNvZGVjIGlkIGlkLgorKyAqIElm IG5vIGNvZGVjIHRhZyBpcyBmb3VuZCByZXR1cm5zIDAuCisrICoKKysgKiBAcGFyYW0gdGFncyBs aXN0IG9mIHN1cHBvcnRlZCBjb2RlY19pZC1jb2RlY190YWcgcGFpcnMsIGFzIHN0b3JlZAorKyAq IGluIEFWSW5wdXRGb3JtYXQuY29kZWNfdGFnIGFuZCBBVk91dHB1dEZvcm1hdC5jb2RlY190YWcK KysgKiBAcGFyYW0gaWQgICBjb2RlYyBJRCB0byBtYXRjaCB0byBhIGNvZGVjIHRhZworKyAqLwor K3Vuc2lnbmVkIGludCBhdl9jb2RlY19nZXRfdGFnKGNvbnN0IHN0cnVjdCBBVkNvZGVjVGFnICog Y29uc3QgKnRhZ3MsIGVudW0gQVZDb2RlY0lEIGlkKTsKKysKKysvKioKKysgKiBHZXQgdGhlIGNv ZGVjIHRhZyBmb3IgdGhlIGdpdmVuIGNvZGVjIGlkLgorKyAqCisrICogQHBhcmFtIHRhZ3MgbGlz dCBvZiBzdXBwb3J0ZWQgY29kZWNfaWQgLSBjb2RlY190YWcgcGFpcnMsIGFzIHN0b3JlZAorKyAq IGluIEFWSW5wdXRGb3JtYXQuY29kZWNfdGFnIGFuZCBBVk91dHB1dEZvcm1hdC5jb2RlY190YWcK KysgKiBAcGFyYW0gaWQgY29kZWMgaWQgdGhhdCBzaG91bGQgYmUgc2VhcmNoZWQgZm9yIGluIHRo ZSBsaXN0CisrICogQHBhcmFtIHRhZyBBIHBvaW50ZXIgdG8gdGhlIGZvdW5kIHRhZworKyAqIEBy ZXR1cm4gMCBpZiBpZCB3YXMgbm90IGZvdW5kIGluIHRhZ3MsID4gMCBpZiBpdCB3YXMgZm91bmQK KysgKi8KKytpbnQgYXZfY29kZWNfZ2V0X3RhZzIoY29uc3Qgc3RydWN0IEFWQ29kZWNUYWcgKiBj b25zdCAqdGFncywgZW51bSBBVkNvZGVjSUQgaWQsCisrICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCAqdGFnKTsKKysKKytpbnQgYXZfZmluZF9kZWZhdWx0X3N0cmVhbV9pbmRleChB VkZvcm1hdENvbnRleHQgKnMpOworKworKy8qKgorKyAqIEdldCB0aGUgaW5kZXggZm9yIGEgc3Bl Y2lmaWMgdGltZXN0YW1wLgorKyAqCisrICogQHBhcmFtIHN0ICAgICAgICBzdHJlYW0gdGhhdCB0 aGUgdGltZXN0YW1wIGJlbG9uZ3MgdG8KKysgKiBAcGFyYW0gdGltZXN0YW1wIHRpbWVzdGFtcCB0 byByZXRyaWV2ZSB0aGUgaW5kZXggZm9yCisrICogQHBhcmFtIGZsYWdzIGlmIEFWU0VFS19GTEFH X0JBQ0tXQVJEIHRoZW4gdGhlIHJldHVybmVkIGluZGV4IHdpbGwgY29ycmVzcG9uZAorKyAqICAg ICAgICAgICAgICAgICB0byB0aGUgdGltZXN0YW1wIHdoaWNoIGlzIDw9IHRoZSByZXF1ZXN0ZWQg b25lLCBpZiBiYWNrd2FyZAorKyAqICAgICAgICAgICAgICAgICBpcyAwLCB0aGVuIGl0IHdpbGwg YmUgPj0KKysgKiAgICAgICAgICAgICAgaWYgQVZTRUVLX0ZMQUdfQU5ZIHNlZWsgdG8gYW55IGZy YW1lLCBvbmx5IGtleWZyYW1lcyBvdGhlcndpc2UKKysgKiBAcmV0dXJuIDwgMCBpZiBubyBzdWNo IHRpbWVzdGFtcCBjb3VsZCBiZSBmb3VuZAorKyAqLworK2ludCBhdl9pbmRleF9zZWFyY2hfdGlt ZXN0YW1wKEFWU3RyZWFtICpzdCwgaW50NjRfdCB0aW1lc3RhbXAsIGludCBmbGFncyk7CisrCisr LyoqCisrICogR2V0IHRoZSBpbmRleCBlbnRyeSBjb3VudCBmb3IgdGhlIGdpdmVuIEFWU3RyZWFt LgorKyAqCisrICogQHBhcmFtIHN0IHN0cmVhbQorKyAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBp bmRleCBlbnRyaWVzIGluIHRoZSBzdHJlYW0KKysgKi8KKytpbnQgYXZmb3JtYXRfaW5kZXhfZ2V0 X2VudHJpZXNfY291bnQoY29uc3QgQVZTdHJlYW0gKnN0KTsKKysKKysvKioKKysgKiBHZXQgdGhl IEFWSW5kZXhFbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBpbmRleC4KKysgKgorKyAq IEBwYXJhbSBzdCAgICAgICAgICBTdHJlYW0gY29udGFpbmluZyB0aGUgcmVxdWVzdGVkIEFWSW5k ZXhFbnRyeS4KKysgKiBAcGFyYW0gaWR4ICAgICAgICAgVGhlIGRlc2lyZWQgaW5kZXguCisrICog QHJldHVybiBBIHBvaW50ZXIgdG8gdGhlIHJlcXVlc3RlZCBBVkluZGV4RW50cnkgaWYgaXQgZXhp c3RzLCBOVUxMIG90aGVyd2lzZS4KKysgKgorKyAqIEBub3RlIFRoZSBwb2ludGVyIHJldHVybmVk IGJ5IHRoaXMgZnVuY3Rpb24gaXMgb25seSBndWFyYW50ZWVkIHRvIGJlIHZhbGlkCisrICogICAg ICAgdW50aWwgYW55IGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIHN0cmVhbSBvciB0aGUgcGFyZW50 IEFWRm9ybWF0Q29udGV4dAorKyAqICAgICAgIGFzIGlucHV0IGFyZ3VtZW50IGlzIGNhbGxlZC4K KysgKi8KKytjb25zdCBBVkluZGV4RW50cnkgKmF2Zm9ybWF0X2luZGV4X2dldF9lbnRyeShBVlN0 cmVhbSAqc3QsIGludCBpZHgpOworKworKy8qKgorKyAqIEdldCB0aGUgQVZJbmRleEVudHJ5IGNv cnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHRpbWVzdGFtcC4KKysgKgorKyAqIEBwYXJhbSBzdCAg ICAgICAgICBTdHJlYW0gY29udGFpbmluZyB0aGUgcmVxdWVzdGVkIEFWSW5kZXhFbnRyeS4KKysg KiBAcGFyYW0gd2FudGVkX3RpbWVzdGFtcCAgIFRpbWVzdGFtcCB0byByZXRyaWV2ZSB0aGUgaW5k ZXggZW50cnkgZm9yLgorKyAqIEBwYXJhbSBmbGFncyAgICAgICBJZiBBVlNFRUtfRkxBR19CQUNL V0FSRCB0aGVuIHRoZSByZXR1cm5lZCBlbnRyeSB3aWxsIGNvcnJlc3BvbmQKKysgKiAgICAgICAg ICAgICAgICAgICAgdG8gdGhlIHRpbWVzdGFtcCB3aGljaCBpcyA8PSB0aGUgcmVxdWVzdGVkIG9u ZSwgaWYgYmFja3dhcmQKKysgKiAgICAgICAgICAgICAgICAgICAgaXMgMCwgdGhlbiBpdCB3aWxs IGJlID49CisrICogICAgICAgICAgICAgICAgICAgIGlmIEFWU0VFS19GTEFHX0FOWSBzZWVrIHRv IGFueSBmcmFtZSwgb25seSBrZXlmcmFtZXMgb3RoZXJ3aXNlLgorKyAqIEByZXR1cm4gQSBwb2lu dGVyIHRvIHRoZSByZXF1ZXN0ZWQgQVZJbmRleEVudHJ5IGlmIGl0IGV4aXN0cywgTlVMTCBvdGhl cndpc2UuCisrICoKKysgKiBAbm90ZSBUaGUgcG9pbnRlciByZXR1cm5lZCBieSB0aGlzIGZ1bmN0 aW9uIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBiZSB2YWxpZAorKyAqICAgICAgIHVudGlsIGFueSBm dW5jdGlvbiB0aGF0IHRha2VzIHRoZSBzdHJlYW0gb3IgdGhlIHBhcmVudCBBVkZvcm1hdENvbnRl eHQKKysgKiAgICAgICBhcyBpbnB1dCBhcmd1bWVudCBpcyBjYWxsZWQuCisrICovCisrY29uc3Qg QVZJbmRleEVudHJ5ICphdmZvcm1hdF9pbmRleF9nZXRfZW50cnlfZnJvbV90aW1lc3RhbXAoQVZT dHJlYW0gKnN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludDY0X3Qgd2FudGVkX3RpbWVzdGFtcCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3Mp OworKy8qKgorKyAqIEFkZCBhbiBpbmRleCBlbnRyeSBpbnRvIGEgc29ydGVkIGxpc3QuIFVwZGF0 ZSB0aGUgZW50cnkgaWYgdGhlIGxpc3QKKysgKiBhbHJlYWR5IGNvbnRhaW5zIGl0LgorKyAqCisr ICogQHBhcmFtIHRpbWVzdGFtcCB0aW1lc3RhbXAgaW4gdGhlIHRpbWUgYmFzZSBvZiB0aGUgZ2l2 ZW4gc3RyZWFtCisrICovCisraW50IGF2X2FkZF9pbmRleF9lbnRyeShBVlN0cmVhbSAqc3QsIGlu dDY0X3QgcG9zLCBpbnQ2NF90IHRpbWVzdGFtcCwKKysgICAgICAgICAgICAgICAgICAgICAgIGlu dCBzaXplLCBpbnQgZGlzdGFuY2UsIGludCBmbGFncyk7CisrCisrCisrLyoqCisrICogU3BsaXQg YSBVUkwgc3RyaW5nIGludG8gY29tcG9uZW50cy4KKysgKgorKyAqIFRoZSBwb2ludGVycyB0byBi dWZmZXJzIGZvciBzdG9yaW5nIGluZGl2aWR1YWwgY29tcG9uZW50cyBtYXkgYmUgbnVsbCwKKysg KiBpbiBvcmRlciB0byBpZ25vcmUgdGhhdCBjb21wb25lbnQuIEJ1ZmZlcnMgZm9yIGNvbXBvbmVu dHMgbm90IGZvdW5kIGFyZQorKyAqIHNldCB0byBlbXB0eSBzdHJpbmdzLiBJZiB0aGUgcG9ydCBp cyBub3QgZm91bmQsIGl0IGlzIHNldCB0byBhIG5lZ2F0aXZlCisrICogdmFsdWUuCisrICoKKysg KiBAcGFyYW0gcHJvdG8gdGhlIGJ1ZmZlciBmb3IgdGhlIHByb3RvY29sCisrICogQHBhcmFtIHBy b3RvX3NpemUgdGhlIHNpemUgb2YgdGhlIHByb3RvIGJ1ZmZlcgorKyAqIEBwYXJhbSBhdXRob3Jp emF0aW9uIHRoZSBidWZmZXIgZm9yIHRoZSBhdXRob3JpemF0aW9uCisrICogQHBhcmFtIGF1dGhv cml6YXRpb25fc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgYXV0aG9yaXphdGlvbiBidWZmZXIKKysgKiBA cGFyYW0gaG9zdG5hbWUgdGhlIGJ1ZmZlciBmb3IgdGhlIGhvc3QgbmFtZQorKyAqIEBwYXJhbSBo b3N0bmFtZV9zaXplIHRoZSBzaXplIG9mIHRoZSBob3N0bmFtZSBidWZmZXIKKysgKiBAcGFyYW0g cG9ydF9wdHIgYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBwb3J0IG51bWJlciBpbgorKyAqIEBwYXJh bSBwYXRoIHRoZSBidWZmZXIgZm9yIHRoZSBwYXRoCisrICogQHBhcmFtIHBhdGhfc2l6ZSB0aGUg c2l6ZSBvZiB0aGUgcGF0aCBidWZmZXIKKysgKiBAcGFyYW0gdXJsIHRoZSBVUkwgdG8gc3BsaXQK KysgKi8KKyt2b2lkIGF2X3VybF9zcGxpdChjaGFyICpwcm90bywgICAgICAgICBpbnQgcHJvdG9f c2l6ZSwKKysgICAgICAgICAgICAgICAgICBjaGFyICphdXRob3JpemF0aW9uLCBpbnQgYXV0aG9y aXphdGlvbl9zaXplLAorKyAgICAgICAgICAgICAgICAgIGNoYXIgKmhvc3RuYW1lLCAgICAgIGlu dCBob3N0bmFtZV9zaXplLAorKyAgICAgICAgICAgICAgICAgIGludCAqcG9ydF9wdHIsCisrICAg ICAgICAgICAgICAgICAgY2hhciAqcGF0aCwgICAgICAgICAgaW50IHBhdGhfc2l6ZSwKKysgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICp1cmwpOworKworKworKy8qKgorKyAqIFByaW50IGRl dGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnB1dCBvciBvdXRwdXQgZm9ybWF0LCBzdWNo IGFzCisrICogZHVyYXRpb24sIGJpdHJhdGUsIHN0cmVhbXMsIGNvbnRhaW5lciwgcHJvZ3JhbXMs IG1ldGFkYXRhLCBzaWRlIGRhdGEsCisrICogY29kZWMgYW5kIHRpbWUgYmFzZS4KKysgKgorKyAq IEBwYXJhbSBpYyAgICAgICAgdGhlIGNvbnRleHQgdG8gYW5hbHl6ZQorKyAqIEBwYXJhbSBpbmRl eCAgICAgaW5kZXggb2YgdGhlIHN0cmVhbSB0byBkdW1wIGluZm9ybWF0aW9uIGFib3V0CisrICog QHBhcmFtIHVybCAgICAgICB0aGUgVVJMIHRvIHByaW50LCBzdWNoIGFzIHNvdXJjZSBvciBkZXN0 aW5hdGlvbiBmaWxlCisrICogQHBhcmFtIGlzX291dHB1dCBTZWxlY3Qgd2hldGhlciB0aGUgc3Bl Y2lmaWVkIGNvbnRleHQgaXMgYW4gaW5wdXQoMCkgb3Igb3V0cHV0KDEpCisrICovCisrdm9pZCBh dl9kdW1wX2Zvcm1hdChBVkZvcm1hdENvbnRleHQgKmljLAorKyAgICAgICAgICAgICAgICAgICAg aW50IGluZGV4LAorKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXJsLAorKyAgICAg ICAgICAgICAgICAgICAgaW50IGlzX291dHB1dCk7CisrCisrCisrI2RlZmluZSBBVl9GUkFNRV9G SUxFTkFNRV9GTEFHU19NVUxUSVBMRSAgICAgICAgICAxICAvLy88IEFsbG93IG11bHRpcGxlICVk CisrI2RlZmluZSBBVl9GUkFNRV9GSUxFTkFNRV9GTEFHU19JR05PUkVfVFJVTkNBVElPTiAyICAv Ly88IElnbm9yZSB0cnVuY2F0ZWQgb3V0cHV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIGVycm9y CisrCisrLyoqCisrICogUmV0dXJuIGluICdidWYnIHRoZSBwYXRoIHdpdGggJyVkJyByZXBsYWNl ZCBieSBhIG51bWJlci4KKysgKgorKyAqIEFsc28gaGFuZGxlcyB0aGUgJyUwbmQnIGZvcm1hdCB3 aGVyZSAnbicgaXMgdGhlIHRvdGFsIG51bWJlcgorKyAqIG9mIGRpZ2l0cyBhbmQgJyUlJy4KKysg KgorKyAqIEBwYXJhbSBidWYgZGVzdGluYXRpb24gYnVmZmVyCisrICogQHBhcmFtIGJ1Zl9zaXpl IGRlc3RpbmF0aW9uIGJ1ZmZlciBzaXplCisrICogQHBhcmFtIHBhdGggbnVtYmVyZWQgc2VxdWVu Y2Ugc3RyaW5nCisrICogQHBhcmFtIG51bWJlciBmcmFtZSBudW1iZXIKKysgKiBAcGFyYW0gZmxh Z3MgQVZfRlJBTUVfRklMRU5BTUVfRkxBR1NfKgorKyAqIEByZXR1cm4gMCBpZiBPSywgLTEgb24g Zm9ybWF0IGVycm9yCisrICovCisraW50IGF2X2dldF9mcmFtZV9maWxlbmFtZTIoY2hhciAqYnVm LCBpbnQgYnVmX3NpemUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpw YXRoLCBpbnQgbnVtYmVyLCBpbnQgZmxhZ3MpOworKworK2ludCBhdl9nZXRfZnJhbWVfZmlsZW5h bWUoY2hhciAqYnVmLCBpbnQgYnVmX3NpemUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpwYXRoLCBpbnQgbnVtYmVyKTsKKysKKysvKioKKysgKiBDaGVjayB3aGV0aGVy IGZpbGVuYW1lIGFjdHVhbGx5IGlzIGEgbnVtYmVyZWQgc2VxdWVuY2UgZ2VuZXJhdG9yLgorKyAq CisrICogQHBhcmFtIGZpbGVuYW1lIHBvc3NpYmxlIG51bWJlcmVkIHNlcXVlbmNlIHN0cmluZwor KyAqIEByZXR1cm4gMSBpZiBhIHZhbGlkIG51bWJlcmVkIHNlcXVlbmNlIHN0cmluZywgMCBvdGhl cndpc2UKKysgKi8KKytpbnQgYXZfZmlsZW5hbWVfbnVtYmVyX3Rlc3QoY29uc3QgY2hhciAqZmls ZW5hbWUpOworKworKy8qKgorKyAqIEdlbmVyYXRlIGFuIFNEUCBmb3IgYW4gUlRQIHNlc3Npb24u CisrICoKKysgKiBOb3RlLCB0aGlzIG92ZXJ3cml0ZXMgdGhlIGlkIHZhbHVlcyBvZiBBVlN0cmVh bXMgaW4gdGhlIG11eGVyIGNvbnRleHRzCisrICogZm9yIGdldHRpbmcgdW5pcXVlIGR5bmFtaWMg cGF5bG9hZCB0eXBlcy4KKysgKgorKyAqIEBwYXJhbSBhYyBhcnJheSBvZiBBVkZvcm1hdENvbnRl eHRzIGRlc2NyaWJpbmcgdGhlIFJUUCBzdHJlYW1zLiBJZiB0aGUKKysgKiAgICAgICAgICAgYXJy YXkgaXMgY29tcG9zZWQgYnkgb25seSBvbmUgY29udGV4dCwgc3VjaCBjb250ZXh0IGNhbiBjb250 YWluCisrICogICAgICAgICAgIG11bHRpcGxlIEFWU3RyZWFtcyAob25lIEFWU3RyZWFtIHBlciBS VFAgc3RyZWFtKS4gT3RoZXJ3aXNlLAorKyAqICAgICAgICAgICBhbGwgdGhlIGNvbnRleHRzIGlu IHRoZSBhcnJheSAoYW4gQVZDb2RlY0NvbnRleHQgcGVyIFJUUCBzdHJlYW0pCisrICogICAgICAg ICAgIG11c3QgY29udGFpbiBvbmx5IG9uZSBBVlN0cmVhbS4KKysgKiBAcGFyYW0gbl9maWxlcyBu dW1iZXIgb2YgQVZDb2RlY0NvbnRleHRzIGNvbnRhaW5lZCBpbiBhYworKyAqIEBwYXJhbSBidWYg YnVmZmVyIHdoZXJlIHRoZSBTRFAgd2lsbCBiZSBzdG9yZWQgKG11c3QgYmUgYWxsb2NhdGVkIGJ5 CisrICogICAgICAgICAgICB0aGUgY2FsbGVyKQorKyAqIEBwYXJhbSBzaXplIHRoZSBzaXplIG9m IHRoZSBidWZmZXIKKysgKiBAcmV0dXJuIDAgaWYgT0ssIEFWRVJST1JfeHh4IG9uIGVycm9yCisr ICovCisraW50IGF2X3NkcF9jcmVhdGUoQVZGb3JtYXRDb250ZXh0ICphY1tdLCBpbnQgbl9maWxl cywgY2hhciAqYnVmLCBpbnQgc2l6ZSk7CisrCisrLyoqCisrICogUmV0dXJuIGEgcG9zaXRpdmUg dmFsdWUgaWYgdGhlIGdpdmVuIGZpbGVuYW1lIGhhcyBvbmUgb2YgdGhlIGdpdmVuCisrICogZXh0 ZW5zaW9ucywgMCBvdGhlcndpc2UuCisrICoKKysgKiBAcGFyYW0gZmlsZW5hbWUgICBmaWxlIG5h bWUgdG8gY2hlY2sgYWdhaW5zdCB0aGUgZ2l2ZW4gZXh0ZW5zaW9ucworKyAqIEBwYXJhbSBleHRl bnNpb25zIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZW5hbWUgZXh0ZW5zaW9ucworKyAq LworK2ludCBhdl9tYXRjaF9leHQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmV4 dGVuc2lvbnMpOworKworKy8qKgorKyAqIFRlc3QgaWYgdGhlIGdpdmVuIGNvbnRhaW5lciBjYW4g c3RvcmUgYSBjb2RlYy4KKysgKgorKyAqIEBwYXJhbSBvZm10ICAgICAgICAgICBjb250YWluZXIg dG8gY2hlY2sgZm9yIGNvbXBhdGliaWxpdHkKKysgKiBAcGFyYW0gY29kZWNfaWQgICAgICAgY29k ZWMgdG8gcG90ZW50aWFsbHkgc3RvcmUgaW4gY29udGFpbmVyCisrICogQHBhcmFtIHN0ZF9jb21w bGlhbmNlIHN0YW5kYXJkcyBjb21wbGlhbmNlIGxldmVsLCBvbmUgb2YgRkZfQ09NUExJQU5DRV8q CisrICoKKysgKiBAcmV0dXJuIDEgaWYgY29kZWMgd2l0aCBJRCBjb2RlY19pZCBjYW4gYmUgc3Rv cmVkIGluIG9mbXQsIDAgaWYgaXQgY2Fubm90LgorKyAqICAgICAgICAgQSBuZWdhdGl2ZSBudW1i ZXIgaWYgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorKyAqLworK2ludCBhdmZv cm1hdF9xdWVyeV9jb2RlYyhjb25zdCBBVk91dHB1dEZvcm1hdCAqb2ZtdCwgZW51bSBBVkNvZGVj SUQgY29kZWNfaWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGRfY29tcGxpYW5j ZSk7CisrCisrc3RydWN0IEFWQlByaW50OworKy8qKgorKyAqIE1ha2UgYSBSRkMgNDI4MS82Mzgx IGxpa2Ugc3RyaW5nIGRlc2NyaWJpbmcgYSBjb2RlYyBmb3IgTUlNRSB0eXBlcy4KKysgKgorKyAq IEBwYXJhbSBwYXIgcG9pbnRlciB0byBhbiBBVkNvZGVjUGFyYW1ldGVycyBzdHJ1Y3QgZGVzY3Jp YmluZyB0aGUgY29kZWMKKysgKiBAcGFyYW0gZnJhbWVfcmF0ZSBhbiBBVlJhdGlvbmFsIGZvciB0 aGUgZnJhbWUgcmF0ZSwgZm9yIGRlY2lkaW5nIHRoZQorKyAqICAgICAgICAgICAgICAgICAgIHJp Z2h0IHByb2ZpbGUgZm9yIHZpZGVvIGNvZGVjcy4gUGFzcyBhbiBpbnZhbGlkCisrICogICAgICAg ICAgICAgICAgICAgQVZSYXRpb25hbCAoMS8wKSB0byBpbmRpY2F0ZSB0aGF0IGl0IGlzIHVua25v d24uCisrICogQHBhcmFtIG91dCB0aGUgQVZCUHJpbnQgdG8gd3JpdGUgdGhlIG91dHB1dCB0bwor KyAqIEByZXR1cm4gPDAgb24gZXJyb3IKKysgKi8KKytpbnQgYXZfbWltZV9jb2RlY19zdHIoY29u c3QgQVZDb2RlY1BhcmFtZXRlcnMgKnBhciwKKysgICAgICAgICAgICAgICAgICAgICAgQVZSYXRp b25hbCBmcmFtZV9yYXRlLCBzdHJ1Y3QgQVZCUHJpbnQgKm91dCk7CisrCisrLyoqCisrICogQGRl Zmdyb3VwIHJpZmZfZm91cmNjIFJJRkYgRm91ckNDcworKyAqIEB7CisrICogR2V0IHRoZSB0YWJs ZXMgbWFwcGluZyBSSUZGIEZvdXJDQ3MgdG8gbGliYXZjb2RlYyBBVkNvZGVjSURzLiBUaGUgdGFi bGVzIGFyZQorKyAqIG1lYW50IHRvIGJlIHBhc3NlZCB0byBhdl9jb2RlY19nZXRfaWQoKS9hdl9j b2RlY19nZXRfdGFnKCkgYXMgaW4gdGhlCisrICogZm9sbG93aW5nIGNvZGU6CisrICogQGNvZGUK KysgKiB1aW50MzJfdCB0YWcgPSBNS1RBRygnSCcsICcyJywgJzYnLCAnNCcpOworKyAqIGNvbnN0 IHN0cnVjdCBBVkNvZGVjVGFnICp0YWJsZVtdID0geyBhdmZvcm1hdF9nZXRfcmlmZl92aWRlb190 YWdzKCksIDAgfTsKKysgKiBlbnVtIEFWQ29kZWNJRCBpZCA9IGF2X2NvZGVjX2dldF9pZCh0YWJs ZSwgdGFnKTsKKysgKiBAZW5kY29kZQorKyAqLworKy8qKgorKyAqIEByZXR1cm4gdGhlIHRhYmxl IG1hcHBpbmcgUklGRiBGb3VyQ0NzIGZvciB2aWRlbyB0byBsaWJhdmNvZGVjIEFWQ29kZWNJRC4K KysgKi8KKytjb25zdCBzdHJ1Y3QgQVZDb2RlY1RhZyAqYXZmb3JtYXRfZ2V0X3JpZmZfdmlkZW9f dGFncyh2b2lkKTsKKysvKioKKysgKiBAcmV0dXJuIHRoZSB0YWJsZSBtYXBwaW5nIFJJRkYgRm91 ckNDcyBmb3IgYXVkaW8gdG8gQVZDb2RlY0lELgorKyAqLworK2NvbnN0IHN0cnVjdCBBVkNvZGVj VGFnICphdmZvcm1hdF9nZXRfcmlmZl9hdWRpb190YWdzKHZvaWQpOworKy8qKgorKyAqIEByZXR1 cm4gdGhlIHRhYmxlIG1hcHBpbmcgTU9WIEZvdXJDQ3MgZm9yIHZpZGVvIHRvIGxpYmF2Y29kZWMg QVZDb2RlY0lELgorKyAqLworK2NvbnN0IHN0cnVjdCBBVkNvZGVjVGFnICphdmZvcm1hdF9nZXRf bW92X3ZpZGVvX3RhZ3Modm9pZCk7CisrLyoqCisrICogQHJldHVybiB0aGUgdGFibGUgbWFwcGlu ZyBNT1YgRm91ckNDcyBmb3IgYXVkaW8gdG8gQVZDb2RlY0lELgorKyAqLworK2NvbnN0IHN0cnVj dCBBVkNvZGVjVGFnICphdmZvcm1hdF9nZXRfbW92X2F1ZGlvX3RhZ3Modm9pZCk7CisrCisrLyoq CisrICogQH0KKysgKi8KKysKKysvKioKKysgKiBHdWVzcyB0aGUgc2FtcGxlIGFzcGVjdCByYXRp byBvZiBhIGZyYW1lLCBiYXNlZCBvbiBib3RoIHRoZSBzdHJlYW0gYW5kIHRoZQorKyAqIGZyYW1l IGFzcGVjdCByYXRpby4KKysgKgorKyAqIFNpbmNlIHRoZSBmcmFtZSBhc3BlY3QgcmF0aW8gaXMg c2V0IGJ5IHRoZSBjb2RlYyBidXQgdGhlIHN0cmVhbSBhc3BlY3QgcmF0aW8KKysgKiBpcyBzZXQg YnkgdGhlIGRlbXV4ZXIsIHRoZXNlIHR3byBtYXkgbm90IGJlIGVxdWFsLiBUaGlzIGZ1bmN0aW9u IHRyaWVzIHRvCisrICogcmV0dXJuIHRoZSB2YWx1ZSB0aGF0IHlvdSBzaG91bGQgdXNlIGlmIHlv dSB3b3VsZCBsaWtlIHRvIGRpc3BsYXkgdGhlIGZyYW1lLgorKyAqCisrICogQmFzaWMgbG9naWMg aXMgdG8gdXNlIHRoZSBzdHJlYW0gYXNwZWN0IHJhdGlvIGlmIGl0IGlzIHNldCB0byBzb21ldGhp bmcgc2FuZQorKyAqIG90aGVyd2lzZSB1c2UgdGhlIGZyYW1lIGFzcGVjdCByYXRpby4gVGhpcyB3 YXkgYSBjb250YWluZXIgc2V0dGluZywgd2hpY2ggaXMKKysgKiB1c3VhbGx5IGVhc3kgdG8gbW9k aWZ5IGNhbiBvdmVycmlkZSB0aGUgY29kZWQgdmFsdWUgaW4gdGhlIGZyYW1lcy4KKysgKgorKyAq IEBwYXJhbSBmb3JtYXQgdGhlIGZvcm1hdCBjb250ZXh0IHdoaWNoIHRoZSBzdHJlYW0gaXMgcGFy dCBvZgorKyAqIEBwYXJhbSBzdHJlYW0gdGhlIHN0cmVhbSB3aGljaCB0aGUgZnJhbWUgaXMgcGFy dCBvZgorKyAqIEBwYXJhbSBmcmFtZSB0aGUgZnJhbWUgd2l0aCB0aGUgYXNwZWN0IHJhdGlvIHRv IGJlIGRldGVybWluZWQKKysgKiBAcmV0dXJuIHRoZSBndWVzc2VkICh2YWxpZCkgc2FtcGxlX2Fz cGVjdF9yYXRpbywgMC8xIGlmIG5vIGlkZWEKKysgKi8KKytBVlJhdGlvbmFsIGF2X2d1ZXNzX3Nh bXBsZV9hc3BlY3RfcmF0aW8oQVZGb3JtYXRDb250ZXh0ICpmb3JtYXQsIEFWU3RyZWFtICpzdHJl YW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBBVkZy YW1lICpmcmFtZSk7CisrCisrLyoqCisrICogR3Vlc3MgdGhlIGZyYW1lIHJhdGUsIGJhc2VkIG9u IGJvdGggdGhlIGNvbnRhaW5lciBhbmQgY29kZWMgaW5mb3JtYXRpb24uCisrICoKKysgKiBAcGFy YW0gY3R4IHRoZSBmb3JtYXQgY29udGV4dCB3aGljaCB0aGUgc3RyZWFtIGlzIHBhcnQgb2YKKysg KiBAcGFyYW0gc3RyZWFtIHRoZSBzdHJlYW0gd2hpY2ggdGhlIGZyYW1lIGlzIHBhcnQgb2YKKysg KiBAcGFyYW0gZnJhbWUgdGhlIGZyYW1lIGZvciB3aGljaCB0aGUgZnJhbWUgcmF0ZSBzaG91bGQg YmUgZGV0ZXJtaW5lZCwgbWF5IGJlIE5VTEwKKysgKiBAcmV0dXJuIHRoZSBndWVzc2VkICh2YWxp ZCkgZnJhbWUgcmF0ZSwgMC8xIGlmIG5vIGlkZWEKKysgKi8KKytBVlJhdGlvbmFsIGF2X2d1ZXNz X2ZyYW1lX3JhdGUoQVZGb3JtYXRDb250ZXh0ICpjdHgsIEFWU3RyZWFtICpzdHJlYW0sCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBBVkZyYW1lICpmcmFtZSk7CisrCisr LyoqCisrICogQ2hlY2sgaWYgdGhlIHN0cmVhbSBzdCBjb250YWluZWQgaW4gcyBpcyBtYXRjaGVk IGJ5IHRoZSBzdHJlYW0gc3BlY2lmaWVyCisrICogc3BlYy4KKysgKgorKyAqIFNlZSB0aGUgInN0 cmVhbSBzcGVjaWZpZXJzIiBjaGFwdGVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgc3lu dGF4CisrICogb2Ygc3BlYy4KKysgKgorKyAqIEByZXR1cm4gID4wIGlmIHN0IGlzIG1hdGNoZWQg Ynkgc3BlYzsKKysgKiAgICAgICAgICAwICBpZiBzdCBpcyBub3QgbWF0Y2hlZCBieSBzcGVjOwor KyAqICAgICAgICAgIEFWRVJST1IgY29kZSBpZiBzcGVjIGlzIGludmFsaWQKKysgKgorKyAqIEBu b3RlICBBIHN0cmVhbSBzcGVjaWZpZXIgY2FuIG1hdGNoIHNldmVyYWwgc3RyZWFtcyBpbiB0aGUg Zm9ybWF0LgorKyAqLworK2ludCBhdmZvcm1hdF9tYXRjaF9zdHJlYW1fc3BlY2lmaWVyKEFWRm9y bWF0Q29udGV4dCAqcywgQVZTdHJlYW0gKnN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKnNwZWMpOworKworK2ludCBhdmZvcm1hdF9xdWV1ZV9hdHRh Y2hlZF9waWN0dXJlcyhBVkZvcm1hdENvbnRleHQgKnMpOworKworKy8qKgorKyAqIEB9CisrICov CisrCisrI2VuZGlmIC8qIEFWRk9STUFUX0FWRk9STUFUX0ggKi8KK2RpZmYgLXVwIE11c2VTY29y ZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Zm9y bWF0L2F2aW8uaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3Ro aXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Zm9ybWF0L2F2aW8uaAorLS0tIE11c2VTY29yZS00Ljcu NC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Zm9ybWF0L2F2 aW8uaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc1NDMyMzIxICswMjAwCisrKysgTXVz ZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGli YXZmb3JtYXQvYXZpby5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjc1Mjc1MzQxICswMjAwCitAQCAt MCwwICsxLDgzMSBAQAorKy8qCisrICogY29weXJpZ2h0IChjKSAyMDAxIEZhYnJpY2UgQmVsbGFy ZAorKyAqCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVn IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK KysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor KyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICov CisrI2lmbmRlZiBBVkZPUk1BVF9BVklPX0gKKysjZGVmaW5lIEFWRk9STUFUX0FWSU9fSAorKwor Ky8qKgorKyAqIEBmaWxlCisrICogQGluZ3JvdXAgbGF2Zl9pbworKyAqIEJ1ZmZlcmVkIEkvTyBv cGVyYXRpb25zCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGludC5oPgorKyNpbmNsdWRlIDxzdGRp by5oPgorKworKyNpbmNsdWRlICJsaWJhdnV0aWwvYXR0cmlidXRlcy5oIgorKyNpbmNsdWRlICJs aWJhdnV0aWwvZGljdC5oIgorKyNpbmNsdWRlICJsaWJhdnV0aWwvbG9nLmgiCisrCisrI2luY2x1 ZGUgImxpYmF2Zm9ybWF0L3ZlcnNpb25fbWFqb3IuaCIKKysKKysvKioKKysgKiBTZWVraW5nIHdv cmtzIGxpa2UgZm9yIGEgbG9jYWwgZmlsZS4KKysgKi8KKysjZGVmaW5lIEFWSU9fU0VFS0FCTEVf Tk9STUFMICgxIDw8IDApCisrCisrLyoqCisrICogU2Vla2luZyBieSB0aW1lc3RhbXAgd2l0aCBh dmlvX3NlZWtfdGltZSgpIGlzIHBvc3NpYmxlLgorKyAqLworKyNkZWZpbmUgQVZJT19TRUVLQUJM RV9USU1FICAgKDEgPDwgMSkKKysKKysvKioKKysgKiBDYWxsYmFjayBmb3IgY2hlY2tpbmcgd2hl dGhlciB0byBhYm9ydCBibG9ja2luZyBmdW5jdGlvbnMuCisrICogQVZFUlJPUl9FWElUIGlzIHJl dHVybmVkIGluIHRoaXMgY2FzZSBieSB0aGUgaW50ZXJydXB0ZWQKKysgKiBmdW5jdGlvbi4gRHVy aW5nIGJsb2NraW5nIG9wZXJhdGlvbnMsIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoCisrICogb3Bh cXVlIGFzIHBhcmFtZXRlci4gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgMSwgdGhlCisrICogYmxv Y2tpbmcgb3BlcmF0aW9uIHdpbGwgYmUgYWJvcnRlZC4KKysgKgorKyAqIE5vIG1lbWJlcnMgY2Fu IGJlIGFkZGVkIHRvIHRoaXMgc3RydWN0IHdpdGhvdXQgYSBtYWpvciBidW1wLCBpZgorKyAqIG5l dyBlbGVtZW50cyBoYXZlIGJlZW4gYWRkZWQgYWZ0ZXIgdGhpcyBzdHJ1Y3QgaW4gQVZGb3JtYXRD b250ZXh0CisrICogb3IgQVZJT0NvbnRleHQuCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZJT0lu dGVycnVwdENCIHsKKysgICAgaW50ICgqY2FsbGJhY2spKHZvaWQqKTsKKysgICAgdm9pZCAqb3Bh cXVlOworK30gQVZJT0ludGVycnVwdENCOworKworKy8qKgorKyAqIERpcmVjdG9yeSBlbnRyeSB0 eXBlcy4KKysgKi8KKytlbnVtIEFWSU9EaXJFbnRyeVR5cGUgeworKyAgICBBVklPX0VOVFJZX1VO S05PV04sCisrICAgIEFWSU9fRU5UUllfQkxPQ0tfREVWSUNFLAorKyAgICBBVklPX0VOVFJZX0NI QVJBQ1RFUl9ERVZJQ0UsCisrICAgIEFWSU9fRU5UUllfRElSRUNUT1JZLAorKyAgICBBVklPX0VO VFJZX05BTUVEX1BJUEUsCisrICAgIEFWSU9fRU5UUllfU1lNQk9MSUNfTElOSywKKysgICAgQVZJ T19FTlRSWV9TT0NLRVQsCisrICAgIEFWSU9fRU5UUllfRklMRSwKKysgICAgQVZJT19FTlRSWV9T RVJWRVIsCisrICAgIEFWSU9fRU5UUllfU0hBUkUsCisrICAgIEFWSU9fRU5UUllfV09SS0dST1VQ LAorK307CisrCisrLyoqCisrICogRGVzY3JpYmVzIHNpbmdsZSBlbnRyeSBvZiB0aGUgZGlyZWN0 b3J5LgorKyAqCisrICogT25seSBuYW1lIGFuZCB0eXBlIGZpZWxkcyBhcmUgZ3VhcmFudGVlZCBi ZSBzZXQuCisrICogUmVzdCBvZiBmaWVsZHMgYXJlIHByb3RvY29sIG9yL2FuZCBwbGF0Zm9ybSBk ZXBlbmRlbnQgYW5kIG1pZ2h0IGJlIHVua25vd24uCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZJ T0RpckVudHJ5IHsKKysgICAgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAv Kio8IEZpbGVuYW1lICovCisrICAgIGludCB0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyoqPCBUeXBlIG9mIHRoZSBlbnRyeSAqLworKyAgICBpbnQgdXRmODsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qKjwgU2V0IHRvIDEgd2hlbiBuYW1lIGlzIGVuY29kZWQgd2l0aCBV VEYtOCwgMCBvdGhlcndpc2UuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOYW1lIGNhbiBiZSBlbmNvZGVkIHdpdGggVVRGLTggZXZlbiB0aG91Z2ggMCBp cyBzZXQuICovCisrICAgIGludDY0X3Qgc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyoq PCBGaWxlIHNpemUgaW4gYnl0ZXMsIC0xIGlmIHVua25vd24uICovCisrICAgIGludDY0X3QgbW9k aWZpY2F0aW9uX3RpbWVzdGFtcDsgICAgICAgLyoqPCBUaW1lIG9mIGxhc3QgbW9kaWZpY2F0aW9u IGluIG1pY3Jvc2Vjb25kcyBzaW5jZSB1bml4CisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlcG9jaCwgLTEgaWYgdW5rbm93bi4gKi8KKysgICAgaW50NjRf dCBhY2Nlc3NfdGltZXN0YW1wOyAgICAgICAgICAgICAvKio8IFRpbWUgb2YgbGFzdCBhY2Nlc3Mg aW4gbWljcm9zZWNvbmRzIHNpbmNlIHVuaXggZXBvY2gsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtMSBpZiB1bmtub3duLiAqLworKyAgICBpbnQ2NF90 IHN0YXR1c19jaGFuZ2VfdGltZXN0YW1wOyAgICAgIC8qKjwgVGltZSBvZiBsYXN0IHN0YXR1cyBj aGFuZ2UgaW4gbWljcm9zZWNvbmRzIHNpbmNlIHVuaXgKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVwb2NoLCAtMSBpZiB1bmtub3duLiAqLworKyAgICBp bnQ2NF90IHVzZXJfaWQ7ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVXNlciBJRCBvZiBvd25l ciwgLTEgaWYgdW5rbm93bi4gKi8KKysgICAgaW50NjRfdCBncm91cF9pZDsgICAgICAgICAgICAg ICAgICAgICAvKio8IEdyb3VwIElEIG9mIG93bmVyLCAtMSBpZiB1bmtub3duLiAqLworKyAgICBp bnQ2NF90IGZpbGVtb2RlOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgVW5peCBmaWxlIG1vZGUs IC0xIGlmIHVua25vd24uICovCisrfSBBVklPRGlyRW50cnk7CisrCisrdHlwZWRlZiBzdHJ1Y3Qg QVZJT0RpckNvbnRleHQgQVZJT0RpckNvbnRleHQ7CisrCisrLyoqCisrICogRGlmZmVyZW50IGRh dGEgdHlwZXMgdGhhdCBjYW4gYmUgcmV0dXJuZWQgdmlhIHRoZSBBVklPCisrICogd3JpdGVfZGF0 YV90eXBlIGNhbGxiYWNrLgorKyAqLworK2VudW0gQVZJT0RhdGFNYXJrZXJUeXBlIHsKKysgICAg LyoqCisrICAgICAqIEhlYWRlciBkYXRhOyB0aGlzIG5lZWRzIHRvIGJlIHByZXNlbnQgZm9yIHRo ZSBzdHJlYW0gdG8gYmUgZGVjb2RlYWJsZS4KKysgICAgICovCisrICAgIEFWSU9fREFUQV9NQVJL RVJfSEVBREVSLAorKyAgICAvKioKKysgICAgICogQSBwb2ludCBpbiB0aGUgb3V0cHV0IGJ5dGVz dHJlYW0gd2hlcmUgYSBkZWNvZGVyIGNhbiBzdGFydCBkZWNvZGluZworKyAgICAgKiAoaS5lLiBh IGtleWZyYW1lKS4gQSBkZW11eGVyL2RlY29kZXIgZ2l2ZW4gdGhlIGRhdGEgZmxhZ2dlZCB3aXRo CisrICAgICAqIEFWSU9fREFUQV9NQVJLRVJfSEVBREVSLCBmb2xsb3dlZCBieSBhbnkgQVZJT19E QVRBX01BUktFUl9TWU5DX1BPSU5ULAorKyAgICAgKiBzaG91bGQgZ2l2ZSBkZWNvZGVhYmxlIHJl c3VsdHMuCisrICAgICAqLworKyAgICBBVklPX0RBVEFfTUFSS0VSX1NZTkNfUE9JTlQsCisrICAg IC8qKgorKyAgICAgKiBBIHBvaW50IGluIHRoZSBvdXRwdXQgYnl0ZXN0cmVhbSB3aGVyZSBhIGRl bXV4ZXIgY2FuIHN0YXJ0IHBhcnNpbmcKKysgICAgICogKGZvciBub24gc2VsZiBzeW5jaHJvbml6 aW5nIGJ5dGVzdHJlYW0gZm9ybWF0cykuIFRoYXQgaXMsIGFueQorKyAgICAgKiBub24ta2V5ZnJh bWUgcGFja2V0IHN0YXJ0IHBvaW50LgorKyAgICAgKi8KKysgICAgQVZJT19EQVRBX01BUktFUl9C T1VOREFSWV9QT0lOVCwKKysgICAgLyoqCisrICAgICAqIFRoaXMgaXMgYW55LCB1bmxhYmVsbGVk IGRhdGEuIEl0IGNhbiBlaXRoZXIgYmUgYSBtdXhlciBub3QgbWFya2luZworKyAgICAgKiBhbnkg cG9zaXRpb25zIGF0IGFsbCwgaXQgY2FuIGJlIGFuIGFjdHVhbCBib3VuZGFyeS9zeW5jIHBvaW50 CisrICAgICAqIHRoYXQgdGhlIG11eGVyIGNob29zZXMgbm90IHRvIG1hcmssIG9yIGEgbGF0ZXIg cGFydCBvZiBhIHBhY2tldC9mcmFnbWVudAorKyAgICAgKiB0aGF0IGlzIGN1dCBpbnRvIG11bHRp cGxlIHdyaXRlIGNhbGxiYWNrcyBkdWUgdG8gbGltaXRlZCBJTyBidWZmZXIgc2l6ZS4KKysgICAg ICovCisrICAgIEFWSU9fREFUQV9NQVJLRVJfVU5LTk9XTiwKKysgICAgLyoqCisrICAgICAqIFRy YWlsZXIgZGF0YSwgd2hpY2ggZG9lc24ndCBjb250YWluIGFjdHVhbCBjb250ZW50LCBidXQgb25s eSBmb3IKKysgICAgICogZmluYWxpemluZyB0aGUgb3V0cHV0IGZpbGUuCisrICAgICAqLworKyAg ICBBVklPX0RBVEFfTUFSS0VSX1RSQUlMRVIsCisrICAgIC8qKgorKyAgICAgKiBBIHBvaW50IGlu IHRoZSBvdXRwdXQgYnl0ZXN0cmVhbSB3aGVyZSB0aGUgdW5kZXJseWluZyBBVklPQ29udGV4dCBt aWdodAorKyAgICAgKiBmbHVzaCB0aGUgYnVmZmVyIGRlcGVuZGluZyBvbiBsYXRlbmN5IG9yIGJ1 ZmZlcmluZyByZXF1aXJlbWVudHMuIFR5cGljYWxseQorKyAgICAgKiBtZWFucyB0aGUgZW5kIG9m IGEgcGFja2V0LgorKyAgICAgKi8KKysgICAgQVZJT19EQVRBX01BUktFUl9GTFVTSF9QT0lOVCwK Kyt9OworKworKy8qKgorKyAqIEJ5dGVzdHJlYW0gSU8gQ29udGV4dC4KKysgKiBOZXcgcHVibGlj IGZpZWxkcyBjYW4gYmUgYWRkZWQgd2l0aCBtaW5vciB2ZXJzaW9uIGJ1bXBzLgorKyAqIFJlbW92 YWwsIHJlb3JkZXJpbmcgYW5kIGNoYW5nZXMgdG8gZXhpc3RpbmcgcHVibGljIGZpZWxkcyByZXF1 aXJlCisrICogYSBtYWpvciB2ZXJzaW9uIGJ1bXAuCisrICogc2l6ZW9mKEFWSU9Db250ZXh0KSBt dXN0IG5vdCBiZSB1c2VkIG91dHNpZGUgbGliYXYqLgorKyAqCisrICogQG5vdGUgTm9uZSBvZiB0 aGUgZnVuY3Rpb24gcG9pbnRlcnMgaW4gQVZJT0NvbnRleHQgc2hvdWxkIGJlIGNhbGxlZAorKyAq ICAgICAgIGRpcmVjdGx5LCB0aGV5IHNob3VsZCBvbmx5IGJlIHNldCBieSB0aGUgY2xpZW50IGFw cGxpY2F0aW9uCisrICogICAgICAgd2hlbiBpbXBsZW1lbnRpbmcgY3VzdG9tIEkvTy4gTm9ybWFs bHkgdGhlc2UgYXJlIHNldCB0byB0aGUKKysgKiAgICAgICBmdW5jdGlvbiBwb2ludGVycyBzcGVj aWZpZWQgaW4gYXZpb19hbGxvY19jb250ZXh0KCkKKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVklP Q29udGV4dCB7CisrICAgIC8qKgorKyAgICAgKiBBIGNsYXNzIGZvciBwcml2YXRlIG9wdGlvbnMu CisrICAgICAqCisrICAgICAqIElmIHRoaXMgQVZJT0NvbnRleHQgaXMgY3JlYXRlZCBieSBhdmlv X29wZW4yKCksIGF2X2NsYXNzIGlzIHNldCBhbmQKKysgICAgICogcGFzc2VzIHRoZSBvcHRpb25z IGRvd24gdG8gcHJvdG9jb2xzLgorKyAgICAgKgorKyAgICAgKiBJZiB0aGlzIEFWSU9Db250ZXh0 IGlzIG1hbnVhbGx5IGFsbG9jYXRlZCwgdGhlbiBhdl9jbGFzcyBtYXkgYmUgc2V0IGJ5CisrICAg ICAqIHRoZSBjYWxsZXIuCisrICAgICAqCisrICAgICAqIHdhcm5pbmcgLS0gdGhpcyBmaWVsZCBj YW4gYmUgTlVMTCwgYmUgc3VyZSB0byBub3QgcGFzcyB0aGlzIEFWSU9Db250ZXh0CisrICAgICAq IHRvIGFueSBhdl9vcHRfKiBmdW5jdGlvbnMgaW4gdGhhdCBjYXNlLgorKyAgICAgKi8KKysgICAg Y29uc3QgQVZDbGFzcyAqYXZfY2xhc3M7CisrCisrICAgIC8qCisrICAgICAqIFRoZSBmb2xsb3dp bmcgc2hvd3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGJ1ZmZlciwgYnVmX3B0ciwKKysgICAg ICogYnVmX3B0cl9tYXgsIGJ1Zl9lbmQsIGJ1Zl9zaXplLCBhbmQgcG9zLCB3aGVuIHJlYWRpbmcg YW5kIHdoZW4gd3JpdGluZworKyAgICAgKiAoc2luY2UgQVZJT0NvbnRleHQgaXMgdXNlZCBmb3Ig Ym90aCk6CisrICAgICAqCisrICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrICAgICAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFESU5HCisrICAgICAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisrICAgICAqCisrICAgICAqICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplICAgICAgICAgICAgICB8CisrICAgICAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS18CisrICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICAqCisrICAgICAqICAgICAg ICAgICAgICAgICAgICAgICAgIGJ1ZmZlciAgICAgICAgICBidWZfcHRyICAgICAgIGJ1Zl9lbmQK KysgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAg fC8gLyAvIC8gLyAvIC8gL3wvIC8gLyAvIC8gLyAvfCAgICAgICAgIHwKKysgICAgICogIHJlYWQg YnVmZmVyOiAgICAgICAgICAgICAgfC8gLyBjb25zdW1lZCAvIHwgdG8gYmUgcmVhZCAvfCAgICAg ICAgIHwKKysgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfC8gLyAvIC8gLyAvIC8g L3wvIC8gLyAvIC8gLyAvfCAgICAgICAgIHwKKysgICAgICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICoK KysgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwb3MKKysgICAgICogICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgKiAgaW5wdXQg ZmlsZTogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICAgICB8CisrICAgICAqICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICoKKysgICAg ICoKKysgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysgICAgICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFdSSVRJTkcKKysgICAgICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKysgICAgICoKKysgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg ICAgICAgYnVmZmVyX3NpemUgICAgICAgICAgICAgICAgIHwKKysgICAgICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwK KysgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwKKysgICAgICoKKysgICAgICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZfcHRyX21heAorKyAgICAgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgYnVmZmVyICAgICAgICAgICAgICAgICAoYnVmX3B0cikgICAgICAg YnVmX2VuZAorKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKworKyAgICAgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvfCAgICAgICAgICAgICAgfAorKyAgICAg KiAgd3JpdGUgYnVmZmVyOiAgICAgICAgICAgICAgfCAvIC8gdG8gYmUgZmx1c2hlZCAvIC8gfCAg ICAgICAgICAgICAgfAorKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfC8gLyAv IC8gLyAvIC8gLyAvIC8gLyAvfCAgICAgICAgICAgICAgfAorKyAgICAgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKwor KyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZfcHRyIGNhbiBiZSBpbiB0 aGlzCisrICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1ZSB0byBhIGJhY2t3 YXJkIHNlZWsKKysgICAgICoKKysgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9z CisrICAgICAqICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICogIG91dHB1dCBmaWxlOiB8ICAg ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fAorKyAgICAgKiAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICAqCisrICAgICAqLworKyAgICB1 bnNpZ25lZCBjaGFyICpidWZmZXI7ICAvKio8IFN0YXJ0IG9mIHRoZSBidWZmZXIuICovCisrICAg IGludCBidWZmZXJfc2l6ZTsgICAgICAgIC8qKjwgTWF4aW11bSBidWZmZXIgc2l6ZSAqLworKyAg ICB1bnNpZ25lZCBjaGFyICpidWZfcHRyOyAvKio8IEN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGJ1 ZmZlciAqLworKyAgICB1bnNpZ25lZCBjaGFyICpidWZfZW5kOyAvKio8IEVuZCBvZiB0aGUgZGF0 YSwgbWF5IGJlIGxlc3MgdGhhbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1 ZmZlcitidWZmZXJfc2l6ZSBpZiB0aGUgcmVhZCBmdW5jdGlvbiByZXR1cm5lZAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxlc3MgZGF0YSB0aGFuIHJlcXVlc3RlZCwgZS5nLiBm b3Igc3RyZWFtcyB3aGVyZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vIG1v cmUgZGF0YSBoYXMgYmVlbiByZWNlaXZlZCB5ZXQuICovCisrICAgIHZvaWQgKm9wYXF1ZTsgICAg ICAgICAgIC8qKjwgQSBwcml2YXRlIHBvaW50ZXIsIHBhc3NlZCB0byB0aGUgcmVhZC93cml0ZS9z ZWVrLy4uLgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy4gKi8K KysgICAgaW50ICgqcmVhZF9wYWNrZXQpKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqYnVmLCBpbnQg YnVmX3NpemUpOworKyAgICBpbnQgKCp3cml0ZV9wYWNrZXQpKHZvaWQgKm9wYXF1ZSwgY29uc3Qg dWludDhfdCAqYnVmLCBpbnQgYnVmX3NpemUpOworKyAgICBpbnQ2NF90ICgqc2Vlaykodm9pZCAq b3BhcXVlLCBpbnQ2NF90IG9mZnNldCwgaW50IHdoZW5jZSk7CisrICAgIGludDY0X3QgcG9zOyAg ICAgICAgICAgIC8qKjwgcG9zaXRpb24gaW4gdGhlIGZpbGUgb2YgdGhlIGN1cnJlbnQgYnVmZmVy ICovCisrICAgIGludCBlb2ZfcmVhY2hlZDsgICAgICAgIC8qKjwgdHJ1ZSBpZiB3YXMgdW5hYmxl IHRvIHJlYWQgZHVlIHRvIGVycm9yIG9yIGVvZiAqLworKyAgICBpbnQgZXJyb3I7ICAgICAgICAg ICAgICAvKio8IGNvbnRhaW5zIHRoZSBlcnJvciBjb2RlIG9yIDAgaWYgbm8gZXJyb3IgaGFwcGVu ZWQgKi8KKysgICAgaW50IHdyaXRlX2ZsYWc7ICAgICAgICAgLyoqPCB0cnVlIGlmIG9wZW4gZm9y IHdyaXRpbmcgKi8KKysgICAgaW50IG1heF9wYWNrZXRfc2l6ZTsKKysgICAgaW50IG1pbl9wYWNr ZXRfc2l6ZTsgICAgLyoqPCBUcnkgdG8gYnVmZmVyIGF0IGxlYXN0IHRoaXMgYW1vdW50IG9mIGRh dGEKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgZmx1c2hpbmcgaXQu ICovCisrICAgIHVuc2lnbmVkIGxvbmcgY2hlY2tzdW07CisrICAgIHVuc2lnbmVkIGNoYXIgKmNo ZWNrc3VtX3B0cjsKKysgICAgdW5zaWduZWQgbG9uZyAoKnVwZGF0ZV9jaGVja3N1bSkodW5zaWdu ZWQgbG9uZyBjaGVja3N1bSwgY29uc3QgdWludDhfdCAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSk7 CisrICAgIC8qKgorKyAgICAgKiBQYXVzZSBvciByZXN1bWUgcGxheWJhY2sgZm9yIG5ldHdvcmsg c3RyZWFtaW5nIHByb3RvY29scyAtIGUuZy4gTU1TLgorKyAgICAgKi8KKysgICAgaW50ICgqcmVh ZF9wYXVzZSkodm9pZCAqb3BhcXVlLCBpbnQgcGF1c2UpOworKyAgICAvKioKKysgICAgICogU2Vl ayB0byBhIGdpdmVuIHRpbWVzdGFtcCBpbiBzdHJlYW0gd2l0aCB0aGUgc3BlY2lmaWVkIHN0cmVh bV9pbmRleC4KKysgICAgICogTmVlZGVkIGZvciBzb21lIG5ldHdvcmsgc3RyZWFtaW5nIHByb3Rv Y29scyB3aGljaCBkb24ndCBzdXBwb3J0IHNlZWtpbmcKKysgICAgICogdG8gYnl0ZSBwb3NpdGlv bi4KKysgICAgICovCisrICAgIGludDY0X3QgKCpyZWFkX3NlZWspKHZvaWQgKm9wYXF1ZSwgaW50 IHN0cmVhbV9pbmRleCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB0aW1lc3Rh bXAsIGludCBmbGFncyk7CisrICAgIC8qKgorKyAgICAgKiBBIGNvbWJpbmF0aW9uIG9mIEFWSU9f U0VFS0FCTEVfIGZsYWdzIG9yIDAgd2hlbiB0aGUgc3RyZWFtIGlzIG5vdCBzZWVrYWJsZS4KKysg ICAgICovCisrICAgIGludCBzZWVrYWJsZTsKKysKKysgICAgLyoqCisrICAgICAqIGF2aW9fcmVh ZCBhbmQgYXZpb193cml0ZSBzaG91bGQgaWYgcG9zc2libGUgYmUgc2F0aXNmaWVkIGRpcmVjdGx5 CisrICAgICAqIGluc3RlYWQgb2YgZ29pbmcgdGhyb3VnaCBhIGJ1ZmZlciwgYW5kIGF2aW9fc2Vl ayB3aWxsIGFsd2F5cworKyAgICAgKiBjYWxsIHRoZSB1bmRlcmx5aW5nIHNlZWsgZnVuY3Rpb24g ZGlyZWN0bHkuCisrICAgICAqLworKyAgICBpbnQgZGlyZWN0OworKworKyAgICAvKioKKysgICAg ICogJywnIHNlcGFyYXRlZCBsaXN0IG9mIGFsbG93ZWQgcHJvdG9jb2xzLgorKyAgICAgKi8KKysg ICAgY29uc3QgY2hhciAqcHJvdG9jb2xfd2hpdGVsaXN0OworKworKyAgICAvKioKKysgICAgICog JywnIHNlcGFyYXRlZCBsaXN0IG9mIGRpc2FsbG93ZWQgcHJvdG9jb2xzLgorKyAgICAgKi8KKysg ICAgY29uc3QgY2hhciAqcHJvdG9jb2xfYmxhY2tsaXN0OworKworKyAgICAvKioKKysgICAgICog QSBjYWxsYmFjayB0aGF0IGlzIHVzZWQgaW5zdGVhZCBvZiB3cml0ZV9wYWNrZXQuCisrICAgICAq LworKyAgICBpbnQgKCp3cml0ZV9kYXRhX3R5cGUpKHZvaWQgKm9wYXF1ZSwgY29uc3QgdWludDhf dCAqYnVmLCBpbnQgYnVmX3NpemUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBB VklPRGF0YU1hcmtlclR5cGUgdHlwZSwgaW50NjRfdCB0aW1lKTsKKysgICAgLyoqCisrICAgICAq IElmIHNldCwgZG9uJ3QgY2FsbCB3cml0ZV9kYXRhX3R5cGUgc2VwYXJhdGVseSBmb3IgQVZJT19E QVRBX01BUktFUl9CT1VOREFSWV9QT0lOVCwKKysgICAgICogYnV0IGlnbm9yZSB0aGVtIGFuZCB0 cmVhdCB0aGVtIGFzIEFWSU9fREFUQV9NQVJLRVJfVU5LTk9XTiAodG8gYXZvaWQgbmVlZGxlc3Ns eQorKyAgICAgKiBzbWFsbCBjaHVua3Mgb2YgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBjYWxsYmFj aykuCisrICAgICAqLworKyAgICBpbnQgaWdub3JlX2JvdW5kYXJ5X3BvaW50OworKworKyAgICAv KioKKysgICAgICogTWF4aW11bSByZWFjaGVkIHBvc2l0aW9uIGJlZm9yZSBhIGJhY2t3YXJkIHNl ZWsgaW4gdGhlIHdyaXRlIGJ1ZmZlciwKKysgICAgICogdXNlZCBrZWVwaW5nIHRyYWNrIG9mIGFs cmVhZHkgd3JpdHRlbiBkYXRhIGZvciBhIGxhdGVyIGZsdXNoLgorKyAgICAgKi8KKysgICAgdW5z aWduZWQgY2hhciAqYnVmX3B0cl9tYXg7CisrCisrICAgIC8qKgorKyAgICAgKiBSZWFkLW9ubHkg c3RhdGlzdGljIG9mIGJ5dGVzIHJlYWQgZm9yIHRoaXMgQVZJT0NvbnRleHQuCisrICAgICAqLwor KyAgICBpbnQ2NF90IGJ5dGVzX3JlYWQ7CisrCisrICAgIC8qKgorKyAgICAgKiBSZWFkLW9ubHkg c3RhdGlzdGljIG9mIGJ5dGVzIHdyaXR0ZW4gZm9yIHRoaXMgQVZJT0NvbnRleHQuCisrICAgICAq LworKyAgICBpbnQ2NF90IGJ5dGVzX3dyaXR0ZW47CisrfSBBVklPQ29udGV4dDsKKysKKysvKioK KysgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHByb3RvY29sIHRoYXQgd2lsbCBoYW5kbGUgdGhl IHBhc3NlZCBVUkwuCisrICoKKysgKiBOVUxMIGlzIHJldHVybmVkIGlmIG5vIHByb3RvY29sIGNv dWxkIGJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gVVJMLgorKyAqCisrICogQHJldHVybiBOYW1lIG9m IHRoZSBwcm90b2NvbCBvciBOVUxMLgorKyAqLworK2NvbnN0IGNoYXIgKmF2aW9fZmluZF9wcm90 b2NvbF9uYW1lKGNvbnN0IGNoYXIgKnVybCk7CisrCisrLyoqCisrICogUmV0dXJuIEFWSU9fRkxB R18qIGFjY2VzcyBmbGFncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMK KysgKiBvZiB0aGUgcmVzb3VyY2UgaW4gdXJsLCBvciBhIG5lZ2F0aXZlIHZhbHVlIGNvcnJlc3Bv bmRpbmcgdG8gYW4KKysgKiBBVkVSUk9SIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlLiBUaGUgcmV0 dXJuZWQgYWNjZXNzIGZsYWdzIGFyZQorKyAqIG1hc2tlZCBieSB0aGUgdmFsdWUgaW4gZmxhZ3Mu CisrICoKKysgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGlzIGludHJpbnNpY2FsbHkgdW5zYWZlLCBp biB0aGUgc2Vuc2UgdGhhdCB0aGUKKysgKiBjaGVja2VkIHJlc291cmNlIG1heSBjaGFuZ2UgaXRz IGV4aXN0ZW5jZSBvciBwZXJtaXNzaW9uIHN0YXR1cyBmcm9tCisrICogb25lIGNhbGwgdG8gYW5v dGhlci4gVGh1cyB5b3Ugc2hvdWxkIG5vdCB0cnVzdCB0aGUgcmV0dXJuZWQgdmFsdWUsCisrICog dW5sZXNzIHlvdSBhcmUgc3VyZSB0aGF0IG5vIG90aGVyIHByb2Nlc3NlcyBhcmUgYWNjZXNzaW5n IHRoZQorKyAqIGNoZWNrZWQgcmVzb3VyY2UuCisrICovCisraW50IGF2aW9fY2hlY2soY29uc3Qg Y2hhciAqdXJsLCBpbnQgZmxhZ3MpOworKworKy8qKgorKyAqIE9wZW4gZGlyZWN0b3J5IGZvciBy ZWFkaW5nLgorKyAqCisrICogQHBhcmFtIHMgICAgICAgZGlyZWN0b3J5IHJlYWQgY29udGV4dC4g UG9pbnRlciB0byBhIE5VTEwgcG9pbnRlciBtdXN0IGJlIHBhc3NlZC4KKysgKiBAcGFyYW0gdXJs ICAgICBkaXJlY3RvcnkgdG8gYmUgbGlzdGVkLgorKyAqIEBwYXJhbSBvcHRpb25zIEEgZGljdGlv bmFyeSBmaWxsZWQgd2l0aCBwcm90b2NvbC1wcml2YXRlIG9wdGlvbnMuIE9uIHJldHVybgorKyAq ICAgICAgICAgICAgICAgIHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgZGVzdHJveWVkIGFuZCByZXBs YWNlZCB3aXRoIGEgZGljdGlvbmFyeQorKyAqICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgb3B0 aW9ucyB0aGF0IHdlcmUgbm90IGZvdW5kLiBNYXkgYmUgTlVMTC4KKysgKiBAcmV0dXJuID49MCBv biBzdWNjZXNzIG9yIG5lZ2F0aXZlIG9uIGVycm9yLgorKyAqLworK2ludCBhdmlvX29wZW5fZGly KEFWSU9EaXJDb250ZXh0ICoqcywgY29uc3QgY2hhciAqdXJsLCBBVkRpY3Rpb25hcnkgKipvcHRp b25zKTsKKysKKysvKioKKysgKiBHZXQgbmV4dCBkaXJlY3RvcnkgZW50cnkuCisrICoKKysgKiBS ZXR1cm5lZCBlbnRyeSBtdXN0IGJlIGZyZWVkIHdpdGggYXZpb19mcmVlX2RpcmVjdG9yeV9lbnRy eSgpLiBJbiBwYXJ0aWN1bGFyCisrICogaXQgbWF5IG91dGxpdmUgQVZJT0RpckNvbnRleHQuCisr ICoKKysgKiBAcGFyYW0gcyAgICAgICAgIGRpcmVjdG9yeSByZWFkIGNvbnRleHQuCisrICogQHBh cmFtW291dF0gbmV4dCBuZXh0IGVudHJ5IG9yIE5VTEwgd2hlbiBubyBtb3JlIGVudHJpZXMuCisr ICogQHJldHVybiA+PTAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBvbiBlcnJvci4gRW5kIG9mIGxp c3QgaXMgbm90IGNvbnNpZGVyZWQgYW4KKysgKiAgICAgICAgICAgICBlcnJvci4KKysgKi8KKytp bnQgYXZpb19yZWFkX2RpcihBVklPRGlyQ29udGV4dCAqcywgQVZJT0RpckVudHJ5ICoqbmV4dCk7 CisrCisrLyoqCisrICogQ2xvc2UgZGlyZWN0b3J5LgorKyAqCisrICogQG5vdGUgRW50cmllcyBj cmVhdGVkIHVzaW5nIGF2aW9fcmVhZF9kaXIoKSBhcmUgbm90IGRlbGV0ZWQgYW5kIG11c3QgYmUK KysgKiBmcmVlZGVkIHdpdGggYXZpb19mcmVlX2RpcmVjdG9yeV9lbnRyeSgpLgorKyAqCisrICog QHBhcmFtIHMgICAgICAgICBkaXJlY3RvcnkgcmVhZCBjb250ZXh0LgorKyAqIEByZXR1cm4gPj0w IG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgb24gZXJyb3IuCisrICovCisraW50IGF2aW9fY2xvc2Vf ZGlyKEFWSU9EaXJDb250ZXh0ICoqcyk7CisrCisrLyoqCisrICogRnJlZSBlbnRyeSBhbGxvY2F0 ZWQgYnkgYXZpb19yZWFkX2RpcigpLgorKyAqCisrICogQHBhcmFtIGVudHJ5IGVudHJ5IHRvIGJl IGZyZWVkLgorKyAqLworK3ZvaWQgYXZpb19mcmVlX2RpcmVjdG9yeV9lbnRyeShBVklPRGlyRW50 cnkgKiplbnRyeSk7CisrCisrLyoqCisrICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gQVZJ T0NvbnRleHQgZm9yIGJ1ZmZlcmVkIEkvTy4gSXQgbXVzdCBiZSBsYXRlcgorKyAqIGZyZWVkIHdp dGggYXZpb19jb250ZXh0X2ZyZWUoKS4KKysgKgorKyAqIEBwYXJhbSBidWZmZXIgTWVtb3J5IGJs b2NrIGZvciBpbnB1dC9vdXRwdXQgb3BlcmF0aW9ucyB2aWEgQVZJT0NvbnRleHQuCisrICogICAg ICAgIFRoZSBidWZmZXIgbXVzdCBiZSBhbGxvY2F0ZWQgd2l0aCBhdl9tYWxsb2MoKSBhbmQgZnJp ZW5kcy4KKysgKiAgICAgICAgSXQgbWF5IGJlIGZyZWVkIGFuZCByZXBsYWNlZCB3aXRoIGEgbmV3 IGJ1ZmZlciBieSBsaWJhdmZvcm1hdC4KKysgKiAgICAgICAgQVZJT0NvbnRleHQuYnVmZmVyIGhv bGRzIHRoZSBidWZmZXIgY3VycmVudGx5IGluIHVzZSwKKysgKiAgICAgICAgd2hpY2ggbXVzdCBi ZSBsYXRlciBmcmVlZCB3aXRoIGF2X2ZyZWUoKS4KKysgKiBAcGFyYW0gYnVmZmVyX3NpemUgVGhl IGJ1ZmZlciBzaXplIGlzIHZlcnkgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZS4KKysgKiAgICAg ICAgRm9yIHByb3RvY29scyB3aXRoIGZpeGVkIGJsb2Nrc2l6ZSBpdCBzaG91bGQgYmUgc2V0IHRv IHRoaXMgYmxvY2tzaXplLgorKyAqICAgICAgICBGb3Igb3RoZXJzIGEgdHlwaWNhbCBzaXplIGlz IGEgY2FjaGUgcGFnZSwgZS5nLiA0a2IuCisrICogQHBhcmFtIHdyaXRlX2ZsYWcgU2V0IHRvIDEg aWYgdGhlIGJ1ZmZlciBzaG91bGQgYmUgd3JpdGFibGUsIDAgb3RoZXJ3aXNlLgorKyAqIEBwYXJh bSBvcGFxdWUgQW4gb3BhcXVlIHBvaW50ZXIgdG8gdXNlci1zcGVjaWZpYyBkYXRhLgorKyAqIEBw YXJhbSByZWFkX3BhY2tldCAgQSBmdW5jdGlvbiBmb3IgcmVmaWxsaW5nIHRoZSBidWZmZXIsIG1h eSBiZSBOVUxMLgorKyAqICAgICAgICAgICAgICAgICAgICAgRm9yIHN0cmVhbSBwcm90b2NvbHMs IG11c3QgbmV2ZXIgcmV0dXJuIDAgYnV0IHJhdGhlcgorKyAqICAgICAgICAgICAgICAgICAgICAg YSBwcm9wZXIgQVZFUlJPUiBjb2RlLgorKyAqIEBwYXJhbSB3cml0ZV9wYWNrZXQgQSBmdW5jdGlv biBmb3Igd3JpdGluZyB0aGUgYnVmZmVyIGNvbnRlbnRzLCBtYXkgYmUgTlVMTC4KKysgKiAgICAg ICAgVGhlIGZ1bmN0aW9uIG1heSBub3QgY2hhbmdlIHRoZSBpbnB1dCBidWZmZXJzIGNvbnRlbnQu CisrICogQHBhcmFtIHNlZWsgQSBmdW5jdGlvbiBmb3Igc2Vla2luZyB0byBzcGVjaWZpZWQgYnl0 ZSBwb3NpdGlvbiwgbWF5IGJlIE5VTEwuCisrICoKKysgKiBAcmV0dXJuIEFsbG9jYXRlZCBBVklP Q29udGV4dCBvciBOVUxMIG9uIGZhaWx1cmUuCisrICovCisrQVZJT0NvbnRleHQgKmF2aW9fYWxs b2NfY29udGV4dCgKKysgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisr ICAgICAgICAgICAgICAgICAgaW50IGJ1ZmZlcl9zaXplLAorKyAgICAgICAgICAgICAgICAgIGlu dCB3cml0ZV9mbGFnLAorKyAgICAgICAgICAgICAgICAgIHZvaWQgKm9wYXF1ZSwKKysgICAgICAg ICAgICAgICAgICBpbnQgKCpyZWFkX3BhY2tldCkodm9pZCAqb3BhcXVlLCB1aW50OF90ICpidWYs IGludCBidWZfc2l6ZSksCisrICAgICAgICAgICAgICAgICAgaW50ICgqd3JpdGVfcGFja2V0KSh2 b2lkICpvcGFxdWUsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplKSwKKysgICAgICAg ICAgICAgICAgICBpbnQ2NF90ICgqc2Vlaykodm9pZCAqb3BhcXVlLCBpbnQ2NF90IG9mZnNldCwg aW50IHdoZW5jZSkpOworKworKy8qKgorKyAqIEZyZWUgdGhlIHN1cHBsaWVkIElPIGNvbnRleHQg YW5kIGV2ZXJ5dGhpbmcgYXNzb2NpYXRlZCB3aXRoIGl0LgorKyAqCisrICogQHBhcmFtIHMgRG91 YmxlIHBvaW50ZXIgdG8gdGhlIElPIGNvbnRleHQuIFRoaXMgZnVuY3Rpb24gd2lsbCB3cml0ZSBO VUxMCisrICogaW50byBzLgorKyAqLworK3ZvaWQgYXZpb19jb250ZXh0X2ZyZWUoQVZJT0NvbnRl eHQgKipzKTsKKysKKyt2b2lkIGF2aW9fdzgoQVZJT0NvbnRleHQgKnMsIGludCBiKTsKKyt2b2lk IGF2aW9fd3JpdGUoQVZJT0NvbnRleHQgKnMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50 IHNpemUpOworK3ZvaWQgYXZpb193bDY0KEFWSU9Db250ZXh0ICpzLCB1aW50NjRfdCB2YWwpOwor K3ZvaWQgYXZpb193YjY0KEFWSU9Db250ZXh0ICpzLCB1aW50NjRfdCB2YWwpOworK3ZvaWQgYXZp b193bDMyKEFWSU9Db250ZXh0ICpzLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyt2b2lkIGF2aW9fd2Iz MihBVklPQ29udGV4dCAqcywgdW5zaWduZWQgaW50IHZhbCk7Cisrdm9pZCBhdmlvX3dsMjQoQVZJ T0NvbnRleHQgKnMsIHVuc2lnbmVkIGludCB2YWwpOworK3ZvaWQgYXZpb193YjI0KEFWSU9Db250 ZXh0ICpzLCB1bnNpZ25lZCBpbnQgdmFsKTsKKyt2b2lkIGF2aW9fd2wxNihBVklPQ29udGV4dCAq cywgdW5zaWduZWQgaW50IHZhbCk7Cisrdm9pZCBhdmlvX3diMTYoQVZJT0NvbnRleHQgKnMsIHVu c2lnbmVkIGludCB2YWwpOworKworKy8qKgorKyAqIFdyaXRlIGEgTlVMTC10ZXJtaW5hdGVkIHN0 cmluZy4KKysgKiBAcmV0dXJuIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorKyAqLworK2ludCBh dmlvX3B1dF9zdHIoQVZJT0NvbnRleHQgKnMsIGNvbnN0IGNoYXIgKnN0cik7CisrCisrLyoqCisr ICogQ29udmVydCBhbiBVVEYtOCBzdHJpbmcgdG8gVVRGLTE2TEUgYW5kIHdyaXRlIGl0LgorKyAq IEBwYXJhbSBzIHRoZSBBVklPQ29udGV4dAorKyAqIEBwYXJhbSBzdHIgTlVMTC10ZXJtaW5hdGVk IFVURi04IHN0cmluZworKyAqCisrICogQHJldHVybiBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4K KysgKi8KKytpbnQgYXZpb19wdXRfc3RyMTZsZShBVklPQ29udGV4dCAqcywgY29uc3QgY2hhciAq c3RyKTsKKysKKysvKioKKysgKiBDb252ZXJ0IGFuIFVURi04IHN0cmluZyB0byBVVEYtMTZCRSBh bmQgd3JpdGUgaXQuCisrICogQHBhcmFtIHMgdGhlIEFWSU9Db250ZXh0CisrICogQHBhcmFtIHN0 ciBOVUxMLXRlcm1pbmF0ZWQgVVRGLTggc3RyaW5nCisrICoKKysgKiBAcmV0dXJuIG51bWJlciBv ZiBieXRlcyB3cml0dGVuLgorKyAqLworK2ludCBhdmlvX3B1dF9zdHIxNmJlKEFWSU9Db250ZXh0 ICpzLCBjb25zdCBjaGFyICpzdHIpOworKworKy8qKgorKyAqIE1hcmsgdGhlIHdyaXR0ZW4gYnl0 ZXN0cmVhbSBhcyBhIHNwZWNpZmljIHR5cGUuCisrICoKKysgKiBaZXJvLWxlbmd0aCByYW5nZXMg YXJlIG9taXR0ZWQgZnJvbSB0aGUgb3V0cHV0LgorKyAqCisrICogQHBhcmFtIHMgICAgdGhlIEFW SU9Db250ZXh0CisrICogQHBhcmFtIHRpbWUgdGhlIHN0cmVhbSB0aW1lIHRoZSBjdXJyZW50IGJ5 dGVzdHJlYW0gcG9zIGNvcnJlc3BvbmRzIHRvCisrICogICAgICAgICAgICAgKGluIEFWX1RJTUVf QkFTRSB1bml0cyksIG9yIEFWX05PUFRTX1ZBTFVFIGlmIHVua25vd24gb3Igbm90CisrICogICAg ICAgICAgICAgYXBwbGljYWJsZQorKyAqIEBwYXJhbSB0eXBlIHRoZSBraW5kIG9mIGRhdGEgd3Jp dHRlbiBzdGFydGluZyBhdCB0aGUgY3VycmVudCBwb3MKKysgKi8KKyt2b2lkIGF2aW9fd3JpdGVf bWFya2VyKEFWSU9Db250ZXh0ICpzLCBpbnQ2NF90IHRpbWUsIGVudW0gQVZJT0RhdGFNYXJrZXJU eXBlIHR5cGUpOworKworKy8qKgorKyAqIFBhc3NpbmcgdGhpcyBhcyB0aGUgIndoZW5jZSIgcGFy YW1ldGVyIHRvIGEgc2VlayBmdW5jdGlvbiBjYXVzZXMgaXQgdG8KKysgKiByZXR1cm4gdGhlIGZp bGVzaXplIHdpdGhvdXQgc2Vla2luZyBhbnl3aGVyZS4gU3VwcG9ydGluZyB0aGlzIGlzIG9wdGlv bmFsLgorKyAqIElmIGl0IGlzIG5vdCBzdXBwb3J0ZWQgdGhlbiB0aGUgc2VlayBmdW5jdGlvbiB3 aWxsIHJldHVybiA8MC4KKysgKi8KKysjZGVmaW5lIEFWU0VFS19TSVpFIDB4MTAwMDAKKysKKysv KioKKysgKiBPUidpbmcgdGhpcyBmbGFnIGludG8gdGhlICJ3aGVuY2UiIHBhcmFtZXRlciB0byBh IHNlZWsgZnVuY3Rpb24gY2F1c2VzIGl0IHRvCisrICogc2VlayBieSBhbnkgbWVhbnMgKGxpa2Ug cmVvcGVuaW5nIGFuZCBsaW5lYXIgcmVhZGluZykgb3Igb3RoZXIgbm9ybWFsbHkgdW5yZWFzb25h YmxlCisrICogbWVhbnMgdGhhdCBjYW4gYmUgZXh0cmVtZWx5IHNsb3cuCisrICogVGhpcyBpcyB0 aGUgZGVmYXVsdCBhbmQgdGhlcmVmb3JlIGlnbm9yZWQgYnkgdGhlIHNlZWsgY29kZSBzaW5jZSAy MDEwLgorKyAqLworKyNkZWZpbmUgQVZTRUVLX0ZPUkNFIDB4MjAwMDAKKysKKysvKioKKysgKiBm c2VlaygpIGVxdWl2YWxlbnQgZm9yIEFWSU9Db250ZXh0LgorKyAqIEByZXR1cm4gbmV3IHBvc2l0 aW9uIG9yIEFWRVJST1IuCisrICovCisraW50NjRfdCBhdmlvX3NlZWsoQVZJT0NvbnRleHQgKnMs IGludDY0X3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKKysKKysvKioKKysgKiBTa2lwIGdpdmVuIG51 bWJlciBvZiBieXRlcyBmb3J3YXJkCisrICogQHJldHVybiBuZXcgcG9zaXRpb24gb3IgQVZFUlJP Ui4KKysgKi8KKytpbnQ2NF90IGF2aW9fc2tpcChBVklPQ29udGV4dCAqcywgaW50NjRfdCBvZmZz ZXQpOworKworKy8qKgorKyAqIGZ0ZWxsKCkgZXF1aXZhbGVudCBmb3IgQVZJT0NvbnRleHQuCisr ICogQHJldHVybiBwb3NpdGlvbiBvciBBVkVSUk9SLgorKyAqLworK3N0YXRpYyBhdl9hbHdheXNf aW5saW5lIGludDY0X3QgYXZpb190ZWxsKEFWSU9Db250ZXh0ICpzKQorK3sKKysgICAgcmV0dXJu IGF2aW9fc2VlayhzLCAwLCBTRUVLX0NVUik7CisrfQorKworKy8qKgorKyAqIEdldCB0aGUgZmls ZXNpemUuCisrICogQHJldHVybiBmaWxlc2l6ZSBvciBBVkVSUk9SCisrICovCisraW50NjRfdCBh dmlvX3NpemUoQVZJT0NvbnRleHQgKnMpOworKworKy8qKgorKyAqIFNpbWlsYXIgdG8gZmVvZigp IGJ1dCBhbHNvIHJldHVybnMgbm9uemVybyBvbiByZWFkIGVycm9ycy4KKysgKiBAcmV0dXJuIG5v biB6ZXJvIGlmIGFuZCBvbmx5IGlmIGF0IGVuZCBvZiBmaWxlIG9yIGEgcmVhZCBlcnJvciBoYXBw ZW5lZCB3aGVuIHJlYWRpbmcuCisrICovCisraW50IGF2aW9fZmVvZihBVklPQ29udGV4dCAqcyk7 CisrCisrLyoqCisrICogV3JpdGVzIGEgZm9ybWF0dGVkIHN0cmluZyB0byB0aGUgY29udGV4dCB0 YWtpbmcgYSB2YV9saXN0LgorKyAqIEByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIDwg MCBvbiBlcnJvci4KKysgKi8KKytpbnQgYXZpb192cHJpbnRmKEFWSU9Db250ZXh0ICpzLCBjb25z dCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOworKworKy8qKgorKyAqIFdyaXRlcyBhIGZvcm1hdHRl ZCBzdHJpbmcgdG8gdGhlIGNvbnRleHQuCisrICogQHJldHVybiBudW1iZXIgb2YgYnl0ZXMgd3Jp dHRlbiwgPCAwIG9uIGVycm9yLgorKyAqLworK2ludCBhdmlvX3ByaW50ZihBVklPQ29udGV4dCAq cywgY29uc3QgY2hhciAqZm10LCAuLi4pIGF2X3ByaW50Zl9mb3JtYXQoMiwgMyk7CisrCisrLyoq CisrICogV3JpdGUgYSBOVUxMIHRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyB0byB0aGUgY29u dGV4dC4KKysgKiBVc3VhbGx5IHlvdSBkb24ndCBuZWVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGRp cmVjdGx5IGJ1dCBpdHMgbWFjcm8gd3JhcHBlciwKKysgKiBhdmlvX3ByaW50LgorKyAqLworK3Zv aWQgYXZpb19wcmludF9zdHJpbmdfYXJyYXkoQVZJT0NvbnRleHQgKnMsIGNvbnN0IGNoYXIgKiBj b25zdCBzdHJpbmdzW10pOworKworKy8qKgorKyAqIFdyaXRlIHN0cmluZ3MgKGNvbnN0IGNoYXIg KikgdG8gdGhlIGNvbnRleHQuCisrICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1hY3JvIGFyb3Vu ZCBhdmlvX3ByaW50X3N0cmluZ19hcnJheSBhbmQgaXQKKysgKiBhdXRvbWF0aWNhbGx5IGNyZWF0 ZXMgdGhlIHN0cmluZyBhcnJheSBmcm9tIHRoZSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0LgorKyAq IEZvciBzaW1wbGUgc3RyaW5nIGNvbmNhdGVuYXRpb25zIHRoaXMgZnVuY3Rpb24gaXMgbW9yZSBw ZXJmb3JtYW50IHRoYW4gdXNpbmcKKysgKiBhdmlvX3ByaW50ZiBzaW5jZSBpdCBkb2VzIG5vdCBu ZWVkIGEgdGVtcG9yYXJ5IGJ1ZmZlci4KKysgKi8KKysjZGVmaW5lIGF2aW9fcHJpbnQocywgLi4u KSBcCisrICAgIGF2aW9fcHJpbnRfc3RyaW5nX2FycmF5KHMsIChjb25zdCBjaGFyKltdKXtfX1ZB X0FSR1NfXywgTlVMTH0pCisrCisrLyoqCisrICogRm9yY2UgZmx1c2hpbmcgb2YgYnVmZmVyZWQg ZGF0YS4KKysgKgorKyAqIEZvciB3cml0ZSBzdHJlYW1zLCBmb3JjZSB0aGUgYnVmZmVyZWQgZGF0 YSB0byBiZSBpbW1lZGlhdGVseSB3cml0dGVuIHRvIHRoZSBvdXRwdXQsCisrICogd2l0aG91dCB0 byB3YWl0IHRvIGZpbGwgdGhlIGludGVybmFsIGJ1ZmZlci4KKysgKgorKyAqIEZvciByZWFkIHN0 cmVhbXMsIGRpc2NhcmQgYWxsIGN1cnJlbnRseSBidWZmZXJlZCBkYXRhLCBhbmQgYWR2YW5jZSB0 aGUKKysgKiByZXBvcnRlZCBmaWxlIHBvc2l0aW9uIHRvIHRoYXQgb2YgdGhlIHVuZGVybHlpbmcg c3RyZWFtLiBUaGlzIGRvZXMgbm90CisrICogcmVhZCBuZXcgZGF0YSwgYW5kIGRvZXMgbm90IHBl cmZvcm0gYW55IHNlZWtzLgorKyAqLworK3ZvaWQgYXZpb19mbHVzaChBVklPQ29udGV4dCAqcyk7 CisrCisrLyoqCisrICogUmVhZCBzaXplIGJ5dGVzIGZyb20gQVZJT0NvbnRleHQgaW50byBidWYu CisrICogQHJldHVybiBudW1iZXIgb2YgYnl0ZXMgcmVhZCBvciBBVkVSUk9SCisrICovCisraW50 IGF2aW9fcmVhZChBVklPQ29udGV4dCAqcywgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgc2l6ZSk7 CisrCisrLyoqCisrICogUmVhZCBzaXplIGJ5dGVzIGZyb20gQVZJT0NvbnRleHQgaW50byBidWYu IFVubGlrZSBhdmlvX3JlYWQoKSwgdGhpcyBpcyBhbGxvd2VkCisrICogdG8gcmVhZCBmZXdlciBi eXRlcyB0aGFuIHJlcXVlc3RlZC4gVGhlIG1pc3NpbmcgYnl0ZXMgY2FuIGJlIHJlYWQgaW4gdGhl IG5leHQKKysgKiBjYWxsLiBUaGlzIGFsd2F5cyB0cmllcyB0byByZWFkIGF0IGxlYXN0IDEgYnl0 ZS4KKysgKiBVc2VmdWwgdG8gcmVkdWNlIGxhdGVuY3kgaW4gY2VydGFpbiBjYXNlcy4KKysgKiBA cmV0dXJuIG51bWJlciBvZiBieXRlcyByZWFkIG9yIEFWRVJST1IKKysgKi8KKytpbnQgYXZpb19y ZWFkX3BhcnRpYWwoQVZJT0NvbnRleHQgKnMsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IHNpemUp OworKworKy8qKgorKyAqIEBuYW1lIEZ1bmN0aW9ucyBmb3IgcmVhZGluZyBmcm9tIEFWSU9Db250 ZXh0CisrICogQHsKKysgKgorKyAqIEBub3RlIHJldHVybiAwIGlmIEVPRiwgc28geW91IGNhbm5v dCB1c2UgaXQgaWYgRU9GIGhhbmRsaW5nIGlzCisrICogICAgICAgbmVjZXNzYXJ5CisrICovCisr aW50ICAgICAgICAgIGF2aW9fcjggIChBVklPQ29udGV4dCAqcyk7CisrdW5zaWduZWQgaW50IGF2 aW9fcmwxNihBVklPQ29udGV4dCAqcyk7CisrdW5zaWduZWQgaW50IGF2aW9fcmwyNChBVklPQ29u dGV4dCAqcyk7CisrdW5zaWduZWQgaW50IGF2aW9fcmwzMihBVklPQ29udGV4dCAqcyk7CisrdWlu dDY0X3QgICAgIGF2aW9fcmw2NChBVklPQ29udGV4dCAqcyk7CisrdW5zaWduZWQgaW50IGF2aW9f cmIxNihBVklPQ29udGV4dCAqcyk7CisrdW5zaWduZWQgaW50IGF2aW9fcmIyNChBVklPQ29udGV4 dCAqcyk7CisrdW5zaWduZWQgaW50IGF2aW9fcmIzMihBVklPQ29udGV4dCAqcyk7CisrdWludDY0 X3QgICAgIGF2aW9fcmI2NChBVklPQ29udGV4dCAqcyk7CisrLyoqCisrICogQH0KKysgKi8KKysK KysvKioKKysgKiBSZWFkIGEgc3RyaW5nIGZyb20gcGIgaW50byBidWYuIFRoZSByZWFkaW5nIHdp bGwgdGVybWluYXRlIHdoZW4gZWl0aGVyCisrICogYSBOVUxMIGNoYXJhY3RlciB3YXMgZW5jb3Vu dGVyZWQsIG1heGxlbiBieXRlcyBoYXZlIGJlZW4gcmVhZCwgb3Igbm90aGluZworKyAqIG1vcmUg Y2FuIGJlIHJlYWQgZnJvbSBwYi4gVGhlIHJlc3VsdCBpcyBndWFyYW50ZWVkIHRvIGJlIE5VTEwt dGVybWluYXRlZCwgaXQKKysgKiB3aWxsIGJlIHRydW5jYXRlZCBpZiBidWYgaXMgdG9vIHNtYWxs LgorKyAqIE5vdGUgdGhhdCB0aGUgc3RyaW5nIGlzIG5vdCBpbnRlcnByZXRlZCBvciB2YWxpZGF0 ZWQgaW4gYW55IHdheSwgaXQKKysgKiBtaWdodCBnZXQgdHJ1bmNhdGVkIGluIHRoZSBtaWRkbGUg b2YgYSBzZXF1ZW5jZSBmb3IgbXVsdGktYnl0ZSBlbmNvZGluZ3MuCisrICoKKysgKiBAcmV0dXJu IG51bWJlciBvZiBieXRlcyByZWFkIChpcyBhbHdheXMgPD0gbWF4bGVuKS4KKysgKiBJZiByZWFk aW5nIGVuZHMgb24gRU9GIG9yIGVycm9yLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgb25lIG1v cmUgdGhhbgorKyAqIGJ5dGVzIGFjdHVhbGx5IHJlYWQuCisrICovCisraW50IGF2aW9fZ2V0X3N0 cihBVklPQ29udGV4dCAqcGIsIGludCBtYXhsZW4sIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7Cisr CisrLyoqCisrICogUmVhZCBhIFVURi0xNiBzdHJpbmcgZnJvbSBwYiBhbmQgY29udmVydCBpdCB0 byBVVEYtOC4KKysgKiBUaGUgcmVhZGluZyB3aWxsIHRlcm1pbmF0ZSB3aGVuIGVpdGhlciBhIG51 bGwgb3IgaW52YWxpZCBjaGFyYWN0ZXIgd2FzCisrICogZW5jb3VudGVyZWQgb3IgbWF4bGVuIGJ5 dGVzIGhhdmUgYmVlbiByZWFkLgorKyAqIEByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKGlz IGFsd2F5cyA8PSBtYXhsZW4pCisrICovCisraW50IGF2aW9fZ2V0X3N0cjE2bGUoQVZJT0NvbnRl eHQgKnBiLCBpbnQgbWF4bGVuLCBjaGFyICpidWYsIGludCBidWZsZW4pOworK2ludCBhdmlvX2dl dF9zdHIxNmJlKEFWSU9Db250ZXh0ICpwYiwgaW50IG1heGxlbiwgY2hhciAqYnVmLCBpbnQgYnVm bGVuKTsKKysKKysKKysvKioKKysgKiBAbmFtZSBVUkwgb3BlbiBtb2RlcworKyAqIFRoZSBmbGFn cyBhcmd1bWVudCB0byBhdmlvX29wZW4gbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZworKyAq IGNvbnN0YW50cywgb3B0aW9uYWxseSBPUmVkIHdpdGggb3RoZXIgZmxhZ3MuCisrICogQHsKKysg Ki8KKysjZGVmaW5lIEFWSU9fRkxBR19SRUFEICAxICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKio8IHJlYWQtb25seSAqLworKyNkZWZpbmUgQVZJT19GTEFHX1dSSVRFIDIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgd3JpdGUtb25seSAqLwor KyNkZWZpbmUgQVZJT19GTEFHX1JFQURfV1JJVEUgKEFWSU9fRkxBR19SRUFEfEFWSU9fRkxBR19X UklURSkgIC8qKjwgcmVhZC13cml0ZSBwc2V1ZG8gZmxhZyAqLworKy8qKgorKyAqIEB9CisrICov CisrCisrLyoqCisrICogVXNlIG5vbi1ibG9ja2luZyBtb2RlLgorKyAqIElmIHRoaXMgZmxhZyBp cyBzZXQsIG9wZXJhdGlvbnMgb24gdGhlIGNvbnRleHQgd2lsbCByZXR1cm4KKysgKiBBVkVSUk9S KEVBR0FJTikgaWYgdGhleSBjYW4gbm90IGJlIHBlcmZvcm1lZCBpbW1lZGlhdGVseS4KKysgKiBJ ZiB0aGlzIGZsYWcgaXMgbm90IHNldCwgb3BlcmF0aW9ucyBvbiB0aGUgY29udGV4dCB3aWxsIG5l dmVyIHJldHVybgorKyAqIEFWRVJST1IoRUFHQUlOKS4KKysgKiBOb3RlIHRoYXQgdGhpcyBmbGFn IGRvZXMgbm90IGFmZmVjdCB0aGUgb3BlbmluZy9jb25uZWN0aW5nIG9mIHRoZQorKyAqIGNvbnRl eHQuIENvbm5lY3RpbmcgYSBwcm90b2NvbCB3aWxsIGFsd2F5cyBibG9jayBpZiBuZWNlc3Nhcnkg KGUuZy4gb24KKysgKiBuZXR3b3JrIHByb3RvY29scykgYnV0IG5ldmVyIGhhbmcgKGUuZy4gb24g YnVzeSBkZXZpY2VzKS4KKysgKiBXYXJuaW5nOiBub24tYmxvY2tpbmcgcHJvdG9jb2xzIGlzIHdv cmstaW4tcHJvZ3Jlc3M7IHRoaXMgZmxhZyBtYXkgYmUKKysgKiBzaWxlbnRseSBpZ25vcmVkLgor KyAqLworKyNkZWZpbmUgQVZJT19GTEFHX05PTkJMT0NLIDgKKysKKysvKioKKysgKiBVc2UgZGly ZWN0IG1vZGUuCisrICogYXZpb19yZWFkIGFuZCBhdmlvX3dyaXRlIHNob3VsZCBpZiBwb3NzaWJs ZSBiZSBzYXRpc2ZpZWQgZGlyZWN0bHkKKysgKiBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggYSBi dWZmZXIsIGFuZCBhdmlvX3NlZWsgd2lsbCBhbHdheXMKKysgKiBjYWxsIHRoZSB1bmRlcmx5aW5n IHNlZWsgZnVuY3Rpb24gZGlyZWN0bHkuCisrICovCisrI2RlZmluZSBBVklPX0ZMQUdfRElSRUNU IDB4ODAwMAorKworKy8qKgorKyAqIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIEFWSU9Db250ZXh0 IGZvciBhY2Nlc3NpbmcgdGhlCisrICogcmVzb3VyY2UgaW5kaWNhdGVkIGJ5IHVybC4KKysgKiBA bm90ZSBXaGVuIHRoZSByZXNvdXJjZSBpbmRpY2F0ZWQgYnkgdXJsIGhhcyBiZWVuIG9wZW5lZCBp bgorKyAqIHJlYWQrd3JpdGUgbW9kZSwgdGhlIEFWSU9Db250ZXh0IGNhbiBiZSB1c2VkIG9ubHkg Zm9yIHdyaXRpbmcuCisrICoKKysgKiBAcGFyYW0gcyBVc2VkIHRvIHJldHVybiB0aGUgcG9pbnRl ciB0byB0aGUgY3JlYXRlZCBBVklPQ29udGV4dC4KKysgKiBJbiBjYXNlIG9mIGZhaWx1cmUgdGhl IHBvaW50ZWQgdG8gdmFsdWUgaXMgc2V0IHRvIE5VTEwuCisrICogQHBhcmFtIHVybCByZXNvdXJj ZSB0byBhY2Nlc3MKKysgKiBAcGFyYW0gZmxhZ3MgZmxhZ3Mgd2hpY2ggY29udHJvbCBob3cgdGhl IHJlc291cmNlIGluZGljYXRlZCBieSB1cmwKKysgKiBpcyB0byBiZSBvcGVuZWQKKysgKiBAcmV0 dXJuID49IDAgaW4gY2FzZSBvZiBzdWNjZXNzLCBhIG5lZ2F0aXZlIHZhbHVlIGNvcnJlc3BvbmRp bmcgdG8gYW4KKysgKiBBVkVSUk9SIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCisrICovCisraW50 IGF2aW9fb3BlbihBVklPQ29udGV4dCAqKnMsIGNvbnN0IGNoYXIgKnVybCwgaW50IGZsYWdzKTsK KysKKysvKioKKysgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBBVklPQ29udGV4dCBmb3IgYWNj ZXNzaW5nIHRoZQorKyAqIHJlc291cmNlIGluZGljYXRlZCBieSB1cmwuCisrICogQG5vdGUgV2hl biB0aGUgcmVzb3VyY2UgaW5kaWNhdGVkIGJ5IHVybCBoYXMgYmVlbiBvcGVuZWQgaW4KKysgKiBy ZWFkK3dyaXRlIG1vZGUsIHRoZSBBVklPQ29udGV4dCBjYW4gYmUgdXNlZCBvbmx5IGZvciB3cml0 aW5nLgorKyAqCisrICogQHBhcmFtIHMgVXNlZCB0byByZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhl IGNyZWF0ZWQgQVZJT0NvbnRleHQuCisrICogSW4gY2FzZSBvZiBmYWlsdXJlIHRoZSBwb2ludGVk IHRvIHZhbHVlIGlzIHNldCB0byBOVUxMLgorKyAqIEBwYXJhbSB1cmwgcmVzb3VyY2UgdG8gYWNj ZXNzCisrICogQHBhcmFtIGZsYWdzIGZsYWdzIHdoaWNoIGNvbnRyb2wgaG93IHRoZSByZXNvdXJj ZSBpbmRpY2F0ZWQgYnkgdXJsCisrICogaXMgdG8gYmUgb3BlbmVkCisrICogQHBhcmFtIGludF9j YiBhbiBpbnRlcnJ1cHQgY2FsbGJhY2sgdG8gYmUgdXNlZCBhdCB0aGUgcHJvdG9jb2xzIGxldmVs CisrICogQHBhcmFtIG9wdGlvbnMgIEEgZGljdGlvbmFyeSBmaWxsZWQgd2l0aCBwcm90b2NvbC1w cml2YXRlIG9wdGlvbnMuIE9uIHJldHVybgorKyAqIHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgZGVz dHJveWVkIGFuZCByZXBsYWNlZCB3aXRoIGEgZGljdCBjb250YWluaW5nIG9wdGlvbnMKKysgKiB0 aGF0IHdlcmUgbm90IGZvdW5kLiBNYXkgYmUgTlVMTC4KKysgKiBAcmV0dXJuID49IDAgaW4gY2Fz ZSBvZiBzdWNjZXNzLCBhIG5lZ2F0aXZlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4KKysgKiBB VkVSUk9SIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCisrICovCisraW50IGF2aW9fb3BlbjIoQVZJ T0NvbnRleHQgKipzLCBjb25zdCBjaGFyICp1cmwsIGludCBmbGFncywKKysgICAgICAgICAgICAg ICBjb25zdCBBVklPSW50ZXJydXB0Q0IgKmludF9jYiwgQVZEaWN0aW9uYXJ5ICoqb3B0aW9ucyk7 CisrCisrLyoqCisrICogQ2xvc2UgdGhlIHJlc291cmNlIGFjY2Vzc2VkIGJ5IHRoZSBBVklPQ29u dGV4dCBzIGFuZCBmcmVlIGl0LgorKyAqIFRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBp ZiBzIHdhcyBvcGVuZWQgYnkgYXZpb19vcGVuKCkuCisrICoKKysgKiBUaGUgaW50ZXJuYWwgYnVm ZmVyIGlzIGF1dG9tYXRpY2FsbHkgZmx1c2hlZCBiZWZvcmUgY2xvc2luZyB0aGUKKysgKiByZXNv dXJjZS4KKysgKgorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBhbiBBVkVSUk9SIDwgMCBvbiBl cnJvci4KKysgKiBAc2VlIGF2aW9fY2xvc2VwCisrICovCisraW50IGF2aW9fY2xvc2UoQVZJT0Nv bnRleHQgKnMpOworKworKy8qKgorKyAqIENsb3NlIHRoZSByZXNvdXJjZSBhY2Nlc3NlZCBieSB0 aGUgQVZJT0NvbnRleHQgKnMsIGZyZWUgaXQKKysgKiBhbmQgc2V0IHRoZSBwb2ludGVyIHBvaW50 aW5nIHRvIGl0IHRvIE5VTEwuCisrICogVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIGlm IHMgd2FzIG9wZW5lZCBieSBhdmlvX29wZW4oKS4KKysgKgorKyAqIFRoZSBpbnRlcm5hbCBidWZm ZXIgaXMgYXV0b21hdGljYWxseSBmbHVzaGVkIGJlZm9yZSBjbG9zaW5nIHRoZQorKyAqIHJlc291 cmNlLgorKyAqCisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuIEFWRVJST1IgPCAwIG9uIGVy cm9yLgorKyAqIEBzZWUgYXZpb19jbG9zZQorKyAqLworK2ludCBhdmlvX2Nsb3NlcChBVklPQ29u dGV4dCAqKnMpOworKworKworKy8qKgorKyAqIE9wZW4gYSB3cml0ZSBvbmx5IG1lbW9yeSBzdHJl YW0uCisrICoKKysgKiBAcGFyYW0gcyBuZXcgSU8gY29udGV4dAorKyAqIEByZXR1cm4gemVybyBp ZiBubyBlcnJvci4KKysgKi8KKytpbnQgYXZpb19vcGVuX2R5bl9idWYoQVZJT0NvbnRleHQgKipz KTsKKysKKysvKioKKysgKiBSZXR1cm4gdGhlIHdyaXR0ZW4gc2l6ZSBhbmQgYSBwb2ludGVyIHRv IHRoZSBidWZmZXIuCisrICogVGhlIEFWSU9Db250ZXh0IHN0cmVhbSBpcyBsZWZ0IGludGFjdC4K KysgKiBUaGUgYnVmZmVyIG11c3QgTk9UIGJlIGZyZWVkLgorKyAqIE5vIHBhZGRpbmcgaXMgYWRk ZWQgdG8gdGhlIGJ1ZmZlci4KKysgKgorKyAqIEBwYXJhbSBzIElPIGNvbnRleHQKKysgKiBAcGFy YW0gcGJ1ZmZlciBwb2ludGVyIHRvIGEgYnl0ZSBidWZmZXIKKysgKiBAcmV0dXJuIHRoZSBsZW5n dGggb2YgdGhlIGJ5dGUgYnVmZmVyCisrICovCisraW50IGF2aW9fZ2V0X2R5bl9idWYoQVZJT0Nv bnRleHQgKnMsIHVpbnQ4X3QgKipwYnVmZmVyKTsKKysKKysvKioKKysgKiBSZXR1cm4gdGhlIHdy aXR0ZW4gc2l6ZSBhbmQgYSBwb2ludGVyIHRvIHRoZSBidWZmZXIuIFRoZSBidWZmZXIKKysgKiBt dXN0IGJlIGZyZWVkIHdpdGggYXZfZnJlZSgpLgorKyAqIFBhZGRpbmcgb2YgQVZfSU5QVVRfQlVG RkVSX1BBRERJTkdfU0laRSBpcyBhZGRlZCB0byB0aGUgYnVmZmVyLgorKyAqCisrICogQHBhcmFt IHMgSU8gY29udGV4dAorKyAqIEBwYXJhbSBwYnVmZmVyIHBvaW50ZXIgdG8gYSBieXRlIGJ1ZmZl cgorKyAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBidWZmZXIKKysgKi8KKytpbnQg YXZpb19jbG9zZV9keW5fYnVmKEFWSU9Db250ZXh0ICpzLCB1aW50OF90ICoqcGJ1ZmZlcik7Cisr CisrLyoqCisrICogSXRlcmF0ZSB0aHJvdWdoIG5hbWVzIG9mIGF2YWlsYWJsZSBwcm90b2NvbHMu CisrICoKKysgKiBAcGFyYW0gb3BhcXVlIEEgcHJpdmF0ZSBwb2ludGVyIHJlcHJlc2VudGluZyBj dXJyZW50IHByb3RvY29sLgorKyAqICAgICAgICBJdCBtdXN0IGJlIGEgcG9pbnRlciB0byBOVUxM IG9uIGZpcnN0IGl0ZXJhdGlvbiBhbmQgd2lsbAorKyAqICAgICAgICBiZSB1cGRhdGVkIGJ5IHN1 Y2Nlc3NpdmUgY2FsbHMgdG8gYXZpb19lbnVtX3Byb3RvY29scy4KKysgKiBAcGFyYW0gb3V0cHV0 IElmIHNldCB0byAxLCBpdGVyYXRlIG92ZXIgb3V0cHV0IHByb3RvY29scywKKysgKiAgICAgICAg ICAgICAgIG90aGVyd2lzZSBvdmVyIGlucHV0IHByb3RvY29scy4KKysgKgorKyAqIEByZXR1cm4g QSBzdGF0aWMgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgY3VycmVudCBwcm90b2NvbCBv ciBOVUxMCisrICovCisrY29uc3QgY2hhciAqYXZpb19lbnVtX3Byb3RvY29scyh2b2lkICoqb3Bh cXVlLCBpbnQgb3V0cHV0KTsKKysKKysvKioKKysgKiBHZXQgQVZDbGFzcyBieSBuYW1lcyBvZiBh dmFpbGFibGUgcHJvdG9jb2xzLgorKyAqCisrICogQHJldHVybiBBIEFWQ2xhc3Mgb2YgaW5wdXQg cHJvdG9jb2wgbmFtZSBvciBOVUxMCisrICovCisrY29uc3QgQVZDbGFzcyAqYXZpb19wcm90b2Nv bF9nZXRfY2xhc3MoY29uc3QgY2hhciAqbmFtZSk7CisrCisrLyoqCisrICogUGF1c2UgYW5kIHJl c3VtZSBwbGF5aW5nIC0gb25seSBtZWFuaW5nZnVsIGlmIHVzaW5nIGEgbmV0d29yayBzdHJlYW1p bmcKKysgKiBwcm90b2NvbCAoZS5nLiBNTVMpLgorKyAqCisrICogQHBhcmFtIGggICAgIElPIGNv bnRleHQgZnJvbSB3aGljaCB0byBjYWxsIHRoZSByZWFkX3BhdXNlIGZ1bmN0aW9uIHBvaW50ZXIK KysgKiBAcGFyYW0gcGF1c2UgMSBmb3IgcGF1c2UsIDAgZm9yIHJlc3VtZQorKyAqLworK2ludCAg ICAgYXZpb19wYXVzZShBVklPQ29udGV4dCAqaCwgaW50IHBhdXNlKTsKKysKKysvKioKKysgKiBT ZWVrIHRvIGEgZ2l2ZW4gdGltZXN0YW1wIHJlbGF0aXZlIHRvIHNvbWUgY29tcG9uZW50IHN0cmVh bS4KKysgKiBPbmx5IG1lYW5pbmdmdWwgaWYgdXNpbmcgYSBuZXR3b3JrIHN0cmVhbWluZyBwcm90 b2NvbCAoZS5nLiBNTVMuKS4KKysgKgorKyAqIEBwYXJhbSBoIElPIGNvbnRleHQgZnJvbSB3aGlj aCB0byBjYWxsIHRoZSBzZWVrIGZ1bmN0aW9uIHBvaW50ZXJzCisrICogQHBhcmFtIHN0cmVhbV9p bmRleCBUaGUgc3RyZWFtIGluZGV4IHRoYXQgdGhlIHRpbWVzdGFtcCBpcyByZWxhdGl2ZSB0by4K KysgKiAgICAgICAgSWYgc3RyZWFtX2luZGV4IGlzICgtMSkgdGhlIHRpbWVzdGFtcCBzaG91bGQg YmUgaW4gQVZfVElNRV9CQVNFCisrICogICAgICAgIHVuaXRzIGZyb20gdGhlIGJlZ2lubmluZyBv ZiB0aGUgcHJlc2VudGF0aW9uLgorKyAqICAgICAgICBJZiBhIHN0cmVhbV9pbmRleCA+PSAwIGlz IHVzZWQgYW5kIHRoZSBwcm90b2NvbCBkb2VzIG5vdCBzdXBwb3J0CisrICogICAgICAgIHNlZWtp bmcgYmFzZWQgb24gY29tcG9uZW50IHN0cmVhbXMsIHRoZSBjYWxsIHdpbGwgZmFpbC4KKysgKiBA cGFyYW0gdGltZXN0YW1wIHRpbWVzdGFtcCBpbiBBVlN0cmVhbS50aW1lX2Jhc2UgdW5pdHMKKysg KiAgICAgICAgb3IgaWYgdGhlcmUgaXMgbm8gc3RyZWFtIHNwZWNpZmllZCB0aGVuIGluIEFWX1RJ TUVfQkFTRSB1bml0cy4KKysgKiBAcGFyYW0gZmxhZ3MgT3B0aW9uYWwgY29tYmluYXRpb24gb2Yg QVZTRUVLX0ZMQUdfQkFDS1dBUkQsIEFWU0VFS19GTEFHX0JZVEUKKysgKiAgICAgICAgYW5kIEFW U0VFS19GTEFHX0FOWS4gVGhlIHByb3RvY29sIG1heSBzaWxlbnRseSBpZ25vcmUKKysgKiAgICAg ICAgQVZTRUVLX0ZMQUdfQkFDS1dBUkQgYW5kIEFWU0VFS19GTEFHX0FOWSwgYnV0IEFWU0VFS19G TEFHX0JZVEUgd2lsbAorKyAqICAgICAgICBmYWlsIGlmIHVzZWQgYW5kIG5vdCBzdXBwb3J0ZWQu CisrICogQHJldHVybiA+PSAwIG9uIHN1Y2Nlc3MKKysgKiBAc2VlIEFWSW5wdXRGb3JtYXQ6OnJl YWRfc2VlaworKyAqLworK2ludDY0X3QgYXZpb19zZWVrX3RpbWUoQVZJT0NvbnRleHQgKmgsIGlu dCBzdHJlYW1faW5kZXgsCisrICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHRpbWVzdGFt cCwgaW50IGZsYWdzKTsKKysKKysvKiBBdm9pZCBhIHdhcm5pbmcuIFRoZSBoZWFkZXIgY2FuIG5v dCBiZSBpbmNsdWRlZCBiZWNhdXNlIGl0IGJyZWFrcyBjKysuICovCisrc3RydWN0IEFWQlByaW50 OworKworKy8qKgorKyAqIFJlYWQgY29udGVudHMgb2YgaCBpbnRvIHByaW50IGJ1ZmZlciwgdXAg dG8gbWF4X3NpemUgYnl0ZXMsIG9yIHVwIHRvIEVPRi4KKysgKgorKyAqIEByZXR1cm4gMCBmb3Ig c3VjY2VzcyAobWF4X3NpemUgYnl0ZXMgcmVhZCBvciBFT0YgcmVhY2hlZCksIG5lZ2F0aXZlIGVy cm9yCisrICogY29kZSBvdGhlcndpc2UKKysgKi8KKytpbnQgYXZpb19yZWFkX3RvX2JwcmludChB VklPQ29udGV4dCAqaCwgc3RydWN0IEFWQlByaW50ICpwYiwgc2l6ZV90IG1heF9zaXplKTsKKysK KysvKioKKysgKiBBY2NlcHQgYW5kIGFsbG9jYXRlIGEgY2xpZW50IGNvbnRleHQgb24gYSBzZXJ2 ZXIgY29udGV4dC4KKysgKiBAcGFyYW0gIHMgdGhlIHNlcnZlciBjb250ZXh0CisrICogQHBhcmFt ICBjIHRoZSBjbGllbnQgY29udGV4dCwgbXVzdCBiZSB1bmFsbG9jYXRlZAorKyAqIEByZXR1cm4g ICA+PSAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBjb3JyZXNwb25kaW5nCisrICog ICAgICAgICAgIHRvIGFuIEFWRVJST1Igb24gZmFpbHVyZQorKyAqLworK2ludCBhdmlvX2FjY2Vw dChBVklPQ29udGV4dCAqcywgQVZJT0NvbnRleHQgKipjKTsKKysKKysvKioKKysgKiBQZXJmb3Jt IG9uZSBzdGVwIG9mIHRoZSBwcm90b2NvbCBoYW5kc2hha2UgdG8gYWNjZXB0IGEgbmV3IGNsaWVu dC4KKysgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIG9uIGEgY2xpZW50IHJldHVybmVk IGJ5IGF2aW9fYWNjZXB0KCkgYmVmb3JlCisrICogdXNpbmcgaXQgYXMgYSByZWFkL3dyaXRlIGNv bnRleHQuCisrICogSXQgaXMgc2VwYXJhdGUgZnJvbSBhdmlvX2FjY2VwdCgpIGJlY2F1c2UgaXQg bWF5IGJsb2NrLgorKyAqIEEgc3RlcCBvZiB0aGUgaGFuZHNoYWtlIGlzIGRlZmluZWQgYnkgcGxh Y2VzIHdoZXJlIHRoZSBhcHBsaWNhdGlvbiBtYXkKKysgKiBkZWNpZGUgdG8gY2hhbmdlIHRoZSBw cm9jZWVkaW5ncy4KKysgKiBGb3IgZXhhbXBsZSwgb24gYSBwcm90b2NvbCB3aXRoIGEgcmVxdWVz dCBoZWFkZXIgYW5kIGEgcmVwbHkgaGVhZGVyLCBlYWNoCisrICogb25lIGNhbiBjb25zdGl0dXRl IGEgc3RlcCBiZWNhdXNlIHRoZSBhcHBsaWNhdGlvbiBtYXkgdXNlIHRoZSBwYXJhbWV0ZXJzCisr ICogZnJvbSB0aGUgcmVxdWVzdCB0byBjaGFuZ2UgcGFyYW1ldGVycyBpbiB0aGUgcmVwbHk7IG9y IGVhY2ggaW5kaXZpZHVhbAorKyAqIGNodW5rIG9mIHRoZSByZXF1ZXN0IGNhbiBjb25zdGl0dXRl IGEgc3RlcC4KKysgKiBJZiB0aGUgaGFuZHNoYWtlIGlzIGFscmVhZHkgZmluaXNoZWQsIGF2aW9f aGFuZHNoYWtlKCkgZG9lcyBub3RoaW5nIGFuZAorKyAqIHJldHVybnMgMCBpbW1lZGlhdGVseS4K KysgKgorKyAqIEBwYXJhbSAgYyB0aGUgY2xpZW50IGNvbnRleHQgdG8gcGVyZm9ybSB0aGUgaGFu ZHNoYWtlIG9uCisrICogQHJldHVybiAgIDAgICBvbiBhIGNvbXBsZXRlIGFuZCBzdWNjZXNzZnVs IGhhbmRzaGFrZQorKyAqICAgICAgICAgICA+IDAgaWYgdGhlIGhhbmRzaGFrZSBwcm9ncmVzc2Vk LCBidXQgaXMgbm90IGNvbXBsZXRlCisrICogICAgICAgICAgIDwgMCBmb3IgYW4gQVZFUlJPUiBj b2RlCisrICovCisraW50IGF2aW9faGFuZHNoYWtlKEFWSU9Db250ZXh0ICpjKTsKKysjZW5kaWYg LyogQVZGT1JNQVRfQVZJT19IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1l d29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmZvcm1hdC92ZXJzaW9uLmguZmZt cGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBl Zy92OS9saWJhdmZvcm1hdC92ZXJzaW9uLmgKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1l d29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmZvcm1hdC92ZXJzaW9uLmguZmZt cGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NTUwODc0MyArMDIwMAorKysrIE11c2VTY29yZS00 LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2Zm9ybWF0 L3ZlcnNpb24uaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NTQ4ODQxOCArMDIwMAorQEAgLTAsMCAr MSw0NyBAQAorKy8qCisrICogVmVyc2lvbiBtYWNyb3MuCisrICoKKysgKiBUaGlzIGZpbGUgaXMg cGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4x IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor KyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGlj ZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVmIEFWRk9STUFUX1ZF UlNJT05fSAorKyNkZWZpbmUgQVZGT1JNQVRfVkVSU0lPTl9ICisrCisrLyoqCisrICogQGZpbGUK KysgKiBAaW5ncm91cCBsaWJhdmYKKysgKiBMaWJhdmZvcm1hdCB2ZXJzaW9uIG1hY3JvcworKyAq LworKworKyNpbmNsdWRlICJsaWJhdnV0aWwvdmVyc2lvbi5oIgorKworKyNpbmNsdWRlICJ2ZXJz aW9uX21ham9yLmgiCisrCisrI2RlZmluZSBMSUJBVkZPUk1BVF9WRVJTSU9OX01JTk9SICAgMQor KyNkZWZpbmUgTElCQVZGT1JNQVRfVkVSU0lPTl9NSUNSTyAxMDAKKysKKysjZGVmaW5lIExJQkFW Rk9STUFUX1ZFUlNJT05fSU5UIEFWX1ZFUlNJT05fSU5UKExJQkFWRk9STUFUX1ZFUlNJT05fTUFK T1IsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJ QkFWRk9STUFUX1ZFUlNJT05fTUlOT1IsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExJQkFWRk9STUFUX1ZFUlNJT05fTUlDUk8pCisrI2RlZmluZSBM SUJBVkZPUk1BVF9WRVJTSU9OICAgICBBVl9WRVJTSU9OKExJQkFWRk9STUFUX1ZFUlNJT05fTUFK T1IsICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJB VkZPUk1BVF9WRVJTSU9OX01JTk9SLCAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTElCQVZGT1JNQVRfVkVSU0lPTl9NSUNSTykKKysjZGVmaW5lIExJQkFW Rk9STUFUX0JVSUxEICAgICAgIExJQkFWRk9STUFUX1ZFUlNJT05fSU5UCisrCisrI2RlZmluZSBM SUJBVkZPUk1BVF9JREVOVCAgICAgICAiTGF2ZiIgQVZfU1RSSU5HSUZZKExJQkFWRk9STUFUX1ZF UlNJT04pCisrCisrI2VuZGlmIC8qIEFWRk9STUFUX1ZFUlNJT05fSCAqLworZGlmZiAtdXAgTXVz ZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGli YXZmb3JtYXQvdmVyc2lvbl9tYWpvci5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFt ZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZmb3JtYXQvdmVyc2lvbl9tYWpv ci5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9m Zm1wZWcvdjkvbGliYXZmb3JtYXQvdmVyc2lvbl9tYWpvci5oLmZmbXBlZzkJMjAyNi0wOS0wNyAx MjoyMzo0Ny42NzU1ODM5MTYgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29y ay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdmZvcm1hdC92ZXJzaW9uX21ham9yLmgJ MjAyNi0wOS0wNyAxMjoyMzo0Ny42NzU1NjEzMTYgKzAyMDAKK0BAIC0wLDAgKzEsNTIgQEAKKysv KgorKyAqIFZlcnNpb24gbWFjcm9zLgorKyAqCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZt cGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZG bXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcg d2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3Vu ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrI2lmbmRlZiBBVkZPUk1BVF9WRVJTSU9OX01BSk9S X0gKKysjZGVmaW5lIEFWRk9STUFUX1ZFUlNJT05fTUFKT1JfSAorKworKy8qKgorKyAqIEBmaWxl CisrICogQGluZ3JvdXAgbGliYXZmCisrICogTGliYXZmb3JtYXQgdmVyc2lvbiBtYWNyb3MKKysg Ki8KKysKKysvLyBNYWpvciBidW1waW5nIG1heSBhZmZlY3QgVGlja2V0NTQ2NywgNTQyMSwgNTQ1 MShjb21wYXRpYmlsaXR5IHdpdGggQ2hyb21pdW0pCisrLy8gQWxzbyBwbGVhc2UgYWRkIGFueSB0 aWNrZXQgbnVtYmVycyB0aGF0IHlvdSBiZWxpZXZlIG1pZ2h0IGJlIGFmZmVjdGVkIGhlcmUKKysj ZGVmaW5lIExJQkFWRk9STUFUX1ZFUlNJT05fTUFKT1IgIDYzCisrCisrLyoqCisrICogRkZfQVBJ XyogZGVmaW5lcyBtYXkgYmUgcGxhY2VkIGJlbG93IHRvIGluZGljYXRlIHB1YmxpYyBBUEkgdGhh dCB3aWxsIGJlCisrICogZHJvcHBlZCBhdCBhIGZ1dHVyZSB2ZXJzaW9uIGJ1bXAuIFRoZSBkZWZp bmVzIHRoZW1zZWx2ZXMgYXJlIG5vdCBwYXJ0IG9mCisrICogdGhlIHB1YmxpYyBBUEkgYW5kIG1h eSBjaGFuZ2UsIGJyZWFrIG9yIGRpc2FwcGVhciBhdCBhbnkgdGltZS4KKysgKgorKyAqIEBub3Rl LCB3aGVuIGJ1bXBpbmcgdGhlIG1ham9yIHZlcnNpb24gaXQgaXMgcmVjb21tZW5kZWQgdG8gbWFu dWFsbHkKKysgKiBkaXNhYmxlIGVhY2ggRkZfQVBJXyogaW4gaXRzIG93biBjb21taXQgaW5zdGVh ZCBvZiBkaXNhYmxpbmcgdGhlbSBhbGwKKysgKiBhdCBvbmNlIHRocm91Z2ggdGhlIGJ1bXAuIFRo aXMgaW1wcm92ZXMgdGhlIGdpdCBiaXNlY3QtYWJpbGl0eSBvZiB0aGUgY2hhbmdlLgorKyAqCisr ICovCisrI2RlZmluZSBGRl9BUElfQ09NUFVURV9QS1RfRklFTERTMiAgICAgIChMSUJBVkZPUk1B VF9WRVJTSU9OX01BSk9SIDwgNjQpCisrCisrI2RlZmluZSBGRl9BUElfRkRFQlVHX1RTICAgICAg ICAgICAgICAgIChMSUJBVkZPUk1BVF9WRVJTSU9OX01BSk9SIDwgNjQpCisrCisrI2RlZmluZSBG Rl9BUElfTENFVkNfU1RSVUNUICAgICAgICAgICAgIChMSUJBVkZPUk1BVF9WRVJTSU9OX01BSk9S IDwgNjQpCisrCisrI2RlZmluZSBGRl9BUElfUl9GUkFNRV9SQVRFICAgICAgICAgICAgMQorKwor KyNlbmRpZiAvKiBBVkZPUk1BVF9WRVJTSU9OX01BSk9SX0ggKi8KK2RpZmYgLXVwIE11c2VTY29y ZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRp bC9hdHRyaWJ1dGVzLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRp YS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvYXR0cmlidXRlcy5oCistLS0gTXVzZVNj b3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1 dGlsL2F0dHJpYnV0ZXMuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc1NjkyOTMwICsw MjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9m Zm1wZWcvdjkvbGliYXZ1dGlsL2F0dHJpYnV0ZXMuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NTY4 MDk4MiArMDIwMAorQEAgLTAsMCArMSwyMzUgQEAKKysvKgorKyAqIGNvcHlyaWdodCAoYykgMjAw NiBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVsbmlAZ214LmF0PgorKyAqCisrICogVGhpcyBm aWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor KyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo IEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrLyoqCisrICogQGZp bGUKKysgKiBNYWNybyBkZWZpbml0aW9ucyBmb3IgdmFyaW91cyBmdW5jdGlvbi92YXJpYWJsZSBh dHRyaWJ1dGVzCisrICovCisrCisrI2lmbmRlZiBBVlVUSUxfQVRUUklCVVRFU19ICisrI2RlZmlu ZSBBVlVUSUxfQVRUUklCVVRFU19ICisrCisrI2lmZGVmIF9fR05VQ19fCisrIyAgICBkZWZpbmUg QVZfR0NDX1ZFUlNJT05fQVRfTEVBU1QoeCx5KSAoX19HTlVDX18gPiAoeCkgfHwgX19HTlVDX18g PT0gKHgpICYmIF9fR05VQ19NSU5PUl9fID49ICh5KSkKKysjICAgIGRlZmluZSBBVl9HQ0NfVkVS U0lPTl9BVF9NT1NUKHgseSkgIChfX0dOVUNfXyA8ICh4KSB8fCBfX0dOVUNfXyA9PSAoeCkgJiYg X19HTlVDX01JTk9SX18gPD0gKHkpKQorKyNlbHNlCisrIyAgICBkZWZpbmUgQVZfR0NDX1ZFUlNJ T05fQVRfTEVBU1QoeCx5KSAwCisrIyAgICBkZWZpbmUgQVZfR0NDX1ZFUlNJT05fQVRfTU9TVCh4 LHkpICAwCisrI2VuZGlmCisrCisrI2lmZGVmIF9faGFzX2J1aWx0aW4KKysjICAgIGRlZmluZSBB Vl9IQVNfQlVJTFRJTih4KSBfX2hhc19idWlsdGluKHgpCisrI2Vsc2UKKysjICAgIGRlZmluZSBB Vl9IQVNfQlVJTFRJTih4KSAwCisrI2VuZGlmCisrCisrI2lmZGVmIF9faGFzX2F0dHJpYnV0ZQor KyMgICAgZGVmaW5lIEFWX0hBU19BVFRSSUJVVEUoeCkgX19oYXNfYXR0cmlidXRlKHgpCisrI2Vs c2UKKysjICAgIGRlZmluZSBBVl9IQVNfQVRUUklCVVRFKHgpIDAKKysjZW5kaWYKKysKKysjaWYg ZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgXAorKyAgICBkZWZpbmVkKF9faGFzX2NwcF9hdHRyaWJ1 dGUpICYmIFwKKysgICAgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorKyMgICAgZGVmaW5lIEFWX0hB U19TVERfQVRUUklCVVRFKHgpIF9faGFzX2NwcF9hdHRyaWJ1dGUoeCkKKysjZWxpZiAhZGVmaW5l ZChfX2NwbHVzcGx1cykgJiYgXAorKyAgICAgIGRlZmluZWQoX19oYXNfY19hdHRyaWJ1dGUpICYm IFwKKysgICAgICBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIFwKKysgICAgICBfX1NURENf VkVSU0lPTl9fID49IDIwMjMxMUwKKysjICAgIGRlZmluZSBBVl9IQVNfU1REX0FUVFJJQlVURSh4 KSBfX2hhc19jX2F0dHJpYnV0ZSh4KQorKyNlbHNlCisrIyAgICBkZWZpbmUgQVZfSEFTX1NURF9B VFRSSUJVVEUoeCkgMAorKyNlbmRpZgorKworKyNpZiBBVl9IQVNfU1REX0FUVFJJQlVURShmYWxs dGhyb3VnaCkKKysjICAgIGRlZmluZSBhdl9mYWxsdGhyb3VnaCBbW2ZhbGx0aHJvdWdoXV0KKysj ZWxpZiBBVl9IQVNfQVRUUklCVVRFKGZhbGx0aHJvdWdoKQorKyMgICAgZGVmaW5lIGF2X2ZhbGx0 aHJvdWdoIF9fYXR0cmlidXRlX18oKGZhbGx0aHJvdWdoKSkKKysjZWxzZQorKyMgICAgZGVmaW5l IGF2X2ZhbGx0aHJvdWdoIGRvIHt9IHdoaWxlKDApCisrI2VuZGlmCisrCisrI2lmbmRlZiBhdl9h bHdheXNfaW5saW5lCisrI2lmIEFWX0dDQ19WRVJTSU9OX0FUX0xFQVNUKDMsMSkgfHwgZGVmaW5l ZChfX2NsYW5nX18pCisrIyAgICBkZWZpbmUgYXZfYWx3YXlzX2lubGluZSBfX2F0dHJpYnV0ZV9f KChhbHdheXNfaW5saW5lKSkgaW5saW5lCisrI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKysjICAg IGRlZmluZSBhdl9hbHdheXNfaW5saW5lIF9fZm9yY2VpbmxpbmUKKysjZWxzZQorKyMgICAgZGVm aW5lIGF2X2Fsd2F5c19pbmxpbmUgaW5saW5lCisrI2VuZGlmCisrI2VuZGlmCisrCisrI2lmbmRl ZiBhdl9leHRlcm5faW5saW5lCisrI2lmIGRlZmluZWQoX19JQ0wpICYmIF9fSUNMID49IDEyMTAg fHwgZGVmaW5lZChfX0dOVUNfU1REQ19JTkxJTkVfXykKKysjICAgIGRlZmluZSBhdl9leHRlcm5f aW5saW5lIGV4dGVybiBpbmxpbmUKKysjZWxzZQorKyMgICAgZGVmaW5lIGF2X2V4dGVybl9pbmxp bmUgaW5saW5lCisrI2VuZGlmCisrI2VuZGlmCisrCisrI2lmIEFWX0hBU19TVERfQVRUUklCVVRF KG5vZGlzY2FyZCkKKysjICAgIGRlZmluZSBhdl93YXJuX3VudXNlZF9yZXN1bHQgW1tub2Rpc2Nh cmRdXQorKyNlbGlmIEFWX0dDQ19WRVJTSU9OX0FUX0xFQVNUKDMsNCkgfHwgZGVmaW5lZChfX2Ns YW5nX18pCisrIyAgICBkZWZpbmUgYXZfd2Fybl91bnVzZWRfcmVzdWx0IF9fYXR0cmlidXRlX18o KHdhcm5fdW51c2VkX3Jlc3VsdCkpCisrI2Vsc2UKKysjICAgIGRlZmluZSBhdl93YXJuX3VudXNl ZF9yZXN1bHQKKysjZW5kaWYKKysKKysjaWYgQVZfR0NDX1ZFUlNJT05fQVRfTEVBU1QoMywxKSB8 fCBkZWZpbmVkKF9fY2xhbmdfXykKKysjICAgIGRlZmluZSBhdl9ub2lubGluZSBfX2F0dHJpYnV0 ZV9fKChub2lubGluZSkpCisrI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKysjICAgIGRlZmluZSBh dl9ub2lubGluZSBfX2RlY2xzcGVjKG5vaW5saW5lKQorKyNlbHNlCisrIyAgICBkZWZpbmUgYXZf bm9pbmxpbmUKKysjZW5kaWYKKysKKysjaWYgQVZfR0NDX1ZFUlNJT05fQVRfTEVBU1QoMywxKSB8 fCBkZWZpbmVkKF9fY2xhbmdfXykKKysjICAgIGRlZmluZSBhdl9wdXJlIF9fYXR0cmlidXRlX18o KHB1cmUpKQorKyNlbHNlCisrIyAgICBkZWZpbmUgYXZfcHVyZQorKyNlbmRpZgorKworKyNpZiBB Vl9HQ0NfVkVSU0lPTl9BVF9MRUFTVCgyLDYpIHx8IGRlZmluZWQoX19jbGFuZ19fKQorKyMgICAg ZGVmaW5lIGF2X2NvbnN0IF9fYXR0cmlidXRlX18oKGNvbnN0KSkKKysjZWxzZQorKyMgICAgZGVm aW5lIGF2X2NvbnN0CisrI2VuZGlmCisrCisrI2lmIEFWX0dDQ19WRVJTSU9OX0FUX0xFQVNUKDQs MykgfHwgZGVmaW5lZChfX2NsYW5nX18pCisrIyAgICBkZWZpbmUgYXZfY29sZCBfX2F0dHJpYnV0 ZV9fKChjb2xkKSkKKysjZWxzZQorKyMgICAgZGVmaW5lIGF2X2NvbGQKKysjZW5kaWYKKysKKysj aWYgKEFWX0dDQ19WRVJTSU9OX0FUX0xFQVNUKDQsMSkgJiYgIWRlZmluZWQoX19jbGFuZ19fICkp IHx8IEFWX0hBU19BVFRSSUJVVEUoZmxhdHRlbikKKysjICAgIGRlZmluZSBhdl9mbGF0dGVuIF9f YXR0cmlidXRlX18oKGZsYXR0ZW4pKQorKyNlbHNlCisrIyAgICBkZWZpbmUgYXZfZmxhdHRlbgor KyNlbmRpZgorKworKyNpZiBBVl9IQVNfU1REX0FUVFJJQlVURShkZXByZWNhdGVkKQorKyMgICAg ZGVmaW5lIGF0dHJpYnV0ZV9kZXByZWNhdGVkIFtbZGVwcmVjYXRlZF1dCisrI2VsaWYgQVZfR0ND X1ZFUlNJT05fQVRfTEVBU1QoMywxKSB8fCBkZWZpbmVkKF9fY2xhbmdfXykKKysjICAgIGRlZmlu ZSBhdHRyaWJ1dGVfZGVwcmVjYXRlZCBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKSkKKysjZWxp ZiBkZWZpbmVkKF9NU0NfVkVSKQorKyMgICAgZGVmaW5lIGF0dHJpYnV0ZV9kZXByZWNhdGVkIF9f ZGVjbHNwZWMoZGVwcmVjYXRlZCkKKysjZWxzZQorKyMgICAgZGVmaW5lIGF0dHJpYnV0ZV9kZXBy ZWNhdGVkCisrI2VuZGlmCisrCisrLyoqCisrICogRGlzYWJsZSB3YXJuaW5ncyBhYm91dCBkZXBy ZWNhdGVkIGZlYXR1cmVzCisrICogVGhpcyBpcyB1c2VmdWwgZm9yIHNlY3Rpb25zIG9mIGNvZGUg a2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQKKysgKiBzY2hlZHVsZWQgZm9yIHJl bW92YWwuCisrICovCisrI2lmbmRlZiBBVl9OT1dBUk5fREVQUkVDQVRFRAorKyNpZiBBVl9HQ0Nf VkVSU0lPTl9BVF9MRUFTVCg0LDYpIHx8IGRlZmluZWQoX19jbGFuZ19fKQorKyMgICAgZGVmaW5l IEFWX05PV0FSTl9ERVBSRUNBVEVEKGNvZGUpIFwKKysgICAgICAgIF9QcmFnbWEoIkdDQyBkaWFn bm9zdGljIHB1c2giKSBcCisrICAgICAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk IFwiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9uc1wiIikgXAorKyAgICAgICAgY29kZSBcCisrICAg ICAgICBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBwb3AiKQorKyNlbGlmIGRlZmluZWQoX01TQ19W RVIpCisrIyAgICBkZWZpbmUgQVZfTk9XQVJOX0RFUFJFQ0FURUQoY29kZSkgXAorKyAgICAgICAg X19wcmFnbWEod2FybmluZyhwdXNoKSkgXAorKyAgICAgICAgX19wcmFnbWEod2FybmluZyhkaXNh YmxlIDogNDk5NikpIFwKKysgICAgICAgIGNvZGU7IFwKKysgICAgICAgIF9fcHJhZ21hKHdhcm5p bmcocG9wKSkKKysjZWxzZQorKyMgICAgZGVmaW5lIEFWX05PV0FSTl9ERVBSRUNBVEVEKGNvZGUp IGNvZGUKKysjZW5kaWYKKysjZW5kaWYKKysKKysjaWYgQVZfSEFTX1NURF9BVFRSSUJVVEUobWF5 YmVfdW51c2VkKQorKyMgICAgZGVmaW5lIGF2X3VudXNlZCBbW21heWJlX3VudXNlZF1dCisrI2Vs aWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX2NsYW5nX18pCisrIyAgICBkZWZpbmUg YXZfdW51c2VkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpCisrI2Vsc2UKKysjICAgIGRlZmluZSBh dl91bnVzZWQKKysjZW5kaWYKKysKKysvKioKKysgKiBNYXJrIGEgdmFyaWFibGUgYXMgdXNlZCBh bmQgcHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSBvcHRpbWl6aW5nIGl0CisrICogYXdheS4gIFRo aXMgaXMgdXNlZnVsIGZvciB2YXJpYWJsZXMgYWNjZXNzZWQgb25seSBmcm9tIGlubGluZQorKyAq IGFzc2VtYmxlciB3aXRob3V0IHRoZSBjb21waWxlciBiZWluZyBhd2FyZS4KKysgKi8KKysjaWYg QVZfR0NDX1ZFUlNJT05fQVRfTEVBU1QoMywxKSB8fCBkZWZpbmVkKF9fY2xhbmdfXykKKysjICAg IGRlZmluZSBhdl91c2VkIF9fYXR0cmlidXRlX18oKHVzZWQpKQorKyNlbHNlCisrIyAgICBkZWZp bmUgYXZfdXNlZAorKyNlbmRpZgorKworKyNpZiBBVl9HQ0NfVkVSU0lPTl9BVF9MRUFTVCgzLDMp IHx8IGRlZmluZWQoX19jbGFuZ19fKQorKyMgICBkZWZpbmUgYXZfYWxpYXMgX19hdHRyaWJ1dGVf XygobWF5X2FsaWFzKSkKKysjZWxzZQorKyMgICBkZWZpbmUgYXZfYWxpYXMKKysjZW5kaWYKKysK KysjaWYgKGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19jbGFuZ19fKSkgJiYgIWRlZmlu ZWQoX19JTlRFTF9DT01QSUxFUikKKysjICAgIGRlZmluZSBhdl91bmluaXQoeCkgeD14CisrI2Vs c2UKKysjICAgIGRlZmluZSBhdl91bmluaXQoeCkgeAorKyNlbmRpZgorKworKyNpZiBkZWZpbmVk KF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fY2xhbmdfXykKKysjICAgIGRlZmluZSBhdl9idWlsdGlu X2NvbnN0YW50X3AgX19idWlsdGluX2NvbnN0YW50X3AKKysjZWxzZQorKyMgICAgZGVmaW5lIGF2 X2J1aWx0aW5fY29uc3RhbnRfcCh4KSAwCisrI2VuZGlmCisrCisrLy8gZm9yIF9fTUlOR1dfUFJJ TlRGX0ZPUk1BVCBhbmQgX19NSU5HV19TQ0FORl9GT1JNQVQKKysjaWZkZWYgX19NSU5HVzMyX18K KysjICAgIGluY2x1ZGUgPHN0ZGlvLmg+CisrI2VuZGlmCisrCisrI2lmZGVmIF9fTUlOR1dfUFJJ TlRGX0ZPUk1BVAorKyMgICAgZGVmaW5lIEFWX1BSSU5URl9GTVQgX19NSU5HV19QUklOVEZfRk9S TUFUCisrI2VsaWYgQVZfSEFTX0FUVFJJQlVURShmb3JtYXQpCisrIyAgICBkZWZpbmUgQVZfUFJJ TlRGX0ZNVCBfX3ByaW50Zl9fCisrI2VuZGlmCisrCisrI2lmZGVmIF9fTUlOR1dfU0NBTkZfRk9S TUFUCisrIyAgICBkZWZpbmUgQVZfU0NBTkZfRk1UIF9fTUlOR1dfU0NBTkZfRk9STUFUCisrI2Vs aWYgQVZfSEFTX0FUVFJJQlVURShmb3JtYXQpCisrIyAgICBkZWZpbmUgQVZfU0NBTkZfRk1UIF9f c2NhbmZfXworKyNlbmRpZgorKworKyNpZmRlZiBBVl9QUklOVEZfRk1UCisrIyAgICBkZWZpbmUg YXZfcHJpbnRmX2Zvcm1hdChmbXRwb3MsIGF0dHJwb3MpIF9fYXR0cmlidXRlX18oKGZvcm1hdChB Vl9QUklOVEZfRk1ULCBmbXRwb3MsIGF0dHJwb3MpKSkKKysjZWxzZQorKyMgICAgZGVmaW5lIGF2 X3ByaW50Zl9mb3JtYXQoZm10cG9zLCBhdHRycG9zKQorKyNlbmRpZgorKworKyNpZmRlZiBBVl9T Q0FORl9GTVQKKysjICAgIGRlZmluZSBhdl9zY2FuZl9mb3JtYXQoZm10cG9zLCBhdHRycG9zKSBf X2F0dHJpYnV0ZV9fKChmb3JtYXQoQVZfU0NBTkZfRk1ULCBmbXRwb3MsIGF0dHJwb3MpKSkKKysj ZWxzZQorKyMgICAgZGVmaW5lIGF2X3NjYW5mX2Zvcm1hdChmbXRwb3MsIGF0dHJwb3MpCisrI2Vu ZGlmCisrCisrI2lmIEFWX0hBU19TVERfQVRUUklCVVRFKG5vcmV0dXJuKQorKyMgICAgZGVmaW5l IGF2X25vcmV0dXJuIFtbbm9yZXR1cm5dXQorKyNlbGlmIEFWX0dDQ19WRVJTSU9OX0FUX0xFQVNU KDIsNSkgfHwgZGVmaW5lZChfX2NsYW5nX18pCisrIyAgICBkZWZpbmUgYXZfbm9yZXR1cm4gX19h dHRyaWJ1dGVfXygobm9yZXR1cm4pKQorKyNlbHNlCisrIyAgICBkZWZpbmUgYXZfbm9yZXR1cm4K KysjZW5kaWYKKysKKysjZW5kaWYgLyogQVZVVElMX0FUVFJJQlVURVNfSCAqLworZGlmZiAtdXAg TXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkv bGliYXZ1dGlsL2F2Y29uZmlnLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29y ay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvYXZjb25maWcuaAorLS0tIE11 c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xp YmF2dXRpbC9hdmNvbmZpZy5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzU3NTU2MTUg KzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5 L2ZmbXBlZy92OS9saWJhdnV0aWwvYXZjb25maWcuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NTcz OTA0MSArMDIwMAorQEAgLTAsMCArMSwyNCBAQAorKy8qCisrICogVGhpcyBmaWxlIGlzIHBhcnQg b2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgor KyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2Ug YWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysg KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrI2lmbmRlZiBBVlVUSUxfQVZDT05GSUdf SAorKyNkZWZpbmUgQVZVVElMX0FWQ09ORklHX0gKKysKKysjZGVmaW5lIEFWX0hBVkVfQklHRU5E SUFOIDAKKysKKysjZW5kaWYgLyogQVZVVElMX0FWQ09ORklHX0ggKi8KK2RpZmYgLXVwIE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2 dXRpbC9hdnN0cmluZy5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVk aWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2F2c3RyaW5nLmgKKy0tLSBNdXNlU2Nv cmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0 aWwvYXZzdHJpbmcuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc1ODk3OTk5ICswMjAw CisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1w ZWcvdjkvbGliYXZ1dGlsL2F2c3RyaW5nLmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzU4MDc3OTkg KzAyMDAKK0BAIC0wLDAgKzEsNDI4IEBACisrLyoKKysgKiBDb3B5cmlnaHQgKGMpIDIwMDcgTWFu cyBSdWxsZ2FyZAorKyAqCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisr ICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisr ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBCisrICovCisrCisrI2lmbmRlZiBBVlVUSUxfQVZTVFJJTkdfSAorKyNkZWZpbmUgQVZVVElM X0FWU1RSSU5HX0gKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGludC5o PgorKyNpbmNsdWRlICJhdHRyaWJ1dGVzLmgiCisrCisrLyoqCisrICogQGFkZHRvZ3JvdXAgbGF2 dV9zdHJpbmcKKysgKiBAeworKyAqLworKworKy8qKgorKyAqIFJldHVybiBub24temVybyBpZiBw ZnggaXMgYSBwcmVmaXggb2Ygc3RyLiBJZiBpdCBpcywgKnB0ciBpcyBzZXQgdG8KKysgKiB0aGUg YWRkcmVzcyBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHN0ciBhZnRlciB0aGUgcHJlZml4Lgor KyAqCisrICogQHBhcmFtIHN0ciBpbnB1dCBzdHJpbmcKKysgKiBAcGFyYW0gcGZ4IHByZWZpeCB0 byB0ZXN0CisrICogQHBhcmFtIHB0ciB1cGRhdGVkIGlmIHRoZSBwcmVmaXggaXMgbWF0Y2hlZCBp bnNpZGUgc3RyCisrICogQHJldHVybiBub24temVybyBpZiB0aGUgcHJlZml4IG1hdGNoZXMsIHpl cm8gb3RoZXJ3aXNlCisrICovCisraW50IGF2X3N0cnN0YXJ0KGNvbnN0IGNoYXIgKnN0ciwgY29u c3QgY2hhciAqcGZ4LCBjb25zdCBjaGFyICoqcHRyKTsKKysKKysvKioKKysgKiBSZXR1cm4gbm9u LXplcm8gaWYgcGZ4IGlzIGEgcHJlZml4IG9mIHN0ciBpbmRlcGVuZGVudCBvZiBjYXNlLiBJZgor KyAqIGl0IGlzLCAqcHRyIGlzIHNldCB0byB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgY2hhcmFj dGVyIGluIHN0cgorKyAqIGFmdGVyIHRoZSBwcmVmaXguCisrICoKKysgKiBAcGFyYW0gc3RyIGlu cHV0IHN0cmluZworKyAqIEBwYXJhbSBwZnggcHJlZml4IHRvIHRlc3QKKysgKiBAcGFyYW0gcHRy IHVwZGF0ZWQgaWYgdGhlIHByZWZpeCBpcyBtYXRjaGVkIGluc2lkZSBzdHIKKysgKiBAcmV0dXJu IG5vbi16ZXJvIGlmIHRoZSBwcmVmaXggbWF0Y2hlcywgemVybyBvdGhlcndpc2UKKysgKi8KKytp bnQgYXZfc3RyaXN0YXJ0KGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGZ4LCBjb25zdCBj aGFyICoqcHRyKTsKKysKKysvKioKKysgKiBMb2NhdGUgdGhlIGZpcnN0IGNhc2UtaW5kZXBlbmRl bnQgb2NjdXJyZW5jZSBpbiB0aGUgc3RyaW5nIGhheXN0YWNrCisrICogb2YgdGhlIHN0cmluZyBu ZWVkbGUuICBBIHplcm8tbGVuZ3RoIHN0cmluZyBuZWVkbGUgaXMgY29uc2lkZXJlZCB0bworKyAq IG1hdGNoIGF0IHRoZSBzdGFydCBvZiBoYXlzdGFjay4KKysgKgorKyAqIFRoaXMgZnVuY3Rpb24g aXMgYSBjYXNlLWluc2Vuc2l0aXZlIHZlcnNpb24gb2YgdGhlIHN0YW5kYXJkIHN0cnN0cigpLgor KyAqCisrICogQHBhcmFtIGhheXN0YWNrIHN0cmluZyB0byBzZWFyY2ggaW4KKysgKiBAcGFyYW0g bmVlZGxlICAgc3RyaW5nIHRvIHNlYXJjaCBmb3IKKysgKiBAcmV0dXJuICAgICAgICAgcG9pbnRl ciB0byB0aGUgbG9jYXRlZCBtYXRjaCB3aXRoaW4gaGF5c3RhY2sKKysgKiAgICAgICAgICAgICAg ICAgb3IgYSBudWxsIHBvaW50ZXIgaWYgbm8gbWF0Y2gKKysgKi8KKytjaGFyICphdl9zdHJpc3Ry KGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpOworKworKy8qKgorKyAq IExvY2F0ZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc3RyaW5nIG5lZWRsZSBpbiB0aGUg c3RyaW5nIGhheXN0YWNrCisrICogd2hlcmUgbm90IG1vcmUgdGhhbiBoYXlfbGVuZ3RoIGNoYXJh Y3RlcnMgYXJlIHNlYXJjaGVkLiBBIHplcm8tbGVuZ3RoCisrICogc3RyaW5nIG5lZWRsZSBpcyBj b25zaWRlcmVkIHRvIG1hdGNoIGF0IHRoZSBzdGFydCBvZiBoYXlzdGFjay4KKysgKgorKyAqIFRo aXMgZnVuY3Rpb24gaXMgYSBsZW5ndGgtbGltaXRlZCB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZCBz dHJzdHIoKS4KKysgKgorKyAqIEBwYXJhbSBoYXlzdGFjayAgIHN0cmluZyB0byBzZWFyY2ggaW4K KysgKiBAcGFyYW0gbmVlZGxlICAgICBzdHJpbmcgdG8gc2VhcmNoIGZvcgorKyAqIEBwYXJhbSBo YXlfbGVuZ3RoIGxlbmd0aCBvZiBzdHJpbmcgdG8gc2VhcmNoIGluCisrICogQHJldHVybiAgICAg ICAgICAgcG9pbnRlciB0byB0aGUgbG9jYXRlZCBtYXRjaCB3aXRoaW4gaGF5c3RhY2sKKysgKiAg ICAgICAgICAgICAgICAgICBvciBhIG51bGwgcG9pbnRlciBpZiBubyBtYXRjaAorKyAqLworK2No YXIgKmF2X3N0cm5zdHIoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSwg c2l6ZV90IGhheV9sZW5ndGgpOworKworKy8qKgorKyAqIENvcHkgdGhlIHN0cmluZyBzcmMgdG8g ZHN0LCBidXQgbm8gbW9yZSB0aGFuIHNpemUgLSAxIGJ5dGVzLCBhbmQKKysgKiBudWxsLXRlcm1p bmF0ZSBkc3QuCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBzYW1lIGFzIEJTRCBzdHJs Y3B5KCkuCisrICoKKysgKiBAcGFyYW0gZHN0IGRlc3RpbmF0aW9uIGJ1ZmZlcgorKyAqIEBwYXJh bSBzcmMgc291cmNlIHN0cmluZworKyAqIEBwYXJhbSBzaXplIHNpemUgb2YgZGVzdGluYXRpb24g YnVmZmVyCisrICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHNyYworKyAqCisrICogQHdhcm5pbmcg c2luY2UgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbGVuZ3RoIG9mIHNyYywgc3JjIGFic29sdXRl bHkKKysgKiBfbXVzdF8gYmUgYSBwcm9wZXJseSAwLXRlcm1pbmF0ZWQgc3RyaW5nLCBvdGhlcndp c2UgdGhpcyB3aWxsIHJlYWQgYmV5b25kCisrICogdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFuZCBw b3NzaWJseSBjcmFzaC4KKysgKi8KKytzaXplX3QgYXZfc3RybGNweShjaGFyICpkc3QsIGNvbnN0 IGNoYXIgKnNyYywgc2l6ZV90IHNpemUpOworKworKy8qKgorKyAqIEFwcGVuZCB0aGUgc3RyaW5n IHNyYyB0byB0aGUgc3RyaW5nIGRzdCwgYnV0IHRvIGEgdG90YWwgbGVuZ3RoIG9mCisrICogbm8g bW9yZSB0aGFuIHNpemUgLSAxIGJ5dGVzLCBhbmQgbnVsbC10ZXJtaW5hdGUgZHN0LgorKyAqCisr ICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIEJTRCBzdHJsY2F0KCksIGJ1dCBkaWZmZXJz IHdoZW4KKysgKiBzaXplIDw9IHN0cmxlbihkc3QpLgorKyAqCisrICogQHBhcmFtIGRzdCBkZXN0 aW5hdGlvbiBidWZmZXIKKysgKiBAcGFyYW0gc3JjIHNvdXJjZSBzdHJpbmcKKysgKiBAcGFyYW0g c2l6ZSBzaXplIG9mIGRlc3RpbmF0aW9uIGJ1ZmZlcgorKyAqIEByZXR1cm4gdGhlIHRvdGFsIGxl bmd0aCBvZiBzcmMgYW5kIGRzdAorKyAqCisrICogQHdhcm5pbmcgc2luY2UgdGhlIHJldHVybiB2 YWx1ZSB1c2UgdGhlIGxlbmd0aCBvZiBzcmMgYW5kIGRzdCwgdGhlc2UKKysgKiBhYnNvbHV0ZWx5 IF9tdXN0XyBiZSBhIHByb3Blcmx5IDAtdGVybWluYXRlZCBzdHJpbmdzLCBvdGhlcndpc2UgdGhp cworKyAqIHdpbGwgcmVhZCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFuZCBwb3NzaWJs eSBjcmFzaC4KKysgKi8KKytzaXplX3QgYXZfc3RybGNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIg KnNyYywgc2l6ZV90IHNpemUpOworKworKy8qKgorKyAqIEFwcGVuZCBvdXRwdXQgdG8gYSBzdHJp bmcsIGFjY29yZGluZyB0byBhIGZvcm1hdC4gTmV2ZXIgd3JpdGUgb3V0IG9mCisrICogdGhlIGRl c3RpbmF0aW9uIGJ1ZmZlciwgYW5kIGFsd2F5cyBwdXQgYSB0ZXJtaW5hdGluZyAwIHdpdGhpbgor KyAqIHRoZSBidWZmZXIuCisrICogQHBhcmFtIGRzdCBkZXN0aW5hdGlvbiBidWZmZXIgKHN0cmlu ZyB0byB3aGljaCB0aGUgb3V0cHV0IGlzCisrICogIGFwcGVuZGVkKQorKyAqIEBwYXJhbSBzaXpl IHRvdGFsIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorKyAqIEBwYXJhbSBmbXQgcHJp bnRmLWNvbXBhdGlibGUgZm9ybWF0IHN0cmluZywgc3BlY2lmeWluZyBob3cgdGhlCisrICogIGZv bGxvd2luZyBwYXJhbWV0ZXJzIGFyZSB1c2VkCisrICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRo ZSBzdHJpbmcgdGhhdCB3b3VsZCBoYXZlIGJlZW4gZ2VuZXJhdGVkCisrICogIGlmIGVub3VnaCBz cGFjZSBoYWQgYmVlbiBhdmFpbGFibGUKKysgKi8KKytzaXplX3QgYXZfc3RybGNhdGYoY2hhciAq ZHN0LCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCAuLi4pIGF2X3ByaW50Zl9mb3JtYXQo MywgNCk7CisrCisrLyoqCisrICogR2V0IHRoZSBjb3VudCBvZiBjb250aW51b3VzIG5vbiB6ZXJv IGNoYXJzIHN0YXJ0aW5nIGZyb20gdGhlIGJlZ2lubmluZy4KKysgKgorKyAqIEBwYXJhbSBzICAg dGhlIHN0cmluZyB3aG9zZSBsZW5ndGggdG8gY291bnQKKysgKiBAcGFyYW0gbGVuIG1heGltdW0g bnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gY2hlY2sgaW4gdGhlIHN0cmluZywgdGhhdAorKyAqICAg ICAgICAgICAgaXMgdGhlIG1heGltdW0gdmFsdWUgd2hpY2ggaXMgcmV0dXJuZWQgYnkgdGhlIGZ1 bmN0aW9uCisrICovCisrc3RhdGljIGlubGluZSBzaXplX3QgYXZfc3Rybmxlbihjb25zdCBjaGFy ICpzLCBzaXplX3QgbGVuKQorK3sKKysgICAgc2l6ZV90IGk7CisrICAgIGZvciAoaSA9IDA7IGkg PCBsZW4gJiYgc1tpXTsgaSsrKQorKyAgICAgICAgOworKyAgICByZXR1cm4gaTsKKyt9CisrCisr LyoqCisrICogUHJpbnQgYXJndW1lbnRzIGZvbGxvd2luZyBzcGVjaWZpZWQgZm9ybWF0IGludG8g YSBsYXJnZSBlbm91Z2ggYXV0bworKyAqIGFsbG9jYXRlZCBidWZmZXIuIEl0IGlzIHNpbWlsYXIg dG8gR05VIGFzcHJpbnRmKCkuCisrICogQHBhcmFtIGZtdCBwcmludGYtY29tcGF0aWJsZSBmb3Jt YXQgc3RyaW5nLCBzcGVjaWZ5aW5nIGhvdyB0aGUKKysgKiAgICAgICAgICAgIGZvbGxvd2luZyBw YXJhbWV0ZXJzIGFyZSB1c2VkLgorKyAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBzdHJpbmcKKysg KiBAbm90ZSBZb3UgaGF2ZSB0byBmcmVlIHRoZSBzdHJpbmcgeW91cnNlbGYgd2l0aCBhdl9mcmVl KCkuCisrICovCisrY2hhciAqYXZfYXNwcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pIGF2X3By aW50Zl9mb3JtYXQoMSwgMik7CisrCisrLyoqCisrICogVW5lc2NhcGUgdGhlIGdpdmVuIHN0cmlu ZyB1bnRpbCBhIG5vbiBlc2NhcGVkIHRlcm1pbmF0aW5nIGNoYXIsCisrICogYW5kIHJldHVybiB0 aGUgdG9rZW4gY29ycmVzcG9uZGluZyB0byB0aGUgdW5lc2NhcGVkIHN0cmluZy4KKysgKgorKyAq IFRoZSBub3JtYWwgXCBhbmQgJyBlc2NhcGluZyBpcyBzdXBwb3J0ZWQuIExlYWRpbmcgYW5kIHRy YWlsaW5nCisrICogd2hpdGVzcGFjZXMgYXJlIHJlbW92ZWQsIHVubGVzcyB0aGV5IGFyZSBlc2Nh cGVkIHdpdGggJ1wnIG9yIGFyZQorKyAqIGVuY2xvc2VkIGJldHdlZW4gJycuCisrICoKKysgKiBA cGFyYW0gYnVmIHRoZSBidWZmZXIgdG8gcGFyc2UsIGJ1ZiB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9p bnQgdG8gdGhlCisrICogdGVybWluYXRpbmcgY2hhcgorKyAqIEBwYXJhbSB0ZXJtIGEgMC10ZXJt aW5hdGVkIGxpc3Qgb2YgdGVybWluYXRpbmcgY2hhcnMKKysgKiBAcmV0dXJuIHRoZSBtYWxsb2Nl ZCB1bmVzY2FwZWQgc3RyaW5nLCB3aGljaCBtdXN0IGJlIGF2X2ZyZWVkIGJ5CisrICogdGhlIHVz ZXIsIE5VTEwgaW4gY2FzZSBvZiBhbGxvY2F0aW9uIGZhaWx1cmUKKysgKi8KKytjaGFyICphdl9n ZXRfdG9rZW4oY29uc3QgY2hhciAqKmJ1ZiwgY29uc3QgY2hhciAqdGVybSk7CisrCisrLyoqCisr ICogU3BsaXQgdGhlIHN0cmluZyBpbnRvIHNldmVyYWwgdG9rZW5zIHdoaWNoIGNhbiBiZSBhY2Nl c3NlZCBieQorKyAqIHN1Y2Nlc3NpdmUgY2FsbHMgdG8gYXZfc3RydG9rKCkuCisrICoKKysgKiBB IHRva2VuIGlzIGRlZmluZWQgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIG5vdCBiZWxvbmdp bmcgdG8gdGhlCisrICogc2V0IHNwZWNpZmllZCBpbiBkZWxpbS4KKysgKgorKyAqIE9uIHRoZSBm aXJzdCBjYWxsIHRvIGF2X3N0cnRvaygpLCBzIHNob3VsZCBwb2ludCB0byB0aGUgc3RyaW5nIHRv CisrICogcGFyc2UsIGFuZCB0aGUgdmFsdWUgb2Ygc2F2ZXB0ciBpcyBpZ25vcmVkLiBJbiBzdWJz ZXF1ZW50IGNhbGxzLCBzCisrICogc2hvdWxkIGJlIE5VTEwsIGFuZCBzYXZlcHRyIHNob3VsZCBi ZSB1bmNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzCisrICogY2FsbC4KKysgKgorKyAqIFRoaXMg ZnVuY3Rpb24gaXMgc2ltaWxhciB0byBzdHJ0b2tfcigpIGRlZmluZWQgaW4gUE9TSVguMS4KKysg KgorKyAqIEBwYXJhbSBzIHRoZSBzdHJpbmcgdG8gcGFyc2UsIG1heSBiZSBOVUxMCisrICogQHBh cmFtIGRlbGltIDAtdGVybWluYXRlZCBsaXN0IG9mIHRva2VuIGRlbGltaXRlcnMsIG11c3QgYmUg bm9uLU5VTEwKKysgKiBAcGFyYW0gc2F2ZXB0ciB1c2VyLXByb3ZpZGVkIHBvaW50ZXIgd2hpY2gg cG9pbnRzIHRvIHN0b3JlZAorKyAqIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgYXZfc3RydG9r KCkgdG8gY29udGludWUgc2Nhbm5pbmcgdGhlIHNhbWUKKysgKiBzdHJpbmcuIHNhdmVwdHIgaXMg dXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlCisrICogZmly c3QgZGVsaW1pdGVyIGZvdW5kLCBvciB0byBOVUxMIGlmIHRoZSBzdHJpbmcgd2FzIHRlcm1pbmF0 ZWQKKysgKiBAcmV0dXJuIHRoZSBmb3VuZCB0b2tlbiwgb3IgTlVMTCB3aGVuIG5vIHRva2VuIGlz IGZvdW5kCisrICovCisrY2hhciAqYXZfc3RydG9rKGNoYXIgKnMsIGNvbnN0IGNoYXIgKmRlbGlt LCBjaGFyICoqc2F2ZXB0cik7CisrCisrLyoqCisrICogTG9jYWxlLWluZGVwZW5kZW50IGNvbnZl cnNpb24gb2YgQVNDSUkgaXNkaWdpdC4KKysgKi8KKytzdGF0aWMgaW5saW5lIGF2X2NvbnN0IGlu dCBhdl9pc2RpZ2l0KGludCBjKQorK3sKKysgICAgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzkn OworK30KKysKKysvKioKKysgKiBMb2NhbGUtaW5kZXBlbmRlbnQgY29udmVyc2lvbiBvZiBBU0NJ SSBpc2dyYXBoLgorKyAqLworK3N0YXRpYyBpbmxpbmUgYXZfY29uc3QgaW50IGF2X2lzZ3JhcGgo aW50IGMpCisreworKyAgICByZXR1cm4gYyA+IDMyICYmIGMgPCAxMjc7CisrfQorKworKy8qKgor KyAqIExvY2FsZS1pbmRlcGVuZGVudCBjb252ZXJzaW9uIG9mIEFTQ0lJIGlzc3BhY2UuCisrICov Cisrc3RhdGljIGlubGluZSBhdl9jb25zdCBpbnQgYXZfaXNzcGFjZShpbnQgYykKKyt7CisrICAg IHJldHVybiBjID09ICcgJyB8fCBjID09ICdcZicgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8 fCBjID09ICdcdCcgfHwKKysgICAgICAgICAgIGMgPT0gJ1x2JzsKKyt9CisrCisrLyoqCisrICog TG9jYWxlLWluZGVwZW5kZW50IGNvbnZlcnNpb24gb2YgQVNDSUkgY2hhcmFjdGVycyB0byB1cHBl cmNhc2UuCisrICovCisrc3RhdGljIGlubGluZSBhdl9jb25zdCBpbnQgYXZfdG91cHBlcihpbnQg YykKKyt7CisrICAgIGlmIChjID49ICdhJyAmJiBjIDw9ICd6JykKKysgICAgICAgIGMgXj0gMHgy MDsKKysgICAgcmV0dXJuIGM7CisrfQorKworKy8qKgorKyAqIExvY2FsZS1pbmRlcGVuZGVudCBj b252ZXJzaW9uIG9mIEFTQ0lJIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLgorKyAqLworK3N0YXRp YyBpbmxpbmUgYXZfY29uc3QgaW50IGF2X3RvbG93ZXIoaW50IGMpCisreworKyAgICBpZiAoYyA+ PSAnQScgJiYgYyA8PSAnWicpCisrICAgICAgICBjIF49IDB4MjA7CisrICAgIHJldHVybiBjOwor K30KKysKKysvKioKKysgKiBMb2NhbGUtaW5kZXBlbmRlbnQgY29udmVyc2lvbiBvZiBBU0NJSSBp c3hkaWdpdC4KKysgKi8KKytzdGF0aWMgaW5saW5lIGF2X2NvbnN0IGludCBhdl9pc3hkaWdpdChp bnQgYykKKyt7CisrICAgIGMgPSBhdl90b2xvd2VyKGMpOworKyAgICByZXR1cm4gYXZfaXNkaWdp dChjKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAnZicpOworK30KKysKKysvKioKKysgKiBMb2NhbGUt aW5kZXBlbmRlbnQgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJlLgorKyAqIEBub3RlIFRoaXMgbWVh bnMgb25seSBBU0NJSS1yYW5nZSBjaGFyYWN0ZXJzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCisrICov CisraW50IGF2X3N0cmNhc2VjbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYik7CisrCisr LyoqCisrICogTG9jYWxlLWluZGVwZW5kZW50IGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyZS4KKysg KiBAbm90ZSBUaGlzIG1lYW5zIG9ubHkgQVNDSUktcmFuZ2UgY2hhcmFjdGVycyBhcmUgY2FzZS1p bnNlbnNpdGl2ZQorKyAqLworK2ludCBhdl9zdHJuY2FzZWNtcChjb25zdCBjaGFyICphLCBjb25z dCBjaGFyICpiLCBzaXplX3Qgbik7CisrCisrLyoqCisrICogTG9jYWxlLWluZGVwZW5kZW50IHN0 cmluZ3MgcmVwbGFjZS4KKysgKiBAbm90ZSBUaGlzIG1lYW5zIG9ubHkgQVNDSUktcmFuZ2UgY2hh cmFjdGVycyBhcmUgcmVwbGFjZWQuCisrICovCisrY2hhciAqYXZfc3RyaXJlcGxhY2UoY29uc3Qg Y2hhciAqc3RyLCBjb25zdCBjaGFyICpmcm9tLCBjb25zdCBjaGFyICp0byk7CisrCisrLyoqCisr ICogVGhyZWFkIHNhZmUgYmFzZW5hbWUuCisrICogQHBhcmFtIHBhdGggdGhlIHN0cmluZyB0byBw YXJzZSwgb24gRE9TIGJvdGggXCBhbmQgLyBhcmUgY29uc2lkZXJlZCBzZXBhcmF0b3JzLgorKyAq IEByZXR1cm4gcG9pbnRlciB0byB0aGUgYmFzZW5hbWUgc3Vic3RyaW5nLgorKyAqIElmIHBhdGgg ZG9lcyBub3QgY29udGFpbiBhIHNsYXNoLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGNvcHkgb2Yg cGF0aC4KKysgKiBJZiBwYXRoIGlzIGEgTlVMTCBwb2ludGVyIG9yIHBvaW50cyB0byBhbiBlbXB0 eSBzdHJpbmcsIGEgcG9pbnRlcgorKyAqIHRvIGEgc3RyaW5nICIuIiBpcyByZXR1cm5lZC4KKysg Ki8KKytjb25zdCBjaGFyICphdl9iYXNlbmFtZShjb25zdCBjaGFyICpwYXRoKTsKKysKKysvKioK KysgKiBUaHJlYWQgc2FmZSBkaXJuYW1lLgorKyAqIEBwYXJhbSBwYXRoIHRoZSBzdHJpbmcgdG8g cGFyc2UsIG9uIERPUyBib3RoIFwgYW5kIC8gYXJlIGNvbnNpZGVyZWQgc2VwYXJhdG9ycy4KKysg KiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIHN0cmluZyB0aGF0J3MgdGhlIHBhcmVudCBkaXJlY3Rv cnkgb2YgcGF0aC4KKysgKiBJZiBwYXRoIGlzIGEgTlVMTCBwb2ludGVyIG9yIHBvaW50cyB0byBh biBlbXB0eSBzdHJpbmcsIGEgcG9pbnRlcgorKyAqIHRvIGEgc3RyaW5nICIuIiBpcyByZXR1cm5l ZC4KKysgKiBAbm90ZSB0aGUgZnVuY3Rpb24gbWF5IG1vZGlmeSB0aGUgY29udGVudHMgb2YgdGhl IHBhdGgsIHNvIGNvcGllcyBzaG91bGQgYmUgcGFzc2VkLgorKyAqLworK2NvbnN0IGNoYXIgKmF2 X2Rpcm5hbWUoY2hhciAqcGF0aCk7CisrCisrLyoqCisrICogTWF0Y2ggaW5zdGFuY2VzIG9mIGEg bmFtZSBpbiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG5hbWVzLgorKyAqIExpc3QgZW50cmll cyBhcmUgY2hlY2tlZCBmcm9tIHRoZSBzdGFydCB0byB0aGUgZW5kIG9mIHRoZSBuYW1lcyBsaXN0 LAorKyAqIHRoZSBmaXJzdCBtYXRjaCBlbmRzIGZ1cnRoZXIgcHJvY2Vzc2luZy4gSWYgYW4gZW50 cnkgcHJlZml4ZWQgd2l0aCAnLScKKysgKiBtYXRjaGVzLCB0aGVuIDAgaXMgcmV0dXJuZWQuIFRo ZSAiQUxMIiBsaXN0IGVudHJ5IGlzIGNvbnNpZGVyZWQgdG8KKysgKiBtYXRjaCBhbGwgbmFtZXMu CisrICoKKysgKiBAcGFyYW0gbmFtZSAgTmFtZSB0byBsb29rIGZvci4KKysgKiBAcGFyYW0gbmFt ZXMgTGlzdCBvZiBuYW1lcy4KKysgKiBAcmV0dXJuIDEgb24gbWF0Y2gsIDAgb3RoZXJ3aXNlLgor KyAqLworK2ludCBhdl9tYXRjaF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKm5h bWVzKTsKKysKKysvKioKKysgKiBBcHBlbmQgcGF0aCBjb21wb25lbnQgdG8gdGhlIGV4aXN0aW5n IHBhdGguCisrICogUGF0aCBzZXBhcmF0b3IgJy8nIGlzIHBsYWNlZCBiZXR3ZWVuIHdoZW4gbmVl ZGVkLgorKyAqIFJlc3VsdGluZyBzdHJpbmcgaGF2ZSB0byBiZSBmcmVlZCB3aXRoIGF2X2ZyZWUo KS4KKysgKiBAcGFyYW0gcGF0aCAgICAgIGJhc2UgcGF0aAorKyAqIEBwYXJhbSBjb21wb25lbnQg Y29tcG9uZW50IHRvIGJlIGFwcGVuZGVkCisrICogQHJldHVybiBuZXcgcGF0aCBvciBOVUxMIG9u IGVycm9yLgorKyAqLworK2NoYXIgKmF2X2FwcGVuZF9wYXRoX2NvbXBvbmVudChjb25zdCBjaGFy ICpwYXRoLCBjb25zdCBjaGFyICpjb21wb25lbnQpOworKworK2VudW0gQVZFc2NhcGVNb2RlIHsK KysgICAgQVZfRVNDQVBFX01PREVfQVVUTywgICAgICAvLy88IFVzZSBhdXRvLXNlbGVjdGVkIGVz Y2FwaW5nIG1vZGUuCisrICAgIEFWX0VTQ0FQRV9NT0RFX0JBQ0tTTEFTSCwgLy8vPCBVc2UgYmFj a3NsYXNoIGVzY2FwaW5nLgorKyAgICBBVl9FU0NBUEVfTU9ERV9RVU9URSwgICAgIC8vLzwgVXNl IHNpbmdsZS1xdW90ZSBlc2NhcGluZy4KKysgICAgQVZfRVNDQVBFX01PREVfWE1MLCAgICAgICAv Ly88IFVzZSBYTUwgbm9uLW1hcmt1cCBjaGFyYWN0ZXIgZGF0YSBlc2NhcGluZy4KKyt9OworKwor Ky8qKgorKyAqIENvbnNpZGVyIHNwYWNlcyBzcGVjaWFsIGFuZCBlc2NhcGUgdGhlbSBldmVuIGlu IHRoZSBtaWRkbGUgb2YgdGhlCisrICogc3RyaW5nLgorKyAqCisrICogVGhpcyBpcyBlcXVpdmFs ZW50IHRvIGFkZGluZyB0aGUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRvIHRoZSBzcGVjaWFsCisr ICogY2hhcmFjdGVycyBsaXN0cywgZXhjZXB0IGl0IGlzIGd1YXJhbnRlZWQgdG8gdXNlIHRoZSBl eGFjdCBzYW1lIGxpc3QKKysgKiBvZiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXMgdGhlIHJlc3Qg b2YgbGliYXZ1dGlsLgorKyAqLworKyNkZWZpbmUgQVZfRVNDQVBFX0ZMQUdfV0hJVEVTUEFDRSAo MSA8PCAwKQorKworKy8qKgorKyAqIEVzY2FwZSBvbmx5IHNwZWNpZmllZCBzcGVjaWFsIGNoYXJh Y3RlcnMuCisrICogV2l0aG91dCB0aGlzIGZsYWcsIGVzY2FwZSBhbHNvIGFueSBjaGFyYWN0ZXJz IHRoYXQgbWF5IGJlIGNvbnNpZGVyZWQKKysgKiBzcGVjaWFsIGJ5IGF2X2dldF90b2tlbigpLCBz dWNoIGFzIHRoZSBzaW5nbGUgcXVvdGUuCisrICovCisrI2RlZmluZSBBVl9FU0NBUEVfRkxBR19T VFJJQ1QgKDEgPDwgMSkKKysKKysvKioKKysgKiBXaXRoaW4gQVZfRVNDQVBFX01PREVfWE1MLCBh ZGRpdGlvbmFsbHkgZXNjYXBlIHNpbmdsZSBxdW90ZXMgZm9yIHNpbmdsZQorKyAqIHF1b3RlZCBh dHRyaWJ1dGVzLgorKyAqLworKyNkZWZpbmUgQVZfRVNDQVBFX0ZMQUdfWE1MX1NJTkdMRV9RVU9U RVMgKDEgPDwgMikKKysKKysvKioKKysgKiBXaXRoaW4gQVZfRVNDQVBFX01PREVfWE1MLCBhZGRp dGlvbmFsbHkgZXNjYXBlIGRvdWJsZSBxdW90ZXMgZm9yIGRvdWJsZQorKyAqIHF1b3RlZCBhdHRy aWJ1dGVzLgorKyAqLworKyNkZWZpbmUgQVZfRVNDQVBFX0ZMQUdfWE1MX0RPVUJMRV9RVU9URVMg KDEgPDwgMykKKysKKysKKysvKioKKysgKiBFc2NhcGUgc3RyaW5nIGluIHNyYywgYW5kIHB1dCB0 aGUgZXNjYXBlZCBzdHJpbmcgaW4gYW4gYWxsb2NhdGVkCisrICogc3RyaW5nIGluICpkc3QsIHdo aWNoIG11c3QgYmUgZnJlZWQgd2l0aCBhdl9mcmVlKCkuCisrICoKKysgKiBAcGFyYW0gZHN0ICAg ICAgICAgICBwb2ludGVyIHdoZXJlIGFuIGFsbG9jYXRlZCBzdHJpbmcgaXMgcHV0CisrICogQHBh cmFtIHNyYyAgICAgICAgICAgc3RyaW5nIHRvIGVzY2FwZSwgbXVzdCBiZSBub24tTlVMTAorKyAq IEBwYXJhbSBzcGVjaWFsX2NoYXJzIHN0cmluZyBjb250YWluaW5nIHRoZSBzcGVjaWFsIGNoYXJh Y3RlcnMgd2hpY2gKKysgKiAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJlIGVzY2FwZWQs IGNhbiBiZSBOVUxMCisrICogQHBhcmFtIG1vZGUgICAgICAgICAgZXNjYXBlIG1vZGUgdG8gZW1w bG95LCBzZWUgQVZfRVNDQVBFX01PREVfKiBtYWNyb3MuCisrICogICAgICAgICAgICAgICAgICAg ICAgQW55IHVua25vd24gdmFsdWUgZm9yIG1vZGUgd2lsbCBiZSBjb25zaWRlcmVkIGVxdWl2YWxl bnQgdG8KKysgKiAgICAgICAgICAgICAgICAgICAgICBBVl9FU0NBUEVfTU9ERV9CQUNLU0xBU0gs IGJ1dCB0aGlzIGJlaGF2aW91ciBjYW4gY2hhbmdlIHdpdGhvdXQKKysgKiAgICAgICAgICAgICAg ICAgICAgICBub3RpY2UuCisrICogQHBhcmFtIGZsYWdzICAgICAgICAgZmxhZ3Mgd2hpY2ggY29u dHJvbCBob3cgdG8gZXNjYXBlLCBzZWUgQVZfRVNDQVBFX0ZMQUdfIG1hY3JvcworKyAqIEByZXR1 cm4gdGhlIGxlbmd0aCBvZiB0aGUgYWxsb2NhdGVkIHN0cmluZywgb3IgYSBuZWdhdGl2ZSBlcnJv ciBjb2RlIGluIGNhc2Ugb2YgZXJyb3IKKysgKiBAc2VlIGF2X2JwcmludF9lc2NhcGUoKQorKyAq LworK2F2X3dhcm5fdW51c2VkX3Jlc3VsdAorK2ludCBhdl9lc2NhcGUoY2hhciAqKmRzdCwgY29u c3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpzcGVjaWFsX2NoYXJzLAorKyAgICAgICAgICAgICAg ZW51bSBBVkVzY2FwZU1vZGUgbW9kZSwgaW50IGZsYWdzKTsKKysKKysjZGVmaW5lIEFWX1VURjhf RkxBR19BQ0NFUFRfSU5WQUxJRF9CSUdfQ09ERVMgICAgICAgICAgMSAvLy88IGFjY2VwdCBjb2Rl cG9pbnRzIG92ZXIgMHgxMEZGRkYKKysjZGVmaW5lIEFWX1VURjhfRkxBR19BQ0NFUFRfTk9OX0NI QVJBQ1RFUlMgICAgICAgICAgICAgMiAvLy88IGFjY2VwdCBub24tY2hhcmFjdGVycyAtIDB4RkZG RSBhbmQgMHhGRkZGCisrI2RlZmluZSBBVl9VVEY4X0ZMQUdfQUNDRVBUX1NVUlJPR0FURVMgICAg ICAgICAgICAgICAgIDQgLy8vPCBhY2NlcHQgVVRGLTE2IHN1cnJvZ2F0ZXMgY29kZXMKKysjZGVm aW5lIEFWX1VURjhfRkxBR19FWENMVURFX1hNTF9JTlZBTElEX0NPTlRST0xfQ09ERVMgOCAvLy88 IGV4Y2x1ZGUgY29udHJvbCBjb2RlcyBub3QgYWNjZXB0ZWQgYnkgWE1MCisrCisrI2RlZmluZSBB Vl9VVEY4X0ZMQUdfQUNDRVBUX0FMTCBcCisrICAgIEFWX1VURjhfRkxBR19BQ0NFUFRfSU5WQUxJ RF9CSUdfQ09ERVN8QVZfVVRGOF9GTEFHX0FDQ0VQVF9OT05fQ0hBUkFDVEVSU3xBVl9VVEY4X0ZM QUdfQUNDRVBUX1NVUlJPR0FURVMKKysKKysvKioKKysgKiBSZWFkIGFuZCBkZWNvZGUgYSBzaW5n bGUgVVRGLTggY29kZSBwb2ludCAoY2hhcmFjdGVyKSBmcm9tIHRoZQorKyAqIGJ1ZmZlciBpbiAq YnVmLCBhbmQgdXBkYXRlICpidWYgdG8gcG9pbnQgdG8gdGhlIG5leHQgYnl0ZSB0bworKyAqIGRl Y29kZS4KKysgKgorKyAqIEluIGNhc2Ugb2YgYW4gaW52YWxpZCBieXRlIHNlcXVlbmNlLCB0aGUg cG9pbnRlciB3aWxsIGJlIHVwZGF0ZWQgdG8KKysgKiB0aGUgbmV4dCBieXRlIGFmdGVyIHRoZSBp bnZhbGlkIHNlcXVlbmNlIGFuZCB0aGUgZnVuY3Rpb24gd2lsbAorKyAqIHJldHVybiBhbiBlcnJv ciBjb2RlLgorKyAqCisrICogRGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpZWQgZmxhZ3MsIHRoZSBm dW5jdGlvbiB3aWxsIGFsc28gZmFpbCBpbgorKyAqIGNhc2UgdGhlIGRlY29kZWQgY29kZSBwb2lu dCBkb2VzIG5vdCBiZWxvbmcgdG8gYSB2YWxpZCByYW5nZS4KKysgKgorKyAqIEBub3RlIEZvciBz cGVlZC1yZWxldmFudCBjb2RlIGEgY2FyZWZ1bGx5IGltcGxlbWVudGVkIHVzZSBvZgorKyAqIEdF VF9VVEY4KCkgbWF5IGJlIHByZWZlcnJlZC4KKysgKgorKyAqIEBwYXJhbSBjb2RlcCAgIHBvaW50 ZXIgdXNlZCB0byByZXR1cm4gdGhlIHBhcnNlZCBjb2RlIGluIGNhc2Ugb2Ygc3VjY2Vzcy4KKysg KiAgICAgICAgICAgICAgICBUaGUgdmFsdWUgaW4gKmNvZGVwIGlzIHNldCBldmVuIGluIGNhc2Ug dGhlIHJhbmdlIGNoZWNrIGZhaWxzLgorKyAqIEBwYXJhbSBidWZwICAgIHBvaW50ZXIgdG8gdGhl IGFkZHJlc3MgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHNlcXVlbmNlCisrICogICAgICAgICAgICAg ICAgdG8gZGVjb2RlLCB1cGRhdGVkIGJ5IHRoZSBmdW5jdGlvbiB0byBwb2ludCB0byB0aGUKKysg KiAgICAgICAgICAgICAgICBieXRlIG5leHQgYWZ0ZXIgdGhlIGRlY29kZWQgc2VxdWVuY2UKKysg KiBAcGFyYW0gYnVmX2VuZCBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgcG9pbnRz IHRvIHRoZSBuZXh0CisrICogICAgICAgICAgICAgICAgYnl0ZSBwYXN0IHRoZSBsYXN0IGluIHRo ZSBidWZmZXIuIFRoaXMgaXMgdXNlZCB0bworKyAqICAgICAgICAgICAgICAgIGF2b2lkIGJ1ZmZl ciBvdmVycmVhZHMgKGluIGNhc2Ugb2YgYW4gdW5maW5pc2hlZAorKyAqICAgICAgICAgICAgICAg IFVURi04IHNlcXVlbmNlIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyKS4KKysgKiBAcGFy YW0gZmxhZ3MgICBhIGNvbGxlY3Rpb24gb2YgQVZfVVRGOF9GTEFHXyogZmxhZ3MKKysgKiBAcmV0 dXJuID49IDAgaW4gY2FzZSBhIHNlcXVlbmNlIHdhcyBzdWNjZXNzZnVsbHkgcmVhZCwgYSBuZWdh dGl2ZQorKyAqIHZhbHVlIGluIGNhc2Ugb2YgaW52YWxpZCBzZXF1ZW5jZQorKyAqLworK2F2X3dh cm5fdW51c2VkX3Jlc3VsdAorK2ludCBhdl91dGY4X2RlY29kZShpbnQzMl90ICpjb2RlcCwgY29u c3QgdWludDhfdCAqKmJ1ZnAsIGNvbnN0IHVpbnQ4X3QgKmJ1Zl9lbmQsCisrICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CisrCisrLyoqCisrICogQ2hlY2sgaWYgYSBuYW1l IGlzIGluIGEgbGlzdC4KKysgKiBAcmV0dXJucyAwIGlmIG5vdCBmb3VuZCwgb3IgdGhlIDEgYmFz ZWQgaW5kZXggd2hlcmUgaXQgaGFzIGJlZW4gZm91bmQgaW4gdGhlCisrICogICAgICAgICAgICBs aXN0LgorKyAqLworK2ludCBhdl9tYXRjaF9saXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo YXIgKmxpc3QsIGNoYXIgc2VwYXJhdG9yKTsKKysKKysvKioKKysgKiBTZWUgbGliYyBzc2NhbmYg bWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uLgorKyAqIExvY2FsZS1pbmRlcGVuZGVudCBzc2Nh bmYgaW1wbGVtZW50YXRpb24uCisrICovCisraW50IGF2X3NzY2FuZihjb25zdCBjaGFyICpzdHJp bmcsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSBhdl9zY2FuZl9mb3JtYXQoMiwgMyk7CisrCisr LyoqCisrICogQH0KKysgKi8KKysKKysjZW5kaWYgLyogQVZVVElMX0FWU1RSSU5HX0ggKi8KK2Rp ZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZt cGVnL3Y5L2xpYmF2dXRpbC9hdnV0aWwuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJh bWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9hdnV0aWwuaAorLS0t IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5 L2xpYmF2dXRpbC9hdnV0aWwuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc2MDAzNzM0 ICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0 eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2F2dXRpbC5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjc1OTQy MjQ5ICswMjAwCitAQCAtMCwwICsxLDM0MCBAQAorKy8qCisrICogY29weXJpZ2h0IChjKSAyMDA2 IE1pY2hhZWwgTmllZGVybWF5ZXIgPG1pY2hhZWxuaUBnbXguYXQ+CisrICoKKysgKiBUaGlzIGZp bGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNp b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisr ICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVmIEFWVVRJ TF9BVlVUSUxfSAorKyNkZWZpbmUgQVZVVElMX0FWVVRJTF9ICisrCisrLyoqCisrICogQGZpbGUK KysgKiBAaW5ncm91cCBsYXZ1CisrICogQ29udmVuaWVuY2UgaGVhZGVyIHRoYXQgaW5jbHVkZXMg QHJlZiBsYXZ1ICJsaWJhdnV0aWwiJ3MgY29yZS4KKysgKi8KKysKKysvKioKKysgKiBAbWFpbnBh Z2UKKysgKgorKyAqIEBzZWN0aW9uIGZmbXBlZ19pbnRybyBJbnRyb2R1Y3Rpb24KKysgKgorKyAq IFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSB1c2FnZSBvZiB0aGUgZGlmZmVyZW50IGxpYnJh cmllcworKyAqIHByb3ZpZGVkIGJ5IEZGbXBlZy4KKysgKgorKyAqIEBsaSBAcmVmIGxpYmF2YyAi bGliYXZjb2RlYyIgZW5jb2RpbmcvZGVjb2RpbmcgbGlicmFyeQorKyAqIEBsaSBAcmVmIGxhdmZp ICJsaWJhdmZpbHRlciIgZ3JhcGgtYmFzZWQgZnJhbWUgZWRpdGluZyBsaWJyYXJ5CisrICogQGxp IEByZWYgbGliYXZmICJsaWJhdmZvcm1hdCIgSS9PIGFuZCBtdXhpbmcvZGVtdXhpbmcgbGlicmFy eQorKyAqIEBsaSBAcmVmIGxhdmQgImxpYmF2ZGV2aWNlIiBzcGVjaWFsIGRldmljZXMgbXV4aW5n L2RlbXV4aW5nIGxpYnJhcnkKKysgKiBAbGkgQHJlZiBsYXZ1ICJsaWJhdnV0aWwiIGNvbW1vbiB1 dGlsaXR5IGxpYnJhcnkKKysgKiBAbGkgQHJlZiBsc3dyICJsaWJzd3Jlc2FtcGxlIiBhdWRpbyBy ZXNhbXBsaW5nLCBmb3JtYXQgY29udmVyc2lvbiBhbmQgbWl4aW5nCisrICogQGxpIEByZWYgbGli c3dzICJsaWJzd3NjYWxlIiBjb2xvciBjb252ZXJzaW9uIGFuZCBzY2FsaW5nIGxpYnJhcnkKKysg KgorKyAqIEBzZWN0aW9uIGZmbXBlZ192ZXJzaW9uaW5nIFZlcnNpb25pbmcgYW5kIGNvbXBhdGli aWxpdHkKKysgKgorKyAqIEVhY2ggb2YgdGhlIEZGbXBlZyBsaWJyYXJpZXMgY29udGFpbnMgYSB2 ZXJzaW9uLmggaGVhZGVyLCB3aGljaCBkZWZpbmVzIGEKKysgKiBtYWpvciwgbWlub3IgYW5kIG1p Y3JvIHZlcnNpb24gbnVtYmVyIHdpdGggdGhlCisrICogPGVtPkxJQlJBUllOQU1FX1ZFUlNJT05f e01BSk9SLE1JTk9SLE1JQ1JPfTwvZW0+IG1hY3Jvcy4gVGhlIG1ham9yIHZlcnNpb24KKysgKiBu dW1iZXIgaXMgaW5jcmVtZW50ZWQgd2l0aCBiYWNrd2FyZCBpbmNvbXBhdGlibGUgY2hhbmdlcyAt IGUuZy4gcmVtb3ZpbmcKKysgKiBwYXJ0cyBvZiB0aGUgcHVibGljIEFQSSwgcmVvcmRlcmluZyBw dWJsaWMgc3RydWN0IG1lbWJlcnMsIGV0Yy4gVGhlIG1pbm9yCisrICogdmVyc2lvbiBudW1iZXIg aXMgaW5jcmVtZW50ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGlibGUgQVBJIGNoYW5nZXMgb3IgbWFq b3IKKysgKiBuZXcgZmVhdHVyZXMgLSBlLmcuIGFkZGluZyBhIG5ldyBwdWJsaWMgZnVuY3Rpb24g b3IgYSBuZXcgZGVjb2Rlci4gVGhlIG1pY3JvCisrICogdmVyc2lvbiBudW1iZXIgaXMgaW5jcmVt ZW50ZWQgZm9yIHNtYWxsZXIgY2hhbmdlcyB0aGF0IGEgY2FsbGluZyBwcm9ncmFtCisrICogbWln aHQgc3RpbGwgd2FudCB0byBjaGVjayBmb3IgLSBlLmcuIGNoYW5naW5nIGJlaGF2aW9yIGluIGEg cHJldmlvdXNseQorKyAqIHVuc3BlY2lmaWVkIHNpdHVhdGlvbi4KKysgKgorKyAqIEZGbXBlZyBn dWFyYW50ZWVzIGJhY2t3YXJkIEFQSSBhbmQgQUJJIGNvbXBhdGliaWxpdHkgZm9yIGVhY2ggbGli cmFyeSBhcyBsb25nCisrICogYXMgaXRzIG1ham9yIHZlcnNpb24gbnVtYmVyIGlzIHVuY2hhbmdl ZC4gVGhpcyBtZWFucyB0aGF0IG5vIHB1YmxpYyBzeW1ib2xzCisrICogd2lsbCBiZSByZW1vdmVk IG9yIHJlbmFtZWQuIFR5cGVzIGFuZCBuYW1lcyBvZiB0aGUgcHVibGljIHN0cnVjdCBtZW1iZXJz IGFuZAorKyAqIHZhbHVlcyBvZiBwdWJsaWMgbWFjcm9zIGFuZCBlbnVtcyB3aWxsIHJlbWFpbiB0 aGUgc2FtZSAodW5sZXNzIHRoZXkgd2VyZQorKyAqIGV4cGxpY2l0bHkgZGVjbGFyZWQgYXMgbm90 IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkpLiBEb2N1bWVudGVkIGJlaGF2aW9yIHdpbGwKKysgKiBu b3QgY2hhbmdlLgorKyAqCisrICogSW4gb3RoZXIgd29yZHMsIGFueSBjb3JyZWN0IHByb2dyYW0g dGhhdCB3b3JrcyB3aXRoIGEgZ2l2ZW4gRkZtcGVnIHNuYXBzaG90CisrICogc2hvdWxkIHdvcmsg anVzdCBhcyB3ZWxsIHdpdGhvdXQgYW55IGNoYW5nZXMgd2l0aCBhbnkgbGF0ZXIgc25hcHNob3Qg d2l0aCB0aGUKKysgKiBzYW1lIG1ham9yIHZlcnNpb25zLiBUaGlzIGFwcGxpZXMgdG8gYm90aCBy ZWJ1aWxkaW5nIHRoZSBwcm9ncmFtIGFnYWluc3QgbmV3CisrICogRkZtcGVnIHZlcnNpb25zIG9y IHRvIHJlcGxhY2luZyB0aGUgZHluYW1pYyBGRm1wZWcgbGlicmFyaWVzIHRoYXQgYSBwcm9ncmFt CisrICogbGlua3MgYWdhaW5zdC4KKysgKgorKyAqIEhvd2V2ZXIsIG5ldyBwdWJsaWMgc3ltYm9s cyBtYXkgYmUgYWRkZWQgYW5kIG5ldyBtZW1iZXJzIG1heSBiZSBhcHBlbmRlZCB0bworKyAqIHB1 YmxpYyBzdHJ1Y3RzIHdob3NlIHNpemUgaXMgbm90IHBhcnQgb2YgcHVibGljIEFCSSAobW9zdCBw dWJsaWMgc3RydWN0cyBpbgorKyAqIEZGbXBlZykuIE5ldyBtYWNyb3MgYW5kIGVudW0gdmFsdWVz IG1heSBiZSBhZGRlZC4gQmVoYXZpb3IgaW4gdW5kb2N1bWVudGVkCisrICogc2l0dWF0aW9ucyBt YXkgY2hhbmdlIHNsaWdodGx5IChhbmQgYmUgZG9jdW1lbnRlZCkuIEFsbCB0aG9zZSBhcmUgYWNj b21wYW5pZWQKKysgKiBieSBhbiBlbnRyeSBpbiBkb2MvQVBJY2hhbmdlcyBhbmQgaW5jcmVtZW50 aW5nIGVpdGhlciB0aGUgbWlub3Igb3IgbWljcm8KKysgKiB2ZXJzaW9uIG51bWJlci4KKysgKi8K KysKKysvKioKKysgKiBAZGVmZ3JvdXAgbGF2dSBsaWJhdnV0aWwKKysgKiBDb21tb24gY29kZSBz aGFyZWQgYWNyb3NzIGFsbCBGRm1wZWcgbGlicmFyaWVzLgorKyAqCisrICogQG5vdGUKKysgKiBs aWJhdnV0aWwgaXMgZGVzaWduZWQgdG8gYmUgbW9kdWxhci4gSW4gbW9zdCBjYXNlcywgaW4gb3Jk ZXIgdG8gdXNlIHRoZQorKyAqIGZ1bmN0aW9ucyBwcm92aWRlZCBieSBvbmUgY29tcG9uZW50IG9m IGxpYmF2dXRpbCB5b3UgbXVzdCBleHBsaWNpdGx5IGluY2x1ZGUKKysgKiB0aGUgc3BlY2lmaWMg aGVhZGVyIGNvbnRhaW5pbmcgdGhhdCBmZWF0dXJlLiBJZiB5b3UgYXJlIG9ubHkgdXNpbmcKKysg KiBtZWRpYS1yZWxhdGVkIGNvbXBvbmVudHMsIHlvdSBjb3VsZCBzaW1wbHkgaW5jbHVkZSBsaWJh dnV0aWwvYXZ1dGlsLmgsIHdoaWNoCisrICogYnJpbmdzIGluIG1vc3Qgb2YgdGhlICJjb3JlIiBj b21wb25lbnRzLgorKyAqCisrICogQHsKKysgKgorKyAqIEBkZWZncm91cCBsYXZ1X2NyeXB0byBD cnlwdG8gYW5kIEhhc2hpbmcKKysgKgorKyAqIEB7CisrICogQH0KKysgKgorKyAqIEBkZWZncm91 cCBsYXZ1X21hdGggTWF0aGVtYXRpY3MKKysgKiBAeworKyAqCisrICogQH0KKysgKgorKyAqIEBk ZWZncm91cCBsYXZ1X3N0cmluZyBTdHJpbmcgTWFuaXB1bGF0aW9uCisrICoKKysgKiBAeworKyAq CisrICogQH0KKysgKgorKyAqIEBkZWZncm91cCBsYXZ1X21lbSBNZW1vcnkgTWFuYWdlbWVudAor KyAqCisrICogQHsKKysgKgorKyAqIEB9CisrICoKKysgKiBAZGVmZ3JvdXAgbGF2dV9kYXRhIERh dGEgU3RydWN0dXJlcworKyAqIEB7CisrICoKKysgKiBAfQorKyAqCisrICogQGRlZmdyb3VwIGxh dnVfdmlkZW8gVmlkZW8gcmVsYXRlZAorKyAqCisrICogQHsKKysgKgorKyAqIEB9CisrICoKKysg KiBAZGVmZ3JvdXAgbGF2dV9hdWRpbyBBdWRpbyByZWxhdGVkCisrICoKKysgKiBAeworKyAqCisr ICogQH0KKysgKgorKyAqIEBkZWZncm91cCBsYXZ1X2Vycm9yIEVycm9yIENvZGVzCisrICoKKysg KiBAeworKyAqCisrICogQH0KKysgKgorKyAqIEBkZWZncm91cCBsYXZ1X2xvZyBMb2dnaW5nIEZh Y2lsaXR5CisrICoKKysgKiBAeworKyAqCisrICogQH0KKysgKgorKyAqIEBkZWZncm91cCBsYXZ1 X21pc2MgT3RoZXIKKysgKgorKyAqIEB7CisrICoKKysgKiBAZGVmZ3JvdXAgcHJlcHJvY19taXNj IFByZXByb2Nlc3NvciBTdHJpbmcgTWFjcm9zCisrICoKKysgKiBAeworKyAqCisrICogQH0KKysg KgorKyAqIEBkZWZncm91cCB2ZXJzaW9uX3V0aWxzIExpYnJhcnkgVmVyc2lvbiBNYWNyb3MKKysg KgorKyAqIEB7CisrICoKKysgKiBAfQorKyAqLworKworKworKy8qKgorKyAqIEBhZGR0b2dyb3Vw IGxhdnVfdmVyCisrICogQHsKKysgKi8KKysKKysvKioKKysgKiBSZXR1cm4gdGhlIExJQkFWVVRJ TF9WRVJTSU9OX0lOVCBjb25zdGFudC4KKysgKi8KKyt1bnNpZ25lZCBhdnV0aWxfdmVyc2lvbih2 b2lkKTsKKysKKysvKioKKysgKiBSZXR1cm4gYW4gaW5mb3JtYXRpdmUgdmVyc2lvbiBzdHJpbmcu IFRoaXMgdXN1YWxseSBpcyB0aGUgYWN0dWFsIHJlbGVhc2UKKysgKiB2ZXJzaW9uIG51bWJlciBv ciBhIGdpdCBjb21taXQgZGVzY3JpcHRpb24uIFRoaXMgc3RyaW5nIGhhcyBubyBmaXhlZCBmb3Jt YXQKKysgKiBhbmQgY2FuIGNoYW5nZSBhbnkgdGltZS4gSXQgc2hvdWxkIG5ldmVyIGJlIHBhcnNl ZCBieSBjb2RlLgorKyAqLworK2NvbnN0IGNoYXIgKmF2X3ZlcnNpb25faW5mbyh2b2lkKTsKKysK KysvKioKKysgKiBSZXR1cm4gdGhlIGxpYmF2dXRpbCBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24u CisrICovCisrY29uc3QgY2hhciAqYXZ1dGlsX2NvbmZpZ3VyYXRpb24odm9pZCk7CisrCisrLyoq CisrICogUmV0dXJuIHRoZSBsaWJhdnV0aWwgbGljZW5zZS4KKysgKi8KKytjb25zdCBjaGFyICph dnV0aWxfbGljZW5zZSh2b2lkKTsKKysKKysvKioKKysgKiBAfQorKyAqLworKworKy8qKgorKyAq IEBhZGR0b2dyb3VwIGxhdnVfbWVkaWEgTWVkaWEgVHlwZQorKyAqIEBicmllZiBNZWRpYSBUeXBl CisrICovCisrCisrZW51bSBBVk1lZGlhVHlwZSB7CisrICAgIEFWTUVESUFfVFlQRV9VTktOT1dO ID0gLTEsICAvLy88IFVzdWFsbHkgdHJlYXRlZCBhcyBBVk1FRElBX1RZUEVfREFUQQorKyAgICBB Vk1FRElBX1RZUEVfVklERU8sCisrICAgIEFWTUVESUFfVFlQRV9BVURJTywKKysgICAgQVZNRURJ QV9UWVBFX0RBVEEsICAgICAgICAgIC8vLzwgT3BhcXVlIGRhdGEgaW5mb3JtYXRpb24gdXN1YWxs eSBjb250aW51b3VzCisrICAgIEFWTUVESUFfVFlQRV9TVUJUSVRMRSwKKysgICAgQVZNRURJQV9U WVBFX0FUVEFDSE1FTlQsICAgIC8vLzwgT3BhcXVlIGRhdGEgaW5mb3JtYXRpb24gdXN1YWxseSBz cGFyc2UKKysgICAgQVZNRURJQV9UWVBFX05CCisrfTsKKysKKysvKioKKysgKiBSZXR1cm4gYSBz dHJpbmcgZGVzY3JpYmluZyB0aGUgbWVkaWFfdHlwZSBlbnVtLCBOVUxMIGlmIG1lZGlhX3R5cGUK KysgKiBpcyB1bmtub3duLgorKyAqLworK2NvbnN0IGNoYXIgKmF2X2dldF9tZWRpYV90eXBlX3N0 cmluZyhlbnVtIEFWTWVkaWFUeXBlIG1lZGlhX3R5cGUpOworKworKy8qKgorKyAqIEBkZWZncm91 cCBsYXZ1X2NvbnN0IENvbnN0YW50cworKyAqIEB7CisrICoKKysgKiBAZGVmZ3JvdXAgbGF2dV9l bmMgRW5jb2Rpbmcgc3BlY2lmaWMKKysgKgorKyAqIEBub3RlIHRob3NlIGRlZmluaXRpb24gc2hv dWxkIG1vdmUgdG8gYXZjb2RlYworKyAqIEB7CisrICovCisrCisrI2RlZmluZSBGRl9MQU1CREFf U0hJRlQgNworKyNkZWZpbmUgRkZfTEFNQkRBX1NDQUxFICgxPDxGRl9MQU1CREFfU0hJRlQpCisr I2RlZmluZSBGRl9RUDJMQU1CREEgMTE4IC8vLzwgZmFjdG9yIHRvIGNvbnZlcnQgZnJvbSBILjI2 MyBRUCB0byBsYW1iZGEKKysjZGVmaW5lIEZGX0xBTUJEQV9NQVggKDI1NioxMjgtMSkKKysKKysj ZGVmaW5lIEZGX1FVQUxJVFlfU0NBTEUgRkZfTEFNQkRBX1NDQUxFIC8vRklYTUUgbWF5YmUgcmVt b3ZlCisrCisrLyoqCisrICogQH0KKysgKiBAZGVmZ3JvdXAgbGF2dV90aW1lIFRpbWVzdGFtcCBz cGVjaWZpYworKyAqCisrICogRkZtcGVnIGludGVybmFsIHRpbWViYXNlIGFuZCB0aW1lc3RhbXAg ZGVmaW5pdGlvbnMKKysgKgorKyAqIEB7CisrICovCisrCisrLyoqCisrICogQGJyaWVmIFVuZGVm aW5lZCB0aW1lc3RhbXAgdmFsdWUKKysgKgorKyAqIFVzdWFsbHkgcmVwb3J0ZWQgYnkgZGVtdXhl ciB0aGF0IHdvcmsgb24gY29udGFpbmVycyB0aGF0IGRvIG5vdCBwcm92aWRlCisrICogZWl0aGVy IHB0cyBvciBkdHMuCisrICovCisrCisrI2RlZmluZSBBVl9OT1BUU19WQUxVRSAgICAgICAgICAo KGludDY0X3QpVUlOVDY0X0MoMHg4MDAwMDAwMDAwMDAwMDAwKSkKKysKKysvKioKKysgKiBJbnRl cm5hbCB0aW1lIGJhc2UgcmVwcmVzZW50ZWQgYXMgaW50ZWdlcgorKyAqLworKworKyNkZWZpbmUg QVZfVElNRV9CQVNFICAgICAgICAgICAgMTAwMDAwMAorKworKy8qKgorKyAqIEludGVybmFsIHRp bWUgYmFzZSByZXByZXNlbnRlZCBhcyBmcmFjdGlvbmFsIHZhbHVlCisrICovCisrCisrI2lmZGVm IF9fY3BsdXNwbHVzCisrLyogSVNPIEMrKyBmb3JiaWRzIGNvbXBvdW5kLWxpdGVyYWxzLiAqLwor KyNkZWZpbmUgQVZfVElNRV9CQVNFX1EgICAgICAgICAgYXZfbWFrZV9xKDEsIEFWX1RJTUVfQkFT RSkKKysjZWxzZQorKyNkZWZpbmUgQVZfVElNRV9CQVNFX1EgICAgICAgICAgKEFWUmF0aW9uYWwp ezEsIEFWX1RJTUVfQkFTRX0KKysjZW5kaWYKKysKKysvKioKKysgKiBAfQorKyAqIEB9CisrICog QGRlZmdyb3VwIGxhdnVfcGljdHVyZSBJbWFnZSByZWxhdGVkCisrICoKKysgKiBBVlBpY3R1cmUg dHlwZXMsIHBpeGVsIGZvcm1hdHMgYW5kIGJhc2ljIGltYWdlIHBsYW5lcyBtYW5pcHVsYXRpb24u CisrICoKKysgKiBAeworKyAqLworKworK2VudW0gQVZQaWN0dXJlVHlwZSB7CisrICAgIEFWX1BJ Q1RVUkVfVFlQRV9OT05FID0gMCwgLy8vPCBVbmRlZmluZWQKKysgICAgQVZfUElDVFVSRV9UWVBF X0ksICAgICAvLy88IEludHJhCisrICAgIEFWX1BJQ1RVUkVfVFlQRV9QLCAgICAgLy8vPCBQcmVk aWN0ZWQKKysgICAgQVZfUElDVFVSRV9UWVBFX0IsICAgICAvLy88IEJpLWRpciBwcmVkaWN0ZWQK KysgICAgQVZfUElDVFVSRV9UWVBFX1MsICAgICAvLy88IFMoR01DKS1WT1AgTVBFRy00CisrICAg IEFWX1BJQ1RVUkVfVFlQRV9TSSwgICAgLy8vPCBTd2l0Y2hpbmcgSW50cmEKKysgICAgQVZfUElD VFVSRV9UWVBFX1NQLCAgICAvLy88IFN3aXRjaGluZyBQcmVkaWN0ZWQKKysgICAgQVZfUElDVFVS RV9UWVBFX0JJLCAgICAvLy88IEJJIHR5cGUKKyt9OworKworKy8qKgorKyAqIFJldHVybiBhIHNp bmdsZSBsZXR0ZXIgdG8gZGVzY3JpYmUgdGhlIGdpdmVuIHBpY3R1cmUgdHlwZQorKyAqIHBpY3Rf dHlwZS4KKysgKgorKyAqIEBwYXJhbVtpbl0gcGljdF90eXBlIHRoZSBwaWN0dXJlIHR5cGUgQHJl dHVybiBhIHNpbmdsZSBjaGFyYWN0ZXIKKysgKiByZXByZXNlbnRpbmcgdGhlIHBpY3R1cmUgdHlw ZSwgJz8nIGlmIHBpY3RfdHlwZSBpcyB1bmtub3duCisrICovCisrY2hhciBhdl9nZXRfcGljdHVy ZV90eXBlX2NoYXIoZW51bSBBVlBpY3R1cmVUeXBlIHBpY3RfdHlwZSk7CisrCisrLyoqCisrICog QH0KKysgKi8KKysKKysjaW5jbHVkZSAiY29tbW9uLmgiCisrI2luY2x1ZGUgInJhdGlvbmFsLmgi CisrI2luY2x1ZGUgInZlcnNpb24uaCIKKysjaW5jbHVkZSAibWFjcm9zLmgiCisrI2luY2x1ZGUg Im1hdGhlbWF0aWNzLmgiCisrI2luY2x1ZGUgImxvZy5oIgorKyNpbmNsdWRlICJwaXhmbXQuaCIK KysKKysvKioKKysgKiBSZXR1cm4geCBkZWZhdWx0IHBvaW50ZXIgaW4gY2FzZSBwIGlzIE5VTEwu CisrICovCisrc3RhdGljIGlubGluZSB2b2lkICphdl94X2lmX251bGwoY29uc3Qgdm9pZCAqcCwg Y29uc3Qgdm9pZCAqeCkKKyt7CisrICAgIHJldHVybiAodm9pZCAqKShpbnRwdHJfdCkocCA/IHAg OiB4KTsKKyt9CisrCisrLyoqCisrICogUmV0dXJuIHRoZSBmcmFjdGlvbmFsIHJlcHJlc2VudGF0 aW9uIG9mIHRoZSBpbnRlcm5hbCB0aW1lIGJhc2UuCisrICovCisrQVZSYXRpb25hbCBhdl9nZXRf dGltZV9iYXNlX3Eodm9pZCk7CisrCisrI2RlZmluZSBBVl9GT1VSQ0NfTUFYX1NUUklOR19TSVpF IDMyCisrCisrI2RlZmluZSBhdl9mb3VyY2Myc3RyKGZvdXJjYykgYXZfZm91cmNjX21ha2Vfc3Ry aW5nKChjaGFyW0FWX0ZPVVJDQ19NQVhfU1RSSU5HX1NJWkVdKXswfSwgZm91cmNjKQorKworKy8q KgorKyAqIEZpbGwgdGhlIHByb3ZpZGVkIGJ1ZmZlciB3aXRoIGEgc3RyaW5nIGNvbnRhaW5pbmcg YSBGb3VyQ0MgKGZvdXItY2hhcmFjdGVyCisrICogY29kZSkgcmVwcmVzZW50YXRpb24uCisrICoK KysgKiBAcGFyYW0gYnVmICAgIGEgYnVmZmVyIHdpdGggc2l6ZSBpbiBieXRlcyBvZiBhdCBsZWFz dCBBVl9GT1VSQ0NfTUFYX1NUUklOR19TSVpFCisrICogQHBhcmFtIGZvdXJjYyB0aGUgZm91cmNj IHRvIHJlcHJlc2VudAorKyAqIEByZXR1cm4gdGhlIGJ1ZmZlciBpbiBpbnB1dAorKyAqLworK2No YXIgKmF2X2ZvdXJjY19tYWtlX3N0cmluZyhjaGFyICpidWYsIHVpbnQzMl90IGZvdXJjYyk7Cisr CisrLyoqCisrICogQH0KKysgKiBAfQorKyAqLworKworKyNlbmRpZiAvKiBBVlVUSUxfQVZVVElM X0ggKi8KK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJk cGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9idWZmZXIuaC5mZm1wZWc5IE11c2VTY29yZS00Ljcu NC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9idWZm ZXIuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkv ZmZtcGVnL3Y5L2xpYmF2dXRpbC9idWZmZXIuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcu Njc2MTM0ODQ0ICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEv dGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2J1ZmZlci5oCTIwMjYtMDktMDcgMTI6MjM6 NDcuNjc2MDY1OTc5ICswMjAwCitAQCAtMCwwICsxLDMyMiBAQAorKy8qCisrICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9u IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAq IExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs b29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrLyoqCisrICogQGZpbGUK KysgKiBAaW5ncm91cCBsYXZ1X2J1ZmZlcgorKyAqIHJlZmNvdW50ZWQgZGF0YSBidWZmZXIgQVBJ CisrICovCisrCisrI2lmbmRlZiBBVlVUSUxfQlVGRkVSX0gKKysjZGVmaW5lIEFWVVRJTF9CVUZG RVJfSAorKworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisr LyoqCisrICogQGRlZmdyb3VwIGxhdnVfYnVmZmVyIEFWQnVmZmVyCisrICogQGluZ3JvdXAgbGF2 dV9kYXRhCisrICoKKysgKiBAeworKyAqIEFWQnVmZmVyIGlzIGFuIEFQSSBmb3IgcmVmZXJlbmNl LWNvdW50ZWQgZGF0YSBidWZmZXJzLgorKyAqCisrICogVGhlcmUgYXJlIHR3byBjb3JlIG9iamVj dHMgaW4gdGhpcyBBUEkgLS0gQVZCdWZmZXIgYW5kIEFWQnVmZmVyUmVmLiBBVkJ1ZmZlcgorKyAq IHJlcHJlc2VudHMgdGhlIGRhdGEgYnVmZmVyIGl0c2VsZjsgaXQgaXMgb3BhcXVlIGFuZCBub3Qg bWVhbnQgdG8gYmUgYWNjZXNzZWQKKysgKiBieSB0aGUgY2FsbGVyIGRpcmVjdGx5LCBidXQgb25s eSB0aHJvdWdoIEFWQnVmZmVyUmVmLiBIb3dldmVyLCB0aGUgY2FsbGVyIG1heQorKyAqIGUuZy4g Y29tcGFyZSB0d28gQVZCdWZmZXIgcG9pbnRlcnMgdG8gY2hlY2sgd2hldGhlciB0d28gZGlmZmVy ZW50IHJlZmVyZW5jZXMKKysgKiBhcmUgZGVzY3JpYmluZyB0aGUgc2FtZSBkYXRhIGJ1ZmZlci4g QVZCdWZmZXJSZWYgcmVwcmVzZW50cyBhIHNpbmdsZQorKyAqIHJlZmVyZW5jZSB0byBhbiBBVkJ1 ZmZlciBhbmQgaXQgaXMgdGhlIG9iamVjdCB0aGF0IG1heSBiZSBtYW5pcHVsYXRlZCBieSB0aGUK KysgKiBjYWxsZXIgZGlyZWN0bHkuCisrICoKKysgKiBUaGVyZSBhcmUgdHdvIGZ1bmN0aW9ucyBw cm92aWRlZCBmb3IgY3JlYXRpbmcgYSBuZXcgQVZCdWZmZXIgd2l0aCBhIHNpbmdsZQorKyAqIHJl ZmVyZW5jZSAtLSBhdl9idWZmZXJfYWxsb2MoKSB0byBqdXN0IGFsbG9jYXRlIGEgbmV3IGJ1ZmZl ciwgYW5kCisrICogYXZfYnVmZmVyX2NyZWF0ZSgpIHRvIHdyYXAgYW4gZXhpc3RpbmcgYXJyYXkg aW4gYW4gQVZCdWZmZXIuIEZyb20gYW4gZXhpc3RpbmcKKysgKiByZWZlcmVuY2UsIGFkZGl0aW9u YWwgcmVmZXJlbmNlcyBtYXkgYmUgY3JlYXRlZCB3aXRoIGF2X2J1ZmZlcl9yZWYoKS4KKysgKiBV c2UgYXZfYnVmZmVyX3VucmVmKCkgdG8gZnJlZSBhIHJlZmVyZW5jZSAodGhpcyB3aWxsIGF1dG9t YXRpY2FsbHkgZnJlZSB0aGUKKysgKiBkYXRhIG9uY2UgYWxsIHRoZSByZWZlcmVuY2VzIGFyZSBm cmVlZCkuCisrICoKKysgKiBUaGUgY29udmVudGlvbiB0aHJvdWdob3V0IHRoaXMgQVBJIGFuZCB0 aGUgcmVzdCBvZiBGRm1wZWcgaXMgc3VjaCB0aGF0IHRoZQorKyAqIGJ1ZmZlciBpcyBjb25zaWRl cmVkIHdyaXRhYmxlIGlmIHRoZXJlIGV4aXN0cyBvbmx5IG9uZSByZWZlcmVuY2UgdG8gaXQgKGFu ZAorKyAqIGl0IGhhcyBub3QgYmVlbiBtYXJrZWQgYXMgcmVhZC1vbmx5KS4gVGhlIGF2X2J1ZmZl cl9pc193cml0YWJsZSgpIGZ1bmN0aW9uIGlzCisrICogcHJvdmlkZWQgdG8gY2hlY2sgd2hldGhl ciB0aGlzIGlzIHRydWUgYW5kIGF2X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkgd2lsbAorKyAqIGF1 dG9tYXRpY2FsbHkgY3JlYXRlIGEgbmV3IHdyaXRhYmxlIGJ1ZmZlciB3aGVuIG5lY2Vzc2FyeS4K KysgKiBPZiBjb3Vyc2Ugbm90aGluZyBwcmV2ZW50cyB0aGUgY2FsbGluZyBjb2RlIGZyb20gdmlv bGF0aW5nIHRoaXMgY29udmVudGlvbiwKKysgKiBob3dldmVyIHRoYXQgaXMgc2FmZSBvbmx5IHdo ZW4gYWxsIHRoZSBleGlzdGluZyByZWZlcmVuY2VzIGFyZSB1bmRlciBpdHMKKysgKiBjb250cm9s LgorKyAqCisrICogQG5vdGUgUmVmZXJlbmNpbmcgYW5kIHVucmVmZXJlbmNpbmcgdGhlIGJ1ZmZl cnMgaXMgdGhyZWFkLXNhZmUgYW5kIHRodXMKKysgKiBtYXkgYmUgZG9uZSBmcm9tIG11bHRpcGxl IHRocmVhZHMgc2ltdWx0YW5lb3VzbHkgd2l0aG91dCBhbnkgbmVlZCBmb3IKKysgKiBhZGRpdGlv bmFsIGxvY2tpbmcuCisrICoKKysgKiBAbm90ZSBUd28gZGlmZmVyZW50IHJlZmVyZW5jZXMgdG8g dGhlIHNhbWUgYnVmZmVyIGNhbiBwb2ludCB0byBkaWZmZXJlbnQKKysgKiBwYXJ0cyBvZiB0aGUg YnVmZmVyIChpLmUuIHRoZWlyIEFWQnVmZmVyUmVmLmRhdGEgd2lsbCBub3QgYmUgZXF1YWwpLgor KyAqLworKworKy8qKgorKyAqIEEgcmVmZXJlbmNlIGNvdW50ZWQgYnVmZmVyIHR5cGUuIEl0IGlz IG9wYXF1ZSBhbmQgaXMgbWVhbnQgdG8gYmUgdXNlZCB0aHJvdWdoCisrICogcmVmZXJlbmNlcyAo QVZCdWZmZXJSZWYpLgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWQnVmZmVyIEFWQnVmZmVyOwor KworKy8qKgorKyAqIEEgcmVmZXJlbmNlIHRvIGEgZGF0YSBidWZmZXIuCisrICoKKysgKiBUaGUg c2l6ZSBvZiB0aGlzIHN0cnVjdCBpcyBub3QgYSBwYXJ0IG9mIHRoZSBwdWJsaWMgQUJJIGFuZCBp dCBpcyBub3QgbWVhbnQKKysgKiB0byBiZSBhbGxvY2F0ZWQgZGlyZWN0bHkuCisrICovCisrdHlw ZWRlZiBzdHJ1Y3QgQVZCdWZmZXJSZWYgeworKyAgICBBVkJ1ZmZlciAqYnVmZmVyOworKworKyAg ICAvKioKKysgICAgICogVGhlIGRhdGEgYnVmZmVyLiBJdCBpcyBjb25zaWRlcmVkIHdyaXRhYmxl IGlmIGFuZCBvbmx5IGlmCisrICAgICAqIHRoaXMgaXMgdGhlIG9ubHkgcmVmZXJlbmNlIHRvIHRo ZSBidWZmZXIsIGluIHdoaWNoIGNhc2UKKysgICAgICogYXZfYnVmZmVyX2lzX3dyaXRhYmxlKCkg cmV0dXJucyAxLgorKyAgICAgKi8KKysgICAgdWludDhfdCAqZGF0YTsKKysgICAgLyoqCisrICAg ICAqIFNpemUgb2YgZGF0YSBpbiBieXRlcy4KKysgICAgICovCisrICAgIHNpemVfdCAgIHNpemU7 CisrfSBBVkJ1ZmZlclJlZjsKKysKKysvKioKKysgKiBBbGxvY2F0ZSBhbiBBVkJ1ZmZlciBvZiB0 aGUgZ2l2ZW4gc2l6ZSB1c2luZyBhdl9tYWxsb2MoKS4KKysgKgorKyAqIEByZXR1cm4gYW4gQVZC dWZmZXJSZWYgb2YgZ2l2ZW4gc2l6ZSBvciBOVUxMIHdoZW4gb3V0IG9mIG1lbW9yeQorKyAqLwor K0FWQnVmZmVyUmVmICphdl9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUpOworKworKy8qKgorKyAq IFNhbWUgYXMgYXZfYnVmZmVyX2FsbG9jKCksIGV4Y2VwdCB0aGUgcmV0dXJuZWQgYnVmZmVyIHdp bGwgYmUgaW5pdGlhbGl6ZWQKKysgKiB0byB6ZXJvLgorKyAqLworK0FWQnVmZmVyUmVmICphdl9i dWZmZXJfYWxsb2N6KHNpemVfdCBzaXplKTsKKysKKysvKioKKysgKiBBbHdheXMgdHJlYXQgdGhl IGJ1ZmZlciBhcyByZWFkLW9ubHksIGV2ZW4gd2hlbiBpdCBoYXMgb25seSBvbmUKKysgKiByZWZl cmVuY2UuCisrICovCisrI2RlZmluZSBBVl9CVUZGRVJfRkxBR19SRUFET05MWSAoMSA8PCAwKQor KworKy8qKgorKyAqIENyZWF0ZSBhbiBBVkJ1ZmZlciBmcm9tIGFuIGV4aXN0aW5nIGFycmF5Lgor KyAqCisrICogSWYgdGhpcyBmdW5jdGlvbiBpcyBzdWNjZXNzZnVsLCBkYXRhIGlzIG93bmVkIGJ5 IHRoZSBBVkJ1ZmZlci4gVGhlIGNhbGxlciBtYXkKKysgKiBvbmx5IGFjY2VzcyBkYXRhIHRocm91 Z2ggdGhlIHJldHVybmVkIEFWQnVmZmVyUmVmIGFuZCByZWZlcmVuY2VzIGRlcml2ZWQgZnJvbQor KyAqIGl0LgorKyAqIElmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIGRhdGEgaXMgbGVmdCB1bnRvdWNo ZWQuCisrICogQHBhcmFtIGRhdGEgICBkYXRhIGFycmF5CisrICogQHBhcmFtIHNpemUgICBzaXpl IG9mIGRhdGEgaW4gYnl0ZXMKKysgKiBAcGFyYW0gZnJlZSAgIGEgY2FsbGJhY2sgZm9yIGZyZWVp bmcgdGhpcyBidWZmZXIncyBkYXRhCisrICogQHBhcmFtIG9wYXF1ZSBwYXJhbWV0ZXIgdG8gYmUg Z290IGZvciBwcm9jZXNzaW5nIG9yIHBhc3NlZCB0byBmcmVlCisrICogQHBhcmFtIGZsYWdzICBh IGNvbWJpbmF0aW9uIG9mIEFWX0JVRkZFUl9GTEFHXyoKKysgKgorKyAqIEByZXR1cm4gYW4gQVZC dWZmZXJSZWYgcmVmZXJyaW5nIHRvIGRhdGEgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgor KyAqLworK0FWQnVmZmVyUmVmICphdl9idWZmZXJfY3JlYXRlKHVpbnQ4X3QgKmRhdGEsIHNpemVf dCBzaXplLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmcmVlKSh2b2lk ICpvcGFxdWUsIHVpbnQ4X3QgKmRhdGEpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKm9wYXF1ZSwgaW50IGZsYWdzKTsKKysKKysvKioKKysgKiBEZWZhdWx0IGZyZWUgY2Fs bGJhY2ssIHdoaWNoIGNhbGxzIGF2X2ZyZWUoKSBvbiB0aGUgYnVmZmVyIGRhdGEuCisrICogVGhp cyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBwYXNzZWQgdG8gYXZfYnVmZmVyX2NyZWF0ZSgpLCBu b3QgY2FsbGVkCisrICogZGlyZWN0bHkuCisrICovCisrdm9pZCBhdl9idWZmZXJfZGVmYXVsdF9m cmVlKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqZGF0YSk7CisrCisrLyoqCisrICogQ3JlYXRlIGEg bmV3IHJlZmVyZW5jZSB0byBhbiBBVkJ1ZmZlci4KKysgKgorKyAqIEByZXR1cm4gYSBuZXcgQVZC dWZmZXJSZWYgcmVmZXJyaW5nIHRvIHRoZSBzYW1lIEFWQnVmZmVyIGFzIGJ1ZiBvciBOVUxMIG9u CisrICogZmFpbHVyZS4KKysgKi8KKytBVkJ1ZmZlclJlZiAqYXZfYnVmZmVyX3JlZihjb25zdCBB VkJ1ZmZlclJlZiAqYnVmKTsKKysKKysvKioKKysgKiBGcmVlIGEgZ2l2ZW4gcmVmZXJlbmNlIGFu ZCBhdXRvbWF0aWNhbGx5IGZyZWUgdGhlIGJ1ZmZlciBpZiB0aGVyZSBhcmUgbm8gbW9yZQorKyAq IHJlZmVyZW5jZXMgdG8gaXQuCisrICoKKysgKiBAcGFyYW0gYnVmIHRoZSByZWZlcmVuY2UgdG8g YmUgZnJlZWQuIFRoZSBwb2ludGVyIGlzIHNldCB0byBOVUxMIG9uIHJldHVybi4KKysgKi8KKyt2 b2lkIGF2X2J1ZmZlcl91bnJlZihBVkJ1ZmZlclJlZiAqKmJ1Zik7CisrCisrLyoqCisrICogQHJl dHVybiAxIGlmIHRoZSBjYWxsZXIgbWF5IHdyaXRlIHRvIHRoZSBkYXRhIHJlZmVycmVkIHRvIGJ5 IGJ1ZiAod2hpY2ggaXMKKysgKiB0cnVlIGlmIGFuZCBvbmx5IGlmIGJ1ZiBpcyB0aGUgb25seSBy ZWZlcmVuY2UgdG8gdGhlIHVuZGVybHlpbmcgQVZCdWZmZXIpLgorKyAqIFJldHVybiAwIG90aGVy d2lzZS4KKysgKiBBIHBvc2l0aXZlIGFuc3dlciBpcyB2YWxpZCB1bnRpbCBhdl9idWZmZXJfcmVm KCkgaXMgY2FsbGVkIG9uIGJ1Zi4KKysgKi8KKytpbnQgYXZfYnVmZmVyX2lzX3dyaXRhYmxlKGNv bnN0IEFWQnVmZmVyUmVmICpidWYpOworKworKy8qKgorKyAqIEByZXR1cm4gdGhlIG9wYXF1ZSBw YXJhbWV0ZXIgc2V0IGJ5IGF2X2J1ZmZlcl9jcmVhdGUuCisrICovCisrdm9pZCAqYXZfYnVmZmVy X2dldF9vcGFxdWUoY29uc3QgQVZCdWZmZXJSZWYgKmJ1Zik7CisrCisraW50IGF2X2J1ZmZlcl9n ZXRfcmVmX2NvdW50KGNvbnN0IEFWQnVmZmVyUmVmICpidWYpOworKworKy8qKgorKyAqIENyZWF0 ZSBhIHdyaXRhYmxlIHJlZmVyZW5jZSBmcm9tIGEgZ2l2ZW4gYnVmZmVyIHJlZmVyZW5jZSwgYXZv aWRpbmcgZGF0YSBjb3B5CisrICogaWYgcG9zc2libGUuCisrICoKKysgKiBAcGFyYW0gYnVmIGJ1 ZmZlciByZWZlcmVuY2UgdG8gbWFrZSB3cml0YWJsZS4gT24gc3VjY2VzcywgYnVmIGlzIGVpdGhl ciBsZWZ0CisrICogICAgICAgICAgICB1bnRvdWNoZWQsIG9yIGl0IGlzIHVucmVmZXJlbmNlZCBh bmQgYSBuZXcgd3JpdGFibGUgQVZCdWZmZXJSZWYgaXMKKysgKiAgICAgICAgICAgIHdyaXR0ZW4g aW4gaXRzIHBsYWNlLiBPbiBmYWlsdXJlLCBidWYgaXMgbGVmdCB1bnRvdWNoZWQuCisrICogQHJl dHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBvbiBmYWlsdXJlLgorKyAqLwor K2ludCBhdl9idWZmZXJfbWFrZV93cml0YWJsZShBVkJ1ZmZlclJlZiAqKmJ1Zik7CisrCisrLyoq CisrICogUmVhbGxvY2F0ZSBhIGdpdmVuIGJ1ZmZlci4KKysgKgorKyAqIEBwYXJhbSBidWYgIGEg YnVmZmVyIHJlZmVyZW5jZSB0byByZWFsbG9jYXRlLiBPbiBzdWNjZXNzLCBidWYgd2lsbCBiZQor KyAqICAgICAgICAgICAgIHVucmVmZXJlbmNlZCBhbmQgYSBuZXcgcmVmZXJlbmNlIHdpdGggdGhl IHJlcXVpcmVkIHNpemUgd2lsbCBiZQorKyAqICAgICAgICAgICAgIHdyaXR0ZW4gaW4gaXRzIHBs YWNlLiBPbiBmYWlsdXJlIGJ1ZiB3aWxsIGJlIGxlZnQgdW50b3VjaGVkLiAqYnVmCisrICogICAg ICAgICAgICAgbWF5IGJlIE5VTEwsIHRoZW4gYSBuZXcgYnVmZmVyIGlzIGFsbG9jYXRlZC4KKysg KiBAcGFyYW0gc2l6ZSByZXF1aXJlZCBuZXcgYnVmZmVyIHNpemUuCisrICogQHJldHVybiAwIG9u IHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBvbiBmYWlsdXJlLgorKyAqCisrICogQG5vdGUg dGhlIGJ1ZmZlciBpcyBhY3R1YWxseSByZWFsbG9jYXRlZCB3aXRoIGF2X3JlYWxsb2MoKSBvbmx5 IGlmIGl0IHdhcworKyAqIGluaXRpYWxseSBhbGxvY2F0ZWQgdGhyb3VnaCBhdl9idWZmZXJfcmVh bGxvYyhOVUxMKSBhbmQgdGhlcmUgaXMgb25seSBvbmUKKysgKiByZWZlcmVuY2UgdG8gaXQgKGku ZS4gdGhlIG9uZSBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbikuIEluIGFsbCBvdGhlciBjYXNlcwor KyAqIGEgbmV3IGJ1ZmZlciBpcyBhbGxvY2F0ZWQgYW5kIHRoZSBkYXRhIGlzIGNvcGllZC4KKysg Ki8KKytpbnQgYXZfYnVmZmVyX3JlYWxsb2MoQVZCdWZmZXJSZWYgKipidWYsIHNpemVfdCBzaXpl KTsKKysKKysvKioKKysgKiBFbnN1cmUgZHN0IHJlZmVycyB0byB0aGUgc2FtZSBkYXRhIGFzIHNy Yy4KKysgKgorKyAqIFdoZW4gKmRzdCBpcyBhbHJlYWR5IGVxdWl2YWxlbnQgdG8gc3JjLCBkbyBu b3RoaW5nLiBPdGhlcndpc2UgdW5yZWZlcmVuY2UgZHN0CisrICogYW5kIHJlcGxhY2UgaXQgd2l0 aCBhIG5ldyByZWZlcmVuY2UgdG8gc3JjLgorKyAqCisrICogQHBhcmFtIGRzdCBQb2ludGVyIHRv IGVpdGhlciBhIHZhbGlkIGJ1ZmZlciByZWZlcmVuY2Ugb3IgTlVMTC4gT24gc3VjY2VzcywKKysg KiAgICAgICAgICAgIHRoaXMgd2lsbCBwb2ludCB0byBhIGJ1ZmZlciByZWZlcmVuY2UgZXF1aXZh bGVudCB0byBzcmMuIE9uCisrICogICAgICAgICAgICBmYWlsdXJlLCBkc3Qgd2lsbCBiZSBsZWZ0 IHVudG91Y2hlZC4KKysgKiBAcGFyYW0gc3JjIEEgYnVmZmVyIHJlZmVyZW5jZSB0byByZXBsYWNl IGRzdCB3aXRoLiBNYXkgYmUgTlVMTCwgdGhlbiB0aGlzCisrICogICAgICAgICAgICBmdW5jdGlv biBpcyBlcXVpdmFsZW50IHRvIGF2X2J1ZmZlcl91bnJlZihkc3QpLgorKyAqIEByZXR1cm4gMCBv biBzdWNjZXNzCisrICogICAgICAgICBBVkVSUk9SKEVOT01FTSkgb24gbWVtb3J5IGFsbG9jYXRp b24gZmFpbHVyZS4KKysgKi8KKytpbnQgYXZfYnVmZmVyX3JlcGxhY2UoQVZCdWZmZXJSZWYgKipk c3QsIGNvbnN0IEFWQnVmZmVyUmVmICpzcmMpOworKworKy8qKgorKyAqIEB9CisrICovCisrCisr LyoqCisrICogQGRlZmdyb3VwIGxhdnVfYnVmZmVycG9vbCBBVkJ1ZmZlclBvb2wKKysgKiBAaW5n cm91cCBsYXZ1X2RhdGEKKysgKgorKyAqIEB7CisrICogQVZCdWZmZXJQb29sIGlzIGFuIEFQSSBm b3IgYSBsb2NrLWZyZWUgdGhyZWFkLXNhZmUgcG9vbCBvZiBBVkJ1ZmZlcnMuCisrICoKKysgKiBG cmVxdWVudGx5IGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgbGFyZ2UgYnVmZmVycyBtYXkgYmUgc2xv dy4gQVZCdWZmZXJQb29sIGlzCisrICogbWVhbnQgdG8gc29sdmUgdGhpcyBpbiBjYXNlcyB3aGVu IHRoZSBjYWxsZXIgbmVlZHMgYSBzZXQgb2YgYnVmZmVycyBvZiB0aGUKKysgKiBzYW1lIHNpemUg KHRoZSBtb3N0IG9idmlvdXMgdXNlIGNhc2UgYmVpbmcgYnVmZmVycyBmb3IgcmF3IHZpZGVvIG9y IGF1ZGlvCisrICogZnJhbWVzKS4KKysgKgorKyAqIEF0IHRoZSBiZWdpbm5pbmcsIHRoZSB1c2Vy IG11c3QgY2FsbCBhdl9idWZmZXJfcG9vbF9pbml0KCkgdG8gY3JlYXRlIHRoZQorKyAqIGJ1ZmZl ciBwb29sLiBUaGVuIHdoZW5ldmVyIGEgYnVmZmVyIGlzIG5lZWRlZCwgY2FsbCBhdl9idWZmZXJf cG9vbF9nZXQoKSB0bworKyAqIGdldCBhIHJlZmVyZW5jZSB0byBhIG5ldyBidWZmZXIsIHNpbWls YXIgdG8gYXZfYnVmZmVyX2FsbG9jKCkuIFRoaXMgbmV3CisrICogcmVmZXJlbmNlIHdvcmtzIGlu IGFsbCBhc3BlY3RzIHRoZSBzYW1lIHdheSBhcyB0aGUgb25lIGNyZWF0ZWQgYnkKKysgKiBhdl9i dWZmZXJfYWxsb2MoKS4gSG93ZXZlciwgd2hlbiB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBi dWZmZXIgaXMKKysgKiB1bnJlZmVyZW5jZWQsIGl0IGlzIHJldHVybmVkIHRvIHRoZSBwb29sIGlu c3RlYWQgb2YgYmVpbmcgZnJlZWQgYW5kIHdpbGwgYmUKKysgKiByZXVzZWQgZm9yIHN1YnNlcXVl bnQgYXZfYnVmZmVyX3Bvb2xfZ2V0KCkgY2FsbHMuCisrICoKKysgKiBXaGVuIHRoZSBjYWxsZXIg aXMgZG9uZSB3aXRoIHRoZSBwb29sIGFuZCBubyBsb25nZXIgbmVlZHMgdG8gYWxsb2NhdGUgYW55 IG5ldworKyAqIGJ1ZmZlcnMsIGF2X2J1ZmZlcl9wb29sX3VuaW5pdCgpIG11c3QgYmUgY2FsbGVk IHRvIG1hcmsgdGhlIHBvb2wgYXMgZnJlZWFibGUuCisrICogT25jZSBhbGwgdGhlIGJ1ZmZlcnMg YXJlIHJlbGVhc2VkLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZnJlZWQuCisrICoKKysgKiBB bGxvY2F0aW5nIGFuZCByZWxlYXNpbmcgYnVmZmVycyB3aXRoIHRoaXMgQVBJIGlzIHRocmVhZC1z YWZlIGFzIGxvbmcgYXMKKysgKiBlaXRoZXIgdGhlIGRlZmF1bHQgYWxsb2MgY2FsbGJhY2sgaXMg dXNlZCwgb3IgdGhlIHVzZXItc3VwcGxpZWQgb25lIGlzCisrICogdGhyZWFkLXNhZmUuCisrICov CisrCisrLyoqCisrICogVGhlIGJ1ZmZlciBwb29sLiBUaGlzIHN0cnVjdHVyZSBpcyBvcGFxdWUg YW5kIG5vdCBtZWFudCB0byBiZSBhY2Nlc3NlZAorKyAqIGRpcmVjdGx5LiBJdCBpcyBhbGxvY2F0 ZWQgd2l0aCBhdl9idWZmZXJfcG9vbF9pbml0KCkgYW5kIGZyZWVkIHdpdGgKKysgKiBhdl9idWZm ZXJfcG9vbF91bmluaXQoKS4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVkJ1ZmZlclBvb2wgQVZC dWZmZXJQb29sOworKworKy8qKgorKyAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgYnVmZmVy IHBvb2wuCisrICoKKysgKiBAcGFyYW0gc2l6ZSBzaXplIG9mIGVhY2ggYnVmZmVyIGluIHRoaXMg cG9vbAorKyAqIEBwYXJhbSBhbGxvYyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGFs bG9jYXRlIG5ldyBidWZmZXJzIHdoZW4gdGhlCisrICogcG9vbCBpcyBlbXB0eS4gTWF5IGJlIE5V TEwsIHRoZW4gdGhlIGRlZmF1bHQgYWxsb2NhdG9yIHdpbGwgYmUgdXNlZAorKyAqIChhdl9idWZm ZXJfYWxsb2MoKSkuCisrICogQHJldHVybiBuZXdseSBjcmVhdGVkIGJ1ZmZlciBwb29sIG9uIHN1 Y2Nlc3MsIE5VTEwgb24gZXJyb3IuCisrICovCisrQVZCdWZmZXJQb29sICphdl9idWZmZXJfcG9v bF9pbml0KHNpemVfdCBzaXplLCBBVkJ1ZmZlclJlZiogKCphbGxvYykoc2l6ZV90IHNpemUpKTsK KysKKysvKioKKysgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGJ1ZmZlciBwb29sIHdpdGgg YSBtb3JlIGNvbXBsZXggYWxsb2NhdG9yLgorKyAqCisrICogQHBhcmFtIHNpemUgc2l6ZSBvZiBl YWNoIGJ1ZmZlciBpbiB0aGlzIHBvb2wKKysgKiBAcGFyYW0gb3BhcXVlIGFyYml0cmFyeSB1c2Vy IGRhdGEgdXNlZCBieSB0aGUgYWxsb2NhdG9yCisrICogQHBhcmFtIGFsbG9jIGEgZnVuY3Rpb24g dGhhdCB3aWxsIGJlIHVzZWQgdG8gYWxsb2NhdGUgbmV3IGJ1ZmZlcnMgd2hlbiB0aGUKKysgKiAg ICAgICAgICAgICAgcG9vbCBpcyBlbXB0eS4gTWF5IGJlIE5VTEwsIHRoZW4gdGhlIGRlZmF1bHQg YWxsb2NhdG9yIHdpbGwgYmUKKysgKiAgICAgICAgICAgICAgdXNlZCAoYXZfYnVmZmVyX2FsbG9j KCkpLgorKyAqIEBwYXJhbSBwb29sX2ZyZWUgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVk IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgcG9vbAorKyAqICAgICAgICAgICAgICAgICAgaXMgZnJl ZWQuIEkuZS4gYWZ0ZXIgYXZfYnVmZmVyX3Bvb2xfdW5pbml0KCkgaXMgY2FsbGVkCisrICogICAg ICAgICAgICAgICAgICBieSB0aGUgY2FsbGVyIGFuZCBhbGwgdGhlIGZyYW1lcyBhcmUgcmV0dXJu ZWQgdG8gdGhlIHBvb2wKKysgKiAgICAgICAgICAgICAgICAgIGFuZCBmcmVlZC4gSXQgaXMgaW50 ZW5kZWQgdG8gdW5pbml0aWFsaXplIHRoZSB1c2VyIG9wYXF1ZQorKyAqICAgICAgICAgICAgICAg ICAgZGF0YS4gTWF5IGJlIE5VTEwuCisrICogQHJldHVybiBuZXdseSBjcmVhdGVkIGJ1ZmZlciBw b29sIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZXJyb3IuCisrICovCisrQVZCdWZmZXJQb29sICphdl9i dWZmZXJfcG9vbF9pbml0MihzaXplX3Qgc2l6ZSwgdm9pZCAqb3BhcXVlLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQVZCdWZmZXJSZWYqICgqYWxsb2MpKHZvaWQgKm9wYXF1 ZSwgc2l6ZV90IHNpemUpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAoKnBvb2xfZnJlZSkodm9pZCAqb3BhcXVlKSk7CisrCisrLyoqCisrICogTWFyayB0aGUgcG9v bCBhcyBiZWluZyBhdmFpbGFibGUgZm9yIGZyZWVpbmcuIEl0IHdpbGwgYWN0dWFsbHkgYmUgZnJl ZWQgb25seQorKyAqIG9uY2UgYWxsIHRoZSBhbGxvY2F0ZWQgYnVmZmVycyBhc3NvY2lhdGVkIHdp dGggdGhlIHBvb2wgYXJlIHJlbGVhc2VkLiBUaHVzIGl0CisrICogaXMgc2FmZSB0byBjYWxsIHRo aXMgZnVuY3Rpb24gd2hpbGUgc29tZSBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlcnMgYXJlIHN0aWxs CisrICogaW4gdXNlLgorKyAqCisrICogQHBhcmFtIHBvb2wgcG9pbnRlciB0byB0aGUgcG9vbCB0 byBiZSBmcmVlZC4gSXQgd2lsbCBiZSBzZXQgdG8gTlVMTC4KKysgKi8KKyt2b2lkIGF2X2J1ZmZl cl9wb29sX3VuaW5pdChBVkJ1ZmZlclBvb2wgKipwb29sKTsKKysKKysvKioKKysgKiBBbGxvY2F0 ZSBhIG5ldyBBVkJ1ZmZlciwgcmV1c2luZyBhbiBvbGQgYnVmZmVyIGZyb20gdGhlIHBvb2wgd2hl biBhdmFpbGFibGUuCisrICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHNpbXVsdGFuZW91 c2x5IGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KKysgKgorKyAqIEByZXR1cm4gYSByZWZlcmVuY2Ug dG8gdGhlIG5ldyBidWZmZXIgb24gc3VjY2VzcywgTlVMTCBvbiBlcnJvci4KKysgKi8KKytBVkJ1 ZmZlclJlZiAqYXZfYnVmZmVyX3Bvb2xfZ2V0KEFWQnVmZmVyUG9vbCAqcG9vbCk7CisrCisrLyoq CisrICogUXVlcnkgdGhlIG9yaWdpbmFsIG9wYXF1ZSBwYXJhbWV0ZXIgb2YgYW4gYWxsb2NhdGVk IGJ1ZmZlciBpbiB0aGUgcG9vbC4KKysgKgorKyAqIEBwYXJhbSByZWYgYSBidWZmZXIgcmVmZXJl bmNlIHRvIGEgYnVmZmVyIHJldHVybmVkIGJ5IGF2X2J1ZmZlcl9wb29sX2dldC4KKysgKiBAcmV0 dXJuIHRoZSBvcGFxdWUgcGFyYW1ldGVyIHNldCBieSB0aGUgYnVmZmVyIGFsbG9jYXRvciBmdW5j dGlvbiBvZiB0aGUKKysgKiAgICAgICAgIGJ1ZmZlciBwb29sLgorKyAqCisrICogQG5vdGUgdGhl IG9wYXF1ZSBwYXJhbWV0ZXIgb2YgcmVmIGlzIHVzZWQgYnkgdGhlIGJ1ZmZlciBwb29sIGltcGxl bWVudGF0aW9uLAorKyAqIHRoZXJlZm9yZSB5b3UgaGF2ZSB0byB1c2UgdGhpcyBmdW5jdGlvbiB0 byBhY2Nlc3MgdGhlIG9yaWdpbmFsIG9wYXF1ZQorKyAqIHBhcmFtZXRlciBvZiBhbiBhbGxvY2F0 ZWQgYnVmZmVyLgorKyAqLworK3ZvaWQgKmF2X2J1ZmZlcl9wb29sX2J1ZmZlcl9nZXRfb3BhcXVl KGNvbnN0IEFWQnVmZmVyUmVmICpyZWYpOworKworKy8qKgorKyAqIEB9CisrICovCisrCisrI2Vu ZGlmIC8qIEFWVVRJTF9CVUZGRVJfSCAqLworZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9m cmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2NoYW5uZWxfbGF5 b3V0LmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBh cnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvY2hhbm5lbF9sYXlvdXQuaAorLS0tIE11c2VTY29yZS00 LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9j aGFubmVsX2xheW91dC5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzYzNDUyODkgKzAy MDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2Zm bXBlZy92OS9saWJhdnV0aWwvY2hhbm5lbF9sYXlvdXQuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3 NjE4MzU1MyArMDIwMAorQEAgLTAsMCArMSw3NjIgQEAKKysvKgorKyAqIENvcHlyaWdodCAoYykg MjAwNiBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVsbmlAZ214LmF0PgorKyAqIENvcHlyaWdo dCAoYykgMjAwOCBQZXRlciBSb3NzCisrICoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1w ZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogRkZt cGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisr ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5k YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg MDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVmIEFWVVRJTF9DSEFOTkVMX0xBWU9VVF9I CisrI2RlZmluZSBBVlVUSUxfQ0hBTk5FTF9MQVlPVVRfSAorKworKyNpbmNsdWRlIDxzdGRpbnQu aD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisrI2luY2x1ZGUgInZlcnNpb24uaCIKKysjaW5j bHVkZSAiYXR0cmlidXRlcy5oIgorKworKy8qKgorKyAqIEBmaWxlCisrICogQGluZ3JvdXAgbGF2 dV9hdWRpb19jaGFubmVscworKyAqIFB1YmxpYyBsaWJhdnV0aWwgY2hhbm5lbCBsYXlvdXQgQVBJ cyBoZWFkZXIuCisrICovCisrCisrCisrLyoqCisrICogQGRlZmdyb3VwIGxhdnVfYXVkaW9fY2hh bm5lbHMgQXVkaW8gY2hhbm5lbHMKKysgKiBAaW5ncm91cCBsYXZ1X2F1ZGlvCisrICoKKysgKiBB dWRpbyBjaGFubmVsIGxheW91dCB1dGlsaXR5IGZ1bmN0aW9ucworKyAqCisrICogQHsKKysgKi8K KysKKytlbnVtIEFWQ2hhbm5lbCB7CisrICAgIC8vLyBJbnZhbGlkIGNoYW5uZWwgaW5kZXgKKysg ICAgQVZfQ0hBTl9OT05FID0gLTEsCisrICAgIEFWX0NIQU5fRlJPTlRfTEVGVCwKKysgICAgQVZf Q0hBTl9GUk9OVF9SSUdIVCwKKysgICAgQVZfQ0hBTl9GUk9OVF9DRU5URVIsCisrICAgIEFWX0NI QU5fTE9XX0ZSRVFVRU5DWSwKKysgICAgQVZfQ0hBTl9CQUNLX0xFRlQsCisrICAgIEFWX0NIQU5f QkFDS19SSUdIVCwKKysgICAgQVZfQ0hBTl9GUk9OVF9MRUZUX09GX0NFTlRFUiwKKysgICAgQVZf Q0hBTl9GUk9OVF9SSUdIVF9PRl9DRU5URVIsCisrICAgIEFWX0NIQU5fQkFDS19DRU5URVIsCisr ICAgIEFWX0NIQU5fU0lERV9MRUZULAorKyAgICBBVl9DSEFOX1NJREVfUklHSFQsCisrICAgIEFW X0NIQU5fVE9QX0NFTlRFUiwKKysgICAgQVZfQ0hBTl9UT1BfRlJPTlRfTEVGVCwKKysgICAgQVZf Q0hBTl9UT1BfRlJPTlRfQ0VOVEVSLAorKyAgICBBVl9DSEFOX1RPUF9GUk9OVF9SSUdIVCwKKysg ICAgQVZfQ0hBTl9UT1BfQkFDS19MRUZULAorKyAgICBBVl9DSEFOX1RPUF9CQUNLX0NFTlRFUiwK KysgICAgQVZfQ0hBTl9UT1BfQkFDS19SSUdIVCwKKysgICAgLyoqIFN0ZXJlbyBkb3dubWl4LiAq LworKyAgICBBVl9DSEFOX1NURVJFT19MRUZUID0gMjksCisrICAgIC8qKiBTZWUgYWJvdmUuICov CisrICAgIEFWX0NIQU5fU1RFUkVPX1JJR0hULAorKyAgICBBVl9DSEFOX1dJREVfTEVGVCwKKysg ICAgQVZfQ0hBTl9XSURFX1JJR0hULAorKyAgICBBVl9DSEFOX1NVUlJPVU5EX0RJUkVDVF9MRUZU LAorKyAgICBBVl9DSEFOX1NVUlJPVU5EX0RJUkVDVF9SSUdIVCwKKysgICAgQVZfQ0hBTl9MT1df RlJFUVVFTkNZXzIsCisrICAgIEFWX0NIQU5fVE9QX1NJREVfTEVGVCwKKysgICAgQVZfQ0hBTl9U T1BfU0lERV9SSUdIVCwKKysgICAgQVZfQ0hBTl9CT1RUT01fRlJPTlRfQ0VOVEVSLAorKyAgICBB Vl9DSEFOX0JPVFRPTV9GUk9OVF9MRUZULAorKyAgICBBVl9DSEFOX0JPVFRPTV9GUk9OVF9SSUdI VCwKKysgICAgQVZfQ0hBTl9TSURFX1NVUlJPVU5EX0xFRlQsICAgICAvLy88ICArOTAgZGVncmVl cywgTHNzLCBTaUwKKysgICAgQVZfQ0hBTl9TSURFX1NVUlJPVU5EX1JJR0hULCAgICAvLy88ICAt OTAgZGVncmVlcywgUnNzLCBTaVIKKysgICAgQVZfQ0hBTl9UT1BfU1VSUk9VTkRfTEVGVCwgICAg ICAvLy88ICsxMTAgZGVncmVlcywgTHZzLCBUcExTCisrICAgIEFWX0NIQU5fVE9QX1NVUlJPVU5E X1JJR0hULCAgICAgLy8vPCAtMTEwIGRlZ3JlZXMsIFJ2cywgVHBSUworKworKyAgICBBVl9DSEFO X0JJTkFVUkFMX0xFRlQgPSA2MSwKKysgICAgQVZfQ0hBTl9CSU5BVVJBTF9SSUdIVCwKKysKKysg ICAgLyoqIENoYW5uZWwgaXMgZW1wdHkgY2FuIGJlIHNhZmVseSBza2lwcGVkLiAqLworKyAgICBB Vl9DSEFOX1VOVVNFRCA9IDB4MjAwLAorKworKyAgICAvKiogQ2hhbm5lbCBjb250YWlucyBkYXRh LCBidXQgaXRzIHBvc2l0aW9uIGlzIHVua25vd24uICovCisrICAgIEFWX0NIQU5fVU5LTk9XTiA9 IDB4MzAwLAorKworKyAgICAvKioKKysgICAgICogUmFuZ2Ugb2YgY2hhbm5lbHMgYmV0d2VlbiBB Vl9DSEFOX0FNQklTT05JQ19CQVNFIGFuZAorKyAgICAgKiBBVl9DSEFOX0FNQklTT05JQ19FTkQg cmVwcmVzZW50IEFtYmlzb25pYyBjb21wb25lbnRzIHVzaW5nIHRoZSBBQ04gc3lzdGVtLgorKyAg ICAgKgorKyAgICAgKiBHaXZlbiBhIGNoYW5uZWwgaWQgYDxpPmAgYmV0d2VlbiBBVl9DSEFOX0FN QklTT05JQ19CQVNFIGFuZAorKyAgICAgKiBBVl9DSEFOX0FNQklTT05JQ19FTkQgKGluY2x1c2l2 ZSksIHRoZSBBQ04gaW5kZXggb2YgdGhlIGNoYW5uZWwgYDxuPmAgaXMKKysgICAgICogYDxuPiA9 IDxpPiAtIEFWX0NIQU5fQU1CSVNPTklDX0JBU0VgLgorKyAgICAgKgorKyAgICAgKiBAbm90ZSB0 aGVzZSB2YWx1ZXMgYXJlIG9ubHkgdXNlZCBmb3IgQVZfQ0hBTk5FTF9PUkRFUl9DVVNUT00gY2hh bm5lbAorKyAgICAgKiBvcmRlcmluZ3MsIHRoZSBBVl9DSEFOTkVMX09SREVSX0FNQklTT05JQyBv cmRlcmluZyBvcmRlcnMgdGhlIGNoYW5uZWxzCisrICAgICAqIGltcGxpY2l0bHkgYnkgdGhlaXIg cG9zaXRpb24gaW4gdGhlIHN0cmVhbS4KKysgICAgICovCisrICAgIEFWX0NIQU5fQU1CSVNPTklD X0JBU0UgPSAweDQwMCwKKysgICAgLy8gbGVhdmUgc3BhY2UgZm9yIDEwMjQgaWRzLCB3aGljaCBj b3JyZXNwb25kIHRvIG1heGltdW0gb3JkZXItMzIgaGFybW9uaWNzLAorKyAgICAvLyB3aGljaCBz aG91bGQgYmUgZW5vdWdoIGZvciB0aGUgZm9yZXNlZWFibGUgdXNlIGNhc2VzCisrICAgIEFWX0NI QU5fQU1CSVNPTklDX0VORCAgPSAweDdmZiwKKyt9OworKworK2VudW0gQVZDaGFubmVsT3JkZXIg eworKyAgICAvKioKKysgICAgICogT25seSB0aGUgY2hhbm5lbCBjb3VudCBpcyBzcGVjaWZpZWQs IHdpdGhvdXQgYW55IGZ1cnRoZXIgaW5mb3JtYXRpb24KKysgICAgICogYWJvdXQgdGhlIGNoYW5u ZWwgb3JkZXIuCisrICAgICAqLworKyAgICBBVl9DSEFOTkVMX09SREVSX1VOU1BFQywKKysgICAg LyoqCisrICAgICAqIFRoZSBuYXRpdmUgY2hhbm5lbCBvcmRlciwgaS5lLiB0aGUgY2hhbm5lbHMg YXJlIGluIHRoZSBzYW1lIG9yZGVyIGluCisrICAgICAqIHdoaWNoIHRoZXkgYXJlIGRlZmluZWQg aW4gdGhlIEFWQ2hhbm5lbCBlbnVtLiBUaGlzIHN1cHBvcnRzIHVwIHRvIDYzCisrICAgICAqIGRp ZmZlcmVudCBjaGFubmVscy4KKysgICAgICovCisrICAgIEFWX0NIQU5ORUxfT1JERVJfTkFUSVZF LAorKyAgICAvKioKKysgICAgICogVGhlIGNoYW5uZWwgb3JkZXIgZG9lcyBub3QgY29ycmVzcG9u ZCB0byBhbnkgb3RoZXIgcHJlZGVmaW5lZCBvcmRlciBhbmQKKysgICAgICogaXMgc3RvcmVkIGFz IGFuIGV4cGxpY2l0IG1hcC4gRm9yIGV4YW1wbGUsIHRoaXMgY291bGQgYmUgdXNlZCB0byBzdXBw b3J0CisrICAgICAqIGxheW91dHMgd2l0aCA2NCBvciBtb3JlIGNoYW5uZWxzLCBvciB3aXRoIGVt cHR5L3NraXBwZWQgKEFWX0NIQU5fVU5VU0VEKQorKyAgICAgKiBjaGFubmVscyBhdCBhcmJpdHJh cnkgcG9zaXRpb25zLgorKyAgICAgKi8KKysgICAgQVZfQ0hBTk5FTF9PUkRFUl9DVVNUT00sCisr ICAgIC8qKgorKyAgICAgKiBUaGUgYXVkaW8gaXMgcmVwcmVzZW50ZWQgYXMgdGhlIGRlY29tcG9z aXRpb24gb2YgdGhlIHNvdW5kIGZpZWxkIGludG8KKysgICAgICogc3BoZXJpY2FsIGhhcm1vbmlj cy4gRWFjaCBjaGFubmVsIGNvcnJlc3BvbmRzIHRvIGEgc2luZ2xlIGV4cGFuc2lvbgorKyAgICAg KiBjb21wb25lbnQuIENoYW5uZWxzIGFyZSBvcmRlcmVkIGFjY29yZGluZyB0byBBQ04gKEFtYmlz b25pYyBDaGFubmVsCisrICAgICAqIE51bWJlcikuCisrICAgICAqCisrICAgICAqIFRoZSBjaGFu bmVsIHdpdGggdGhlIGluZGV4IG4gaW4gdGhlIHN0cmVhbSBjb250YWlucyB0aGUgc3BoZXJpY2Fs CisrICAgICAqIGhhcm1vbmljIG9mIGRlZ3JlZSBsIGFuZCBvcmRlciBtIGdpdmVuIGJ5CisrICAg ICAqIEBjb2Rley51bnBhcnNlZH0KKysgICAgICogICBsICAgPSBmbG9vcihzcXJ0KG4pKSwKKysg ICAgICogICBtICAgPSBuIC0gbCAqIChsICsgMSkuCisrICAgICAqIEBlbmRjb2RlCisrICAgICAq CisrICAgICAqIENvbnZlcnNlbHkgZ2l2ZW4gYSBzcGhlcmljYWwgaGFybW9uaWMgb2YgZGVncmVl IGwgYW5kIG9yZGVyIG0sIHRoZQorKyAgICAgKiBjb3JyZXNwb25kaW5nIGNoYW5uZWwgaW5kZXgg biBpcyBnaXZlbiBieQorKyAgICAgKiBAY29kZXsudW5wYXJzZWR9CisrICAgICAqICAgbiA9IGwg KiAobCArIDEpICsgbS4KKysgICAgICogQGVuZGNvZGUKKysgICAgICoKKysgICAgICogTm9ybWFs aXphdGlvbiBpcyBhc3N1bWVkIHRvIGJlIFNOM0QgKFNjaG1pZHQgU2VtaS1Ob3JtYWxpemF0aW9u KQorKyAgICAgKiBhcyBkZWZpbmVkIGluIEFtYmlYIGZvcm1hdCAkIDIuMS4KKysgICAgICovCisr ICAgIEFWX0NIQU5ORUxfT1JERVJfQU1CSVNPTklDLAorKyAgICAvKioKKysgICAgICogTnVtYmVy IG9mIGNoYW5uZWwgb3JkZXJzLCBub3QgcGFydCBvZiBBQkkvQVBJCisrICAgICAqLworKyAgICBG Rl9DSEFOTkVMX09SREVSX05CCisrfTsKKysKKysKKysvKioKKysgKiBAZGVmZ3JvdXAgY2hhbm5l bF9tYXNrcyBBdWRpbyBjaGFubmVsIG1hc2tzCisrICoKKysgKiBBIGNoYW5uZWwgbGF5b3V0IGlz IGEgNjQtYml0cyBpbnRlZ2VyIHdpdGggYSBiaXQgc2V0IGZvciBldmVyeSBjaGFubmVsLgorKyAq IFRoZSBudW1iZXIgb2YgYml0cyBzZXQgbXVzdCBiZSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGNo YW5uZWxzLgorKyAqIFRoZSB2YWx1ZSAwIG1lYW5zIHRoYXQgdGhlIGNoYW5uZWwgbGF5b3V0IGlz IG5vdCBrbm93bi4KKysgKiBAbm90ZSB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIG5vdCBwb3dlcmZ1 bCBlbm91Z2ggdG8gaGFuZGxlIGNoYW5uZWxzCisrICogY29tYmluYXRpb25zIHRoYXQgaGF2ZSB0 aGUgc2FtZSBjaGFubmVsIG11bHRpcGxlIHRpbWVzLCBzdWNoIGFzCisrICogZHVhbC1tb25vLgor KyAqCisrICogQHsKKysgKi8KKysjZGVmaW5lIEFWX0NIX0ZST05UX0xFRlQgICAgICAgICAgICAg KDFVTEwgPDwgQVZfQ0hBTl9GUk9OVF9MRUZUICAgICAgICAgICApCisrI2RlZmluZSBBVl9DSF9G Uk9OVF9SSUdIVCAgICAgICAgICAgICgxVUxMIDw8IEFWX0NIQU5fRlJPTlRfUklHSFQgICAgICAg ICAgKQorKyNkZWZpbmUgQVZfQ0hfRlJPTlRfQ0VOVEVSICAgICAgICAgICAoMVVMTCA8PCBBVl9D SEFOX0ZST05UX0NFTlRFUiAgICAgICAgICkKKysjZGVmaW5lIEFWX0NIX0xPV19GUkVRVUVOQ1kg ICAgICAgICAgKDFVTEwgPDwgQVZfQ0hBTl9MT1dfRlJFUVVFTkNZICAgICAgICApCisrI2RlZmlu ZSBBVl9DSF9CQUNLX0xFRlQgICAgICAgICAgICAgICgxVUxMIDw8IEFWX0NIQU5fQkFDS19MRUZU ICAgICAgICAgICAgKQorKyNkZWZpbmUgQVZfQ0hfQkFDS19SSUdIVCAgICAgICAgICAgICAoMVVM TCA8PCBBVl9DSEFOX0JBQ0tfUklHSFQgICAgICAgICAgICkKKysjZGVmaW5lIEFWX0NIX0ZST05U X0xFRlRfT0ZfQ0VOVEVSICAgKDFVTEwgPDwgQVZfQ0hBTl9GUk9OVF9MRUZUX09GX0NFTlRFUiAp CisrI2RlZmluZSBBVl9DSF9GUk9OVF9SSUdIVF9PRl9DRU5URVIgICgxVUxMIDw8IEFWX0NIQU5f RlJPTlRfUklHSFRfT0ZfQ0VOVEVSKQorKyNkZWZpbmUgQVZfQ0hfQkFDS19DRU5URVIgICAgICAg ICAgICAoMVVMTCA8PCBBVl9DSEFOX0JBQ0tfQ0VOVEVSICAgICAgICAgICkKKysjZGVmaW5lIEFW X0NIX1NJREVfTEVGVCAgICAgICAgICAgICAgKDFVTEwgPDwgQVZfQ0hBTl9TSURFX0xFRlQgICAg ICAgICAgICApCisrI2RlZmluZSBBVl9DSF9TSURFX1JJR0hUICAgICAgICAgICAgICgxVUxMIDw8 IEFWX0NIQU5fU0lERV9SSUdIVCAgICAgICAgICAgKQorKyNkZWZpbmUgQVZfQ0hfVE9QX0NFTlRF UiAgICAgICAgICAgICAoMVVMTCA8PCBBVl9DSEFOX1RPUF9DRU5URVIgICAgICAgICAgICkKKysj ZGVmaW5lIEFWX0NIX1RPUF9GUk9OVF9MRUZUICAgICAgICAgKDFVTEwgPDwgQVZfQ0hBTl9UT1Bf RlJPTlRfTEVGVCAgICAgICApCisrI2RlZmluZSBBVl9DSF9UT1BfRlJPTlRfQ0VOVEVSICAgICAg ICgxVUxMIDw8IEFWX0NIQU5fVE9QX0ZST05UX0NFTlRFUiAgICAgKQorKyNkZWZpbmUgQVZfQ0hf VE9QX0ZST05UX1JJR0hUICAgICAgICAoMVVMTCA8PCBBVl9DSEFOX1RPUF9GUk9OVF9SSUdIVCAg ICAgICkKKysjZGVmaW5lIEFWX0NIX1RPUF9CQUNLX0xFRlQgICAgICAgICAgKDFVTEwgPDwgQVZf Q0hBTl9UT1BfQkFDS19MRUZUICAgICAgICApCisrI2RlZmluZSBBVl9DSF9UT1BfQkFDS19DRU5U RVIgICAgICAgICgxVUxMIDw8IEFWX0NIQU5fVE9QX0JBQ0tfQ0VOVEVSICAgICAgKQorKyNkZWZp bmUgQVZfQ0hfVE9QX0JBQ0tfUklHSFQgICAgICAgICAoMVVMTCA8PCBBVl9DSEFOX1RPUF9CQUNL X1JJR0hUICAgICAgICkKKysjZGVmaW5lIEFWX0NIX1NURVJFT19MRUZUICAgICAgICAgICAgKDFV TEwgPDwgQVZfQ0hBTl9TVEVSRU9fTEVGVCAgICAgICAgICApCisrI2RlZmluZSBBVl9DSF9TVEVS RU9fUklHSFQgICAgICAgICAgICgxVUxMIDw8IEFWX0NIQU5fU1RFUkVPX1JJR0hUICAgICAgICAg KQorKyNkZWZpbmUgQVZfQ0hfV0lERV9MRUZUICAgICAgICAgICAgICAoMVVMTCA8PCBBVl9DSEFO X1dJREVfTEVGVCAgICAgICAgICAgICkKKysjZGVmaW5lIEFWX0NIX1dJREVfUklHSFQgICAgICAg ICAgICAgKDFVTEwgPDwgQVZfQ0hBTl9XSURFX1JJR0hUICAgICAgICAgICApCisrI2RlZmluZSBB Vl9DSF9TVVJST1VORF9ESVJFQ1RfTEVGVCAgICgxVUxMIDw8IEFWX0NIQU5fU1VSUk9VTkRfRElS RUNUX0xFRlQgKQorKyNkZWZpbmUgQVZfQ0hfU1VSUk9VTkRfRElSRUNUX1JJR0hUICAoMVVMTCA8 PCBBVl9DSEFOX1NVUlJPVU5EX0RJUkVDVF9SSUdIVCkKKysjZGVmaW5lIEFWX0NIX0xPV19GUkVR VUVOQ1lfMiAgICAgICAgKDFVTEwgPDwgQVZfQ0hBTl9MT1dfRlJFUVVFTkNZXzIgICAgICApCisr I2RlZmluZSBBVl9DSF9UT1BfU0lERV9MRUZUICAgICAgICAgICgxVUxMIDw8IEFWX0NIQU5fVE9Q X1NJREVfTEVGVCAgICAgICAgKQorKyNkZWZpbmUgQVZfQ0hfVE9QX1NJREVfUklHSFQgICAgICAg ICAoMVVMTCA8PCBBVl9DSEFOX1RPUF9TSURFX1JJR0hUICAgICAgICkKKysjZGVmaW5lIEFWX0NI X0JPVFRPTV9GUk9OVF9DRU5URVIgICAgKDFVTEwgPDwgQVZfQ0hBTl9CT1RUT01fRlJPTlRfQ0VO VEVSICApCisrI2RlZmluZSBBVl9DSF9CT1RUT01fRlJPTlRfTEVGVCAgICAgICgxVUxMIDw8IEFW X0NIQU5fQk9UVE9NX0ZST05UX0xFRlQgICAgKQorKyNkZWZpbmUgQVZfQ0hfQk9UVE9NX0ZST05U X1JJR0hUICAgICAoMVVMTCA8PCBBVl9DSEFOX0JPVFRPTV9GUk9OVF9SSUdIVCAgICkKKysjZGVm aW5lIEFWX0NIX1NJREVfU1VSUk9VTkRfTEVGVCAgICAgKDFVTEwgPDwgQVZfQ0hBTl9TSURFX1NV UlJPVU5EX0xFRlQgICApCisrI2RlZmluZSBBVl9DSF9TSURFX1NVUlJPVU5EX1JJR0hUICAgICgx VUxMIDw8IEFWX0NIQU5fU0lERV9TVVJST1VORF9SSUdIVCAgKQorKyNkZWZpbmUgQVZfQ0hfVE9Q X1NVUlJPVU5EX0xFRlQgICAgICAoMVVMTCA8PCBBVl9DSEFOX1RPUF9TVVJST1VORF9MRUZUICAg ICkKKysjZGVmaW5lIEFWX0NIX1RPUF9TVVJST1VORF9SSUdIVCAgICAgKDFVTEwgPDwgQVZfQ0hB Tl9UT1BfU1VSUk9VTkRfUklHSFQgICApCisrI2RlZmluZSBBVl9DSF9CSU5BVVJBTF9MRUZUICAg ICAgICAgICgxVUxMIDw8IEFWX0NIQU5fQklOQVVSQUxfTEVGVCAgICAgICAgKQorKyNkZWZpbmUg QVZfQ0hfQklOQVVSQUxfUklHSFQgICAgICAgICAoMVVMTCA8PCBBVl9DSEFOX0JJTkFVUkFMX1JJ R0hUICAgICAgICkKKysKKysvKioKKysgKiBAfQorKyAqIEBkZWZncm91cCBjaGFubmVsX21hc2tf YyBBdWRpbyBjaGFubmVsIGxheW91dHMKKysgKiBAeworKyAqICovCisrI2RlZmluZSBBVl9DSF9M QVlPVVRfTU9OTyAgICAgICAgICAgICAgKEFWX0NIX0ZST05UX0NFTlRFUikKKysjZGVmaW5lIEFW X0NIX0xBWU9VVF9TVEVSRU8gICAgICAgICAgICAoQVZfQ0hfRlJPTlRfTEVGVHxBVl9DSF9GUk9O VF9SSUdIVCkKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF8yUE9JTlQxICAgICAgICAgICAoQVZfQ0hf TEFZT1VUX1NURVJFT3xBVl9DSF9MT1dfRlJFUVVFTkNZKQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VU XzJfMSAgICAgICAgICAgICAgIChBVl9DSF9MQVlPVVRfU1RFUkVPfEFWX0NIX0JBQ0tfQ0VOVEVS KQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VUX1NVUlJPVU5EICAgICAgICAgIChBVl9DSF9MQVlPVVRf U1RFUkVPfEFWX0NIX0ZST05UX0NFTlRFUikKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF8zUE9JTlQx ICAgICAgICAgICAoQVZfQ0hfTEFZT1VUX1NVUlJPVU5EfEFWX0NIX0xPV19GUkVRVUVOQ1kpCisr I2RlZmluZSBBVl9DSF9MQVlPVVRfNFBPSU5UMCAgICAgICAgICAgKEFWX0NIX0xBWU9VVF9TVVJS T1VORHxBVl9DSF9CQUNLX0NFTlRFUikKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF80UE9JTlQxICAg ICAgICAgICAoQVZfQ0hfTEFZT1VUXzRQT0lOVDB8QVZfQ0hfTE9XX0ZSRVFVRU5DWSkKKysjZGVm aW5lIEFWX0NIX0xBWU9VVF8yXzIgICAgICAgICAgICAgICAoQVZfQ0hfTEFZT1VUX1NURVJFT3xB Vl9DSF9TSURFX0xFRlR8QVZfQ0hfU0lERV9SSUdIVCkKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF9R VUFEICAgICAgICAgICAgICAoQVZfQ0hfTEFZT1VUX1NURVJFT3xBVl9DSF9CQUNLX0xFRlR8QVZf Q0hfQkFDS19SSUdIVCkKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF81UE9JTlQwICAgICAgICAgICAo QVZfQ0hfTEFZT1VUX1NVUlJPVU5EfEFWX0NIX1NJREVfTEVGVHxBVl9DSF9TSURFX1JJR0hUKQor KyNkZWZpbmUgQVZfQ0hfTEFZT1VUXzVQT0lOVDEgICAgICAgICAgIChBVl9DSF9MQVlPVVRfNVBP SU5UMHxBVl9DSF9MT1dfRlJFUVVFTkNZKQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VUXzVQT0lOVDBf QkFDSyAgICAgIChBVl9DSF9MQVlPVVRfU1VSUk9VTkR8QVZfQ0hfQkFDS19MRUZUfEFWX0NIX0JB Q0tfUklHSFQpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRfNVBPSU5UMV9CQUNLICAgICAgKEFWX0NI X0xBWU9VVF81UE9JTlQwX0JBQ0t8QVZfQ0hfTE9XX0ZSRVFVRU5DWSkKKysjZGVmaW5lIEFWX0NI X0xBWU9VVF82UE9JTlQwICAgICAgICAgICAoQVZfQ0hfTEFZT1VUXzVQT0lOVDB8QVZfQ0hfQkFD S19DRU5URVIpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRfNlBPSU5UMF9GUk9OVCAgICAgKEFWX0NI X0xBWU9VVF8yXzJ8QVZfQ0hfRlJPTlRfTEVGVF9PRl9DRU5URVJ8QVZfQ0hfRlJPTlRfUklHSFRf T0ZfQ0VOVEVSKQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VUX0hFWEFHT05BTCAgICAgICAgIChBVl9D SF9MQVlPVVRfNVBPSU5UMF9CQUNLfEFWX0NIX0JBQ0tfQ0VOVEVSKQorKyNkZWZpbmUgQVZfQ0hf TEFZT1VUXzNQT0lOVDFQT0lOVDIgICAgIChBVl9DSF9MQVlPVVRfM1BPSU5UMXxBVl9DSF9UT1Bf RlJPTlRfTEVGVHxBVl9DSF9UT1BfRlJPTlRfUklHSFQpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRf NlBPSU5UMSAgICAgICAgICAgKEFWX0NIX0xBWU9VVF81UE9JTlQxfEFWX0NIX0JBQ0tfQ0VOVEVS KQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VUXzZQT0lOVDFfQkFDSyAgICAgIChBVl9DSF9MQVlPVVRf NVBPSU5UMV9CQUNLfEFWX0NIX0JBQ0tfQ0VOVEVSKQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VUXzZQ T0lOVDFfRlJPTlQgICAgIChBVl9DSF9MQVlPVVRfNlBPSU5UMF9GUk9OVHxBVl9DSF9MT1dfRlJF UVVFTkNZKQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VUXzdQT0lOVDAgICAgICAgICAgIChBVl9DSF9M QVlPVVRfNVBPSU5UMHxBVl9DSF9CQUNLX0xFRlR8QVZfQ0hfQkFDS19SSUdIVCkKKysjZGVmaW5l IEFWX0NIX0xBWU9VVF83UE9JTlQwX0ZST05UICAgICAoQVZfQ0hfTEFZT1VUXzVQT0lOVDB8QVZf Q0hfRlJPTlRfTEVGVF9PRl9DRU5URVJ8QVZfQ0hfRlJPTlRfUklHSFRfT0ZfQ0VOVEVSKQorKyNk ZWZpbmUgQVZfQ0hfTEFZT1VUXzdQT0lOVDEgICAgICAgICAgIChBVl9DSF9MQVlPVVRfNVBPSU5U MXxBVl9DSF9CQUNLX0xFRlR8QVZfQ0hfQkFDS19SSUdIVCkKKysjZGVmaW5lIEFWX0NIX0xBWU9V VF83UE9JTlQxX1dJREUgICAgICAoQVZfQ0hfTEFZT1VUXzVQT0lOVDF8QVZfQ0hfRlJPTlRfTEVG VF9PRl9DRU5URVJ8QVZfQ0hfRlJPTlRfUklHSFRfT0ZfQ0VOVEVSKQorKyNkZWZpbmUgQVZfQ0hf TEFZT1VUXzdQT0lOVDFfV0lERV9CQUNLIChBVl9DSF9MQVlPVVRfNVBPSU5UMV9CQUNLfEFWX0NI X0ZST05UX0xFRlRfT0ZfQ0VOVEVSfEFWX0NIX0ZST05UX1JJR0hUX09GX0NFTlRFUikKKysjZGVm aW5lIEFWX0NIX0xBWU9VVF81UE9JTlQxUE9JTlQyICAgICAoQVZfQ0hfTEFZT1VUXzVQT0lOVDF8 QVZfQ0hfVE9QX0ZST05UX0xFRlR8QVZfQ0hfVE9QX0ZST05UX1JJR0hUKQorKyNkZWZpbmUgQVZf Q0hfTEFZT1VUXzVQT0lOVDFQT0lOVDJfQkFDSyAoQVZfQ0hfTEFZT1VUXzVQT0lOVDFfQkFDS3xB Vl9DSF9UT1BfRlJPTlRfTEVGVHxBVl9DSF9UT1BfRlJPTlRfUklHSFQpCisrI2RlZmluZSBBVl9D SF9MQVlPVVRfT0NUQUdPTkFMICAgICAgICAgKEFWX0NIX0xBWU9VVF81UE9JTlQwfEFWX0NIX0JB Q0tfTEVGVHxBVl9DSF9CQUNLX0NFTlRFUnxBVl9DSF9CQUNLX1JJR0hUKQorKyNkZWZpbmUgQVZf Q0hfTEFZT1VUX0NVQkUgICAgICAgICAgICAgIChBVl9DSF9MQVlPVVRfUVVBRHxBVl9DSF9UT1Bf RlJPTlRfTEVGVHxBVl9DSF9UT1BfRlJPTlRfUklHSFR8QVZfQ0hfVE9QX0JBQ0tfTEVGVHxBVl9D SF9UT1BfQkFDS19SSUdIVCkKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF81UE9JTlQxUE9JTlQ0X0JB Q0sgKEFWX0NIX0xBWU9VVF81UE9JTlQxUE9JTlQyfEFWX0NIX1RPUF9CQUNLX0xFRlR8QVZfQ0hf VE9QX0JBQ0tfUklHSFQpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRfN1BPSU5UMVBPSU5UMiAgICAg KEFWX0NIX0xBWU9VVF83UE9JTlQxfEFWX0NIX1RPUF9GUk9OVF9MRUZUfEFWX0NIX1RPUF9GUk9O VF9SSUdIVCkKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF83UE9JTlQxUE9JTlQ0X0JBQ0sgKEFWX0NI X0xBWU9VVF83UE9JTlQxUE9JTlQyfEFWX0NIX1RPUF9CQUNLX0xFRlR8QVZfQ0hfVE9QX0JBQ0tf UklHSFQpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRfN1BPSU5UMlBPSU5UMyAgICAgKEFWX0NIX0xB WU9VVF83UE9JTlQxUE9JTlQyfEFWX0NIX1RPUF9CQUNLX0NFTlRFUnxBVl9DSF9MT1dfRlJFUVVF TkNZXzIpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRfOVBPSU5UMVBPSU5UNF9CQUNLIChBVl9DSF9M QVlPVVRfN1BPSU5UMVBPSU5UNF9CQUNLfEFWX0NIX0ZST05UX0xFRlRfT0ZfQ0VOVEVSfEFWX0NI X0ZST05UX1JJR0hUX09GX0NFTlRFUikKKysjZGVmaW5lIEFWX0NIX0xBWU9VVF85UE9JTlQxUE9J TlQ2ICAgICAoQVZfQ0hfTEFZT1VUXzlQT0lOVDFQT0lOVDRfQkFDS3xBVl9DSF9UT1BfU0lERV9M RUZUfEFWX0NIX1RPUF9TSURFX1JJR0hUKQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VUX0hFWEFERUNB R09OQUwgICAgIChBVl9DSF9MQVlPVVRfT0NUQUdPTkFMfEFWX0NIX1dJREVfTEVGVHxBVl9DSF9X SURFX1JJR0hUfEFWX0NIX1RPUF9CQUNLX0xFRlR8QVZfQ0hfVE9QX0JBQ0tfUklHSFR8QVZfQ0hf VE9QX0JBQ0tfQ0VOVEVSfEFWX0NIX1RPUF9GUk9OVF9DRU5URVJ8QVZfQ0hfVE9QX0ZST05UX0xF RlR8QVZfQ0hfVE9QX0ZST05UX1JJR0hUKQorKyNkZWZpbmUgQVZfQ0hfTEFZT1VUX0JJTkFVUkFM ICAgICAgICAgIChBVl9DSF9CSU5BVVJBTF9MRUZUfEFWX0NIX0JJTkFVUkFMX1JJR0hUKQorKyNk ZWZpbmUgQVZfQ0hfTEFZT1VUX1NURVJFT19ET1dOTUlYICAgIChBVl9DSF9TVEVSRU9fTEVGVHxB Vl9DSF9TVEVSRU9fUklHSFQpCisrI2RlZmluZSBBVl9DSF9MQVlPVVRfMjJQT0lOVDIgICAgICAg ICAgKEFWX0NIX0xBWU9VVF85UE9JTlQxUE9JTlQ2fEFWX0NIX0JBQ0tfQ0VOVEVSfEFWX0NIX0xP V19GUkVRVUVOQ1lfMnxBVl9DSF9UT1BfRlJPTlRfQ0VOVEVSfEFWX0NIX1RPUF9DRU5URVJ8QVZf Q0hfVE9QX0JBQ0tfQ0VOVEVSfEFWX0NIX0JPVFRPTV9GUk9OVF9DRU5URVJ8QVZfQ0hfQk9UVE9N X0ZST05UX0xFRlR8QVZfQ0hfQk9UVE9NX0ZST05UX1JJR0hUKQorKworKyNkZWZpbmUgQVZfQ0hf TEFZT1VUXzdQT0lOVDFfVE9QX0JBQ0sgQVZfQ0hfTEFZT1VUXzVQT0lOVDFQT0lOVDJfQkFDSwor KworK2VudW0gQVZNYXRyaXhFbmNvZGluZyB7CisrICAgIEFWX01BVFJJWF9FTkNPRElOR19OT05F LAorKyAgICBBVl9NQVRSSVhfRU5DT0RJTkdfRE9MQlksCisrICAgIEFWX01BVFJJWF9FTkNPRElO R19EUExJSSwKKysgICAgQVZfTUFUUklYX0VOQ09ESU5HX0RQTElJWCwKKysgICAgQVZfTUFUUklY X0VOQ09ESU5HX0RQTElJWiwKKysgICAgQVZfTUFUUklYX0VOQ09ESU5HX0RPTEJZRVgsCisrICAg IEFWX01BVFJJWF9FTkNPRElOR19ET0xCWUhFQURQSE9ORSwKKysgICAgQVZfTUFUUklYX0VOQ09E SU5HX05CCisrfTsKKysKKysvKioKKysgKiBAfQorKyAqLworKworKy8qKgorKyAqIEFuIEFWQ2hh bm5lbEN1c3RvbSBkZWZpbmVzIGEgc2luZ2xlIGNoYW5uZWwgd2l0aGluIGEgY3VzdG9tIG9yZGVy IGxheW91dAorKyAqCisrICogVW5saWtlIG1vc3Qgc3RydWN0dXJlcyBpbiBGRm1wZWcsIHNpemVv ZihBVkNoYW5uZWxDdXN0b20pIGlzIGEgcGFydCBvZiB0aGUKKysgKiBwdWJsaWMgQUJJLgorKyAq CisrICogTm8gbmV3IGZpZWxkcyBtYXkgYmUgYWRkZWQgdG8gaXQgd2l0aG91dCBhIG1ham9yIHZl cnNpb24gYnVtcC4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVkNoYW5uZWxDdXN0b20geworKyAg ICBlbnVtIEFWQ2hhbm5lbCBpZDsKKysgICAgY2hhciBuYW1lWzE2XTsKKysgICAgdm9pZCAqb3Bh cXVlOworK30gQVZDaGFubmVsQ3VzdG9tOworKworKy8qKgorKyAqIEFuIEFWQ2hhbm5lbExheW91 dCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhbm5lbCBsYXlvdXQgb2YgYXVkaW8gZGF0 YS4KKysgKgorKyAqIEEgY2hhbm5lbCBsYXlvdXQgaGVyZSBpcyBkZWZpbmVkIGFzIGEgc2V0IG9m IGNoYW5uZWxzIG9yZGVyZWQgaW4gYSBzcGVjaWZpYworKyAqIHdheSAodW5sZXNzIHRoZSBjaGFu bmVsIG9yZGVyIGlzIEFWX0NIQU5ORUxfT1JERVJfVU5TUEVDLCBpbiB3aGljaCBjYXNlIGFuCisr ICogQVZDaGFubmVsTGF5b3V0IGNhcnJpZXMgb25seSB0aGUgY2hhbm5lbCBjb3VudCkuCisrICog QWxsIG9yZGVycyBtYXkgYmUgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUgQVZfQ0hBTk5FTF9PUkRF Ul9VTlNQRUMgYnkKKysgKiBpZ25vcmluZyBldmVyeXRoaW5nIGJ1dCB0aGUgY2hhbm5lbCBjb3Vu dCwgYXMgbG9uZyBhcyBhdl9jaGFubmVsX2xheW91dF9jaGVjaygpCisrICogY29uc2lkZXJzIHRo ZXkgYXJlIHZhbGlkLgorKyAqCisrICogVW5saWtlIG1vc3Qgc3RydWN0dXJlcyBpbiBGRm1wZWcs IHNpemVvZihBVkNoYW5uZWxMYXlvdXQpIGlzIGEgcGFydCBvZiB0aGUKKysgKiBwdWJsaWMgQUJJ IGFuZCBtYXkgYmUgdXNlZCBieSB0aGUgY2FsbGVyLiBFLmcuIGl0IG1heSBiZSBhbGxvY2F0ZWQg b24gc3RhY2sKKysgKiBvciBlbWJlZGRlZCBpbiBjYWxsZXItZGVmaW5lZCBzdHJ1Y3RzLgorKyAq CisrICogQVZDaGFubmVsTGF5b3V0IGNhbiBiZSBpbml0aWFsaXplZCBhcyBmb2xsb3dzOgorKyAq IC0gZGVmYXVsdCBpbml0aWFsaXphdGlvbiB3aXRoIHswfSwgZm9sbG93ZWQgYnkgc2V0dGluZyBh bGwgdXNlZCBmaWVsZHMKKysgKiAgIGNvcnJlY3RseTsKKysgKiAtIGJ5IGFzc2lnbmluZyBvbmUg b2YgdGhlIHByZWRlZmluZWQgQVZfQ0hBTk5FTF9MQVlPVVRfKiBpbml0aWFsaXplcnM7CisrICog LSB3aXRoIGEgY29uc3RydWN0b3IgZnVuY3Rpb24sIHN1Y2ggYXMgYXZfY2hhbm5lbF9sYXlvdXRf ZGVmYXVsdCgpLAorKyAqICAgYXZfY2hhbm5lbF9sYXlvdXRfZnJvbV9tYXNrKCkgb3IgYXZfY2hh bm5lbF9sYXlvdXRfZnJvbV9zdHJpbmcoKS4KKysgKgorKyAqIFRoZSBjaGFubmVsIGxheW91dCBt dXN0IGJlIHVuaW5pdGlhbGl6ZWQgd2l0aCBhdl9jaGFubmVsX2xheW91dF91bmluaXQoKQorKyAq CisrICogQ29weWluZyBhbiBBVkNoYW5uZWxMYXlvdXQgdmlhIGFzc2lnbmluZyBpcyBmb3JiaWRk ZW4sCisrICogYXZfY2hhbm5lbF9sYXlvdXRfY29weSgpIG11c3QgYmUgdXNlZCBpbnN0ZWFkIChh bmQgaXRzIHJldHVybiB2YWx1ZSBzaG91bGQKKysgKiBiZSBjaGVja2VkKQorKyAqCisrICogTm8g bmV3IGZpZWxkcyBtYXkgYmUgYWRkZWQgdG8gaXQgd2l0aG91dCBhIG1ham9yIHZlcnNpb24gYnVt cCwgZXhjZXB0IGZvcgorKyAqIG5ldyBlbGVtZW50cyBvZiB0aGUgdW5pb24gZml0dGluZyBpbiBz aXplb2YodWludDY0X3QpLgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWQ2hhbm5lbExheW91dCB7 CisrICAgIC8qKgorKyAgICAgKiBDaGFubmVsIG9yZGVyIHVzZWQgaW4gdGhpcyBsYXlvdXQuCisr ICAgICAqIFRoaXMgaXMgYSBtYW5kYXRvcnkgZmllbGQuCisrICAgICAqLworKyAgICBlbnVtIEFW Q2hhbm5lbE9yZGVyIG9yZGVyOworKworKyAgICAvKioKKysgICAgICogTnVtYmVyIG9mIGNoYW5u ZWxzIGluIHRoaXMgbGF5b3V0LiBNYW5kYXRvcnkgZmllbGQuCisrICAgICAqLworKyAgICBpbnQg bmJfY2hhbm5lbHM7CisrCisrICAgIC8qKgorKyAgICAgKiBEZXRhaWxzIGFib3V0IHdoaWNoIGNo YW5uZWxzIGFyZSBwcmVzZW50IGluIHRoaXMgbGF5b3V0LgorKyAgICAgKiBGb3IgQVZfQ0hBTk5F TF9PUkRFUl9VTlNQRUMsIHRoaXMgZmllbGQgaXMgdW5kZWZpbmVkIGFuZCBtdXN0IG5vdCBiZQor KyAgICAgKiB1c2VkLgorKyAgICAgKi8KKysgICAgdW5pb24geworKyAgICAgICAgLyoqCisrICAg ICAgICAgKiBUaGlzIG1lbWJlciBtdXN0IGJlIHVzZWQgZm9yIEFWX0NIQU5ORUxfT1JERVJfTkFU SVZFLCBhbmQgbWF5IGJlIHVzZWQKKysgICAgICAgICAqIGZvciBBVl9DSEFOTkVMX09SREVSX0FN QklTT05JQyB0byBzaWduYWwgbm9uLWRpZWdldGljIGNoYW5uZWxzLgorKyAgICAgICAgICogSXQg aXMgYSBiaXRtYXNrLCB3aGVyZSB0aGUgcG9zaXRpb24gb2YgZWFjaCBzZXQgYml0IG1lYW5zIHRo YXQgdGhlCisrICAgICAgICAgKiBBVkNoYW5uZWwgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB2YWx1 ZSBpcyBwcmVzZW50LgorKyAgICAgICAgICoKKysgICAgICAgICAqIEkuZS4gd2hlbiAobWFzayAm ICgxIDw8IEFWX0NIQU5fRk9PKSkgaXMgbm9uLXplcm8sIHRoZW4gQVZfQ0hBTl9GT08KKysgICAg ICAgICAqIGlzIHByZXNlbnQgaW4gdGhlIGxheW91dC4gT3RoZXJ3aXNlIGl0IGlzIG5vdCBwcmVz ZW50LgorKyAgICAgICAgICoKKysgICAgICAgICAqIEBub3RlIHdoZW4gYSBjaGFubmVsIGxheW91 dCB1c2luZyBhIGJpdG1hc2sgaXMgY29uc3RydWN0ZWQgb3IKKysgICAgICAgICAqIG1vZGlmaWVk IG1hbnVhbGx5IChpLmUuICBub3QgdXNpbmcgYW55IG9mIHRoZSBhdl9jaGFubmVsX2xheW91dF8q CisrICAgICAgICAgKiBmdW5jdGlvbnMpLCB0aGUgY29kZSBkb2luZyBpdCBtdXN0IGVuc3VyZSB0 aGF0IHRoZSBudW1iZXIgb2Ygc2V0IGJpdHMKKysgICAgICAgICAqIGlzIGVxdWFsIHRvIG5iX2No YW5uZWxzLgorKyAgICAgICAgICovCisrICAgICAgICB1aW50NjRfdCBtYXNrOworKyAgICAgICAg LyoqCisrICAgICAgICAgKiBUaGlzIG1lbWJlciBtdXN0IGJlIHVzZWQgd2hlbiB0aGUgY2hhbm5l bCBvcmRlciBpcworKyAgICAgICAgICogQVZfQ0hBTk5FTF9PUkRFUl9DVVNUT00uIEl0IGlzIGEg bmJfY2hhbm5lbHMtc2l6ZWQgYXJyYXksIHdpdGggZWFjaAorKyAgICAgICAgICogZWxlbWVudCBz aWduYWxsaW5nIHRoZSBwcmVzZW5jZSBvZiB0aGUgQVZDaGFubmVsIHdpdGggdGhlCisrICAgICAg ICAgKiBjb3JyZXNwb25kaW5nIHZhbHVlIGluIG1hcFtpXS5pZC4KKysgICAgICAgICAqCisrICAg ICAgICAgKiBJLmUuIHdoZW4gbWFwW2ldLmlkIGlzIGVxdWFsIHRvIEFWX0NIQU5fRk9PLCB0aGVu IEFWX0NIX0ZPTyBpcyB0aGUKKysgICAgICAgICAqIGktdGggY2hhbm5lbCBpbiB0aGUgYXVkaW8g ZGF0YS4KKysgICAgICAgICAqCisrICAgICAgICAgKiBXaGVuIG1hcFtpXS5pZCBpcyBpbiB0aGUg cmFuZ2UgYmV0d2VlbiBBVl9DSEFOX0FNQklTT05JQ19CQVNFIGFuZAorKyAgICAgICAgICogQVZf Q0hBTl9BTUJJU09OSUNfRU5EIChpbmNsdXNpdmUpLCB0aGUgY2hhbm5lbCBjb250YWlucyBhbiBh bWJpc29uaWMKKysgICAgICAgICAqIGNvbXBvbmVudCB3aXRoIEFDTiBpbmRleCAoYXMgZGVmaW5l ZCBhYm92ZSkKKysgICAgICAgICAqIG4gPSBtYXBbaV0uaWQgLSBBVl9DSEFOX0FNQklTT05JQ19C QVNFLgorKyAgICAgICAgICoKKysgICAgICAgICAqIG1hcFtpXS5uYW1lIG1heSBiZSBmaWxsZWQg d2l0aCBhIDAtdGVybWluYXRlZCBzdHJpbmcsIGluIHdoaWNoIGNhc2UKKysgICAgICAgICAqIGl0 IHdpbGwgYmUgdXNlZCBmb3IgdGhlIHB1cnBvc2Ugb2YgaWRlbnRpZnlpbmcgdGhlIGNoYW5uZWwg d2l0aCB0aGUKKysgICAgICAgICAqIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBiZWxvdy4gT3RoZXJ3 aXNlIGl0IG11c3QgYmUgemVyb2VkLgorKyAgICAgICAgICovCisrICAgICAgICBBVkNoYW5uZWxD dXN0b20gKm1hcDsKKysgICAgfSB1OworKworKyAgICAvKioKKysgICAgICogRm9yIHNvbWUgcHJp dmF0ZSBkYXRhIG9mIHRoZSB1c2VyLgorKyAgICAgKi8KKysgICAgdm9pZCAqb3BhcXVlOworK30g QVZDaGFubmVsTGF5b3V0OworKworKy8qKgorKyAqIE1hY3JvIHRvIGRlZmluZSBuYXRpdmUgY2hh bm5lbCBsYXlvdXRzCisrICoKKysgKiBAbm90ZSBUaGlzIGRvZXNuJ3QgdXNlIGRlc2lnbmF0ZWQg aW5pdGlhbGl6ZXJzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQysrIDE3IGFuZCBvbGRlci4KKysg Ki8KKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUX01BU0sobmIsIG0pIFwKKysgICAgeyAvKiAu b3JkZXIgKi8gQVZfQ0hBTk5FTF9PUkRFUl9OQVRJVkUsIFwKKysgICAgICAvKiAubmJfY2hhbm5l bHMgKi8gIChuYiksIFwKKysgICAgICAvKiAudS5tYXNrICovIHsgbSB9LCBcCisrICAgICAgLyog Lm9wYXF1ZSAqLyBOVUxMIH0KKysKKysvKioKKysgKiBAbmFtZSBDb21tb24gcHJlLWRlZmluZWQg Y2hhbm5lbCBsYXlvdXRzCisrICogQHsKKysgKi8KKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VU X01PTk8gICAgICAgICAgICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0soMSwgIEFWX0NIX0xBWU9V VF9NT05PKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPICAgICAgICAgICAgQVZf Q0hBTk5FTF9MQVlPVVRfTUFTSygyLCAgQVZfQ0hfTEFZT1VUX1NURVJFTykKKysjZGVmaW5lIEFW X0NIQU5ORUxfTEFZT1VUXzJQT0lOVDEgICAgICAgICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0so MywgIEFWX0NIX0xBWU9VVF8yUE9JTlQxKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfMl8x ICAgICAgICAgICAgICAgQVZfQ0hBTk5FTF9MQVlPVVRfTUFTSygzLCAgQVZfQ0hfTEFZT1VUXzJf MSkKKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUX1NVUlJPVU5EICAgICAgICAgIEFWX0NIQU5O RUxfTEFZT1VUX01BU0soMywgIEFWX0NIX0xBWU9VVF9TVVJST1VORCkKKysjZGVmaW5lIEFWX0NI QU5ORUxfTEFZT1VUXzNQT0lOVDEgICAgICAgICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0soNCwg IEFWX0NIX0xBWU9VVF8zUE9JTlQxKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfNFBPSU5U MCAgICAgICAgICAgQVZfQ0hBTk5FTF9MQVlPVVRfTUFTSyg0LCAgQVZfQ0hfTEFZT1VUXzRQT0lO VDApCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF80UE9JTlQxICAgICAgICAgICBBVl9DSEFO TkVMX0xBWU9VVF9NQVNLKDUsICBBVl9DSF9MQVlPVVRfNFBPSU5UMSkKKysjZGVmaW5lIEFWX0NI QU5ORUxfTEFZT1VUXzJfMiAgICAgICAgICAgICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0soNCwg IEFWX0NIX0xBWU9VVF8yXzIpCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF9RVUFEICAgICAg ICAgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDQsICBBVl9DSF9MQVlPVVRfUVVBRCkKKysj ZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUXzVQT0lOVDAgICAgICAgICAgIEFWX0NIQU5ORUxfTEFZ T1VUX01BU0soNSwgIEFWX0NIX0xBWU9VVF81UE9JTlQwKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9M QVlPVVRfNVBPSU5UMSAgICAgICAgICAgQVZfQ0hBTk5FTF9MQVlPVVRfTUFTSyg2LCAgQVZfQ0hf TEFZT1VUXzVQT0lOVDEpCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF81UE9JTlQwX0JBQ0sg ICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDUsICBBVl9DSF9MQVlPVVRfNVBPSU5UMF9CQUNL KQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfNVBPSU5UMV9CQUNLICAgICAgQVZfQ0hBTk5F TF9MQVlPVVRfTUFTSyg2LCAgQVZfQ0hfTEFZT1VUXzVQT0lOVDFfQkFDSykKKysjZGVmaW5lIEFW X0NIQU5ORUxfTEFZT1VUXzZQT0lOVDAgICAgICAgICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0so NiwgIEFWX0NIX0xBWU9VVF82UE9JTlQwKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfNlBP SU5UMF9GUk9OVCAgICAgQVZfQ0hBTk5FTF9MQVlPVVRfTUFTSyg2LCAgQVZfQ0hfTEFZT1VUXzZQ T0lOVDBfRlJPTlQpCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF8zUE9JTlQxUE9JTlQyICAg ICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDYsICBBVl9DSF9MQVlPVVRfM1BPSU5UMVBPSU5UMikK KysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUX0hFWEFHT05BTCAgICAgICAgIEFWX0NIQU5ORUxf TEFZT1VUX01BU0soNiwgIEFWX0NIX0xBWU9VVF9IRVhBR09OQUwpCisrI2RlZmluZSBBVl9DSEFO TkVMX0xBWU9VVF82UE9JTlQxICAgICAgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDcsICBB Vl9DSF9MQVlPVVRfNlBPSU5UMSkKKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUXzZQT0lOVDFf QkFDSyAgICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0soNywgIEFWX0NIX0xBWU9VVF82UE9JTlQx X0JBQ0spCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF82UE9JTlQxX0ZST05UICAgICBBVl9D SEFOTkVMX0xBWU9VVF9NQVNLKDcsICBBVl9DSF9MQVlPVVRfNlBPSU5UMV9GUk9OVCkKKysjZGVm aW5lIEFWX0NIQU5ORUxfTEFZT1VUXzdQT0lOVDAgICAgICAgICAgIEFWX0NIQU5ORUxfTEFZT1VU X01BU0soNywgIEFWX0NIX0xBWU9VVF83UE9JTlQwKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlP VVRfN1BPSU5UMF9GUk9OVCAgICAgQVZfQ0hBTk5FTF9MQVlPVVRfTUFTSyg3LCAgQVZfQ0hfTEFZ T1VUXzdQT0lOVDBfRlJPTlQpCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF83UE9JTlQxICAg ICAgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDgsICBBVl9DSF9MQVlPVVRfN1BPSU5UMSkK KysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUXzdQT0lOVDFfV0lERSAgICAgIEFWX0NIQU5ORUxf TEFZT1VUX01BU0soOCwgIEFWX0NIX0xBWU9VVF83UE9JTlQxX1dJREUpCisrI2RlZmluZSBBVl9D SEFOTkVMX0xBWU9VVF83UE9JTlQxX1dJREVfQkFDSyBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDgs ICBBVl9DSF9MQVlPVVRfN1BPSU5UMV9XSURFX0JBQ0spCisrI2RlZmluZSBBVl9DSEFOTkVMX0xB WU9VVF81UE9JTlQxUE9JTlQyICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDgsICBBVl9DSF9M QVlPVVRfNVBPSU5UMVBPSU5UMikKKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUXzVQT0lOVDFQ T0lOVDJfQkFDSyBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDgsIEFWX0NIX0xBWU9VVF81UE9JTlQx UE9JTlQyX0JBQ0spCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF9PQ1RBR09OQUwgICAgICAg ICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDgsICBBVl9DSF9MQVlPVVRfT0NUQUdPTkFMKQorKyNk ZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfQ1VCRSAgICAgICAgICAgICAgQVZfQ0hBTk5FTF9MQVlP VVRfTUFTSyg4LCAgQVZfQ0hfTEFZT1VUX0NVQkUpCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9V VF81UE9JTlQxUE9JTlQ0X0JBQ0sgQVZfQ0hBTk5FTF9MQVlPVVRfTUFTSygxMCwgQVZfQ0hfTEFZ T1VUXzVQT0lOVDFQT0lOVDRfQkFDSykKKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUXzdQT0lO VDFQT0lOVDIgICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0soMTAsIEFWX0NIX0xBWU9VVF83UE9J TlQxUE9JTlQyKQorKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfN1BPSU5UMVBPSU5UNF9CQUNL IEFWX0NIQU5ORUxfTEFZT1VUX01BU0soMTIsIEFWX0NIX0xBWU9VVF83UE9JTlQxUE9JTlQ0X0JB Q0spCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF83UE9JTlQyUE9JTlQzICAgICBBVl9DSEFO TkVMX0xBWU9VVF9NQVNLKDEyLCBBVl9DSF9MQVlPVVRfN1BPSU5UMlBPSU5UMykKKysjZGVmaW5l IEFWX0NIQU5ORUxfTEFZT1VUXzlQT0lOVDFQT0lOVDRfQkFDSyBBVl9DSEFOTkVMX0xBWU9VVF9N QVNLKDE0LCBBVl9DSF9MQVlPVVRfOVBPSU5UMVBPSU5UNF9CQUNLKQorKyNkZWZpbmUgQVZfQ0hB Tk5FTF9MQVlPVVRfOVBPSU5UMVBPSU5UNiAgICAgQVZfQ0hBTk5FTF9MQVlPVVRfTUFTSygxNiwg QVZfQ0hfTEFZT1VUXzlQT0lOVDFQT0lOVDYpCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF9I RVhBREVDQUdPTkFMICAgICBBVl9DSEFOTkVMX0xBWU9VVF9NQVNLKDE2LCBBVl9DSF9MQVlPVVRf SEVYQURFQ0FHT05BTCkKKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUX0JJTkFVUkFMICAgICAg ICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0soMiwgIEFWX0NIX0xBWU9VVF9CSU5BVVJBTCkKKysj ZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUX1NURVJFT19ET1dOTUlYICAgIEFWX0NIQU5ORUxfTEFZ T1VUX01BU0soMiwgIEFWX0NIX0xBWU9VVF9TVEVSRU9fRE9XTk1JWCkKKysjZGVmaW5lIEFWX0NI QU5ORUxfTEFZT1VUXzIyUE9JTlQyICAgICAgICAgIEFWX0NIQU5ORUxfTEFZT1VUX01BU0soMjQs IEFWX0NIX0xBWU9VVF8yMlBPSU5UMikKKysKKysjZGVmaW5lIEFWX0NIQU5ORUxfTEFZT1VUXzdQ T0lOVDFfVE9QX0JBQ0sgIEFWX0NIQU5ORUxfTEFZT1VUXzVQT0lOVDFQT0lOVDJfQkFDSworKwor KyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfQU1CSVNPTklDX0ZJUlNUX09SREVSIFwKKysgICAg eyAvKiAub3JkZXIgKi8gQVZfQ0hBTk5FTF9PUkRFUl9BTUJJU09OSUMsIFwKKysgICAgICAvKiAu bmJfY2hhbm5lbHMgKi8gNCwgXAorKyAgICAgIC8qIC51Lm1hc2sgKi8geyAwIH0sIFwKKysgICAg ICAvKiAub3BhcXVlICovIE5VTEwgfQorKy8qKiBAfSAqLworKworK3N0cnVjdCBBVkJQcmludDsK KysKKysvKioKKysgKiBHZXQgYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgaW4gYW4gYWJicmV2aWF0 ZWQgZm9ybSBkZXNjcmliaW5nIGEgZ2l2ZW4gY2hhbm5lbC4KKysgKiBUaGlzIGlzIHRoZSBpbnZl cnNlIGZ1bmN0aW9uIG9mIEByZWYgYXZfY2hhbm5lbF9mcm9tX3N0cmluZygpLgorKyAqCisrICog QHBhcmFtIGJ1ZiBwcmUtYWxsb2NhdGVkIGJ1ZmZlciB3aGVyZSB0byBwdXQgdGhlIGdlbmVyYXRl ZCBzdHJpbmcKKysgKiBAcGFyYW0gYnVmX3NpemUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgYnVmZmVy LgorKyAqIEBwYXJhbSBjaGFubmVsIHRoZSBBVkNoYW5uZWwgd2hvc2UgbmFtZSB0byBnZXQKKysg KiBAcmV0dXJuIGFtb3VudCBvZiBieXRlcyBuZWVkZWQgdG8gaG9sZCB0aGUgb3V0cHV0IHN0cmlu Zywgb3IgYSBuZWdhdGl2ZSBBVkVSUk9SCisrICogICAgICAgICBvbiBmYWlsdXJlLiBJZiB0aGUg cmV0dXJuZWQgdmFsdWUgaXMgYmlnZ2VyIHRoYW4gYnVmX3NpemUsIHRoZW4gdGhlCisrICogICAg ICAgICBzdHJpbmcgd2FzIHRydW5jYXRlZC4KKysgKi8KKytpbnQgYXZfY2hhbm5lbF9uYW1lKGNo YXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBlbnVtIEFWQ2hhbm5lbCBjaGFubmVsKTsKKysKKysv KioKKysgKiBicHJpbnQgdmFyaWFudCBvZiBhdl9jaGFubmVsX25hbWUoKS4KKysgKgorKyAqIEBu b3RlIHRoZSBzdHJpbmcgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgYnByaW50IGJ1ZmZlci4KKysg Ki8KKyt2b2lkIGF2X2NoYW5uZWxfbmFtZV9icHJpbnQoc3RydWN0IEFWQlByaW50ICpicCwgZW51 bSBBVkNoYW5uZWwgY2hhbm5lbF9pZCk7CisrCisrLyoqCisrICogR2V0IGEgaHVtYW4gcmVhZGFi bGUgc3RyaW5nIGRlc2NyaWJpbmcgYSBnaXZlbiBjaGFubmVsLgorKyAqCisrICogQHBhcmFtIGJ1 ZiBwcmUtYWxsb2NhdGVkIGJ1ZmZlciB3aGVyZSB0byBwdXQgdGhlIGdlbmVyYXRlZCBzdHJpbmcK KysgKiBAcGFyYW0gYnVmX3NpemUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgYnVmZmVyLgorKyAqIEBw YXJhbSBjaGFubmVsIHRoZSBBVkNoYW5uZWwgd2hvc2UgZGVzY3JpcHRpb24gdG8gZ2V0CisrICog QHJldHVybiBhbW91bnQgb2YgYnl0ZXMgbmVlZGVkIHRvIGhvbGQgdGhlIG91dHB1dCBzdHJpbmcs IG9yIGEgbmVnYXRpdmUgQVZFUlJPUgorKyAqICAgICAgICAgb24gZmFpbHVyZS4gSWYgdGhlIHJl dHVybmVkIHZhbHVlIGlzIGJpZ2dlciB0aGFuIGJ1Zl9zaXplLCB0aGVuIHRoZQorKyAqICAgICAg ICAgc3RyaW5nIHdhcyB0cnVuY2F0ZWQuCisrICovCisraW50IGF2X2NoYW5uZWxfZGVzY3JpcHRp b24oY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGVudW0gQVZDaGFubmVsIGNoYW5uZWwpOwor KworKy8qKgorKyAqIGJwcmludCB2YXJpYW50IG9mIGF2X2NoYW5uZWxfZGVzY3JpcHRpb24oKS4K KysgKgorKyAqIEBub3RlIHRoZSBzdHJpbmcgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgYnByaW50 IGJ1ZmZlci4KKysgKi8KKyt2b2lkIGF2X2NoYW5uZWxfZGVzY3JpcHRpb25fYnByaW50KHN0cnVj dCBBVkJQcmludCAqYnAsIGVudW0gQVZDaGFubmVsIGNoYW5uZWxfaWQpOworKworKy8qKgorKyAq IFRoaXMgaXMgdGhlIGludmVyc2UgZnVuY3Rpb24gb2YgQHJlZiBhdl9jaGFubmVsX25hbWUoKS4K KysgKgorKyAqIEByZXR1cm4gdGhlIGNoYW5uZWwgd2l0aCB0aGUgZ2l2ZW4gbmFtZQorKyAqICAg ICAgICAgQVZfQ0hBTl9OT05FIHdoZW4gbmFtZSBkb2VzIG5vdCBpZGVudGlmeSBhIGtub3duIGNo YW5uZWwKKysgKi8KKytlbnVtIEFWQ2hhbm5lbCBhdl9jaGFubmVsX2Zyb21fc3RyaW5nKGNvbnN0 IGNoYXIgKm5hbWUpOworKworKy8qKgorKyAqIEluaXRpYWxpemUgYSBjdXN0b20gY2hhbm5lbCBs YXlvdXQgd2l0aCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBjaGFubmVscy4KKysgKiBUaGUgY2hh bm5lbCBtYXAgd2lsbCBiZSBhbGxvY2F0ZWQgYW5kIHRoZSBkZXNpZ25hdGlvbiBvZiBhbGwgY2hh bm5lbHMgd2lsbAorKyAqIGJlIHNldCB0byBBVl9DSEFOX1VOS05PV04uCisrICoKKysgKiBUaGlz IGlzIG9ubHkgYSBjb252ZW5pZW5jZSBoZWxwZXIgZnVuY3Rpb24sIGEgY3VzdG9tIGNoYW5uZWwg bGF5b3V0IGNhbiBhbHNvCisrICogYmUgY29uc3RydWN0ZWQgd2l0aG91dCB1c2luZyB0aGlzLgor KyAqCisrICogQHBhcmFtIGNoYW5uZWxfbGF5b3V0IHRoZSBsYXlvdXQgc3RydWN0dXJlIHRvIGJl IGluaXRpYWxpemVkCisrICogQHBhcmFtIG5iX2NoYW5uZWxzIHRoZSBudW1iZXIgb2YgY2hhbm5l bHMKKysgKgorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzCisrICogICAgICAgICBBVkVSUk9SKEVJ TlZBTCkgaWYgdGhlIG51bWJlciBvZiBjaGFubmVscyA8PSAwCisrICogICAgICAgICBBVkVSUk9S KEVOT01FTSkgaWYgdGhlIGNoYW5uZWwgbWFwIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQKKysgKi8K KytpbnQgYXZfY2hhbm5lbF9sYXlvdXRfY3VzdG9tX2luaXQoQVZDaGFubmVsTGF5b3V0ICpjaGFu bmVsX2xheW91dCwgaW50IG5iX2NoYW5uZWxzKTsKKysKKysvKioKKysgKiBJbml0aWFsaXplIGEg bmF0aXZlIGNoYW5uZWwgbGF5b3V0IGZyb20gYSBiaXRtYXNrIGluZGljYXRpbmcgd2hpY2ggY2hh bm5lbHMKKysgKiBhcmUgcHJlc2VudC4KKysgKgorKyAqIEBwYXJhbSBjaGFubmVsX2xheW91dCB0 aGUgbGF5b3V0IHN0cnVjdHVyZSB0byBiZSBpbml0aWFsaXplZAorKyAqIEBwYXJhbSBtYXNrIGJp dG1hc2sgZGVzY3JpYmluZyB0aGUgY2hhbm5lbCBsYXlvdXQKKysgKgorKyAqIEByZXR1cm4gMCBv biBzdWNjZXNzCisrICogICAgICAgICBBVkVSUk9SKEVJTlZBTCkgZm9yIGludmFsaWQgbWFzayB2 YWx1ZXMKKysgKi8KKytpbnQgYXZfY2hhbm5lbF9sYXlvdXRfZnJvbV9tYXNrKEFWQ2hhbm5lbExh eW91dCAqY2hhbm5lbF9sYXlvdXQsIHVpbnQ2NF90IG1hc2spOworKworKy8qKgorKyAqIEluaXRp YWxpemUgYSBjaGFubmVsIGxheW91dCBmcm9tIGEgZ2l2ZW4gc3RyaW5nIGRlc2NyaXB0aW9uLgor KyAqIFRoZSBpbnB1dCBzdHJpbmcgY2FuIGJlIHJlcHJlc2VudGVkIGJ5OgorKyAqICAtIHRoZSBm b3JtYWwgY2hhbm5lbCBsYXlvdXQgbmFtZSAocmV0dXJuZWQgYnkgYXZfY2hhbm5lbF9sYXlvdXRf ZGVzY3JpYmUoKSkKKysgKiAgLSBzaW5nbGUgb3IgbXVsdGlwbGUgY2hhbm5lbCBuYW1lcyAocmV0 dXJuZWQgYnkgYXZfY2hhbm5lbF9uYW1lKCksIGVnLiAiRkwiLAorKyAqICAgIG9yIGNvbmNhdGVu YXRlZCB3aXRoICIrIiwgZWFjaCBvcHRpb25hbGx5IGNvbnRhaW5pbmcgYSBjdXN0b20gbmFtZSBh ZnRlcgorKyAqICAgIGEgIkAiLCBlZy4gIkZMQExlZnQrRlJAUmlnaHQrTEZFIikKKysgKiAgLSBh IGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwgdmFsdWUgb2YgYSBuYXRpdmUgY2hhbm5lbCBsYXlvdXQg KGVnLiAiNCIgb3IgIjB4NCIpCisrICogIC0gdGhlIG51bWJlciBvZiBjaGFubmVscyB3aXRoIGRl ZmF1bHQgbGF5b3V0IChlZy4gIjRjIikKKysgKiAgLSB0aGUgbnVtYmVyIG9mIHVub3JkZXJlZCBj aGFubmVscyAoZWcuICI0QyIgb3IgIjQgY2hhbm5lbHMiKQorKyAqICAtIHRoZSBhbWJpc29uaWMg b3JkZXIgZm9sbG93ZWQgYnkgb3B0aW9uYWwgbm9uLWRpZWdldGljIGNoYW5uZWxzIChlZy4KKysg KiAgICAiYW1iaXNvbmljIDIrc3RlcmVvIikKKysgKiBPbiBlcnJvciwgdGhlIGNoYW5uZWwgbGF5 b3V0IHdpbGwgcmVtYWluIHVuaW5pdGlhbGl6ZWQsIGJ1dCBub3QgbmVjZXNzYXJpbHkKKysgKiB1 bnRvdWNoZWQuCisrICoKKysgKiBAcGFyYW0gY2hhbm5lbF9sYXlvdXQgdW5pbml0aWFsaXplZCBj aGFubmVsIGxheW91dCBmb3IgdGhlIHJlc3VsdAorKyAqIEBwYXJhbSBzdHIgc3RyaW5nIGRlc2Ny aWJpbmcgdGhlIGNoYW5uZWwgbGF5b3V0CisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MgcGFyc2lu ZyB0aGUgY2hhbm5lbCBsYXlvdXQKKysgKiAgICAgICAgIEFWRVJST1IoRUlOVkFMKSBpZiBhbiBp bnZhbGlkIGNoYW5uZWwgbGF5b3V0IHN0cmluZyB3YXMgcHJvdmlkZWQKKysgKiAgICAgICAgIEFW RVJST1IoRU5PTUVNKSBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCBtZW1vcnkKKysgKi8KKytpbnQg YXZfY2hhbm5lbF9sYXlvdXRfZnJvbV9zdHJpbmcoQVZDaGFubmVsTGF5b3V0ICpjaGFubmVsX2xh eW91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3Ry KTsKKysKKysvKioKKysgKiBHZXQgdGhlIGRlZmF1bHQgY2hhbm5lbCBsYXlvdXQgZm9yIGEgZ2l2 ZW4gbnVtYmVyIG9mIGNoYW5uZWxzLgorKyAqCisrICogQHBhcmFtIGNoX2xheW91dCB0aGUgbGF5 b3V0IHN0cnVjdHVyZSB0byBiZSBpbml0aWFsaXplZAorKyAqIEBwYXJhbSBuYl9jaGFubmVscyBu dW1iZXIgb2YgY2hhbm5lbHMKKysgKi8KKyt2b2lkIGF2X2NoYW5uZWxfbGF5b3V0X2RlZmF1bHQo QVZDaGFubmVsTGF5b3V0ICpjaF9sYXlvdXQsIGludCBuYl9jaGFubmVscyk7CisrCisrLyoqCisr ICogSXRlcmF0ZSBvdmVyIGFsbCBzdGFuZGFyZCBjaGFubmVsIGxheW91dHMuCisrICoKKysgKiBA cGFyYW0gb3BhcXVlIGEgcG9pbnRlciB3aGVyZSBsaWJhdnV0aWwgd2lsbCBzdG9yZSB0aGUgaXRl cmF0aW9uIHN0YXRlLiBNdXN0CisrICogICAgICAgICAgICAgICBwb2ludCB0byBOVUxMIHRvIHN0 YXJ0IHRoZSBpdGVyYXRpb24uCisrICoKKysgKiBAcmV0dXJuIHRoZSBzdGFuZGFyZCBjaGFubmVs IGxheW91dCBvciBOVUxMIHdoZW4gdGhlIGl0ZXJhdGlvbiBpcworKyAqICAgICAgICAgZmluaXNo ZWQKKysgKi8KKytjb25zdCBBVkNoYW5uZWxMYXlvdXQgKmF2X2NoYW5uZWxfbGF5b3V0X3N0YW5k YXJkKHZvaWQgKipvcGFxdWUpOworKworKy8qKgorKyAqIEZyZWUgYW55IGFsbG9jYXRlZCBkYXRh IGluIHRoZSBjaGFubmVsIGxheW91dCBhbmQgcmVzZXQgdGhlIGNoYW5uZWwKKysgKiBjb3VudCB0 byAwLgorKyAqCisrICogQHBhcmFtIGNoYW5uZWxfbGF5b3V0IHRoZSBsYXlvdXQgc3RydWN0dXJl IHRvIGJlIHVuaW5pdGlhbGl6ZWQKKysgKi8KKyt2b2lkIGF2X2NoYW5uZWxfbGF5b3V0X3VuaW5p dChBVkNoYW5uZWxMYXlvdXQgKmNoYW5uZWxfbGF5b3V0KTsKKysKKysvKioKKysgKiBNYWtlIGEg Y29weSBvZiBhIGNoYW5uZWwgbGF5b3V0LiBUaGlzIGRpZmZlcnMgZnJvbSBqdXN0IGFzc2lnbmlu ZyBzcmMgdG8gZHN0CisrICogaW4gdGhhdCBpdCBhbGxvY2F0ZXMgYW5kIGNvcGllcyB0aGUgbWFw IGZvciBBVl9DSEFOTkVMX09SREVSX0NVU1RPTS4KKysgKgorKyAqIEBub3RlIHRoZSBkZXN0aW5h dGlvbiBjaGFubmVsX2xheW91dCB3aWxsIGJlIGFsd2F5cyB1bmluaXRpYWxpemVkIGJlZm9yZSBj b3B5LgorKyAqCisrICogQHBhcmFtIGRzdCBkZXN0aW5hdGlvbiBjaGFubmVsIGxheW91dAorKyAq IEBwYXJhbSBzcmMgc291cmNlIGNoYW5uZWwgbGF5b3V0CisrICogQHJldHVybiAwIG9uIHN1Y2Nl c3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBvbiBlcnJvci4KKysgKi8KKytpbnQgYXZfY2hhbm5lbF9s YXlvdXRfY29weShBVkNoYW5uZWxMYXlvdXQgKmRzdCwgY29uc3QgQVZDaGFubmVsTGF5b3V0ICpz cmMpOworKworKy8qKgorKyAqIEdldCBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyBkZXNjcmliaW5n IHRoZSBjaGFubmVsIGxheW91dCBwcm9wZXJ0aWVzLgorKyAqIFRoZSBzdHJpbmcgd2lsbCBiZSBp biB0aGUgc2FtZSBmb3JtYXQgdGhhdCBpcyBhY2NlcHRlZCBieQorKyAqIEByZWYgYXZfY2hhbm5l bF9sYXlvdXRfZnJvbV9zdHJpbmcoKSwgYWxsb3dpbmcgdG8gcmVidWlsZCB0aGUgc2FtZQorKyAq IGNoYW5uZWwgbGF5b3V0LCBleGNlcHQgZm9yIG9wYXF1ZSBwb2ludGVycy4KKysgKgorKyAqIEBw YXJhbSBjaGFubmVsX2xheW91dCBjaGFubmVsIGxheW91dCB0byBiZSBkZXNjcmliZWQKKysgKiBA cGFyYW0gYnVmIHByZS1hbGxvY2F0ZWQgYnVmZmVyIHdoZXJlIHRvIHB1dCB0aGUgZ2VuZXJhdGVk IHN0cmluZworKyAqIEBwYXJhbSBidWZfc2l6ZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBidWZmZXIu CisrICogQHJldHVybiBhbW91bnQgb2YgYnl0ZXMgbmVlZGVkIHRvIGhvbGQgdGhlIG91dHB1dCBz dHJpbmcsIG9yIGEgbmVnYXRpdmUgQVZFUlJPUgorKyAqICAgICAgICAgb24gZmFpbHVyZS4gSWYg dGhlIHJldHVybmVkIHZhbHVlIGlzIGJpZ2dlciB0aGFuIGJ1Zl9zaXplLCB0aGVuIHRoZQorKyAq ICAgICAgICAgc3RyaW5nIHdhcyB0cnVuY2F0ZWQuCisrICovCisraW50IGF2X2NoYW5uZWxfbGF5 b3V0X2Rlc2NyaWJlKGNvbnN0IEFWQ2hhbm5lbExheW91dCAqY2hhbm5lbF9sYXlvdXQsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKTsK KysKKysvKioKKysgKiBicHJpbnQgdmFyaWFudCBvZiBhdl9jaGFubmVsX2xheW91dF9kZXNjcmli ZSgpLgorKyAqCisrICogQG5vdGUgdGhlIHN0cmluZyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBi cHJpbnQgYnVmZmVyLgorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIEFW RVJST1IgdmFsdWUgb24gZmFpbHVyZS4KKysgKi8KKytpbnQgYXZfY2hhbm5lbF9sYXlvdXRfZGVz Y3JpYmVfYnByaW50KGNvbnN0IEFWQ2hhbm5lbExheW91dCAqY2hhbm5lbF9sYXlvdXQsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQVZCUHJpbnQgKmJwKTsK KysKKysvKioKKysgKiBHZXQgdGhlIGNoYW5uZWwgd2l0aCB0aGUgZ2l2ZW4gaW5kZXggaW4gYSBj aGFubmVsIGxheW91dC4KKysgKgorKyAqIEBwYXJhbSBjaGFubmVsX2xheW91dCBpbnB1dCBjaGFu bmVsIGxheW91dAorKyAqIEBwYXJhbSBpZHggaW5kZXggb2YgdGhlIGNoYW5uZWwKKysgKiBAcmV0 dXJuIGNoYW5uZWwgd2l0aCB0aGUgaW5kZXggaWR4IGluIGNoYW5uZWxfbGF5b3V0IG9uIHN1Y2Nl c3Mgb3IKKysgKiAgICAgICAgIEFWX0NIQU5fTk9ORSBvbiBmYWlsdXJlIChpZiBpZHggaXMgbm90 IHZhbGlkIG9yIHRoZSBjaGFubmVsIG9yZGVyIGlzCisrICogICAgICAgICB1bnNwZWNpZmllZCkK KysgKi8KKytlbnVtIEFWQ2hhbm5lbAorK2F2X2NoYW5uZWxfbGF5b3V0X2NoYW5uZWxfZnJvbV9p bmRleChjb25zdCBBVkNoYW5uZWxMYXlvdXQgKmNoYW5uZWxfbGF5b3V0LCB1bnNpZ25lZCBpbnQg aWR4KTsKKysKKysvKioKKysgKiBHZXQgdGhlIGluZGV4IG9mIGEgZ2l2ZW4gY2hhbm5lbCBpbiBh IGNoYW5uZWwgbGF5b3V0LiBJbiBjYXNlIG11bHRpcGxlCisrICogY2hhbm5lbHMgYXJlIGZvdW5k LCBvbmx5IHRoZSBmaXJzdCBtYXRjaCB3aWxsIGJlIHJldHVybmVkLgorKyAqCisrICogQHBhcmFt IGNoYW5uZWxfbGF5b3V0IGlucHV0IGNoYW5uZWwgbGF5b3V0CisrICogQHBhcmFtIGNoYW5uZWwg dGhlIGNoYW5uZWwgd2hvc2UgaW5kZXggdG8gb2J0YWluCisrICogQHJldHVybiBpbmRleCBvZiBj aGFubmVsIGluIGNoYW5uZWxfbGF5b3V0IG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBudW1iZXIg aWYKKysgKiAgICAgICAgIGNoYW5uZWwgaXMgbm90IHByZXNlbnQgaW4gY2hhbm5lbF9sYXlvdXQu CisrICovCisraW50IGF2X2NoYW5uZWxfbGF5b3V0X2luZGV4X2Zyb21fY2hhbm5lbChjb25zdCBB VkNoYW5uZWxMYXlvdXQgKmNoYW5uZWxfbGF5b3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW51bSBBVkNoYW5uZWwgY2hhbm5lbCk7CisrCisrLyoqCisrICog R2V0IHRoZSBpbmRleCBpbiBhIGNoYW5uZWwgbGF5b3V0IG9mIGEgY2hhbm5lbCBkZXNjcmliZWQg YnkgdGhlIGdpdmVuIHN0cmluZy4KKysgKiBJbiBjYXNlIG11bHRpcGxlIGNoYW5uZWxzIGFyZSBm b3VuZCwgb25seSB0aGUgZmlyc3QgbWF0Y2ggd2lsbCBiZSByZXR1cm5lZC4KKysgKgorKyAqIFRo aXMgZnVuY3Rpb24gYWNjZXB0cyBjaGFubmVsIG5hbWVzIGluIHRoZSBzYW1lIGZvcm1hdCBhcwor KyAqIEByZWYgYXZfY2hhbm5lbF9mcm9tX3N0cmluZygpLgorKyAqCisrICogQHBhcmFtIGNoYW5u ZWxfbGF5b3V0IGlucHV0IGNoYW5uZWwgbGF5b3V0CisrICogQHBhcmFtIG5hbWUgc3RyaW5nIGRl c2NyaWJpbmcgdGhlIGNoYW5uZWwgd2hvc2UgaW5kZXggdG8gb2J0YWluCisrICogQHJldHVybiBh IGNoYW5uZWwgaW5kZXggZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiBzdHJpbmcsIG9yIGEgbmVnYXRp dmUgQVZFUlJPUgorKyAqICAgICAgICAgdmFsdWUuCisrICovCisraW50IGF2X2NoYW5uZWxfbGF5 b3V0X2luZGV4X2Zyb21fc3RyaW5nKGNvbnN0IEFWQ2hhbm5lbExheW91dCAqY2hhbm5lbF9sYXlv dXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg Km5hbWUpOworKworKy8qKgorKyAqIEdldCBhIGNoYW5uZWwgZGVzY3JpYmVkIGJ5IHRoZSBnaXZl biBzdHJpbmcuCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgY2hhbm5lbCBuYW1lcyBp biB0aGUgc2FtZSBmb3JtYXQgYXMKKysgKiBAcmVmIGF2X2NoYW5uZWxfZnJvbV9zdHJpbmcoKS4K KysgKgorKyAqIEBwYXJhbSBjaGFubmVsX2xheW91dCBpbnB1dCBjaGFubmVsIGxheW91dAorKyAq IEBwYXJhbSBuYW1lIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjaGFubmVsIHRvIG9idGFpbgorKyAq IEByZXR1cm4gYSBjaGFubmVsIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gc3RyaW5nIGluIGNoYW5u ZWxfbGF5b3V0IG9uIHN1Y2Nlc3MKKysgKiAgICAgICAgIG9yIEFWX0NIQU5fTk9ORSBvbiBmYWls dXJlIChpZiB0aGUgc3RyaW5nIGlzIG5vdCB2YWxpZCBvciB0aGUgY2hhbm5lbAorKyAqICAgICAg ICAgb3JkZXIgaXMgdW5zcGVjaWZpZWQpCisrICovCisrZW51bSBBVkNoYW5uZWwKKythdl9jaGFu bmVsX2xheW91dF9jaGFubmVsX2Zyb21fc3RyaW5nKGNvbnN0IEFWQ2hhbm5lbExheW91dCAqY2hh bm5lbF9sYXlvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpuYW1lKTsKKysKKysvKioKKysgKiBGaW5kIG91dCB3aGF0IGNoYW5uZWxzIGZyb20g YSBnaXZlbiBzZXQgYXJlIHByZXNlbnQgaW4gYSBjaGFubmVsIGxheW91dCwKKysgKiB3aXRob3V0 IHJlZ2FyZCBmb3IgdGhlaXIgcG9zaXRpb25zLgorKyAqCisrICogQHBhcmFtIGNoYW5uZWxfbGF5 b3V0IGlucHV0IGNoYW5uZWwgbGF5b3V0CisrICogQHBhcmFtIG1hc2sgYSBjb21iaW5hdGlvbiBv ZiBBVl9DSF8qIHJlcHJlc2VudGluZyBhIHNldCBvZiBjaGFubmVscworKyAqIEByZXR1cm4gYSBi aXRmaWVsZCByZXByZXNlbnRpbmcgYWxsIHRoZSBjaGFubmVscyBmcm9tIG1hc2sgdGhhdCBhcmUg cHJlc2VudAorKyAqICAgICAgICAgaW4gY2hhbm5lbF9sYXlvdXQKKysgKi8KKyt1aW50NjRfdCBh dl9jaGFubmVsX2xheW91dF9zdWJzZXQoY29uc3QgQVZDaGFubmVsTGF5b3V0ICpjaGFubmVsX2xh eW91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbWFzayk7 CisrCisrLyoqCisrICogQ2hlY2sgd2hldGhlciBhIGNoYW5uZWwgbGF5b3V0IGlzIHZhbGlkLCBp LmUuIGNhbiBwb3NzaWJseSBkZXNjcmliZSBhdWRpbworKyAqIGRhdGEuCisrICoKKysgKiBAcGFy YW0gY2hhbm5lbF9sYXlvdXQgaW5wdXQgY2hhbm5lbCBsYXlvdXQKKysgKiBAcmV0dXJuIDEgaWYg Y2hhbm5lbF9sYXlvdXQgaXMgdmFsaWQsIDAgb3RoZXJ3aXNlLgorKyAqLworK2ludCBhdl9jaGFu bmVsX2xheW91dF9jaGVjayhjb25zdCBBVkNoYW5uZWxMYXlvdXQgKmNoYW5uZWxfbGF5b3V0KTsK KysKKysvKioKKysgKiBDaGVjayB3aGV0aGVyIHR3byBjaGFubmVsIGxheW91dHMgYXJlIHNlbWFu dGljYWxseSB0aGUgc2FtZSwgaS5lLiB0aGUgc2FtZQorKyAqIGNoYW5uZWxzIGFyZSBwcmVzZW50 IG9uIHRoZSBzYW1lIHBvc2l0aW9ucyBpbiBib3RoLgorKyAqCisrICogSWYgb25lIG9mIHRoZSBj aGFubmVsIGxheW91dHMgaXMgQVZfQ0hBTk5FTF9PUkRFUl9VTlNQRUMsIHdoaWxlIHRoZSBvdGhl ciBpcworKyAqIG5vdCwgdGhleSBhcmUgY29uc2lkZXJlZCB0byBiZSB1bmVxdWFsLiBJZiBib3Ro IGFyZSBBVl9DSEFOTkVMX09SREVSX1VOU1BFQywKKysgKiB0aGV5IGFyZSBjb25zaWRlcmVkIGVx dWFsIGlmZiB0aGUgY2hhbm5lbCBjb3VudHMgYXJlIHRoZSBzYW1lIGluIGJvdGguCisrICoKKysg KiBAcGFyYW0gY2hsIGlucHV0IGNoYW5uZWwgbGF5b3V0CisrICogQHBhcmFtIGNobDEgaW5wdXQg Y2hhbm5lbCBsYXlvdXQKKysgKiBAcmV0dXJuIDAgaWYgY2hsIGFuZCBjaGwxIGFyZSBlcXVhbCwg MSBpZiB0aGV5IGFyZSBub3QgZXF1YWwuIEEgbmVnYXRpdmUKKysgKiAgICAgICAgIEFWRVJST1Ig Y29kZSBpZiBvbmUgb3IgYm90aCBhcmUgaW52YWxpZC4KKysgKi8KKytpbnQgYXZfY2hhbm5lbF9s YXlvdXRfY29tcGFyZShjb25zdCBBVkNoYW5uZWxMYXlvdXQgKmNobCwgY29uc3QgQVZDaGFubmVs TGF5b3V0ICpjaGwxKTsKKysKKysvKioKKysgKiBSZXR1cm4gdGhlIG9yZGVyIGlmIHRoZSBsYXlv dXQgaXMgbi10aCBvcmRlciBzdGFuZGFyZC1vcmRlciBhbWJpc29uaWMuCisrICogVGhlIHByZXNl bmNlIG9mIG9wdGlvbmFsIGV4dHJhIG5vbi1kaWVnZXRpYyBjaGFubmVscyBhdCB0aGUgZW5kIGlz IG5vdCB0YWtlbgorKyAqIGludG8gYWNjb3VudC4KKysgKgorKyAqIEBwYXJhbSBjaGFubmVsX2xh eW91dCBpbnB1dCBjaGFubmVsIGxheW91dAorKyAqIEByZXR1cm4gdGhlIG9yZGVyIG9mIHRoZSBs YXlvdXQsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCisrICovCisraW50IGF2X2No YW5uZWxfbGF5b3V0X2FtYmlzb25pY19vcmRlcihjb25zdCBBVkNoYW5uZWxMYXlvdXQgKmNoYW5u ZWxfbGF5b3V0KTsKKysKKysvKioKKysgKiBUaGUgY29udmVyc2lvbiBtdXN0IGJlIGxvc3NsZXNz LgorKyAqLworKyNkZWZpbmUgQVZfQ0hBTk5FTF9MQVlPVVRfUkVUWVBFX0ZMQUdfTE9TU0xFU1Mg KDEgPDwgMCkKKysKKysvKioKKysgKiBUaGUgc3BlY2lmaWVkIHJldHlwZSB0YXJnZXQgb3JkZXIg aXMgaWdub3JlZCBhbmQgdGhlIHNpbXBsZXN0IHBvc3NpYmxlCisrICogKGNhbm9uaWNhbCkgb3Jk ZXIgaXMgdXNlZCBmb3Igd2hpY2ggdGhlIGlucHV0IGxheW91dCBjYW4gYmUgbG9zc2xlc3N5Cisr ICogcmVwcmVzZW50ZWQuCisrICovCisrI2RlZmluZSBBVl9DSEFOTkVMX0xBWU9VVF9SRVRZUEVf RkxBR19DQU5PTklDQUwgKDEgPDwgMSkKKysKKysvKioKKysgKiBDaGFuZ2UgdGhlIEFWQ2hhbm5l bE9yZGVyIG9mIGEgY2hhbm5lbCBsYXlvdXQuCisrICoKKysgKiBDaGFuZ2Ugb2YgQVZDaGFubmVs T3JkZXIgY2FuIGJlIGVpdGhlciBsb3NzbGVzcyBvciBsb3NzeS4gSW4gY2FzZSBvZiBhCisrICog bG9zc2xlc3MgY29udmVyc2lvbiBhbGwgdGhlIGNoYW5uZWwgZGVzaWduYXRpb25zIGFuZCB0aGUg YXNzb2NpYXRlZCBjaGFubmVsCisrICogbmFtZXMgKGlmIGFueSkgYXJlIGtlcHQuIE9uIGEgbG9z c3kgY29udmVyc2lvbiB0aGUgY2hhbm5lbCBuYW1lcyBhbmQgY2hhbm5lbAorKyAqIGRlc2lnbmF0 aW9ucyBtaWdodCBiZSBsb3N0IGRlcGVuZGluZyBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBk ZXNpcmVkCisrICogQVZDaGFubmVsT3JkZXIuIE5vdGUgdGhhdCBzb21lIGNvbnZlcnNpb25zIGFy ZSBzaW1wbHkgbm90IHBvc3NpYmxlIGluIHdoaWNoCisrICogY2FzZSB0aGlzIGZ1bmN0aW9uIHJl dHVybnMgQVZFUlJPUihFTk9TWVMpLgorKyAqCisrICogVGhlIGZvbGxvd2luZyBjb252ZXJzaW9u cyBhcmUgc3VwcG9ydGVkOgorKyAqCisrICogQW55ICAgICAgIC0+IEN1c3RvbSAgICAgOiBBbHdh eXMgcG9zc2libGUsIGFsd2F5cyBsb3NzbGVzcy4KKysgKiBBbnkgICAgICAgLT4gVW5zcGVjaWZp ZWQ6IEFsd2F5cyBwb3NzaWJsZSwgbG9zc2xlc3MgaWYgY2hhbm5lbCBkZXNpZ25hdGlvbnMKKysg KiAgIGFyZSBhbGwgdW5rbm93biBhbmQgY2hhbm5lbCBuYW1lcyBhcmUgbm90IHVzZWQsIGxvc3N5 IG90aGVyd2lzZS4KKysgKiBDdXN0b20gICAgLT4gQW1iaXNvbmljICA6IFBvc3NpYmxlIGlmIGl0 IGNvbnRhaW5zIGFtYmlzb25pYyBjaGFubmVscyB3aXRoCisrICogICBvcHRpb25hbCBub24tZGll Z2V0aWMgY2hhbm5lbHMgaW4gdGhlIGVuZC4gTG9zc3kgaWYgdGhlIGNoYW5uZWxzIGhhdmUKKysg KiAgIGN1c3RvbSBuYW1lcywgbG9zc2xlc3Mgb3RoZXJ3aXNlLgorKyAqIEN1c3RvbSAgICAtPiBO YXRpdmUgICAgIDogUG9zc2libGUgaWYgaXQgY29udGFpbnMgbmF0aXZlIGNoYW5uZWxzIGluIG5h dGl2ZQorKyAqICAgICBvcmRlci4gTG9zc3kgaWYgdGhlIGNoYW5uZWxzIGhhdmUgY3VzdG9tIG5h bWVzLCBsb3NzbGVzcyBvdGhlcndpc2UuCisrICoKKysgKiBPbiBlcnJvciB0aGlzIGZ1bmN0aW9u IGtlZXBzIHRoZSBvcmlnaW5hbCBjaGFubmVsIGxheW91dCB1bnRvdWNoZWQuCisrICoKKysgKiBA cGFyYW0gY2hhbm5lbF9sYXlvdXQgY2hhbm5lbCBsYXlvdXQgd2hpY2ggd2lsbCBiZSBjaGFuZ2Vk CisrICogQHBhcmFtIG9yZGVyIHRoZSBkZXNpcmVkIGNoYW5uZWwgbGF5b3V0IG9yZGVyCisrICog QHBhcmFtIGZsYWdzIGEgY29tYmluYXRpb24gb2YgQVZfQ0hBTk5FTF9MQVlPVVRfUkVUWVBFX0ZM QUdfKiBjb25zdGFudHMKKysgKiBAcmV0dXJuIDAgaWYgdGhlIGNvbnZlcnNpb24gd2FzIHN1Y2Nl c3NmdWwgYW5kIGxvc3NsZXNzIG9yIGlmIHRoZSBjaGFubmVsCisrICogICAgICAgICAgIGxheW91 dCB3YXMgYWxyZWFkeSBpbiB0aGUgZGVzaXJlZCBvcmRlcgorKyAqICAgICAgICAgPjAgaWYgdGhl IGNvbnZlcnNpb24gd2FzIHN1Y2Nlc3NmdWwgYnV0IGxvc3N5CisrICogICAgICAgICBBVkVSUk9S KEVOT1NZUykgaWYgdGhlIGNvbnZlcnNpb24gd2FzIG5vdCBwb3NzaWJsZSAob3Igd291bGQgYmUK KysgKiAgICAgICAgICAgbG9zc3kgYW5kIEFWX0NIQU5ORUxfTEFZT1VUX1JFVFlQRV9GTEFHX0xP U1NMRVNTIHdhcyBzcGVjaWZpZWQpCisrICogICAgICAgICBBVkVSUk9SKEVJTlZBTCksIEFWRVJS T1IoRU5PTUVNKSBvbiBlcnJvcgorKyAqLworK2ludCBhdl9jaGFubmVsX2xheW91dF9yZXR5cGUo QVZDaGFubmVsTGF5b3V0ICpjaGFubmVsX2xheW91dCwgZW51bSBBVkNoYW5uZWxPcmRlciBvcmRl ciwgaW50IGZsYWdzKTsKKysKKysvKioKKysgKiBAfQorKyAqLworKworKyNlbmRpZiAvKiBBVlVU SUxfQ0hBTk5FTF9MQVlPVVRfSCAqLworZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFt ZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2NvbW1vbi5oLmZmbXBl ZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcv djkvbGliYXZ1dGlsL2NvbW1vbi5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsv bWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2NvbW1vbi5oLmZmbXBlZzkJMjAy Ni0wOS0wNyAxMjoyMzo0Ny42NzY1MDAwMTQgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3Jj L2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvY29tbW9uLmgJ MjAyNi0wOS0wNyAxMjoyMzo0Ny42NzYzOTg3ODMgKzAyMDAKK0BAIC0wLDAgKzEsNTc4IEBACisr LyoKKysgKiBjb3B5cmlnaHQgKGMpIDIwMDYgTWljaGFlbCBOaWVkZXJtYXllciA8bWljaGFlbG5p QGdteC5hdD4KKysgKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKysgKgorKyAq IEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1wZWcgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QQorKyAqLworKworKy8qKgorKyAqIEBmaWxlCisrICogY29tbW9uIGludGVybmFsIGFuZCBleHRl cm5hbCBBUEkgaGVhZGVyCisrICovCisrCisrI2lmbmRlZiBBVlVUSUxfQ09NTU9OX0gKKysjZGVm aW5lIEFWVVRJTF9DT01NT05fSAorKworKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiAhZGVm aW5lZChfX1NURENfQ09OU1RBTlRfTUFDUk9TKSAmJiAhZGVmaW5lZChVSU5UNjRfQykKKysjZXJy b3IgbWlzc2luZyAtRF9fU1REQ19DT05TVEFOVF9NQUNST1MgLyAjZGVmaW5lIF9fU1REQ19DT05T VEFOVF9NQUNST1MKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8 aW50dHlwZXMuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrI2luY2x1ZGUgPG1hdGguaD4KKysj aW5jbHVkZSA8c3RkaW50Lmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxp Yi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysjaW5jbHVkZSAiYXR0cmlidXRlcy5oIgor KyNpbmNsdWRlICJlcnJvci5oIgorKyNpbmNsdWRlICJtYWNyb3MuaCIKKysjaW5jbHVkZSAidmVy c2lvbi5oIgorKworKyNpZmRlZiBIQVZFX0FWX0NPTkZJR19ICisrIyAgIGluY2x1ZGUgImNvbmZp Zy5oIgorKyMgICBpbmNsdWRlICJpbnRtYXRoLmgiCisrIyAgIGluY2x1ZGUgImludGVybmFsLmgi CisrI2Vsc2UKKysjICAgaW5jbHVkZSAibWVtLmgiCisrI2VuZGlmIC8qIEhBVkVfQVZfQ09ORklH X0ggKi8KKysKKysvL3JvdW5kZWQgZGl2aXNpb24gJiBzaGlmdAorKyNkZWZpbmUgUlNISUZUKGEs YikgKChhKSA+IDAgPyAoKGEpICsgKCgxPDwoYikpPj4xKSk+PihiKSA6ICgoYSkgKyAoKDE8PChi KSk+PjEpLTEpPj4oYikpCisrLyogYXNzdW1lIGI+MCAqLworKyNkZWZpbmUgUk9VTkRFRF9ESVYo YSxiKSAoKChhKT49MCA/IChhKSArICgoYik+PjEpIDogKGEpIC0gKChiKT4+MSkpLyhiKSkKKysv KiBGYXN0IGEvKDE8PGIpIHJvdW5kZWQgdG93YXJkICtpbmYuIEFzc3VtZSBhPj0wIGFuZCBiPj0w ICovCisrI2RlZmluZSBBVl9DRUlMX1JTSElGVChhLGIpICghYXZfYnVpbHRpbl9jb25zdGFudF9w KGIpID8gLSgoLShhKSkgPj4gKGIpKSBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogKChhKSArICgxPDwoYikpIC0gMSkgPj4gKGIpKQor Ky8qIEJhY2t3YXJkcyBjb21wYXQuICovCisrI2RlZmluZSBGRl9DRUlMX1JTSElGVCBBVl9DRUlM X1JTSElGVAorKworKyNkZWZpbmUgRkZVRElWKGEsYikgKCgoYSk+MCA/KGEpOihhKS0oYikrMSkg LyAoYikpCisrI2RlZmluZSBGRlVNT0QoYSxiKSAoKGEpLShiKSpGRlVESVYoYSxiKSkKKysKKysv KioKKysgKiBBYnNvbHV0ZSB2YWx1ZSwgTm90ZSwgSU5UX01JTiAvIElOVDY0X01JTiByZXN1bHQg aW4gdW5kZWZpbmVkIGJlaGF2aW9yIGFzIHRoZXkKKysgKiBhcmUgbm90IHJlcHJlc2VudGFibGUg YXMgYWJzb2x1dGUgdmFsdWVzIG9mIHRoZWlyIHR5cGUuIFRoaXMgaXMgdGhlIHNhbWUKKysgKiBh cyB3aXRoICphYnMoKQorKyAqIEBzZWUgRkZOQUJTKCkKKysgKi8KKysjZGVmaW5lIEZGQUJTKGEp ICgoYSkgPj0gMCA/IChhKSA6ICgtKGEpKSkKKysjZGVmaW5lIEZGU0lHTihhKSAoKGEpID4gMCA/ IDEgOiAtMSkKKysKKysvKioKKysgKiBOZWdhdGl2ZSBBYnNvbHV0ZSB2YWx1ZS4KKysgKiB0aGlz IHdvcmtzIGZvciBhbGwgaW50ZWdlcnMgb2YgYWxsIHR5cGVzLgorKyAqIEFzIHdpdGggbWFueSBt YWNyb3MsIHRoaXMgZXZhbHVhdGVzIGl0cyBhcmd1bWVudCB0d2ljZSwgaXQgdGh1cyBtdXN0IG5v dCBoYXZlCisrICogYSBzaWRlZWZmZWN0LCB0aGF0IGlzIEZGTkFCUyh4KyspIGhhcyB1bmRlZmlu ZWQgYmVoYXZpb3IuCisrICovCisrI2RlZmluZSBGRk5BQlMoYSkgKChhKSA8PSAwID8gKGEpIDog KC0oYSkpKQorKworKy8qKgorKyAqIFVuc2lnbmVkIEFic29sdXRlIHZhbHVlLgorKyAqIFRoaXMg dGFrZXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGEgc2lnbmVkIGludCBhbmQgcmV0dXJucyBpdCBh cyBhIHVuc2lnbmVkLgorKyAqIFRoaXMgYWxzbyB3b3JrcyB3aXRoIElOVF9NSU4gd2hpY2ggd291 bGQgb3RoZXJ3aXNlIG5vdCBiZSByZXByZXNlbnRhYmxlCisrICogQXMgd2l0aCBtYW55IG1hY3Jv cywgdGhpcyBldmFsdWF0ZXMgaXRzIGFyZ3VtZW50IHR3aWNlLgorKyAqLworKyNkZWZpbmUgRkZB QlNVKGEpICgoYSkgPD0gMCA/IC0odW5zaWduZWQpKGEpIDogKHVuc2lnbmVkKShhKSkKKysjZGVm aW5lIEZGQUJTNjRVKGEpICgoYSkgPD0gMCA/IC0odWludDY0X3QpKGEpIDogKHVpbnQ2NF90KShh KSkKKysKKysvKiBtaXNjIG1hdGggZnVuY3Rpb25zICovCisrCisrI2lmbmRlZiBhdl9jZWlsX2xv ZzIKKysjICAgZGVmaW5lIGF2X2NlaWxfbG9nMiAgICAgYXZfY2VpbF9sb2cyX2MKKysjZW5kaWYK KysjaWZuZGVmIGF2X2NsaXAKKysjICAgZGVmaW5lIGF2X2NsaXAgICAgICAgICAgYXZfY2xpcF9j CisrI2VuZGlmCisrI2lmbmRlZiBhdl9jbGlwNjQKKysjICAgZGVmaW5lIGF2X2NsaXA2NCAgICAg ICAgYXZfY2xpcDY0X2MKKysjZW5kaWYKKysjaWZuZGVmIGF2X2NsaXBfdWludDgKKysjICAgZGVm aW5lIGF2X2NsaXBfdWludDggICAgYXZfY2xpcF91aW50OF9jCisrI2VuZGlmCisrI2lmbmRlZiBh dl9jbGlwX2ludDgKKysjICAgZGVmaW5lIGF2X2NsaXBfaW50OCAgICAgYXZfY2xpcF9pbnQ4X2MK KysjZW5kaWYKKysjaWZuZGVmIGF2X2NsaXBfdWludDE2CisrIyAgIGRlZmluZSBhdl9jbGlwX3Vp bnQxNiAgIGF2X2NsaXBfdWludDE2X2MKKysjZW5kaWYKKysjaWZuZGVmIGF2X2NsaXBfaW50MTYK KysjICAgZGVmaW5lIGF2X2NsaXBfaW50MTYgICAgYXZfY2xpcF9pbnQxNl9jCisrI2VuZGlmCisr I2lmbmRlZiBhdl9jbGlwbF9pbnQzMgorKyMgICBkZWZpbmUgYXZfY2xpcGxfaW50MzIgICBhdl9j bGlwbF9pbnQzMl9jCisrI2VuZGlmCisrI2lmbmRlZiBhdl9jbGlwX2ludHAyCisrIyAgIGRlZmlu ZSBhdl9jbGlwX2ludHAyICAgIGF2X2NsaXBfaW50cDJfYworKyNlbmRpZgorKyNpZm5kZWYgYXZf Y2xpcF91aW50cDIKKysjICAgZGVmaW5lIGF2X2NsaXBfdWludHAyICAgYXZfY2xpcF91aW50cDJf YworKyNlbmRpZgorKyNpZm5kZWYgYXZfc2F0X2FkZDMyCisrIyAgIGRlZmluZSBhdl9zYXRfYWRk MzIgICAgIGF2X3NhdF9hZGQzMl9jCisrI2VuZGlmCisrI2lmbmRlZiBhdl9zYXRfZGFkZDMyCisr IyAgIGRlZmluZSBhdl9zYXRfZGFkZDMyICAgIGF2X3NhdF9kYWRkMzJfYworKyNlbmRpZgorKyNp Zm5kZWYgYXZfc2F0X3N1YjMyCisrIyAgIGRlZmluZSBhdl9zYXRfc3ViMzIgICAgIGF2X3NhdF9z dWIzMl9jCisrI2VuZGlmCisrI2lmbmRlZiBhdl9zYXRfZHN1YjMyCisrIyAgIGRlZmluZSBhdl9z YXRfZHN1YjMyICAgIGF2X3NhdF9kc3ViMzJfYworKyNlbmRpZgorKyNpZm5kZWYgYXZfc2F0X2Fk ZDY0CisrIyAgIGRlZmluZSBhdl9zYXRfYWRkNjQgICAgIGF2X3NhdF9hZGQ2NF9jCisrI2VuZGlm CisrI2lmbmRlZiBhdl9zYXRfc3ViNjQKKysjICAgZGVmaW5lIGF2X3NhdF9zdWI2NCAgICAgYXZf c2F0X3N1YjY0X2MKKysjZW5kaWYKKysjaWZuZGVmIGF2X2NsaXBmCisrIyAgIGRlZmluZSBhdl9j bGlwZiAgICAgICAgIGF2X2NsaXBmX2MKKysjZW5kaWYKKysjaWZuZGVmIGF2X2NsaXBkCisrIyAg IGRlZmluZSBhdl9jbGlwZCAgICAgICAgIGF2X2NsaXBkX2MKKysjZW5kaWYKKysjaWZuZGVmIGF2 X3plcm9fZXh0ZW5kCisrIyAgIGRlZmluZSBhdl96ZXJvX2V4dGVuZCAgIGF2X3plcm9fZXh0ZW5k X2MKKysjZW5kaWYKKysjaWZuZGVmIGF2X3BvcGNvdW50CisrIyAgIGRlZmluZSBhdl9wb3Bjb3Vu dCAgICAgIGF2X3BvcGNvdW50X2MKKysjZW5kaWYKKysjaWZuZGVmIGF2X3BvcGNvdW50NjQKKysj ICAgZGVmaW5lIGF2X3BvcGNvdW50NjQgICAgYXZfcG9wY291bnQ2NF9jCisrI2VuZGlmCisrI2lm bmRlZiBhdl9wYXJpdHkKKysjICAgZGVmaW5lIGF2X3Bhcml0eSAgICAgICAgYXZfcGFyaXR5X2MK KysjZW5kaWYKKysKKysjaWZuZGVmIGF2X2xvZzIKKythdl9jb25zdCBpbnQgYXZfbG9nMih1bnNp Z25lZCB2KTsKKysjZW5kaWYKKysKKysjaWZuZGVmIGF2X2xvZzJfMTZiaXQKKythdl9jb25zdCBp bnQgYXZfbG9nMl8xNmJpdCh1bnNpZ25lZCB2KTsKKysjZW5kaWYKKysKKysvKioKKysgKiBDbGlw IGEgc2lnbmVkIGludGVnZXIgdmFsdWUgaW50byB0aGUgYW1pbi1hbWF4IHJhbmdlLgorKyAqIEBw YXJhbSBhIHZhbHVlIHRvIGNsaXAKKysgKiBAcGFyYW0gYW1pbiBtaW5pbXVtIHZhbHVlIG9mIHRo ZSBjbGlwIHJhbmdlCisrICogQHBhcmFtIGFtYXggbWF4aW11bSB2YWx1ZSBvZiB0aGUgY2xpcCBy YW5nZQorKyAqIEByZXR1cm4gY2xpcHBlZCB2YWx1ZQorKyAqLworK3N0YXRpYyBhdl9hbHdheXNf aW5saW5lIGF2X2NvbnN0IGludCBhdl9jbGlwX2MoaW50IGEsIGludCBhbWluLCBpbnQgYW1heCkK Kyt7CisrI2lmIGRlZmluZWQoSEFWRV9BVl9DT05GSUdfSCkgJiYgZGVmaW5lZChBU1NFUlRfTEVW RUwpICYmIEFTU0VSVF9MRVZFTCA+PSAyCisrICAgIGlmIChhbWluID4gYW1heCkgYWJvcnQoKTsK KysjZW5kaWYKKysgICAgaWYgICAgICAoYSA8IGFtaW4pIHJldHVybiBhbWluOworKyAgICBlbHNl IGlmIChhID4gYW1heCkgcmV0dXJuIGFtYXg7CisrICAgIGVsc2UgICAgICAgICAgICAgICByZXR1 cm4gYTsKKyt9CisrCisrLyoqCisrICogQ2xpcCBhIHNpZ25lZCA2NGJpdCBpbnRlZ2VyIHZhbHVl IGludG8gdGhlIGFtaW4tYW1heCByYW5nZS4KKysgKiBAcGFyYW0gYSB2YWx1ZSB0byBjbGlwCisr ICogQHBhcmFtIGFtaW4gbWluaW11bSB2YWx1ZSBvZiB0aGUgY2xpcCByYW5nZQorKyAqIEBwYXJh bSBhbWF4IG1heGltdW0gdmFsdWUgb2YgdGhlIGNsaXAgcmFuZ2UKKysgKiBAcmV0dXJuIGNsaXBw ZWQgdmFsdWUKKysgKi8KKytzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBhdl9jb25zdCBpbnQ2NF90 IGF2X2NsaXA2NF9jKGludDY0X3QgYSwgaW50NjRfdCBhbWluLCBpbnQ2NF90IGFtYXgpCisrewor KyNpZiBkZWZpbmVkKEhBVkVfQVZfQ09ORklHX0gpICYmIGRlZmluZWQoQVNTRVJUX0xFVkVMKSAm JiBBU1NFUlRfTEVWRUwgPj0gMgorKyAgICBpZiAoYW1pbiA+IGFtYXgpIGFib3J0KCk7CisrI2Vu ZGlmCisrICAgIGlmICAgICAgKGEgPCBhbWluKSByZXR1cm4gYW1pbjsKKysgICAgZWxzZSBpZiAo YSA+IGFtYXgpIHJldHVybiBhbWF4OworKyAgICBlbHNlICAgICAgICAgICAgICAgcmV0dXJuIGE7 CisrfQorKworKy8qKgorKyAqIENsaXAgYSBzaWduZWQgaW50ZWdlciB2YWx1ZSBpbnRvIHRoZSAw LTI1NSByYW5nZS4KKysgKiBAcGFyYW0gYSB2YWx1ZSB0byBjbGlwCisrICogQHJldHVybiBjbGlw cGVkIHZhbHVlCisrICovCisrc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgYXZfY29uc3QgdWludDhf dCBhdl9jbGlwX3VpbnQ4X2MoaW50IGEpCisreworKyAgICBpZiAoYSYofjB4RkYpKSByZXR1cm4g KH5hKT4+MzE7CisrICAgIGVsc2UgICAgICAgICAgIHJldHVybiBhOworK30KKysKKysvKioKKysg KiBDbGlwIGEgc2lnbmVkIGludGVnZXIgdmFsdWUgaW50byB0aGUgLTEyOCwxMjcgcmFuZ2UuCisr ICogQHBhcmFtIGEgdmFsdWUgdG8gY2xpcAorKyAqIEByZXR1cm4gY2xpcHBlZCB2YWx1ZQorKyAq LworK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGF2X2NvbnN0IGludDhfdCBhdl9jbGlwX2ludDhf YyhpbnQgYSkKKyt7CisrICAgIGlmICgoYSsweDgwVSkgJiB+MHhGRikgcmV0dXJuIChhPj4zMSkg XiAweDdGOworKyAgICBlbHNlICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7CisrfQorKworKy8q KgorKyAqIENsaXAgYSBzaWduZWQgaW50ZWdlciB2YWx1ZSBpbnRvIHRoZSAwLTY1NTM1IHJhbmdl LgorKyAqIEBwYXJhbSBhIHZhbHVlIHRvIGNsaXAKKysgKiBAcmV0dXJuIGNsaXBwZWQgdmFsdWUK KysgKi8KKytzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBhdl9jb25zdCB1aW50MTZfdCBhdl9jbGlw X3VpbnQxNl9jKGludCBhKQorK3sKKysgICAgaWYgKGEmKH4weEZGRkYpKSByZXR1cm4gKH5hKT4+ MzE7CisrICAgIGVsc2UgICAgICAgICAgICAgcmV0dXJuIGE7CisrfQorKworKy8qKgorKyAqIENs aXAgYSBzaWduZWQgaW50ZWdlciB2YWx1ZSBpbnRvIHRoZSAtMzI3NjgsMzI3NjcgcmFuZ2UuCisr ICogQHBhcmFtIGEgdmFsdWUgdG8gY2xpcAorKyAqIEByZXR1cm4gY2xpcHBlZCB2YWx1ZQorKyAq LworK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGF2X2NvbnN0IGludDE2X3QgYXZfY2xpcF9pbnQx Nl9jKGludCBhKQorK3sKKysgICAgaWYgKChhKzB4ODAwMFUpICYgfjB4RkZGRikgcmV0dXJuIChh Pj4zMSkgXiAweDdGRkY7CisrICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7 CisrfQorKworKy8qKgorKyAqIENsaXAgYSBzaWduZWQgNjQtYml0IGludGVnZXIgdmFsdWUgaW50 byB0aGUgLTIxNDc0ODM2NDgsMjE0NzQ4MzY0NyByYW5nZS4KKysgKiBAcGFyYW0gYSB2YWx1ZSB0 byBjbGlwCisrICogQHJldHVybiBjbGlwcGVkIHZhbHVlCisrICovCisrc3RhdGljIGF2X2Fsd2F5 c19pbmxpbmUgYXZfY29uc3QgaW50MzJfdCBhdl9jbGlwbF9pbnQzMl9jKGludDY0X3QgYSkKKyt7 CisrICAgIGlmICgoYStVSU5UNjRfQygweDgwMDAwMDAwKSkgJiB+VUlOVDY0X0MoMHhGRkZGRkZG RikpIHJldHVybiAoaW50MzJfdCkoKGE+PjYzKSBeIDB4N0ZGRkZGRkYpOworKyAgICBlbHNlICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGlu dDMyX3QpYTsKKyt9CisrCisrLyoqCisrICogQ2xpcCBhIHNpZ25lZCBpbnRlZ2VyIGludG8gdGhl IC0oMl5wKSwoMl5wLTEpIHJhbmdlLgorKyAqIEBwYXJhbSAgYSB2YWx1ZSB0byBjbGlwCisrICog QHBhcmFtICBwIGJpdCBwb3NpdGlvbiB0byBjbGlwIGF0CisrICogQHJldHVybiBjbGlwcGVkIHZh bHVlCisrICovCisrc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgYXZfY29uc3QgaW50IGF2X2NsaXBf aW50cDJfYyhpbnQgYSwgaW50IHApCisreworKyAgICBpZiAoKCh1bnNpZ25lZClhICsgKDFVIDw8 IHApKSAmIH4oKDJVIDw8IHApIC0gMSkpCisrICAgICAgICByZXR1cm4gKGEgPj4gMzEpIF4gKCgx IDw8IHApIC0gMSk7CisrICAgIGVsc2UKKysgICAgICAgIHJldHVybiBhOworK30KKysKKysvKioK KysgKiBDbGlwIGEgc2lnbmVkIGludGVnZXIgdG8gYW4gdW5zaWduZWQgcG93ZXIgb2YgdHdvIHJh bmdlLgorKyAqIEBwYXJhbSAgYSB2YWx1ZSB0byBjbGlwCisrICogQHBhcmFtICBwIGJpdCBwb3Np dGlvbiB0byBjbGlwIGF0CisrICogQHJldHVybiBjbGlwcGVkIHZhbHVlCisrICovCisrc3RhdGlj IGF2X2Fsd2F5c19pbmxpbmUgYXZfY29uc3QgdW5zaWduZWQgYXZfY2xpcF91aW50cDJfYyhpbnQg YSwgaW50IHApCisreworKyAgICBpZiAoYSAmIH4oKDFVPDxwKSAtIDEpKSByZXR1cm4gKH5hKSA+ PiAzMSAmICgoMVU8PHApIC0gMSk7CisrICAgIGVsc2UgICAgICAgICAgICAgICAgICAgIHJldHVy biAgYTsKKyt9CisrCisrLyoqCisrICogQ2xlYXIgaGlnaCBiaXRzIGZyb20gYW4gdW5zaWduZWQg aW50ZWdlciBzdGFydGluZyB3aXRoIHNwZWNpZmljIGJpdCBwb3NpdGlvbgorKyAqIEBwYXJhbSAg YSB2YWx1ZSB0byBjbGlwCisrICogQHBhcmFtICBwIGJpdCBwb3NpdGlvbiB0byBjbGlwIGF0LiBN dXN0IGJlIGJldHdlZW4gMCBhbmQgMzEuCisrICogQHJldHVybiBjbGlwcGVkIHZhbHVlCisrICov Cisrc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgYXZfY29uc3QgdW5zaWduZWQgYXZfemVyb19leHRl bmRfYyh1bnNpZ25lZCBhLCB1bnNpZ25lZCBwKQorK3sKKysjaWYgZGVmaW5lZChIQVZFX0FWX0NP TkZJR19IKSAmJiBkZWZpbmVkKEFTU0VSVF9MRVZFTCkgJiYgQVNTRVJUX0xFVkVMID49IDIKKysg ICAgaWYgKHAgPiAzMSkgYWJvcnQoKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIGEgJiAoKDFVIDw8 IHApIC0gMSk7CisrfQorKworKy8qKgorKyAqIEFkZCB0d28gc2lnbmVkIDMyLWJpdCB2YWx1ZXMg d2l0aCBzYXR1cmF0aW9uLgorKyAqCisrICogQHBhcmFtICBhIG9uZSB2YWx1ZQorKyAqIEBwYXJh bSAgYiBhbm90aGVyIHZhbHVlCisrICogQHJldHVybiBzdW0gd2l0aCBzaWduZWQgc2F0dXJhdGlv bgorKyAqLworK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludCBhdl9zYXRfYWRkMzJfYyhpbnQg YSwgaW50IGIpCisreworKyAgICByZXR1cm4gYXZfY2xpcGxfaW50MzIoKGludDY0X3QpYSArIGIp OworK30KKysKKysvKioKKysgKiBBZGQgYSBkb3VibGVkIHZhbHVlIHRvIGFub3RoZXIgdmFsdWUg d2l0aCBzYXR1cmF0aW9uIGF0IGJvdGggc3RhZ2VzLgorKyAqCisrICogQHBhcmFtICBhIGZpcnN0 IHZhbHVlCisrICogQHBhcmFtICBiIHZhbHVlIGRvdWJsZWQgYW5kIGFkZGVkIHRvIGEKKysgKiBA cmV0dXJuIHN1bSBzYXQoYSArIHNhdCgyKmIpKSB3aXRoIHNpZ25lZCBzYXR1cmF0aW9uCisrICov Cisrc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgaW50IGF2X3NhdF9kYWRkMzJfYyhpbnQgYSwgaW50 IGIpCisreworKyAgICByZXR1cm4gYXZfc2F0X2FkZDMyKGEsIGF2X3NhdF9hZGQzMihiLCBiKSk7 CisrfQorKworKy8qKgorKyAqIFN1YnRyYWN0IHR3byBzaWduZWQgMzItYml0IHZhbHVlcyB3aXRo IHNhdHVyYXRpb24uCisrICoKKysgKiBAcGFyYW0gIGEgb25lIHZhbHVlCisrICogQHBhcmFtICBi IGFub3RoZXIgdmFsdWUKKysgKiBAcmV0dXJuIGRpZmZlcmVuY2Ugd2l0aCBzaWduZWQgc2F0dXJh dGlvbgorKyAqLworK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludCBhdl9zYXRfc3ViMzJfYyhp bnQgYSwgaW50IGIpCisreworKyAgICByZXR1cm4gYXZfY2xpcGxfaW50MzIoKGludDY0X3QpYSAt IGIpOworK30KKysKKysvKioKKysgKiBTdWJ0cmFjdCBhIGRvdWJsZWQgdmFsdWUgZnJvbSBhbm90 aGVyIHZhbHVlIHdpdGggc2F0dXJhdGlvbiBhdCBib3RoIHN0YWdlcy4KKysgKgorKyAqIEBwYXJh bSAgYSBmaXJzdCB2YWx1ZQorKyAqIEBwYXJhbSAgYiB2YWx1ZSBkb3VibGVkIGFuZCBzdWJ0cmFj dGVkIGZyb20gYQorKyAqIEByZXR1cm4gZGlmZmVyZW5jZSBzYXQoYSAtIHNhdCgyKmIpKSB3aXRo IHNpZ25lZCBzYXR1cmF0aW9uCisrICovCisrc3RhdGljIGF2X2Fsd2F5c19pbmxpbmUgaW50IGF2 X3NhdF9kc3ViMzJfYyhpbnQgYSwgaW50IGIpCisreworKyAgICByZXR1cm4gYXZfc2F0X3N1YjMy KGEsIGF2X3NhdF9hZGQzMihiLCBiKSk7CisrfQorKworKy8qKgorKyAqIEFkZCB0d28gc2lnbmVk IDY0LWJpdCB2YWx1ZXMgd2l0aCBzYXR1cmF0aW9uLgorKyAqCisrICogQHBhcmFtICBhIG9uZSB2 YWx1ZQorKyAqIEBwYXJhbSAgYiBhbm90aGVyIHZhbHVlCisrICogQHJldHVybiBzdW0gd2l0aCBz aWduZWQgc2F0dXJhdGlvbgorKyAqLworK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludDY0X3Qg YXZfc2F0X2FkZDY0X2MoaW50NjRfdCBhLCBpbnQ2NF90IGIpIHsKKysjaWYgKCFkZWZpbmVkKF9f SU5URUxfQ09NUElMRVIpICYmIEFWX0dDQ19WRVJTSU9OX0FUX0xFQVNUKDUsMSkpIHx8IEFWX0hB U19CVUlMVElOKF9fYnVpbHRpbl9hZGRfb3ZlcmZsb3cpCisrICAgIGludDY0X3QgdG1wOworKyAg ICByZXR1cm4gIV9fYnVpbHRpbl9hZGRfb3ZlcmZsb3coYSwgYiwgJnRtcCkgPyB0bXAgOiAodG1w IDwgMCA/IElOVDY0X01BWCA6IElOVDY0X01JTik7CisrI2Vsc2UKKysgICAgaW50NjRfdCBzID0g YSsodWludDY0X3QpYjsKKysgICAgaWYgKChpbnQ2NF90KShhXmIgfCB+c15iKSA+PSAwKQorKyAg ICAgICAgcmV0dXJuIElOVDY0X01BWCBeIChiID4+IDYzKTsKKysgICAgcmV0dXJuIHM7CisrI2Vu ZGlmCisrfQorKworKy8qKgorKyAqIFN1YnRyYWN0IHR3byBzaWduZWQgNjQtYml0IHZhbHVlcyB3 aXRoIHNhdHVyYXRpb24uCisrICoKKysgKiBAcGFyYW0gIGEgb25lIHZhbHVlCisrICogQHBhcmFt ICBiIGFub3RoZXIgdmFsdWUKKysgKiBAcmV0dXJuIGRpZmZlcmVuY2Ugd2l0aCBzaWduZWQgc2F0 dXJhdGlvbgorKyAqLworK3N0YXRpYyBhdl9hbHdheXNfaW5saW5lIGludDY0X3QgYXZfc2F0X3N1 YjY0X2MoaW50NjRfdCBhLCBpbnQ2NF90IGIpIHsKKysjaWYgKCFkZWZpbmVkKF9fSU5URUxfQ09N UElMRVIpICYmIEFWX0dDQ19WRVJTSU9OX0FUX0xFQVNUKDUsMSkpIHx8IEFWX0hBU19CVUlMVElO KF9fYnVpbHRpbl9zdWJfb3ZlcmZsb3cpCisrICAgIGludDY0X3QgdG1wOworKyAgICByZXR1cm4g IV9fYnVpbHRpbl9zdWJfb3ZlcmZsb3coYSwgYiwgJnRtcCkgPyB0bXAgOiAodG1wIDwgMCA/IElO VDY0X01BWCA6IElOVDY0X01JTik7CisrI2Vsc2UKKysgICAgaWYgKGIgPD0gMCAmJiBhID49IElO VDY0X01BWCArIGIpCisrICAgICAgICByZXR1cm4gSU5UNjRfTUFYOworKyAgICBpZiAoYiA+PSAw ICYmIGEgPD0gSU5UNjRfTUlOICsgYikKKysgICAgICAgIHJldHVybiBJTlQ2NF9NSU47CisrICAg IHJldHVybiBhIC0gYjsKKysjZW5kaWYKKyt9CisrCisrLyoqCisrICogQ2xpcCBhIGZsb2F0IHZh bHVlIGludG8gdGhlIGFtaW4tYW1heCByYW5nZS4KKysgKiBJZiBhIGlzIG5hbiBvciAtaW5mIGFt aW4gd2lsbCBiZSByZXR1cm5lZC4KKysgKiBJZiBhIGlzICtpbmYgYW1heCB3aWxsIGJlIHJldHVy bmVkLgorKyAqIEBwYXJhbSBhIHZhbHVlIHRvIGNsaXAKKysgKiBAcGFyYW0gYW1pbiBtaW5pbXVt IHZhbHVlIG9mIHRoZSBjbGlwIHJhbmdlCisrICogQHBhcmFtIGFtYXggbWF4aW11bSB2YWx1ZSBv ZiB0aGUgY2xpcCByYW5nZQorKyAqIEByZXR1cm4gY2xpcHBlZCB2YWx1ZQorKyAqLworK3N0YXRp YyBhdl9hbHdheXNfaW5saW5lIGF2X2NvbnN0IGZsb2F0IGF2X2NsaXBmX2MoZmxvYXQgYSwgZmxv YXQgYW1pbiwgZmxvYXQgYW1heCkKKyt7CisrI2lmIGRlZmluZWQoSEFWRV9BVl9DT05GSUdfSCkg JiYgZGVmaW5lZChBU1NFUlRfTEVWRUwpICYmIEFTU0VSVF9MRVZFTCA+PSAyCisrICAgIGlmIChh bWluID4gYW1heCkgYWJvcnQoKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIEZGTUlOKEZGTUFYKGEs IGFtaW4pLCBhbWF4KTsKKyt9CisrCisrLyoqCisrICogQ2xpcCBhIGRvdWJsZSB2YWx1ZSBpbnRv IHRoZSBhbWluLWFtYXggcmFuZ2UuCisrICogSWYgYSBpcyBuYW4gb3IgLWluZiBhbWluIHdpbGwg YmUgcmV0dXJuZWQuCisrICogSWYgYSBpcyAraW5mIGFtYXggd2lsbCBiZSByZXR1cm5lZC4KKysg KiBAcGFyYW0gYSB2YWx1ZSB0byBjbGlwCisrICogQHBhcmFtIGFtaW4gbWluaW11bSB2YWx1ZSBv ZiB0aGUgY2xpcCByYW5nZQorKyAqIEBwYXJhbSBhbWF4IG1heGltdW0gdmFsdWUgb2YgdGhlIGNs aXAgcmFuZ2UKKysgKiBAcmV0dXJuIGNsaXBwZWQgdmFsdWUKKysgKi8KKytzdGF0aWMgYXZfYWx3 YXlzX2lubGluZSBhdl9jb25zdCBkb3VibGUgYXZfY2xpcGRfYyhkb3VibGUgYSwgZG91YmxlIGFt aW4sIGRvdWJsZSBhbWF4KQorK3sKKysjaWYgZGVmaW5lZChIQVZFX0FWX0NPTkZJR19IKSAmJiBk ZWZpbmVkKEFTU0VSVF9MRVZFTCkgJiYgQVNTRVJUX0xFVkVMID49IDIKKysgICAgaWYgKGFtaW4g PiBhbWF4KSBhYm9ydCgpOworKyNlbmRpZgorKyAgICByZXR1cm4gRkZNSU4oRkZNQVgoYSwgYW1p biksIGFtYXgpOworK30KKysKKysvKiogQ29tcHV0ZSBjZWlsKGxvZzIoeCkpLgorKyAqIEBwYXJh bSB4IHZhbHVlIHVzZWQgdG8gY29tcHV0ZSBjZWlsKGxvZzIoeCkpCisrICogQHJldHVybiBjb21w dXRlZCBjZWlsaW5nIG9mIGxvZzIoeCkKKysgKi8KKytzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBh dl9jb25zdCBpbnQgYXZfY2VpbF9sb2cyX2MoaW50IHgpCisreworKyAgICByZXR1cm4gYXZfbG9n MigoeCAtIDFVKSA8PCAxKTsKKyt9CisrCisrLyoqCisrICogQ291bnQgbnVtYmVyIG9mIGJpdHMg c2V0IHRvIG9uZSBpbiB4CisrICogQHBhcmFtIHggdmFsdWUgdG8gY291bnQgYml0cyBvZgorKyAq IEByZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIHNldCB0byBvbmUgaW4geAorKyAqLworK3N0YXRp YyBhdl9hbHdheXNfaW5saW5lIGF2X2NvbnN0IGludCBhdl9wb3Bjb3VudF9jKHVpbnQzMl90IHgp CisreworKyAgICB4IC09ICh4ID4+IDEpICYgMHg1NTU1NTU1NTsKKysgICAgeCA9ICh4ICYgMHgz MzMzMzMzMykgKyAoKHggPj4gMikgJiAweDMzMzMzMzMzKTsKKysgICAgeCA9ICh4ICsgKHggPj4g NCkpICYgMHgwRjBGMEYwRjsKKysgICAgeCArPSB4ID4+IDg7CisrICAgIHJldHVybiAoeCArICh4 ID4+IDE2KSkgJiAweDNGOworK30KKysKKysvKioKKysgKiBDb3VudCBudW1iZXIgb2YgYml0cyBz ZXQgdG8gb25lIGluIHgKKysgKiBAcGFyYW0geCB2YWx1ZSB0byBjb3VudCBiaXRzIG9mCisrICog QHJldHVybiB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0IHRvIG9uZSBpbiB4CisrICovCisrc3RhdGlj IGF2X2Fsd2F5c19pbmxpbmUgYXZfY29uc3QgaW50IGF2X3BvcGNvdW50NjRfYyh1aW50NjRfdCB4 KQorK3sKKysgICAgcmV0dXJuIGF2X3BvcGNvdW50KCh1aW50MzJfdCl4KSArIGF2X3BvcGNvdW50 KCh1aW50MzJfdCkoeCA+PiAzMikpOworK30KKysKKytzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBh dl9jb25zdCBpbnQgYXZfcGFyaXR5X2ModWludDMyX3QgdikKKyt7CisrICAgIHJldHVybiBhdl9w b3Bjb3VudCh2KSAmIDE7CisrfQorKworKy8qKgorKyAqIENvbnZlcnQgYSBVVEYtOCBjaGFyYWN0 ZXIgKHVwIHRvIDQgYnl0ZXMpIHRvIGl0cyAzMi1iaXQgVUNTLTQgZW5jb2RlZCBmb3JtLgorKyAq CisrICogQHBhcmFtIHZhbCAgICAgIE91dHB1dCB2YWx1ZSwgbXVzdCBiZSBhbiBsdmFsdWUgb2Yg dHlwZSB1aW50MzJfdC4KKysgKiBAcGFyYW0gR0VUX0JZVEUgRXhwcmVzc2lvbiByZWFkaW5nIG9u ZSBieXRlIGZyb20gdGhlIGlucHV0LgorKyAqICAgICAgICAgICAgICAgICBFdmFsdWF0ZWQgdXAg dG8gNyB0aW1lcyAoNCBmb3IgdGhlIGN1cnJlbnRseQorKyAqICAgICAgICAgICAgICAgICBhc3Np Z25lZCBVbmljb2RlIHJhbmdlKS4gIFdpdGggYSBtZW1vcnkgYnVmZmVyCisrICogICAgICAgICAg ICAgICAgIGlucHV0LCB0aGlzIGNvdWxkIGJlICpwdHIrKywgb3IgaWYgeW91IHdhbnQgdG8gbWFr ZSBzdXJlCisrICogICAgICAgICAgICAgICAgIHRoYXQgKnB0ciBzdG9wcyBhdCB0aGUgZW5kIG9m IGEgTlVMTCB0ZXJtaW5hdGVkIHN0cmluZyB0aGVuCisrICogICAgICAgICAgICAgICAgICpwdHIg PyAqcHRyKysgOiAwCisrICogQHBhcmFtIEVSUk9SICAgIEV4cHJlc3Npb24gdG8gYmUgZXZhbHVh dGVkIG9uIGludmFsaWQgaW5wdXQsCisrICogICAgICAgICAgICAgICAgIHR5cGljYWxseSBhIGdv dG8gc3RhdGVtZW50LgorKyAqCisrICogQHdhcm5pbmcgRVJST1Igc2hvdWxkIG5vdCBjb250YWlu IGEgbG9vcCBjb250cm9sIHN0YXRlbWVudCB3aGljaAorKyAqIGNvdWxkIGludGVyYWN0IHdpdGgg dGhlIGludGVybmFsIHdoaWxlIGxvb3AsIGFuZCBzaG91bGQgZm9yY2UgYW4KKysgKiBleGl0IGZy b20gdGhlIG1hY3JvIGNvZGUgKGUuZy4gdGhyb3VnaCBhIGdvdG8gb3IgYSByZXR1cm4pIGluIG9y ZGVyCisrICogdG8gcHJldmVudCB1bmRlZmluZWQgcmVzdWx0cy4KKysgKi8KKysjZGVmaW5lIEdF VF9VVEY4KHZhbCwgR0VUX0JZVEUsIEVSUk9SKVwKKysgICAgdmFsPSAodWludDhfdCkoR0VUX0JZ VEUpO1wKKysgICAge1wKKysgICAgICAgIHVpbnQzMl90IHRvcCA9ICh2YWwgJiAxMjgpID4+IDE7 XAorKyAgICAgICAgaWYgKCh2YWwgJiAweGMwKSA9PSAweDgwIHx8IHZhbCA+PSAweEZFKVwKKysg ICAgICAgICAgICB7RVJST1J9XAorKyAgICAgICAgd2hpbGUgKHZhbCAmIHRvcCkge1wKKysgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgdG1wID0gKHVpbnQ4X3QpKEdFVF9CWVRFKSAtIDEyODtcCisr ICAgICAgICAgICAgaWYodG1wPj42KVwKKysgICAgICAgICAgICAgICAge0VSUk9SfVwKKysgICAg ICAgICAgICB2YWw9ICh2YWw8PDYpICsgdG1wO1wKKysgICAgICAgICAgICB0b3AgPDw9IDU7XAor KyAgICAgICAgfVwKKysgICAgICAgIHZhbCAmPSAodG9wIDw8IDEpIC0gMTtcCisrICAgIH0KKysK KysvKioKKysgKiBDb252ZXJ0IGEgVVRGLTE2IGNoYXJhY3RlciAoMiBvciA0IGJ5dGVzKSB0byBp dHMgMzItYml0IFVDUy00IGVuY29kZWQgZm9ybS4KKysgKgorKyAqIEBwYXJhbSB2YWwgICAgICAg T3V0cHV0IHZhbHVlLCBtdXN0IGJlIGFuIGx2YWx1ZSBvZiB0eXBlIHVpbnQzMl90LgorKyAqIEBw YXJhbSBHRVRfMTZCSVQgRXhwcmVzc2lvbiByZXR1cm5pbmcgdHdvIGJ5dGVzIG9mIFVURi0xNiBk YXRhIGNvbnZlcnRlZAorKyAqICAgICAgICAgICAgICAgICAgdG8gbmF0aXZlIGJ5dGUgb3JkZXIu ICBFdmFsdWF0ZWQgb25lIG9yIHR3byB0aW1lcy4KKysgKiBAcGFyYW0gRVJST1IgICAgIEV4cHJl c3Npb24gdG8gYmUgZXZhbHVhdGVkIG9uIGludmFsaWQgaW5wdXQsCisrICogICAgICAgICAgICAg ICAgICB0eXBpY2FsbHkgYSBnb3RvIHN0YXRlbWVudC4KKysgKi8KKysjZGVmaW5lIEdFVF9VVEYx Nih2YWwsIEdFVF8xNkJJVCwgRVJST1IpXAorKyAgICB2YWwgPSAodWludDE2X3QpKEdFVF8xNkJJ VCk7XAorKyAgICB7XAorKyAgICAgICAgdW5zaWduZWQgaW50IGhpID0gdmFsIC0gMHhEODAwO1wK KysgICAgICAgIGlmIChoaSA8IDB4ODAwKSB7XAorKyAgICAgICAgICAgIHZhbCA9ICh1aW50MTZf dCkoR0VUXzE2QklUKSAtIDB4REMwMDtcCisrICAgICAgICAgICAgaWYgKHZhbCA+IDB4M0ZGVSB8 fCBoaSA+IDB4M0ZGVSlcCisrICAgICAgICAgICAgICAgIHtFUlJPUn1cCisrICAgICAgICAgICAg dmFsICs9IChoaTw8MTApICsgMHgxMDAwMDtcCisrICAgICAgICB9XAorKyAgICB9XAorKworKy8q KgorKyAqIEBkZWYgUFVUX1VURjgodmFsLCB0bXAsIFBVVF9CWVRFKQorKyAqIENvbnZlcnQgYSAz Mi1iaXQgVW5pY29kZSBjaGFyYWN0ZXIgdG8gaXRzIFVURi04IGVuY29kZWQgZm9ybSAodXAgdG8g NCBieXRlcyBsb25nKS4KKysgKiBAcGFyYW0gdmFsIGlzIGFuIGlucHV0LW9ubHkgYXJndW1lbnQg YW5kIHNob3VsZCBiZSBvZiB0eXBlIHVpbnQzMl90LiBJdCBob2xkcworKyAqIGEgVUNTLTQgZW5j b2RlZCBVbmljb2RlIGNoYXJhY3RlciB0aGF0IGlzIHRvIGJlIGNvbnZlcnRlZCB0byBVVEYtOC4g SWYKKysgKiB2YWwgaXMgZ2l2ZW4gYXMgYSBmdW5jdGlvbiBpdCBpcyBleGVjdXRlZCBvbmx5IG9u Y2UuCisrICogQHBhcmFtIHRtcCBpcyBhIHRlbXBvcmFyeSB2YXJpYWJsZSBhbmQgc2hvdWxkIGJl IG9mIHR5cGUgdWludDhfdC4gSXQKKysgKiByZXByZXNlbnRzIGFuIGludGVybWVkaWF0ZSB2YWx1 ZSBkdXJpbmcgY29udmVyc2lvbiB0aGF0IGlzIHRvIGJlCisrICogb3V0cHV0IGJ5IFBVVF9CWVRF LgorKyAqIEBwYXJhbSBQVVRfQllURSB3cml0ZXMgdGhlIGNvbnZlcnRlZCBVVEYtOCBieXRlcyB0 byBhbnkgcHJvcGVyIGRlc3RpbmF0aW9uLgorKyAqIEl0IGNvdWxkIGJlIGEgZnVuY3Rpb24gb3Ig YSBzdGF0ZW1lbnQsIGFuZCB1c2VzIHRtcCBhcyB0aGUgaW5wdXQgYnl0ZS4KKysgKiBGb3IgZXhh bXBsZSwgUFVUX0JZVEUgY291bGQgYmUgIipvdXRwdXQrKyA9IHRtcDsiIFBVVF9CWVRFIHdpbGwg YmUKKysgKiBleGVjdXRlZCB1cCB0byA0IHRpbWVzIGZvciB2YWx1ZXMgaW4gdGhlIHZhbGlkIFVU Ri04IHJhbmdlIGFuZCB1cCB0bworKyAqIDcgdGltZXMgaW4gdGhlIGdlbmVyYWwgY2FzZSwgZGVw ZW5kaW5nIG9uIHRoZSBsZW5ndGggb2YgdGhlIGNvbnZlcnRlZAorKyAqIFVuaWNvZGUgY2hhcmFj dGVyLgorKyAqLworKyNkZWZpbmUgUFVUX1VURjgodmFsLCB0bXAsIFBVVF9CWVRFKVwKKysgICAg e1wKKysgICAgICAgIGludCBieXRlcywgc2hpZnQ7XAorKyAgICAgICAgdWludDMyX3QgaW4gPSB2 YWw7XAorKyAgICAgICAgaWYgKGluIDwgMHg4MCkge1wKKysgICAgICAgICAgICB0bXAgPSBpbjtc CisrICAgICAgICAgICAgUFVUX0JZVEVcCisrICAgICAgICB9IGVsc2Uge1wKKysgICAgICAgICAg ICBieXRlcyA9IChhdl9sb2cyKGluKSArIDQpIC8gNTtcCisrICAgICAgICAgICAgc2hpZnQgPSAo Ynl0ZXMgLSAxKSAqIDY7XAorKyAgICAgICAgICAgIHRtcCA9ICgyNTYgLSAoMjU2ID4+IGJ5dGVz KSkgfCAoaW4gPj4gc2hpZnQpO1wKKysgICAgICAgICAgICBQVVRfQllURVwKKysgICAgICAgICAg ICB3aGlsZSAoc2hpZnQgPj0gNikge1wKKysgICAgICAgICAgICAgICAgc2hpZnQgLT0gNjtcCisr ICAgICAgICAgICAgICAgIHRtcCA9IDB4ODAgfCAoKGluID4+IHNoaWZ0KSAmIDB4M2YpO1wKKysg ICAgICAgICAgICAgICAgUFVUX0JZVEVcCisrICAgICAgICAgICAgfVwKKysgICAgICAgIH1cCisr ICAgIH0KKysKKysvKioKKysgKiBAZGVmIFBVVF9VVEYxNih2YWwsIHRtcCwgUFVUXzE2QklUKQor KyAqIENvbnZlcnQgYSAzMi1iaXQgVW5pY29kZSBjaGFyYWN0ZXIgdG8gaXRzIFVURi0xNiBlbmNv ZGVkIGZvcm0gKDIgb3IgNCBieXRlcykuCisrICogQHBhcmFtIHZhbCBpcyBhbiBpbnB1dC1vbmx5 IGFyZ3VtZW50IGFuZCBzaG91bGQgYmUgb2YgdHlwZSB1aW50MzJfdC4gSXQgaG9sZHMKKysgKiBh IFVDUy00IGVuY29kZWQgVW5pY29kZSBjaGFyYWN0ZXIgdGhhdCBpcyB0byBiZSBjb252ZXJ0ZWQg dG8gVVRGLTE2LiBJZgorKyAqIHZhbCBpcyBnaXZlbiBhcyBhIGZ1bmN0aW9uIGl0IGlzIGV4ZWN1 dGVkIG9ubHkgb25jZS4KKysgKiBAcGFyYW0gdG1wIGlzIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIGFu ZCBzaG91bGQgYmUgb2YgdHlwZSB1aW50MTZfdC4gSXQKKysgKiByZXByZXNlbnRzIGFuIGludGVy bWVkaWF0ZSB2YWx1ZSBkdXJpbmcgY29udmVyc2lvbiB0aGF0IGlzIHRvIGJlCisrICogb3V0cHV0 IGJ5IFBVVF8xNkJJVC4KKysgKiBAcGFyYW0gUFVUXzE2QklUIHdyaXRlcyB0aGUgY29udmVydGVk IFVURi0xNiBkYXRhIHRvIGFueSBwcm9wZXIgZGVzdGluYXRpb24KKysgKiBpbiBkZXNpcmVkIGVu ZGlhbm5lc3MuIEl0IGNvdWxkIGJlIGEgZnVuY3Rpb24gb3IgYSBzdGF0ZW1lbnQsIGFuZCB1c2Vz IHRtcAorKyAqIGFzIHRoZSBpbnB1dCBieXRlLiAgRm9yIGV4YW1wbGUsIFBVVF9CWVRFIGNvdWxk IGJlICIqb3V0cHV0KysgPSB0bXA7IgorKyAqIFBVVF9CWVRFIHdpbGwgYmUgZXhlY3V0ZWQgMSBv ciAyIHRpbWVzIGRlcGVuZGluZyBvbiBpbnB1dCBjaGFyYWN0ZXIuCisrICovCisrI2RlZmluZSBQ VVRfVVRGMTYodmFsLCB0bXAsIFBVVF8xNkJJVClcCisrICAgIHtcCisrICAgICAgICB1aW50MzJf dCBpbiA9IHZhbDtcCisrICAgICAgICBpZiAoaW4gPCAweDEwMDAwKSB7XAorKyAgICAgICAgICAg IHRtcCA9IGluO1wKKysgICAgICAgICAgICBQVVRfMTZCSVRcCisrICAgICAgICB9IGVsc2Uge1wK KysgICAgICAgICAgICB0bXAgPSAweEQ4MDAgfCAoKGluIC0gMHgxMDAwMCkgPj4gMTApO1wKKysg ICAgICAgICAgICBQVVRfMTZCSVRcCisrICAgICAgICAgICAgdG1wID0gMHhEQzAwIHwgKChpbiAt IDB4MTAwMDApICYgMHgzRkYpO1wKKysgICAgICAgICAgICBQVVRfMTZCSVRcCisrICAgICAgICB9 XAorKyAgICB9XAorKworKyNlbmRpZiAvKiBBVlVUSUxfQ09NTU9OX0ggKi8KK2RpZmYgLXVwIE11 c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xp YmF2dXRpbC9kaWN0LmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRp YS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvZGljdC5oCistLS0gTXVzZVNjb3JlLTQu Ny40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2Rp Y3QuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc2NjEwNDU0ICswMjAwCisrKysgTXVz ZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGli YXZ1dGlsL2RpY3QuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NjU1MjI4MCArMDIwMAorQEAgLTAs MCArMSwyNDIgQEAKKysvKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKysgKgor KyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1wZWcgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVn OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlvbiwgSW5j LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQorKyAqLworKworKy8qKgorKyAqIEBmaWxlCisrICogUHVibGljIGRpY3Rpb25hcnkgQVBJ LgorKyAqIEBkZXByZWNhdGVkCisrICogIEFWRGljdGlvbmFyeSBpcyBwcm92aWRlZCBmb3IgY29t cGF0aWJpbGl0eSB3aXRoIGxpYmF2LiBJdCBpcyBib3RoIGluCisrICogIGltcGxlbWVudGF0aW9u IGFzIHdlbGwgYXMgQVBJIGluZWZmaWNpZW50LiBJdCBkb2VzIG5vdCBzY2FsZSBhbmQgaXMKKysg KiAgZXh0cmVtZWx5IHNsb3cgd2l0aCBsYXJnZSBkaWN0aW9uYXJpZXMuCisrICogIEl0IGlzIHJl Y29tbWVuZGVkIHRoYXQgbmV3IGNvZGUgdXNlcyBvdXIgdHJlZSBjb250YWluZXIgZnJvbSB0cmVl LmMvaAorKyAqICB3aGVyZSBhcHBsaWNhYmxlLCB3aGljaCB1c2VzIEFWTCB0cmVlcyB0byBhY2hp ZXZlIE8obG9nIG4pIHBlcmZvcm1hbmNlLgorKyAqLworKworKyNpZm5kZWYgQVZVVElMX0RJQ1Rf SAorKyNkZWZpbmUgQVZVVElMX0RJQ1RfSAorKworKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysKKysv KioKKysgKiBAYWRkdG9ncm91cCBsYXZ1X2RpY3QgQVZEaWN0aW9uYXJ5CisrICogQGluZ3JvdXAg bGF2dV9kYXRhCisrICoKKysgKiBAYnJpZWYgU2ltcGxlIGtleTp2YWx1ZSBzdG9yZQorKyAqCisr ICogQHsKKysgKiBEaWN0aW9uYXJpZXMgYXJlIHVzZWQgZm9yIHN0b3Jpbmcga2V5LXZhbHVlIHBh aXJzLgorKyAqCisrICogLSBUbyAqKmNyZWF0ZSBhbiBBVkRpY3Rpb25hcnkqKiwgc2ltcGx5IHBh c3MgYW4gYWRkcmVzcyBvZiBhIE5VTEwKKysgKiAgIHBvaW50ZXIgdG8gYXZfZGljdF9zZXQoKS4g TlVMTCBjYW4gYmUgdXNlZCBhcyBhbiBlbXB0eSBkaWN0aW9uYXJ5CisrICogICB3aGVyZXZlciBh IHBvaW50ZXIgdG8gYW4gQVZEaWN0aW9uYXJ5IGlzIHJlcXVpcmVkLgorKyAqIC0gVG8gKippbnNl cnQgYW4gZW50cnkqKiwgdXNlIGF2X2RpY3Rfc2V0KCkuCisrICogLSBVc2UgYXZfZGljdF9nZXQo KSB0byAqKnJldHJpZXZlIGFuIGVudHJ5KiouCisrICogLSBUbyAqKml0ZXJhdGUgb3ZlciBhbGwg ZW50cmllcyoqLCB1c2UgYXZfZGljdF9pdGVyYXRlKCkuCisrICogLSBJbiBvcmRlciB0byAqKmZy ZWUgdGhlIGRpY3Rpb25hcnkgYW5kIGFsbCBpdHMgY29udGVudHMqKiwgdXNlIGF2X2RpY3RfZnJl ZSgpLgorKyAqCisrIEBjb2RlCisrICAgQVZEaWN0aW9uYXJ5ICpkID0gTlVMTDsgICAgICAgICAg IC8vICJjcmVhdGUiIGFuIGVtcHR5IGRpY3Rpb25hcnkKKysgICBBVkRpY3Rpb25hcnlFbnRyeSAq dCA9IE5VTEw7CisrCisrICAgYXZfZGljdF9zZXQoJmQsICJmb28iLCAiYmFyIiwgMCk7IC8vIGFk ZCBhbiBlbnRyeQorKworKyAgIGNoYXIgKmsgPSBhdl9zdHJkdXAoImtleSIpOyAgICAgICAvLyBp ZiB5b3VyIHN0cmluZ3MgYXJlIGFscmVhZHkgYWxsb2NhdGVkLAorKyAgIGNoYXIgKnYgPSBhdl9z dHJkdXAoInZhbHVlIik7ICAgICAvLyB5b3UgY2FuIGF2b2lkIGNvcHlpbmcgdGhlbSBsaWtlIHRo aXMKKysgICBhdl9kaWN0X3NldCgmZCwgaywgdiwgQVZfRElDVF9ET05UX1NUUkRVUF9LRVkgfCBB Vl9ESUNUX0RPTlRfU1RSRFVQX1ZBTCk7CisrCisrICAgd2hpbGUgKCh0ID0gYXZfZGljdF9pdGVy YXRlKGQsIHQpKSkgeworKyAgICAgICA8Li4uLj4gICAgICAgICAgICAgICAgICAgICAgICAvLyBp dGVyYXRlIG92ZXIgYWxsIGVudHJpZXMgaW4gZAorKyAgIH0KKysgICBhdl9kaWN0X2ZyZWUoJmQp OworKyBAZW5kY29kZQorKyAqLworKworKy8qKgorKyAqIEBuYW1lIEFWRGljdGlvbmFyeSBGbGFn cworKyAqIEZsYWdzIHRoYXQgaW5mbHVlbmNlIGJlaGF2aW9yIG9mIHRoZSBtYXRjaGluZyBvZiBr ZXlzIG9yIGluc2VydGlvbiB0byB0aGUgZGljdGlvbmFyeS4KKysgKiBAeworKyAqLworKyNkZWZp bmUgQVZfRElDVF9NQVRDSF9DQVNFICAgICAgMSAgIC8qKjwgT25seSBnZXQgYW4gZW50cnkgd2l0 aCBleGFjdC1jYXNlIGtleSBtYXRjaC4gT25seSByZWxldmFudCBpbiBhdl9kaWN0X2dldCgpLiAq LworKyNkZWZpbmUgQVZfRElDVF9JR05PUkVfU1VGRklYICAgMiAgIC8qKjwgUmV0dXJuIGZpcnN0 IGVudHJ5IGluIGEgZGljdGlvbmFyeSB3aG9zZSBmaXJzdCBwYXJ0IGNvcnJlc3BvbmRzIHRvIHRo ZSBzZWFyY2gga2V5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWdub3JpbmcgdGhlIHN1ZmZpeCBvZiB0aGUgZm91bmQga2V5IHN0cmluZy4gT25seSByZWxldmFu dCBpbiBhdl9kaWN0X2dldCgpLiAqLworKyNkZWZpbmUgQVZfRElDVF9ET05UX1NUUkRVUF9LRVkg NCAgIC8qKjwgVGFrZSBvd25lcnNoaXAgb2YgYSBrZXkgdGhhdCdzIGJlZW4KKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlZCB3aXRoIGF2X21hbGxvYygp IG9yIGFub3RoZXIgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24uICovCisrI2RlZmluZSBBVl9E SUNUX0RPTlRfU1RSRFVQX1ZBTCA4ICAgLyoqPCBUYWtlIG93bmVyc2hpcCBvZiBhIHZhbHVlIHRo YXQncyBiZWVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxv Y2F0ZWQgd2l0aCBhdl9tYWxsb2MoKSBvciBhbm90aGVyIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0 aW9uLiAqLworKyNkZWZpbmUgQVZfRElDVF9ET05UX09WRVJXUklURSAxNiAgIC8qKjwgRG9uJ3Qg b3ZlcndyaXRlIGV4aXN0aW5nIGVudHJpZXMuICovCisrI2RlZmluZSBBVl9ESUNUX0FQUEVORCAg ICAgICAgIDMyICAgLyoqPCBJZiB0aGUgZW50cnkgYWxyZWFkeSBleGlzdHMsIGFwcGVuZCB0byBp dC4gIE5vdGUgdGhhdCBubworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGVsaW1pdGVyIGlzIGFkZGVkLCB0aGUgc3RyaW5ncyBhcmUgc2ltcGx5IGNvbmNhdGVuYXRl ZC4gKi8KKysjZGVmaW5lIEFWX0RJQ1RfTVVMVElLRVkgICAgICAgNjQgICAvKio8IEFsbG93IHRv IHN0b3JlIHNldmVyYWwgZXF1YWwga2V5cyBpbiB0aGUgZGljdGlvbmFyeSAqLworKyNkZWZpbmUg QVZfRElDVF9ERURVUCAgICAgICAgIDEyOCAgIC8qKjwgSWYgaW5zZXJ0aW5nIGEgdmFsdWUgdGhh dCBhbHJlYWR5IGV4aXN0cyBmb3IgYSBrZXksIGRvIG5vdGhpbmcuIE9ubHkgcmVsZXZhbnQgd2l0 aCBBVl9ESUNUX01VTFRJS0VZLiAqLworKy8qKgorKyAqIEB9CisrICovCisrCisrdHlwZWRlZiBz dHJ1Y3QgQVZEaWN0aW9uYXJ5RW50cnkgeworKyAgICBjaGFyICprZXk7CisrICAgIGNoYXIgKnZh bHVlOworK30gQVZEaWN0aW9uYXJ5RW50cnk7CisrCisrdHlwZWRlZiBzdHJ1Y3QgQVZEaWN0aW9u YXJ5IEFWRGljdGlvbmFyeTsKKysKKysvKioKKysgKiBHZXQgYSBkaWN0aW9uYXJ5IGVudHJ5IHdp dGggbWF0Y2hpbmcga2V5LgorKyAqCisrICogVGhlIHJldHVybmVkIGVudHJ5IGtleSBvciB2YWx1 ZSBtdXN0IG5vdCBiZSBjaGFuZ2VkLCBvciBpdCB3aWxsCisrICogY2F1c2UgdW5kZWZpbmVkIGJl aGF2aW9yLgorKyAqCisrICogQHBhcmFtIHByZXYgIFNldCB0byB0aGUgcHJldmlvdXMgbWF0Y2hp bmcgZWxlbWVudCB0byBmaW5kIHRoZSBuZXh0LgorKyAqICAgICAgICAgICAgICBJZiBzZXQgdG8g TlVMTCB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBpcyByZXR1cm5lZC4KKysgKiBAcGFyYW0g a2V5ICAgTWF0Y2hpbmcga2V5CisrICogQHBhcmFtIGZsYWdzIEEgY29sbGVjdGlvbiBvZiBBVl9E SUNUXyogZmxhZ3MgY29udHJvbGxpbmcgaG93IHRoZQorKyAqICAgICAgICAgICAgICBlbnRyeSBp cyByZXRyaWV2ZWQKKysgKgorKyAqIEByZXR1cm4gICAgICBGb3VuZCBlbnRyeSBvciBOVUxMIGlu IGNhc2Ugbm8gbWF0Y2hpbmcgZW50cnkgd2FzIGZvdW5kIGluIHRoZSBkaWN0aW9uYXJ5CisrICov CisrQVZEaWN0aW9uYXJ5RW50cnkgKmF2X2RpY3RfZ2V0KGNvbnN0IEFWRGljdGlvbmFyeSAqbSwg Y29uc3QgY2hhciAqa2V5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBB VkRpY3Rpb25hcnlFbnRyeSAqcHJldiwgaW50IGZsYWdzKTsKKysKKysvKioKKysgKiBJdGVyYXRl IG92ZXIgYSBkaWN0aW9uYXJ5CisrICoKKysgKiBJdGVyYXRlcyB0aHJvdWdoIGFsbCBlbnRyaWVz IGluIHRoZSBkaWN0aW9uYXJ5LgorKyAqCisrICogQHdhcm5pbmcgVGhlIHJldHVybmVkIEFWRGlj dGlvbmFyeUVudHJ5IGtleS92YWx1ZSBtdXN0IG5vdCBiZSBjaGFuZ2VkLgorKyAqCisrICogQHdh cm5pbmcgQXMgYXZfZGljdF9zZXQoKSBpbnZhbGlkYXRlcyBhbGwgcHJldmlvdXMgZW50cmllcyBy ZXR1cm5lZAorKyAqIGJ5IHRoaXMgZnVuY3Rpb24sIGl0IG11c3Qgbm90IGJlIGNhbGxlZCB3aGls ZSBpdGVyYXRpbmcgb3ZlciB0aGUgZGljdC4KKysgKgorKyAqIFR5cGljYWwgdXNhZ2U6CisrICog QGNvZGUKKysgKiBjb25zdCBBVkRpY3Rpb25hcnlFbnRyeSAqZSA9IE5VTEw7CisrICogd2hpbGUg KChlID0gYXZfZGljdF9pdGVyYXRlKG0sIGUpKSkgeworKyAqICAgICAvLyAuLi4KKysgKiB9Cisr ICogQGVuZGNvZGUKKysgKgorKyAqIEBwYXJhbSBtICAgICBUaGUgZGljdGlvbmFyeSB0byBpdGVy YXRlIG92ZXIKKysgKiBAcGFyYW0gcHJldiAgUG9pbnRlciB0byB0aGUgcHJldmlvdXMgQVZEaWN0 aW9uYXJ5RW50cnksIE5VTEwgaW5pdGlhbGx5CisrICoKKysgKiBAcmV0dmFsIEFWRGljdGlvbmFy eUVudHJ5KiBUaGUgbmV4dCBlbGVtZW50IGluIHRoZSBkaWN0aW9uYXJ5CisrICogQHJldHZhbCBO VUxMICAgICAgICAgICAgICAgTm8gbW9yZSBlbGVtZW50cyBpbiB0aGUgZGljdGlvbmFyeQorKyAq LworK2NvbnN0IEFWRGljdGlvbmFyeUVudHJ5ICphdl9kaWN0X2l0ZXJhdGUoY29uc3QgQVZEaWN0 aW9uYXJ5ICptLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgQVZEaWN0aW9uYXJ5RW50cnkgKnByZXYpOworKworKy8qKgorKyAqIEdldCBudW1iZXIgb2Yg ZW50cmllcyBpbiBkaWN0aW9uYXJ5LgorKyAqCisrICogQHBhcmFtIG0gZGljdGlvbmFyeQorKyAq IEByZXR1cm4gIG51bWJlciBvZiBlbnRyaWVzIGluIGRpY3Rpb25hcnkKKysgKi8KKytpbnQgYXZf ZGljdF9jb3VudChjb25zdCBBVkRpY3Rpb25hcnkgKm0pOworKworKy8qKgorKyAqIFNldCB0aGUg Z2l2ZW4gZW50cnkgaW4gKnBtLCBvdmVyd3JpdGluZyBhbiBleGlzdGluZyBlbnRyeS4KKysgKgor KyAqIE5vdGU6IElmIEFWX0RJQ1RfRE9OVF9TVFJEVVBfS0VZIG9yIEFWX0RJQ1RfRE9OVF9TVFJE VVBfVkFMIGlzIHNldCwKKysgKiB0aGVzZSBhcmd1bWVudHMgd2lsbCBiZSBmcmVlZCBvbiBlcnJv ci4KKysgKgorKyAqIEB3YXJuaW5nIEFkZGluZyBhIG5ldyBlbnRyeSB0byBhIGRpY3Rpb25hcnkg aW52YWxpZGF0ZXMgYWxsIGV4aXN0aW5nIGVudHJpZXMKKysgKiBwcmV2aW91c2x5IHJldHVybmVk IHdpdGggYXZfZGljdF9nZXQoKSBvciBhdl9kaWN0X2l0ZXJhdGUoKS4KKysgKgorKyAqIEBwYXJh bSBwbSAgICAgICAgUG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSBkaWN0aW9uYXJ5IHN0cnVjdC4g SWYgKnBtIGlzIE5VTEwKKysgKiAgICAgICAgICAgICAgICAgIGEgZGljdGlvbmFyeSBzdHJ1Y3Qg aXMgYWxsb2NhdGVkIGFuZCBwdXQgaW4gKnBtLgorKyAqIEBwYXJhbSBrZXkgICAgICAgRW50cnkg a2V5IHRvIGFkZCB0byAqcG0gKHdpbGwgZWl0aGVyIGJlIGF2X3N0cmR1cGVkIG9yIGFkZGVkIGFz IGEgbmV3IGtleSBkZXBlbmRpbmcgb24gZmxhZ3MpCisrICogQHBhcmFtIHZhbHVlICAgICBFbnRy eSB2YWx1ZSB0byBhZGQgdG8gKnBtICh3aWxsIGJlIGF2X3N0cmR1cGVkIG9yIGFkZGVkIGFzIGEg bmV3IGtleSBkZXBlbmRpbmcgb24gZmxhZ3MpLgorKyAqICAgICAgICAgICAgICAgICAgUGFzc2lu ZyBhIE5VTEwgdmFsdWUgd2lsbCBjYXVzZSBhbiBleGlzdGluZyBlbnRyeSB0byBiZSBkZWxldGVk LgorKyAqCisrICogQHJldHVybiAgICAgICAgICA+PSAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGFu IGVycm9yIGNvZGUgPDAKKysgKi8KKytpbnQgYXZfZGljdF9zZXQoQVZEaWN0aW9uYXJ5ICoqcG0s IGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIGludCBmbGFncyk7CisrCisrLyoq CisrICogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgYXZfZGljdF9zZXQoKSB0aGF0IGNvbnZlcnRz IHRoZSB2YWx1ZSB0byBhIHN0cmluZworKyAqIGFuZCBzdG9yZXMgaXQuCisrICoKKysgKiBOb3Rl OiBJZiA6OkFWX0RJQ1RfRE9OVF9TVFJEVVBfS0VZIGlzIHNldCwga2V5IHdpbGwgYmUgZnJlZWQg b24gZXJyb3IuCisrICovCisraW50IGF2X2RpY3Rfc2V0X2ludChBVkRpY3Rpb25hcnkgKipwbSwg Y29uc3QgY2hhciAqa2V5LCBpbnQ2NF90IHZhbHVlLCBpbnQgZmxhZ3MpOworKworKy8qKgorKyAq IFBhcnNlIHRoZSBrZXkvdmFsdWUgcGFpcnMgbGlzdCBhbmQgYWRkIHRoZSBwYXJzZWQgZW50cmll cyB0byBhIGRpY3Rpb25hcnkuCisrICoKKysgKiBJbiBjYXNlIG9mIGZhaWx1cmUsIGFsbCB0aGUg c3VjY2Vzc2Z1bGx5IHNldCBlbnRyaWVzIGFyZSBzdG9yZWQgaW4KKysgKiAqcG0uIFlvdSBtYXkg bmVlZCB0byBtYW51YWxseSBmcmVlIHRoZSBjcmVhdGVkIGRpY3Rpb25hcnkuCisrICoKKysgKiBA cGFyYW0ga2V5X3ZhbF9zZXAgIEEgMC10ZXJtaW5hdGVkIGxpc3Qgb2YgY2hhcmFjdGVycyB1c2Vk IHRvIHNlcGFyYXRlCisrICogICAgICAgICAgICAgICAgICAgICBrZXkgZnJvbSB2YWx1ZQorKyAq IEBwYXJhbSBwYWlyc19zZXAgICAgQSAwLXRlcm1pbmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXJzIHVz ZWQgdG8gc2VwYXJhdGUKKysgKiAgICAgICAgICAgICAgICAgICAgIHR3byBwYWlycyBmcm9tIGVh Y2ggb3RoZXIKKysgKiBAcGFyYW0gZmxhZ3MgICAgICAgIEZsYWdzIHRvIHVzZSB3aGVuIGFkZGlu ZyB0byB0aGUgZGljdGlvbmFyeS4KKysgKiAgICAgICAgICAgICAgICAgICAgIDo6QVZfRElDVF9E T05UX1NUUkRVUF9LRVkgYW5kIDo6QVZfRElDVF9ET05UX1NUUkRVUF9WQUwKKysgKiAgICAgICAg ICAgICAgICAgICAgIGFyZSBpZ25vcmVkIHNpbmNlIHRoZSBrZXkvdmFsdWUgdG9rZW5zIHdpbGwg YWx3YXlzCisrICogICAgICAgICAgICAgICAgICAgICBiZSBkdXBsaWNhdGVkLgorKyAqCisrICog QHJldHVybiAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBv biBmYWlsdXJlCisrICovCisraW50IGF2X2RpY3RfcGFyc2Vfc3RyaW5nKEFWRGljdGlvbmFyeSAq KnBtLCBjb25zdCBjaGFyICpzdHIsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmtleV92YWxfc2VwLCBjb25zdCBjaGFyICpwYWlyc19zZXAsCisrICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBmbGFncyk7CisrCisrLyoqCisrICogQ29weSBlbnRyaWVzIGZyb20gb25l IEFWRGljdGlvbmFyeSBzdHJ1Y3QgaW50byBhbm90aGVyLgorKyAqCisrICogQG5vdGUgTWV0YWRh dGEgaXMgcmVhZCB1c2luZyB0aGUgOjpBVl9ESUNUX0lHTk9SRV9TVUZGSVggZmxhZworKyAqCisr ICogQHBhcmFtIGRzdCAgIFBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIGEgQVZEaWN0aW9uYXJ5IHN0 cnVjdCB0byBjb3B5IGludG8uIElmICpkc3QgaXMgTlVMTCwKKysgKiAgICAgICAgICAgICAgdGhp cyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIGEgc3RydWN0IGZvciB5b3UgYW5kIHB1dCBpdCBpbiAq ZHN0CisrICogQHBhcmFtIHNyYyAgIFBvaW50ZXIgdG8gdGhlIHNvdXJjZSBBVkRpY3Rpb25hcnkg c3RydWN0IHRvIGNvcHkgaXRlbXMgZnJvbS4KKysgKiBAcGFyYW0gZmxhZ3MgRmxhZ3MgdG8gdXNl IHdoZW4gc2V0dGluZyBlbnRyaWVzIGluICpkc3QKKysgKgorKyAqIEByZXR1cm4gMCBvbiBzdWNj ZXNzLCBuZWdhdGl2ZSBBVkVSUk9SIGNvZGUgb24gZmFpbHVyZS4gSWYgZHN0IHdhcyBhbGxvY2F0 ZWQKKysgKiAgICAgICAgICAgYnkgdGhpcyBmdW5jdGlvbiwgY2FsbGVycyBzaG91bGQgZnJlZSB0 aGUgYXNzb2NpYXRlZCBtZW1vcnkuCisrICovCisraW50IGF2X2RpY3RfY29weShBVkRpY3Rpb25h cnkgKipkc3QsIGNvbnN0IEFWRGljdGlvbmFyeSAqc3JjLCBpbnQgZmxhZ3MpOworKworKy8qKgor KyAqIEZyZWUgYWxsIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBhbiBBVkRpY3Rpb25hcnkgc3Ry dWN0CisrICogYW5kIGFsbCBrZXlzIGFuZCB2YWx1ZXMuCisrICovCisrdm9pZCBhdl9kaWN0X2Zy ZWUoQVZEaWN0aW9uYXJ5ICoqbSk7CisrCisrLyoqCisrICogR2V0IGRpY3Rpb25hcnkgZW50cmll cyBhcyBhIHN0cmluZy4KKysgKgorKyAqIENyZWF0ZSBhIHN0cmluZyBjb250YWluaW5nIGRpY3Rp b25hcnkncyBlbnRyaWVzLgorKyAqIFN1Y2ggc3RyaW5nIG1heSBiZSBwYXNzZWQgYmFjayB0byBh dl9kaWN0X3BhcnNlX3N0cmluZygpLgorKyAqIEBub3RlIFN0cmluZyBpcyBlc2NhcGVkIHdpdGgg YmFja3NsYXNoZXMgKCdcJykuCisrICoKKysgKiBAd2FybmluZyBTZXBhcmF0b3JzIGNhbm5vdCBi ZSBuZWl0aGVyICdcXCcgbm9yICdcMCcuIFRoZXkgYWxzbyBjYW5ub3QgYmUgdGhlIHNhbWUuCisr ICoKKysgKiBAcGFyYW1baW5dICBtICAgICAgICAgICAgIFRoZSBkaWN0aW9uYXJ5CisrICogQHBh cmFtW291dF0gYnVmZmVyICAgICAgICBQb2ludGVyIHRvIGJ1ZmZlciB0aGF0IHdpbGwgYmUgYWxs b2NhdGVkIHdpdGggc3RyaW5nIGNvbnRhaW5pbmcgZW50cmllcy4KKysgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJ1ZmZlciBtdXN0IGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIgd2hlbiBpcyBu byBsb25nZXIgbmVlZGVkLgorKyAqIEBwYXJhbVtpbl0gIGtleV92YWxfc2VwICAgQ2hhcmFjdGVy IHVzZWQgdG8gc2VwYXJhdGUga2V5IGZyb20gdmFsdWUKKysgKiBAcGFyYW1baW5dICBwYWlyc19z ZXAgICAgIENoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIHR3byBwYWlycyBmcm9tIGVhY2ggb3Ro ZXIKKysgKgorKyAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgPj0gMCBvbiBzdWNjZXNzLCBu ZWdhdGl2ZSBvbiBlcnJvcgorKyAqLworK2ludCBhdl9kaWN0X2dldF9zdHJpbmcoY29uc3QgQVZE aWN0aW9uYXJ5ICptLCBjaGFyICoqYnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciBrZXlfdmFsX3NlcCwgY29uc3QgY2hhciBwYWlyc19zZXApOworKworKy8qKgorKyAq IEB9CisrICovCisrCisrI2VuZGlmIC8qIEFWVVRJTF9ESUNUX0ggKi8KK2RpZmYgLXVwIE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2 dXRpbC9lcnJvci5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEv dGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2Vycm9yLmgKKy0tLSBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvZXJy b3IuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc2NzA0MjM2ICswMjAwCisrKysgTXVz ZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGli YXZ1dGlsL2Vycm9yLmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzY2NjQ5ODggKzAyMDAKK0BAIC0w LDAgKzEsMTI5IEBACisrLyoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoK KysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIElu Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMw MSBVU0EKKysgKi8KKysKKysvKioKKysgKiBAZmlsZQorKyAqIGVycm9yIGNvZGUgZGVmaW5pdGlv bnMKKysgKi8KKysKKysjaWZuZGVmIEFWVVRJTF9FUlJPUl9ICisrI2RlZmluZSBBVlVUSUxfRVJS T1JfSAorKworKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysj aW5jbHVkZSAibWFjcm9zLmgiCisrCisrLyoqCisrICogQGFkZHRvZ3JvdXAgbGF2dV9lcnJvcgor KyAqCisrICogQHsKKysgKi8KKysKKysKKysvKiBlcnJvciBoYW5kbGluZyAqLworKyNpZiBFRE9N ID4gMAorKyNkZWZpbmUgQVZFUlJPUihlKSAoLShlKSkgICAvLy88IFJldHVybnMgYSBuZWdhdGl2 ZSBlcnJvciBjb2RlIGZyb20gYSBQT1NJWCBlcnJvciBjb2RlLCB0byByZXR1cm4gZnJvbSBsaWJy YXJ5IGZ1bmN0aW9ucy4KKysjZGVmaW5lIEFWVU5FUlJPUihlKSAoLShlKSkgLy8vPCBSZXR1cm5z IGEgUE9TSVggZXJyb3IgY29kZSBmcm9tIGEgbGlicmFyeSBmdW5jdGlvbiBlcnJvciByZXR1cm4g dmFsdWUuCisrI2Vsc2UKKysvKiBTb21lIHBsYXRmb3JtcyBoYXZlIEUqIGFuZCBlcnJubyBhbHJl YWR5IG5lZ2F0ZWQuICovCisrI2RlZmluZSBBVkVSUk9SKGUpIChlKQorKyNkZWZpbmUgQVZVTkVS Uk9SKGUpIChlKQorKyNlbmRpZgorKworKyNkZWZpbmUgRkZFUlJUQUcoYSwgYiwgYywgZCkgKC0o aW50KU1LVEFHKGEsIGIsIGMsIGQpKQorKworKyNkZWZpbmUgQVZFUlJPUl9CU0ZfTk9UX0ZPVU5E ICAgICAgRkZFUlJUQUcoMHhGOCwnQicsJ1MnLCdGJykgLy8vPCBCaXRzdHJlYW0gZmlsdGVyIG5v dCBmb3VuZAorKyNkZWZpbmUgQVZFUlJPUl9CVUcgICAgICAgICAgICAgICAgRkZFUlJUQUcoICdC JywnVScsJ0cnLCchJykgLy8vPCBJbnRlcm5hbCBidWcsIGFsc28gc2VlIEFWRVJST1JfQlVHMgor KyNkZWZpbmUgQVZFUlJPUl9CVUZGRVJfVE9PX1NNQUxMICAgRkZFUlJUQUcoICdCJywnVScsJ0Yn LCdTJykgLy8vPCBCdWZmZXIgdG9vIHNtYWxsCisrI2RlZmluZSBBVkVSUk9SX0RFQ09ERVJfTk9U X0ZPVU5EICBGRkVSUlRBRygweEY4LCdEJywnRScsJ0MnKSAvLy88IERlY29kZXIgbm90IGZvdW5k CisrI2RlZmluZSBBVkVSUk9SX0RFTVVYRVJfTk9UX0ZPVU5EICBGRkVSUlRBRygweEY4LCdEJywn RScsJ00nKSAvLy88IERlbXV4ZXIgbm90IGZvdW5kCisrI2RlZmluZSBBVkVSUk9SX0VOQ09ERVJf Tk9UX0ZPVU5EICBGRkVSUlRBRygweEY4LCdFJywnTicsJ0MnKSAvLy88IEVuY29kZXIgbm90IGZv dW5kCisrI2RlZmluZSBBVkVSUk9SX0VPRiAgICAgICAgICAgICAgICBGRkVSUlRBRyggJ0UnLCdP JywnRicsJyAnKSAvLy88IEVuZCBvZiBmaWxlCisrI2RlZmluZSBBVkVSUk9SX0VYSVQgICAgICAg ICAgICAgICBGRkVSUlRBRyggJ0UnLCdYJywnSScsJ1QnKSAvLy88IEltbWVkaWF0ZSBleGl0IHdh cyByZXF1ZXN0ZWQ7IHRoZSBjYWxsZWQgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSByZXN0YXJ0ZWQK KysjZGVmaW5lIEFWRVJST1JfRVhURVJOQUwgICAgICAgICAgIEZGRVJSVEFHKCAnRScsJ1gnLCdU JywnICcpIC8vLzwgR2VuZXJpYyBlcnJvciBpbiBhbiBleHRlcm5hbCBsaWJyYXJ5CisrI2RlZmlu ZSBBVkVSUk9SX0ZJTFRFUl9OT1RfRk9VTkQgICBGRkVSUlRBRygweEY4LCdGJywnSScsJ0wnKSAv Ly88IEZpbHRlciBub3QgZm91bmQKKysjZGVmaW5lIEFWRVJST1JfSU5WQUxJRERBVEEgICAgICAg IEZGRVJSVEFHKCAnSScsJ04nLCdEJywnQScpIC8vLzwgSW52YWxpZCBkYXRhIGZvdW5kIHdoZW4g cHJvY2Vzc2luZyBpbnB1dAorKyNkZWZpbmUgQVZFUlJPUl9NVVhFUl9OT1RfRk9VTkQgICAgRkZF UlJUQUcoMHhGOCwnTScsJ1UnLCdYJykgLy8vPCBNdXhlciBub3QgZm91bmQKKysjZGVmaW5lIEFW RVJST1JfT1BUSU9OX05PVF9GT1VORCAgIEZGRVJSVEFHKDB4RjgsJ08nLCdQJywnVCcpIC8vLzwg T3B0aW9uIG5vdCBmb3VuZAorKyNkZWZpbmUgQVZFUlJPUl9QQVRDSFdFTENPTUUgICAgICAgRkZF UlJUQUcoICdQJywnQScsJ1cnLCdFJykgLy8vPCBOb3QgeWV0IGltcGxlbWVudGVkIGluIEZGbXBl ZywgcGF0Y2hlcyB3ZWxjb21lCisrI2RlZmluZSBBVkVSUk9SX1BST1RPQ09MX05PVF9GT1VORCBG RkVSUlRBRygweEY4LCdQJywnUicsJ08nKSAvLy88IFByb3RvY29sIG5vdCBmb3VuZAorKworKyNk ZWZpbmUgQVZFUlJPUl9TVFJFQU1fTk9UX0ZPVU5EICAgRkZFUlJUQUcoMHhGOCwnUycsJ1QnLCdS JykgLy8vPCBTdHJlYW0gbm90IGZvdW5kCisrLyoqCisrICogVGhpcyBpcyBzZW1hbnRpY2FsbHkg aWRlbnRpY2FsIHRvIEFWRVJST1JfQlVHCisrICogaXQgaGFzIGJlZW4gaW50cm9kdWNlZCBpbiBM aWJhdiBhZnRlciBvdXIgQVZFUlJPUl9CVUcgYW5kIHdpdGggYSBtb2RpZmllZCB2YWx1ZS4KKysg Ki8KKysjZGVmaW5lIEFWRVJST1JfQlVHMiAgICAgICAgICAgICAgIEZGRVJSVEFHKCAnQicsJ1Un LCdHJywnICcpCisrI2RlZmluZSBBVkVSUk9SX1VOS05PV04gICAgICAgICAgICBGRkVSUlRBRygg J1UnLCdOJywnSycsJ04nKSAvLy88IFVua25vd24gZXJyb3IsIHR5cGljYWxseSBmcm9tIGFuIGV4 dGVybmFsIGxpYnJhcnkKKysjZGVmaW5lIEFWRVJST1JfRVhQRVJJTUVOVEFMICAgICAgICgtMHgy YmIyYWZhOCkgLy8vPCBSZXF1ZXN0ZWQgZmVhdHVyZSBpcyBmbGFnZ2VkIGV4cGVyaW1lbnRhbC4g U2V0IHN0cmljdF9zdGRfY29tcGxpYW5jZSBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gdXNlIGl0Lgor KyNkZWZpbmUgQVZFUlJPUl9JTlBVVF9DSEFOR0VEICAgICAgKC0weDYzNmU2NzAxKSAvLy88IElu cHV0IGNoYW5nZWQgYmV0d2VlbiBjYWxscy4gUmVjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkLiAo Y2FuIGJlIE9SLWVkIHdpdGggQVZFUlJPUl9PVVRQVVRfQ0hBTkdFRCkKKysjZGVmaW5lIEFWRVJS T1JfT1VUUFVUX0NIQU5HRUQgICAgICgtMHg2MzZlNjcwMikgLy8vPCBPdXRwdXQgY2hhbmdlZCBi ZXR3ZWVuIGNhbGxzLiBSZWNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQuIChjYW4gYmUgT1ItZWQg d2l0aCBBVkVSUk9SX0lOUFVUX0NIQU5HRUQpCisrLyogSFRUUCAmIFJUU1AgZXJyb3JzICovCisr I2RlZmluZSBBVkVSUk9SX0hUVFBfQkFEX1JFUVVFU1QgICBGRkVSUlRBRygweEY4LCc0JywnMCcs JzAnKQorKyNkZWZpbmUgQVZFUlJPUl9IVFRQX1VOQVVUSE9SSVpFRCAgRkZFUlJUQUcoMHhGOCwn NCcsJzAnLCcxJykKKysjZGVmaW5lIEFWRVJST1JfSFRUUF9GT1JCSURERU4gICAgIEZGRVJSVEFH KDB4RjgsJzQnLCcwJywnMycpCisrI2RlZmluZSBBVkVSUk9SX0hUVFBfTk9UX0ZPVU5EICAgICBG RkVSUlRBRygweEY4LCc0JywnMCcsJzQnKQorKyNkZWZpbmUgQVZFUlJPUl9IVFRQX1RPT19NQU5Z X1JFUVVFU1RTIEZGRVJSVEFHKDB4RjgsJzQnLCcyJywnOScpCisrI2RlZmluZSBBVkVSUk9SX0hU VFBfT1RIRVJfNFhYICAgICBGRkVSUlRBRygweEY4LCc0JywnWCcsJ1gnKQorKyNkZWZpbmUgQVZF UlJPUl9IVFRQX1NFUlZFUl9FUlJPUiAgRkZFUlJUQUcoMHhGOCwnNScsJ1gnLCdYJykKKysKKysj ZGVmaW5lIEFWX0VSUk9SX01BWF9TVFJJTkdfU0laRSA2NAorKworKy8qKgorKyAqIFB1dCBhIGRl c2NyaXB0aW9uIG9mIHRoZSBBVkVSUk9SIGNvZGUgZXJybnVtIGluIGVycmJ1Zi4KKysgKiBJbiBj YXNlIG9mIGZhaWx1cmUgdGhlIGdsb2JhbCB2YXJpYWJsZSBlcnJubyBpcyBzZXQgdG8gaW5kaWNh dGUgdGhlCisrICogZXJyb3IuIEV2ZW4gaW4gY2FzZSBvZiBmYWlsdXJlIGF2X3N0cmVycm9yKCkg d2lsbCBwcmludCBhIGdlbmVyaWMKKysgKiBlcnJvciBtZXNzYWdlIGluZGljYXRpbmcgdGhlIGVy cm51bSBwcm92aWRlZCB0byBlcnJidWYuCisrICoKKysgKiBAcGFyYW0gZXJybnVtICAgICAgZXJy b3IgY29kZSB0byBkZXNjcmliZQorKyAqIEBwYXJhbSBlcnJidWYgICAgICBidWZmZXIgdG8gd2hp Y2ggZGVzY3JpcHRpb24gaXMgd3JpdHRlbgorKyAqIEBwYXJhbSBlcnJidWZfc2l6ZSB0aGUgc2l6 ZSBpbiBieXRlcyBvZiBlcnJidWYKKysgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2 ZSB2YWx1ZSBpZiBhIGRlc2NyaXB0aW9uIGZvciBlcnJudW0KKysgKiBjYW5ub3QgYmUgZm91bmQK KysgKi8KKytpbnQgYXZfc3RyZXJyb3IoaW50IGVycm51bSwgY2hhciAqZXJyYnVmLCBzaXplX3Qg ZXJyYnVmX3NpemUpOworKworKy8qKgorKyAqIEZpbGwgdGhlIHByb3ZpZGVkIGJ1ZmZlciB3aXRo IGEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gZXJyb3Igc3RyaW5nCisrICogY29ycmVzcG9uZGluZyB0 byB0aGUgQVZFUlJPUiBjb2RlIGVycm51bS4KKysgKgorKyAqIEBwYXJhbSBlcnJidWYgICAgICAg ICBhIGJ1ZmZlcgorKyAqIEBwYXJhbSBlcnJidWZfc2l6ZSAgICBzaXplIGluIGJ5dGVzIG9mIGVy cmJ1ZgorKyAqIEBwYXJhbSBlcnJudW0gICAgICAgICBlcnJvciBjb2RlIHRvIGRlc2NyaWJlCisr ICogQHJldHVybiB0aGUgYnVmZmVyIGluIGlucHV0LCBmaWxsZWQgd2l0aCB0aGUgZXJyb3IgZGVz Y3JpcHRpb24KKysgKiBAc2VlIGF2X3N0cmVycm9yKCkKKysgKi8KKytzdGF0aWMgaW5saW5lIGNo YXIgKmF2X21ha2VfZXJyb3Jfc3RyaW5nKGNoYXIgKmVycmJ1Ziwgc2l6ZV90IGVycmJ1Zl9zaXpl LCBpbnQgZXJybnVtKQorK3sKKysgICAgYXZfc3RyZXJyb3IoZXJybnVtLCBlcnJidWYsIGVycmJ1 Zl9zaXplKTsKKysgICAgcmV0dXJuIGVycmJ1ZjsKKyt9CisrCisrLyoqCisrICogQ29udmVuaWVu Y2UgbWFjcm8sIHRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIHVzZWQgb25seSBkaXJlY3RseSBp bgorKyAqIGZ1bmN0aW9uIGFyZ3VtZW50cyBidXQgbmV2ZXIgc3RhbmQtYWxvbmUuCisrICovCisr I2RlZmluZSBhdl9lcnIyc3RyKGVycm51bSkgXAorKyAgICBhdl9tYWtlX2Vycm9yX3N0cmluZygo Y2hhcltBVl9FUlJPUl9NQVhfU1RSSU5HX1NJWkVdKXswfSwgQVZfRVJST1JfTUFYX1NUUklOR19T SVpFLCBlcnJudW0pCisrCisrLyoqCisrICogQH0KKysgKi8KKysKKysjZW5kaWYgLyogQVZVVElM X0VSUk9SX0ggKi8KK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlh L3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9mcmFtZS5oLmZmbXBlZzkgTXVzZVNjb3Jl LTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGls L2ZyYW1lLmgKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBh cnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvZnJhbWUuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6 NDcuNjc2OTgyMjc4ICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVk aWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2ZyYW1lLmgJMjAyNi0wOS0wNyAxMjoy Mzo0Ny42NzY3NTYzMjcgKzAyMDAKK0BAIC0wLDAgKzEsMTIxNSBAQAorKy8qCisrICogVGhpcyBm aWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor KyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo IEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrLyoqCisrICogQGZp bGUKKysgKiBAaW5ncm91cCBsYXZ1X2ZyYW1lCisrICogcmVmZXJlbmNlLWNvdW50ZWQgZnJhbWUg QVBJCisrICovCisrCisrI2lmbmRlZiBBVlVUSUxfRlJBTUVfSAorKyNkZWZpbmUgQVZVVElMX0ZS QU1FX0gKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorKwor KyNpbmNsdWRlICJhdnV0aWwuaCIKKysjaW5jbHVkZSAiYnVmZmVyLmgiCisrI2luY2x1ZGUgImNo YW5uZWxfbGF5b3V0LmgiCisrI2luY2x1ZGUgImRpY3QuaCIKKysjaW5jbHVkZSAicmF0aW9uYWwu aCIKKysjaW5jbHVkZSAic2FtcGxlZm10LmgiCisrI2luY2x1ZGUgInBpeGZtdC5oIgorKyNpbmNs dWRlICJ2ZXJzaW9uLmgiCisrCisrCisrLyoqCisrICogQGRlZmdyb3VwIGxhdnVfZnJhbWUgQVZG cmFtZQorKyAqIEBpbmdyb3VwIGxhdnVfZGF0YQorKyAqCisrICogQHsKKysgKiBBVkZyYW1lIGlz IGFuIGFic3RyYWN0aW9uIGZvciByZWZlcmVuY2UtY291bnRlZCByYXcgbXVsdGltZWRpYSBkYXRh LgorKyAqLworKworK2VudW0gQVZGcmFtZVNpZGVEYXRhVHlwZSB7CisrICAgIC8qKgorKyAgICAg KiBUaGUgZGF0YSBpcyB0aGUgQVZQYW5TY2FuIHN0cnVjdCBkZWZpbmVkIGluIGxpYmF2Y29kZWMu CisrICAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX1BBTlNDQU4sCisrICAgIC8qKgorKyAgICAg KiBBVFNDIEE1MyBQYXJ0IDQgQ2xvc2VkIENhcHRpb25zLgorKyAgICAgKiBBNTMgQ0MgYml0c3Ry ZWFtIGlzIHN0b3JlZCBhcyB1aW50OF90IGluIEFWRnJhbWVTaWRlRGF0YS5kYXRhLgorKyAgICAg KiBUaGUgbnVtYmVyIG9mIGJ5dGVzIG9mIENDIGRhdGEgaXMgQVZGcmFtZVNpZGVEYXRhLnNpemUu CisrICAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX0E1M19DQywKKysgICAgLyoqCisrICAgICAq IFN0ZXJlb3Njb3BpYyAzZCBtZXRhZGF0YS4KKysgICAgICogVGhlIGRhdGEgaXMgdGhlIEFWU3Rl cmVvM0Qgc3RydWN0IGRlZmluZWQgaW4gbGliYXZ1dGlsL3N0ZXJlbzNkLmguCisrICAgICAqLwor KyAgICBBVl9GUkFNRV9EQVRBX1NURVJFTzNELAorKyAgICAvKioKKysgICAgICogVGhlIGRhdGEg aXMgdGhlIEFWTWF0cml4RW5jb2RpbmcgZW51bSBkZWZpbmVkIGluIGxpYmF2dXRpbC9jaGFubmVs X2xheW91dC5oLgorKyAgICAgKi8KKysgICAgQVZfRlJBTUVfREFUQV9NQVRSSVhFTkNPRElORywK KysgICAgLyoqCisrICAgICAqIE1ldGFkYXRhIHJlbGV2YW50IHRvIGEgZG93bm1peCBwcm9jZWR1 cmUuCisrICAgICAqIFRoZSBkYXRhIGlzIHRoZSBBVkRvd25taXhJbmZvIHN0cnVjdCBkZWZpbmVk IGluIGxpYmF2dXRpbC9kb3dubWl4X2luZm8uaC4KKysgICAgICovCisrICAgIEFWX0ZSQU1FX0RB VEFfRE9XTk1JWF9JTkZPLAorKyAgICAvKioKKysgICAgICogUmVwbGF5R2FpbiBpbmZvcm1hdGlv biBpbiB0aGUgZm9ybSBvZiB0aGUgQVZSZXBsYXlHYWluIHN0cnVjdC4KKysgICAgICovCisrICAg IEFWX0ZSQU1FX0RBVEFfUkVQTEFZR0FJTiwKKysgICAgLyoqCisrICAgICAqIFRoaXMgc2lkZSBk YXRhIGNvbnRhaW5zIGEgM3gzIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBkZXNjcmliaW5nIGFuIGFm ZmluZQorKyAgICAgKiB0cmFuc2Zvcm1hdGlvbiB0aGF0IG5lZWRzIHRvIGJlIGFwcGxpZWQgdG8g dGhlIGZyYW1lIGZvciBjb3JyZWN0CisrICAgICAqIHByZXNlbnRhdGlvbi4KKysgICAgICoKKysg ICAgICogU2VlIGxpYmF2dXRpbC9kaXNwbGF5LmggZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24g b2YgdGhlIGRhdGEuCisrICAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX0RJU1BMQVlNQVRSSVgs CisrICAgIC8qKgorKyAgICAgKiBBY3RpdmUgRm9ybWF0IERlc2NyaXB0aW9uIGRhdGEgY29uc2lz dGluZyBvZiBhIHNpbmdsZSBieXRlIGFzIHNwZWNpZmllZAorKyAgICAgKiBpbiBFVFNJIFRTIDEw MSAxNTQgdXNpbmcgQVZBY3RpdmVGb3JtYXREZXNjcmlwdGlvbiBlbnVtLgorKyAgICAgKi8KKysg ICAgQVZfRlJBTUVfREFUQV9BRkQsCisrICAgIC8qKgorKyAgICAgKiBNb3Rpb24gdmVjdG9ycyBl eHBvcnRlZCBieSBzb21lIGNvZGVjcyAob24gZGVtYW5kIHRocm91Z2ggdGhlIGV4cG9ydF9tdnMK KysgICAgICogZmxhZyBzZXQgaW4gdGhlIGxpYmF2Y29kZWMgQVZDb2RlY0NvbnRleHQgZmxhZ3My IG9wdGlvbikuCisrICAgICAqIFRoZSBkYXRhIGlzIHRoZSBBVk1vdGlvblZlY3RvciBzdHJ1Y3Qg ZGVmaW5lZCBpbgorKyAgICAgKiBsaWJhdnV0aWwvbW90aW9uX3ZlY3Rvci5oLgorKyAgICAgKi8K KysgICAgQVZfRlJBTUVfREFUQV9NT1RJT05fVkVDVE9SUywKKysgICAgLyoqCisrICAgICAqIFJl Y29tbWVuZHMgc2tpcHBpbmcgdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygc2FtcGxlcy4gVGhpcyBp cyBleHBvcnRlZAorKyAgICAgKiBvbmx5IGlmIHRoZSAic2tpcF9tYW51YWwiIEFWT3B0aW9uIGlz IHNldCBpbiBsaWJhdmNvZGVjLgorKyAgICAgKiBUaGlzIGhhcyB0aGUgc2FtZSBmb3JtYXQgYXMg QVZfUEtUX0RBVEFfU0tJUF9TQU1QTEVTLgorKyAgICAgKiBAY29kZQorKyAgICAgKiB1MzJsZSBu dW1iZXIgb2Ygc2FtcGxlcyB0byBza2lwIGZyb20gc3RhcnQgb2YgdGhpcyBwYWNrZXQKKysgICAg ICogdTMybGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gc2tpcCBmcm9tIGVuZCBvZiB0aGlzIHBhY2tl dAorKyAgICAgKiB1OCAgICByZWFzb24gZm9yIHN0YXJ0IHNraXAKKysgICAgICogdTggICAgcmVh c29uIGZvciBlbmQgICBza2lwICgwPXBhZGRpbmcgc2lsZW5jZSwgMT1jb252ZXJnZW5jZSkKKysg ICAgICogQGVuZGNvZGUKKysgICAgICovCisrICAgIEFWX0ZSQU1FX0RBVEFfU0tJUF9TQU1QTEVT LAorKyAgICAvKioKKysgICAgICogVGhpcyBzaWRlIGRhdGEgbXVzdCBiZSBhc3NvY2lhdGVkIHdp dGggYW4gYXVkaW8gZnJhbWUgYW5kIGNvcnJlc3BvbmRzIHRvCisrICAgICAqIGVudW0gQVZBdWRp b1NlcnZpY2VUeXBlIGRlZmluZWQgaW4gYXZjb2RlYy5oLgorKyAgICAgKi8KKysgICAgQVZfRlJB TUVfREFUQV9BVURJT19TRVJWSUNFX1RZUEUsCisrICAgIC8qKgorKyAgICAgKiBNYXN0ZXJpbmcg ZGlzcGxheSBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSB2aWRlbyBmcmFtZS4gVGhlIHBheWxv YWQgaXMKKysgICAgICogYW4gQVZNYXN0ZXJpbmdEaXNwbGF5TWV0YWRhdGEgdHlwZSBhbmQgY29u dGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisrICAgICAqIG1hc3RlcmluZyBkaXNwbGF5IGNv bG9yIHZvbHVtZS4KKysgICAgICovCisrICAgIEFWX0ZSQU1FX0RBVEFfTUFTVEVSSU5HX0RJU1BM QVlfTUVUQURBVEEsCisrICAgIC8qKgorKyAgICAgKiBUaGUgR09QIHRpbWVjb2RlIGluIDI1IGJp dCB0aW1lY29kZSBmb3JtYXQuIERhdGEgZm9ybWF0IGlzIDY0LWJpdCBpbnRlZ2VyLgorKyAgICAg KiBUaGlzIGlzIHNldCBvbiB0aGUgZmlyc3QgZnJhbWUgb2YgYSBHT1AgdGhhdCBoYXMgYSB0ZW1w b3JhbCByZWZlcmVuY2Ugb2YgMC4KKysgICAgICovCisrICAgIEFWX0ZSQU1FX0RBVEFfR09QX1RJ TUVDT0RFLAorKworKyAgICAvKioKKysgICAgICogVGhlIGRhdGEgcmVwcmVzZW50cyB0aGUgQVZT cGhlcmljYWxNYXBwaW5nIHN0cnVjdHVyZSBkZWZpbmVkIGluCisrICAgICAqIGxpYmF2dXRpbC9z cGhlcmljYWwuaC4KKysgICAgICovCisrICAgIEFWX0ZSQU1FX0RBVEFfU1BIRVJJQ0FMLAorKwor KyAgICAvKioKKysgICAgICogQ29udGVudCBsaWdodCBsZXZlbCAoYmFzZWQgb24gQ1RBLTg2MS4z KS4gVGhpcyBwYXlsb2FkIGNvbnRhaW5zIGRhdGEgaW4KKysgICAgICogdGhlIGZvcm0gb2YgdGhl IEFWQ29udGVudExpZ2h0TWV0YWRhdGEgc3RydWN0LgorKyAgICAgKi8KKysgICAgQVZfRlJBTUVf REFUQV9DT05URU5UX0xJR0hUX0xFVkVMLAorKworKyAgICAvKioKKysgICAgICogVGhlIGRhdGEg Y29udGFpbnMgYW4gSUNDIHByb2ZpbGUgYXMgYW4gb3BhcXVlIG9jdGV0IGJ1ZmZlciBmb2xsb3dp bmcgdGhlCisrICAgICAqIGZvcm1hdCBkZXNjcmliZWQgYnkgSVNPIDE1MDc2LTEgd2l0aCBhbiBv cHRpb25hbCBuYW1lIGRlZmluZWQgaW4gdGhlCisrICAgICAqIG1ldGFkYXRhIGtleSBlbnRyeSAi bmFtZSIuCisrICAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX0lDQ19QUk9GSUxFLAorKworKyAg ICAvKioKKysgICAgICogVGltZWNvZGUgd2hpY2ggY29uZm9ybXMgdG8gU01QVEUgU1QgMTItMS4g VGhlIGRhdGEgaXMgYW4gYXJyYXkgb2YgNCB1aW50MzJfdAorKyAgICAgKiB3aGVyZSB0aGUgZmly c3QgdWludDMyX3QgZGVzY3JpYmVzIGhvdyBtYW55ICgxLTMpIG9mIHRoZSBvdGhlciB0aW1lY29k ZXMgYXJlIHVzZWQuCisrICAgICAqIFRoZSB0aW1lY29kZSBmb3JtYXQgaXMgZGVzY3JpYmVkIGlu IHRoZSBkb2N1bWVudGF0aW9uIG9mIGF2X3RpbWVjb2RlX2dldF9zbXB0ZV9mcm9tX2ZyYW1lbnVt KCkKKysgICAgICogZnVuY3Rpb24gaW4gbGliYXZ1dGlsL3RpbWVjb2RlLmguCisrICAgICAqLwor KyAgICBBVl9GUkFNRV9EQVRBX1MxMk1fVElNRUNPREUsCisrCisrICAgIC8qKgorKyAgICAgKiBI RFIgZHluYW1pYyBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSB2aWRlbyBmcmFtZS4gVGhlIHBh eWxvYWQgaXMKKysgICAgICogYW4gQVZEeW5hbWljSERSUGx1cyB0eXBlIGFuZCBjb250YWlucyBp bmZvcm1hdGlvbiBmb3IgY29sb3IKKysgICAgICogdm9sdW1lIHRyYW5zZm9ybSAtIGFwcGxpY2F0 aW9uIDQgb2YgU01QVEUgMjA5NC00MDoyMDE2IHN0YW5kYXJkLgorKyAgICAgKi8KKysgICAgQVZf RlJBTUVfREFUQV9EWU5BTUlDX0hEUl9QTFVTLAorKworKyAgICAvKioKKysgICAgICogUmVnaW9u cyBPZiBJbnRlcmVzdCwgdGhlIGRhdGEgaXMgYW4gYXJyYXkgb2YgQVZSZWdpb25PZkludGVyZXN0 IHR5cGUsIHRoZSBudW1iZXIgb2YKKysgICAgICogYXJyYXkgZWxlbWVudCBpcyBpbXBsaWVkIGJ5 IEFWRnJhbWVTaWRlRGF0YS5zaXplIC8gQVZSZWdpb25PZkludGVyZXN0LnNlbGZfc2l6ZS4KKysg ICAgICovCisrICAgIEFWX0ZSQU1FX0RBVEFfUkVHSU9OU19PRl9JTlRFUkVTVCwKKysKKysgICAg LyoqCisrICAgICAqIEVuY29kaW5nIHBhcmFtZXRlcnMgZm9yIGEgdmlkZW8gZnJhbWUsIGFzIGRl c2NyaWJlZCBieSBBVlZpZGVvRW5jUGFyYW1zLgorKyAgICAgKi8KKysgICAgQVZfRlJBTUVfREFU QV9WSURFT19FTkNfUEFSQU1TLAorKworKyAgICAvKioKKysgICAgICogVXNlciBkYXRhIHVucmVn aXN0ZXJlZCBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSB2aWRlbyBmcmFtZS4KKysgICAgICog VGhpcyBpcyB0aGUgSC4yNls0NV0gVURVIFNFSSBtZXNzYWdlLCBhbmQgc2hvdWxkbid0IGJlIHVz ZWQgZm9yIGFueSBvdGhlciBwdXJwb3NlCisrICAgICAqIFRoZSBkYXRhIGlzIHN0b3JlZCBhcyB1 aW50OF90IGluIEFWRnJhbWVTaWRlRGF0YS5kYXRhIHdoaWNoIGlzIDE2IGJ5dGVzIG9mCisrICAg ICAqIHV1aWRfaXNvX2llY18xMTU3OCBmb2xsb3dlZCBieSBBVkZyYW1lU2lkZURhdGEuc2l6ZSAt IDE2IGJ5dGVzIG9mIHVzZXJfZGF0YV9wYXlsb2FkX2J5dGUuCisrICAgICAqLworKyAgICBBVl9G UkFNRV9EQVRBX1NFSV9VTlJFR0lTVEVSRUQsCisrCisrICAgIC8qKgorKyAgICAgKiBGaWxtIGdy YWluIHBhcmFtZXRlcnMgZm9yIGEgZnJhbWUsIGRlc2NyaWJlZCBieSBBVkZpbG1HcmFpblBhcmFt cy4KKysgICAgICogTXVzdCBiZSBwcmVzZW50IGZvciBldmVyeSBmcmFtZSB3aGljaCBzaG91bGQg aGF2ZSBmaWxtIGdyYWluIGFwcGxpZWQuCisrICAgICAqCisrICAgICAqIE1heSBiZSBwcmVzZW50 IG11bHRpcGxlIHRpbWVzLCBmb3IgZXhhbXBsZSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZQorKyAg ICAgKiBhbHRlcm5hdGl2ZSBwYXJhbWV0ZXIgc2V0cyBmb3IgZGlmZmVyZW50IHZpZGVvIHNpZ25h bCBjaGFyYWN0ZXJpc3RpY3MuCisrICAgICAqIFRoZSB1c2VyIHNob3VsZCBzZWxlY3QgdGhlIG1v c3QgYXBwcm9wcmlhdGUgc2V0IGZvciB0aGUgYXBwbGljYXRpb24uCisrICAgICAqLworKyAgICBB Vl9GUkFNRV9EQVRBX0ZJTE1fR1JBSU5fUEFSQU1TLAorKworKyAgICAvKioKKysgICAgICogQm91 bmRpbmcgYm94ZXMgZm9yIG9iamVjdCBkZXRlY3Rpb24gYW5kIGNsYXNzaWZpY2F0aW9uLAorKyAg ICAgKiBhcyBkZXNjcmliZWQgYnkgQVZEZXRlY3Rpb25CQm94SGVhZGVyLgorKyAgICAgKi8KKysg ICAgQVZfRlJBTUVfREFUQV9ERVRFQ1RJT05fQkJPWEVTLAorKworKyAgICAvKioKKysgICAgICog RG9sYnkgVmlzaW9uIFJQVSByYXcgZGF0YSwgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8geDI2NQor KyAgICAgKiBvciBvdGhlciBsaWJyYXJpZXMuIEFycmF5IG9mIHVpbnQ4X3QsIHdpdGggTkFMIGVt dWxhdGlvbgorKyAgICAgKiBieXRlcyBpbnRhY3QuCisrICAgICAqLworKyAgICBBVl9GUkFNRV9E QVRBX0RPVklfUlBVX0JVRkZFUiwKKysKKysgICAgLyoqCisrICAgICAqIFBhcnNlZCBEb2xieSBW aXNpb24gbWV0YWRhdGEsIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGEgc29mdHdhcmUKKysgICAg ICogaW1wbGVtZW50YXRpb24uIFRoZSBwYXlsb2FkIGlzIHRoZSBBVkRPVklNZXRhZGF0YSBzdHJ1 Y3QgZGVmaW5lZCBpbgorKyAgICAgKiBsaWJhdnV0aWwvZG92aV9tZXRhLmguCisrICAgICAqLwor KyAgICBBVl9GUkFNRV9EQVRBX0RPVklfTUVUQURBVEEsCisrCisrICAgIC8qKgorKyAgICAgKiBI RFIgVml2aWQgZHluYW1pYyBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSB2aWRlbyBmcmFtZS4g VGhlIHBheWxvYWQgaXMKKysgICAgICogYW4gQVZEeW5hbWljSERSVml2aWQgdHlwZSBhbmQgY29u dGFpbnMgaW5mb3JtYXRpb24gZm9yIGNvbG9yCisrICAgICAqIHZvbHVtZSB0cmFuc2Zvcm0gLSBD VVZBIDAwNS4xLTIwMjEuCisrICAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX0RZTkFNSUNfSERS X1ZJVklELAorKworKyAgICAvKioKKysgICAgICogQW1iaWVudCB2aWV3aW5nIGVudmlyb25tZW50 IG1ldGFkYXRhLCBhcyBkZWZpbmVkIGJ5IEguMjc0LgorKyAgICAgKi8KKysgICAgQVZfRlJBTUVf REFUQV9BTUJJRU5UX1ZJRVdJTkdfRU5WSVJPTk1FTlQsCisrCisrICAgIC8qKgorKyAgICAgKiBQ cm92aWRlIGVuY29kZXItc3BlY2lmaWMgaGludGluZyBpbmZvcm1hdGlvbiBhYm91dCBjaGFuZ2Vk L3VuY2hhbmdlZAorKyAgICAgKiBwb3J0aW9ucyBvZiBhIGZyYW1lLiAgSXQgY2FuIGJlIHVzZWQg dG8gcGFzcyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaAorKyAgICAgKiBtYWNyb2Jsb2NrcyBjYW4g YmUgc2tpcHBlZCBiZWNhdXNlIHRoZXkgZGlkbid0IGNoYW5nZSBmcm9tIHRoZQorKyAgICAgKiBj b3JyZXNwb25kaW5nIG9uZXMgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBUaGlzIGNvdWxkIGJlIHVz ZWZ1bCBmb3IKKysgICAgICogYXBwbGljYXRpb25zIHdoaWNoIGtub3cgdGhpcyBpbmZvcm1hdGlv biBpbiBhZHZhbmNlIHRvIHNwZWVkIHVwCisrICAgICAqIGVuY29kaW5nLgorKyAgICAgKi8KKysg ICAgQVZfRlJBTUVfREFUQV9WSURFT19ISU5ULAorKworKyAgICAvKioKKysgICAgICogUmF3IExD RVZDIHBheWxvYWQgZGF0YSwgYXMgYSB1aW50OF90IGFycmF5LCB3aXRoIE5BTCBlbXVsYXRpb24K KysgICAgICogYnl0ZXMgaW50YWN0LgorKyAgICAgKi8KKysgICAgQVZfRlJBTUVfREFUQV9MQ0VW QywKKysKKysgICAgLyoqCisrICAgICAqIFRoaXMgc2lkZSBkYXRhIG11c3QgYmUgYXNzb2NpYXRl ZCB3aXRoIGEgdmlkZW8gZnJhbWUuCisrICAgICAqIFRoZSBwcmVzZW5jZSBvZiB0aGlzIHNpZGUg ZGF0YSBpbmRpY2F0ZXMgdGhhdCB0aGUgdmlkZW8gc3RyZWFtIGlzCisrICAgICAqIGNvbXBvc2Vk IG9mIG11bHRpcGxlIHZpZXdzIChlLmcuIHN0ZXJlb3Njb3BpYyAzRCBjb250ZW50LAorKyAgICAg KiBjZi4gSC4yNjQgQW5uZXggSCBvciBILjI2NSBBbm5leCBHKS4KKysgICAgICogVGhlIGRhdGEg aXMgYW4gaW50IHN0b3JpbmcgdGhlIHZpZXcgSUQuCisrICAgICAqLworKyAgICBBVl9GUkFNRV9E QVRBX1ZJRVdfSUQsCisrCisrICAgIC8qKgorKyAgICAgKiBUaGlzIHNpZGUgZGF0YSBjb250YWlu cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVmZXJlbmNlIGRpc3BsYXkgd2lkdGgocykKKysgICAg ICogYW5kIHJlZmVyZW5jZSB2aWV3aW5nIGRpc3RhbmNlKHMpIGFzIHdlbGwgYXMgaW5mb3JtYXRp b24gYWJvdXQgdGhlCisrICAgICAqIGNvcnJlc3BvbmRpbmcgcmVmZXJlbmNlIHN0ZXJlbyBwYWly KHMpLCBpLmUuLCB0aGUgcGFpcihzKSBvZiB2aWV3cyB0byBiZQorKyAgICAgKiBkaXNwbGF5ZWQg Zm9yIHRoZSB2aWV3ZXIncyBsZWZ0IGFuZCByaWdodCBleWVzIG9uIHRoZSByZWZlcmVuY2UgZGlz cGxheQorKyAgICAgKiBhdCB0aGUgcmVmZXJlbmNlIHZpZXdpbmcgZGlzdGFuY2UuCisrICAgICAq IFRoZSBwYXlsb2FkIGlzIHRoZSBBVjNEUmVmZXJlbmNlRGlzcGxheXNJbmZvIHN0cnVjdCBkZWZp bmVkIGluCisrICAgICAqIGxpYmF2dXRpbC90ZHJkaS5oLgorKyAgICAgKi8KKysgICAgQVZfRlJB TUVfREFUQV8zRF9SRUZFUkVOQ0VfRElTUExBWVMsCisrCisrICAgIC8qKgorKyAgICAgKiBFeGNo YW5nZWFibGUgaW1hZ2UgZmlsZSBmb3JtYXQgbWV0YWRhdGEuIFRoZSBwYXlsb2FkIGlzIGEgYnVm ZmVyIGNvbnRhaW5pbmcKKysgICAgICogRVhJRiBtZXRhZGF0YSwgc3RhcnRpbmcgd2l0aCBlaXRo ZXIgNDkgNDkgMmEgMDAsIG9yIDRkIDRkIDAwIDJhLiBUaGVzZSBmb3VyCisrICAgICAqIGJ5dGVz IHNpZ25pZnkgdGhlIGVuZGlhbm5lc3MsIGFuZCBvY2N1ciBhcyB0aGUgZmlyc3QgcGFydCBvZiB0 aGUgVElGRiBoZWFkZXIuCisrICAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX0VYSUYsCisrCisr ICAgIC8qKgorKyAgICAgKiBIRFIgZHluYW1pYyBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYSB2 aWRlbyBmcmFtZS4gVGhlIHBheWxvYWQgaXMKKysgICAgICogYW4gQVZEeW5hbWljSERSU21wdGUy MDk0QXBwNSB0eXBlIGFuZCBjb250YWlucyBpbmZvcm1hdGlvbiBmb3IgY29sb3IKKysgICAgICog dm9sdW1lIHRyYW5zZm9ybSBhcyBzcGVjaWZpZWQgaW4gdGhlIFNNUFRFIDIwOTQtNTAgc3RhbmRh cmQuCisrICAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX0RZTkFNSUNfSERSX1NNUFRFXzIwOTRf QVBQNSwKKysKKysgICAgLyoqCisrICAgICAqIElBTUYgTWl4IEdhaW4gUGFyYW1ldGVyIERhdGEg YXNzb2NpYXRlZCB3aXRoIHRoZSBhdWRpbyBmcmFtZS4gVGhpcyBtZXRhZGF0YQorKyAgICAgKiBp cyBpbiB0aGUgZm9ybSBvZiB0aGUgQVZJQU1GUGFyYW1EZWZpbml0aW9uIHN0cnVjdCBhbmQgY29u dGFpbnMgaW5mb3JtYXRpb24KKysgICAgICogZGVmaW5lZCBpbiBzZWN0aW9ucyAzLjYuMSBhbmQg My44LjEgb2YgdGhlIEltbWVyc2l2ZSBBdWRpbyBNb2RlbCBhbmQKKysgICAgICogRm9ybWF0cyBz dGFuZGFyZC4KKysgICAgICovCisrICAgIEFWX0ZSQU1FX0RBVEFfSUFNRl9NSVhfR0FJTl9QQVJB TSwKKysKKysgICAgLyoqCisrICAgICogSUFNRiBEZW1peGluZyBJbmZvIFBhcmFtZXRlciBEYXRh IGFzc29jaWF0ZWQgd2l0aCB0aGUgYXVkaW8gZnJhbWUuIFRoaXMKKysgICAgKiBtZXRhZGF0YSBp cyBpbiB0aGUgZm9ybSBvZiB0aGUgQVZJQU1GUGFyYW1EZWZpbml0aW9uIHN0cnVjdCBhbmQgY29u dGFpbnMKKysgICAgKiBpbmZvcm1hdGlvbiBkZWZpbmVkIGluIHNlY3Rpb25zIDMuNi4xIGFuZCAz LjguMiBvZiB0aGUgSW1tZXJzaXZlIEF1ZGlvIE1vZGVsCisrICAgICogYW5kIEZvcm1hdHMgc3Rh bmRhcmQuCisrICAgICovCisrICAgIEFWX0ZSQU1FX0RBVEFfSUFNRl9ERU1JWElOR19JTkZPX1BB UkFNLAorKworKyAgICAvKioKKysgICAgKiBJQU1GIFJlY29uIEdhaW4gSW5mbyBQYXJhbWV0ZXIg RGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGF1ZGlvIGZyYW1lLiBUaGlzCisrICAgICogbWV0YWRh dGEgaXMgaW4gdGhlIGZvcm0gb2YgdGhlIEFWSUFNRlBhcmFtRGVmaW5pdGlvbiBzdHJ1Y3QgYW5k IGNvbnRhaW5zCisrICAgICogaW5mb3JtYXRpb24gZGVmaW5lZCBpbiBzZWN0aW9ucyAzLjYuMSBh bmQgMy44LjMgb2YgdGhlIEltbWVyc2l2ZSBBdWRpbyBNb2RlbAorKyAgICAqIGFuZCBGb3JtYXRz IHN0YW5kYXJkLgorKyAgICAqLworKyAgICBBVl9GUkFNRV9EQVRBX0lBTUZfUkVDT05fR0FJTl9J TkZPX1BBUkFNLAorKworKyAgICAvKioKKysgICAgICogQ29sb3IgaW5mb3JtYXRpb24gZnJvbSBh IFJBVyBjYW1lcmEgY29kZWNzLCBuZWVkZWQgdG8gY29ycmVjdGx5IHByb2Nlc3MKKysgICAgICog dGhlIHZpZGVvIGRhdGEuIFRoZSBwYXlsb2FkIGlzIGFuIEFWUmF3Q29sb3JQYXJhbXMgc3RydWN0 IGRlZmluZWQgaW4KKysgICAgICogbGliYXZ1dGlsL3Jhd19jb2xvcl9wYXJhbXMuaC4KKysgICAg ICovCisrICAgIEFWX0ZSQU1FX0RBVEFfUkFXX0NPTE9SX1BBUkFNUywKKyt9OworKworK2VudW0g QVZBY3RpdmVGb3JtYXREZXNjcmlwdGlvbiB7CisrICAgIEFWX0FGRF9TQU1FICAgICAgICAgPSA4 LAorKyAgICBBVl9BRkRfNF8zICAgICAgICAgID0gOSwKKysgICAgQVZfQUZEXzE2XzkgICAgICAg ICA9IDEwLAorKyAgICBBVl9BRkRfMTRfOSAgICAgICAgID0gMTEsCisrICAgIEFWX0FGRF80XzNf U1BfMTRfOSAgPSAxMywKKysgICAgQVZfQUZEXzE2XzlfU1BfMTRfOSA9IDE0LAorKyAgICBBVl9B RkRfU1BfNF8zICAgICAgID0gMTUsCisrfTsKKysKKysKKysvKioKKysgKiBTdHJ1Y3R1cmUgdG8g aG9sZCBzaWRlIGRhdGEgZm9yIGFuIEFWRnJhbWUuCisrICoKKysgKiBzaXplb2YoQVZGcmFtZVNp ZGVEYXRhKSBpcyBub3QgYSBwYXJ0IG9mIHRoZSBwdWJsaWMgQUJJLCBzbyBuZXcgZmllbGRzIG1h eSBiZSBhZGRlZAorKyAqIHRvIHRoZSBlbmQgd2l0aCBhIG1pbm9yIGJ1bXAuCisrICovCisrdHlw ZWRlZiBzdHJ1Y3QgQVZGcmFtZVNpZGVEYXRhIHsKKysgICAgZW51bSBBVkZyYW1lU2lkZURhdGFU eXBlIHR5cGU7CisrICAgIHVpbnQ4X3QgKmRhdGE7CisrICAgIHNpemVfdCAgIHNpemU7CisrICAg IEFWRGljdGlvbmFyeSAqbWV0YWRhdGE7CisrICAgIEFWQnVmZmVyUmVmICpidWY7CisrfSBBVkZy YW1lU2lkZURhdGE7CisrCisrZW51bSBBVlNpZGVEYXRhUHJvcHMgeworKyAgICAvKioKKysgICAg ICogVGhlIHNpZGUgZGF0YSB0eXBlIGNhbiBiZSB1c2VkIGluIHN0cmVhbS1nbG9iYWwgc3RydWN0 dXJlcy4KKysgICAgICogU2lkZSBkYXRhIHR5cGVzIHdpdGhvdXQgdGhpcyBwcm9wZXJ0eSBhcmUg b25seSBtZWFuaW5nZnVsIG9uIHBlci1mcmFtZQorKyAgICAgKiBiYXNpcy4KKysgICAgICovCisr ICAgIEFWX1NJREVfREFUQV9QUk9QX0dMT0JBTCA9ICgxIDw8IDApLAorKworKyAgICAvKioKKysg ICAgICogTXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMgc2lkZSBkYXRhIHR5cGUgY2FuIGJlIG1l YW5pbmdmdWxseSBwcmVzZW50IGluCisrICAgICAqIGEgc2luZ2xlIHNpZGUgZGF0YSBhcnJheS4K KysgICAgICovCisrICAgIEFWX1NJREVfREFUQV9QUk9QX01VTFRJICA9ICgxIDw8IDEpLAorKwor KyAgICAvKioKKysgICAgICogU2lkZSBkYXRhIGRlcGVuZHMgb24gdGhlIHZpZGVvIGRpbWVuc2lv bnMuIFNpZGUgZGF0YSB3aXRoIHRoaXMgcHJvcGVydHkKKysgICAgICogbG9zZXMgaXRzIG1lYW5p bmcgd2hlbiByZXNjYWxpbmcgb3IgY3JvcHBpbmcgdGhlIGltYWdlLCB1bmxlc3MKKysgICAgICog ZWl0aGVyIHJlY29tcHV0ZWQgb3IgYWRqdXN0ZWQgdG8gdGhlIG5ldyByZXNvbHV0aW9uLgorKyAg ICAgKi8KKysgICAgQVZfU0lERV9EQVRBX1BST1BfU0laRV9ERVBFTkRFTlQgPSAoMSA8PCAyKSwK KysKKysgICAgLyoqCisrICAgICAqIFNpZGUgZGF0YSBkZXBlbmRzIG9uIHRoZSB2aWRlbyBjb2xv ciBzcGFjZS4gU2lkZSBkYXRhIHdpdGggdGhpcyBwcm9wZXJ0eQorKyAgICAgKiBsb3NlcyBpdHMg bWVhbmluZyB3aGVuIGNoYW5naW5nIHRoZSB2aWRlbyBjb2xvciBlbmNvZGluZywgZS5nLiBieQor KyAgICAgKiBhZGFwdGluZyB0byBhIGRpZmZlcmVudCBzZXQgb2YgcHJpbWFyaWVzIG9yIHRyYW5z ZmVyIGNoYXJhY3RlcmlzdGljcy4KKysgICAgICovCisrICAgIEFWX1NJREVfREFUQV9QUk9QX0NP TE9SX0RFUEVOREVOVCA9ICgxIDw8IDMpLAorKworKyAgICAvKioKKysgICAgICogU2lkZSBkYXRh IGRlcGVuZHMgb24gdGhlIGNoYW5uZWwgbGF5b3V0LiBTaWRlIGRhdGEgd2l0aCB0aGlzIHByb3Bl cnR5CisrICAgICAqIGxvc2VzIGl0cyBtZWFuaW5nIHdoZW4gZG93bm1peGluZyBvciB1cG1peGlu ZywgdW5sZXNzIGVpdGhlciByZWNvbXB1dGVkCisrICAgICAqIG9yIGFkanVzdGVkIHRvIHRoZSBu ZXcgbGF5b3V0LgorKyAgICAgKi8KKysgICAgQVZfU0lERV9EQVRBX1BST1BfQ0hBTk5FTF9ERVBF TkRFTlQgPSAoMSA8PCA0KSwKKyt9OworKworKy8qKgorKyAqIFRoaXMgc3RydWN0IGRlc2NyaWJl cyB0aGUgcHJvcGVydGllcyBvZiBhIHNpZGUgZGF0YSB0eXBlLiBJdHMgaW5zdGFuY2UKKysgKiBj b3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gdHlwZSBjYW4gYmUgb2J0YWluZWQgZnJvbSBhdl9mcmFt ZV9zaWRlX2RhdGFfZGVzYygpLgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWU2lkZURhdGFEZXNj cmlwdG9yIHsKKysgICAgLyoqCisrICAgICAqIEh1bWFuLXJlYWRhYmxlIHNpZGUgZGF0YSBkZXNj cmlwdGlvbi4KKysgICAgICovCisrICAgIGNvbnN0IGNoYXIgICAgICAqbmFtZTsKKysKKysgICAg LyoqCisrICAgICAqIFNpZGUgZGF0YSBwcm9wZXJ0eSBmbGFncywgYSBjb21iaW5hdGlvbiBvZiBB VlNpZGVEYXRhUHJvcHMgdmFsdWVzLgorKyAgICAgKi8KKysgICAgdW5zaWduZWQgICAgICAgICBw cm9wczsKKyt9IEFWU2lkZURhdGFEZXNjcmlwdG9yOworKworKy8qKgorKyAqIFN0cnVjdHVyZSBk ZXNjcmliaW5nIGEgc2luZ2xlIFJlZ2lvbiBPZiBJbnRlcmVzdC4KKysgKgorKyAqIFdoZW4gbXVs dGlwbGUgcmVnaW9ucyBhcmUgZGVmaW5lZCBpbiBhIHNpbmdsZSBzaWRlLWRhdGEgYmxvY2ssIHRo ZXkKKysgKiBzaG91bGQgYmUgb3JkZXJlZCBmcm9tIG1vc3QgdG8gbGVhc3QgaW1wb3J0YW50IC0g c29tZSBlbmNvZGVycyBhcmUgb25seQorKyAqIGNhcGFibGUgb2Ygc3VwcG9ydGluZyBhIGxpbWl0 ZWQgbnVtYmVyIG9mIGRpc3RpbmN0IHJlZ2lvbnMsIHNvIHdpbGwgaGF2ZQorKyAqIHRvIHRydW5j YXRlIHRoZSBsaXN0LgorKyAqCisrICogV2hlbiBvdmVybGFwcGluZyByZWdpb25zIGFyZSBkZWZp bmVkLCB0aGUgZmlyc3QgcmVnaW9uIGNvbnRhaW5pbmcgYSBnaXZlbgorKyAqIGFyZWEgb2YgdGhl IGZyYW1lIGFwcGxpZXMuCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZSZWdpb25PZkludGVyZXN0 IHsKKysgICAgLyoqCisrICAgICAqIE11c3QgYmUgc2V0IHRvIHRoZSBzaXplIG9mIHRoaXMgZGF0 YSBzdHJ1Y3R1cmUgKHRoYXQgaXMsCisrICAgICAqIHNpemVvZihBVlJlZ2lvbk9mSW50ZXJlc3Qp KS4KKysgICAgICovCisrICAgIHVpbnQzMl90IHNlbGZfc2l6ZTsKKysgICAgLyoqCisrICAgICAq IERpc3RhbmNlIGluIHBpeGVscyBmcm9tIHRoZSB0b3AgZWRnZSBvZiB0aGUgZnJhbWUgdG8gdGhl IHRvcCBhbmQKKysgICAgICogYm90dG9tIGVkZ2VzIGFuZCBmcm9tIHRoZSBsZWZ0IGVkZ2Ugb2Yg dGhlIGZyYW1lIHRvIHRoZSBsZWZ0IGFuZAorKyAgICAgKiByaWdodCBlZGdlcyBvZiB0aGUgcmVj dGFuZ2xlIGRlZmluaW5nIHRoaXMgcmVnaW9uIG9mIGludGVyZXN0LgorKyAgICAgKgorKyAgICAg KiBUaGUgY29uc3RyYWludHMgb24gYSByZWdpb24gYXJlIGVuY29kZXIgZGVwZW5kZW50LCBzbyB0 aGUgcmVnaW9uCisrICAgICAqIGFjdHVhbGx5IGFmZmVjdGVkIG1heSBiZSBzbGlnaHRseSBsYXJn ZXIgZm9yIGFsaWdubWVudCBvciBvdGhlcgorKyAgICAgKiByZWFzb25zLgorKyAgICAgKi8KKysg ICAgaW50IHRvcDsKKysgICAgaW50IGJvdHRvbTsKKysgICAgaW50IGxlZnQ7CisrICAgIGludCBy aWdodDsKKysgICAgLyoqCisrICAgICAqIFF1YW50aXNhdGlvbiBvZmZzZXQuCisrICAgICAqCisr ICAgICAqIE11c3QgYmUgaW4gdGhlIHJhbmdlIC0xIHRvICsxLiAgQSB2YWx1ZSBvZiB6ZXJvIGlu ZGljYXRlcyBubyBxdWFsaXR5CisrICAgICAqIGNoYW5nZS4gIEEgbmVnYXRpdmUgdmFsdWUgYXNr cyBmb3IgYmV0dGVyIHF1YWxpdHkgKGxlc3MgcXVhbnRpc2F0aW9uKSwKKysgICAgICogd2hpbGUg YSBwb3NpdGl2ZSB2YWx1ZSBhc2tzIGZvciB3b3JzZSBxdWFsaXR5IChncmVhdGVyIHF1YW50aXNh dGlvbikuCisrICAgICAqCisrICAgICAqIFRoZSByYW5nZSBpcyBjYWxpYnJhdGVkIHNvIHRoYXQg dGhlIGV4dHJlbWUgdmFsdWVzIGluZGljYXRlIHRoZQorKyAgICAgKiBsYXJnZXN0IHBvc3NpYmxl IG9mZnNldCAtIGlmIHRoZSByZXN0IG9mIHRoZSBmcmFtZSBpcyBlbmNvZGVkIHdpdGggdGhlCisr ICAgICAqIHdvcnN0IHBvc3NpYmxlIHF1YWxpdHksIGFuIG9mZnNldCBvZiAtMSBpbmRpY2F0ZXMg dGhhdCB0aGlzIHJlZ2lvbgorKyAgICAgKiBzaG91bGQgYmUgZW5jb2RlZCB3aXRoIHRoZSBiZXN0 IHBvc3NpYmxlIHF1YWxpdHkgYW55d2F5LiAgSW50ZXJtZWRpYXRlCisrICAgICAqIHZhbHVlcyBh cmUgdGhlbiBpbnRlcnBvbGF0ZWQgaW4gc29tZSBjb2RlYy1kZXBlbmRlbnQgd2F5LgorKyAgICAg KgorKyAgICAgKiBGb3IgZXhhbXBsZSwgaW4gMTAtYml0IEguMjY0IHRoZSBxdWFudGlzYXRpb24g cGFyYW1ldGVyIHZhcmllcyBiZXR3ZWVuCisrICAgICAqIC0xMiBhbmQgNTEuICBBIHR5cGljYWwg cW9mZnNldCB2YWx1ZSBvZiAtMS8xMCB0aGVyZWZvcmUgaW5kaWNhdGVzIHRoYXQKKysgICAgICog dGhpcyByZWdpb24gc2hvdWxkIGJlIGVuY29kZWQgd2l0aCBhIFFQIGFyb3VuZCBvbmUtdGVudGgg b2YgdGhlIGZ1bGwKKysgICAgICogcmFuZ2UgYmV0dGVyIHRoYW4gdGhlIHJlc3Qgb2YgdGhlIGZy YW1lLiAgU28sIGlmIG1vc3Qgb2YgdGhlIGZyYW1lCisrICAgICAqIHdlcmUgdG8gYmUgZW5jb2Rl ZCB3aXRoIGEgUVAgb2YgYXJvdW5kIDMwLCB0aGlzIHJlZ2lvbiB3b3VsZCBnZXQgYSBRUAorKyAg ICAgKiBvZiBhcm91bmQgMjQgKGFuIG9mZnNldCBvZiBhcHByb3hpbWF0ZWx5IC0xLzEwICogKDUx IC0gLTEyKSA9IC02LjMpLgorKyAgICAgKiBBbiBleHRyZW1lIHZhbHVlIG9mIC0xIHdvdWxkIGlu ZGljYXRlIHRoYXQgdGhpcyByZWdpb24gc2hvdWxkIGJlCisrICAgICAqIGVuY29kZWQgd2l0aCB0 aGUgYmVzdCBwb3NzaWJsZSBxdWFsaXR5IHJlZ2FyZGxlc3Mgb2YgdGhlIHRyZWF0bWVudCBvZgor KyAgICAgKiB0aGUgcmVzdCBvZiB0aGUgZnJhbWUgLSB0aGF0IGlzLCBzaG91bGQgYmUgZW5jb2Rl ZCBhdCBhIFFQIG9mIC0xMi4KKysgICAgICovCisrICAgIEFWUmF0aW9uYWwgcW9mZnNldDsKKyt9 IEFWUmVnaW9uT2ZJbnRlcmVzdDsKKysKKysvKioKKysgKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmli ZXMgZGVjb2RlZCAocmF3KSBhdWRpbyBvciB2aWRlbyBkYXRhLgorKyAqCisrICogQVZGcmFtZSBt dXN0IGJlIGFsbG9jYXRlZCB1c2luZyBhdl9mcmFtZV9hbGxvYygpLiBOb3RlIHRoYXQgdGhpcyBv bmx5CisrICogYWxsb2NhdGVzIHRoZSBBVkZyYW1lIGl0c2VsZiwgdGhlIGJ1ZmZlcnMgZm9yIHRo ZSBkYXRhIG11c3QgYmUgbWFuYWdlZAorKyAqIHRocm91Z2ggb3RoZXIgbWVhbnMgKHNlZSBiZWxv dykuCisrICogQVZGcmFtZSBtdXN0IGJlIGZyZWVkIHdpdGggYXZfZnJhbWVfZnJlZSgpLgorKyAq CisrICogQVZGcmFtZSBpcyB0eXBpY2FsbHkgYWxsb2NhdGVkIG9uY2UgYW5kIHRoZW4gcmV1c2Vk IG11bHRpcGxlIHRpbWVzIHRvIGhvbGQKKysgKiBkaWZmZXJlbnQgZGF0YSAoZS5nLiBhIHNpbmds ZSBBVkZyYW1lIHRvIGhvbGQgZnJhbWVzIHJlY2VpdmVkIGZyb20gYQorKyAqIGRlY29kZXIpLiBJ biBzdWNoIGEgY2FzZSwgYXZfZnJhbWVfdW5yZWYoKSB3aWxsIGZyZWUgYW55IHJlZmVyZW5jZXMg aGVsZCBieQorKyAqIHRoZSBmcmFtZSBhbmQgcmVzZXQgaXQgdG8gaXRzIG9yaWdpbmFsIGNsZWFu IHN0YXRlIGJlZm9yZSBpdAorKyAqIGlzIHJldXNlZCBhZ2Fpbi4KKysgKgorKyAqIFRoZSBkYXRh IGRlc2NyaWJlZCBieSBhbiBBVkZyYW1lIGlzIHVzdWFsbHkgcmVmZXJlbmNlIGNvdW50ZWQgdGhy b3VnaCB0aGUKKysgKiBBVkJ1ZmZlciBBUEkuIFRoZSB1bmRlcmx5aW5nIGJ1ZmZlciByZWZlcmVu Y2VzIGFyZSBzdG9yZWQgaW4gQVZGcmFtZS5idWYgLworKyAqIEFWRnJhbWUuZXh0ZW5kZWRfYnVm LiBBbiBBVkZyYW1lIGlzIGNvbnNpZGVyZWQgdG8gYmUgcmVmZXJlbmNlIGNvdW50ZWQgaWYgYXQK KysgKiBsZWFzdCBvbmUgcmVmZXJlbmNlIGlzIHNldCwgaS5lLiBpZiBBVkZyYW1lLmJ1ZlswXSAh PSBOVUxMLiBJbiBzdWNoIGEgY2FzZSwKKysgKiBldmVyeSBzaW5nbGUgZGF0YSBwbGFuZSBtdXN0 IGJlIGNvbnRhaW5lZCBpbiBvbmUgb2YgdGhlIGJ1ZmZlcnMgaW4KKysgKiBBVkZyYW1lLmJ1ZiBv ciBBVkZyYW1lLmV4dGVuZGVkX2J1Zi4KKysgKiBUaGVyZSBtYXkgYmUgYSBzaW5nbGUgYnVmZmVy IGZvciBhbGwgdGhlIGRhdGEsIG9yIG9uZSBzZXBhcmF0ZSBidWZmZXIgZm9yCisrICogZWFjaCBw bGFuZSwgb3IgYW55dGhpbmcgaW4gYmV0d2Vlbi4KKysgKgorKyAqIHNpemVvZihBVkZyYW1lKSBp cyBub3QgYSBwYXJ0IG9mIHRoZSBwdWJsaWMgQUJJLCBzbyBuZXcgZmllbGRzIG1heSBiZSBhZGRl ZAorKyAqIHRvIHRoZSBlbmQgd2l0aCBhIG1pbm9yIGJ1bXAuCisrICoKKysgKiBGaWVsZHMgY2Fu IGJlIGFjY2Vzc2VkIHRocm91Z2ggQVZPcHRpb25zLCB0aGUgbmFtZSBzdHJpbmcgdXNlZCwgbWF0 Y2hlcyB0aGUKKysgKiBDIHN0cnVjdHVyZSBmaWVsZCBuYW1lIGZvciBmaWVsZHMgYWNjZXNzaWJs ZSB0aHJvdWdoIEFWT3B0aW9ucy4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBBVkZyYW1lIHsKKysj ZGVmaW5lIEFWX05VTV9EQVRBX1BPSU5URVJTIDgKKysgICAgLyoqCisrICAgICAqIHBvaW50ZXIg dG8gdGhlIHBpY3R1cmUvY2hhbm5lbCBwbGFuZXMuCisrICAgICAqIFRoaXMgbWlnaHQgYmUgZGlm ZmVyZW50IGZyb20gdGhlIGZpcnN0IGFsbG9jYXRlZCBieXRlLiBGb3IgdmlkZW8sCisrICAgICAq IGl0IGNvdWxkIGV2ZW4gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgaW1hZ2UgZGF0YS4KKysgICAg ICoKKysgICAgICogQWxsIHBvaW50ZXJzIGluIGRhdGEgYW5kIGV4dGVuZGVkX2RhdGEgbXVzdCBw b2ludCBpbnRvIG9uZSBvZiB0aGUKKysgICAgICogQVZCdWZmZXJSZWYgaW4gYnVmIG9yIGV4dGVu ZGVkX2J1Zi4KKysgICAgICoKKysgICAgICogU29tZSBkZWNvZGVycyBhY2Nlc3MgYXJlYXMgb3V0 c2lkZSAwLDAgLSB3aWR0aCxoZWlnaHQsIHBsZWFzZQorKyAgICAgKiBzZWUgYXZjb2RlY19hbGln bl9kaW1lbnNpb25zMigpLiBTb21lIGZpbHRlcnMgYW5kIHN3c2NhbGUgY2FuIHJlYWQKKysgICAg ICogdXAgdG8gMTYgYnl0ZXMgYmV5b25kIHRoZSBwbGFuZXMsIGlmIHRoZXNlIGZpbHRlcnMgYXJl IHRvIGJlIHVzZWQsCisrICAgICAqIHRoZW4gMTYgZXh0cmEgYnl0ZXMgbXVzdCBiZSBhbGxvY2F0 ZWQuCisrICAgICAqCisrICAgICAqIE5PVEU6IFBvaW50ZXJzIG5vdCBuZWVkZWQgYnkgdGhlIGZv cm1hdCBNVVNUIGJlIHNldCB0byBOVUxMLgorKyAgICAgKgorKyAgICAgKiBAYXR0ZW50aW9uIElu IGNhc2Ugb2YgdmlkZW8sIHRoZSBkYXRhW10gcG9pbnRlcnMgY2FuIHBvaW50IHRvIHRoZQorKyAg ICAgKiBlbmQgb2YgaW1hZ2UgZGF0YSBpbiBvcmRlciB0byByZXZlcnNlIGxpbmUgb3JkZXIsIHdo ZW4gdXNlZCBpbgorKyAgICAgKiBjb21iaW5hdGlvbiB3aXRoIG5lZ2F0aXZlIHZhbHVlcyBpbiB0 aGUgbGluZXNpemVbXSBhcnJheS4KKysgICAgICovCisrICAgIHVpbnQ4X3QgKmRhdGFbQVZfTlVN X0RBVEFfUE9JTlRFUlNdOworKworKyAgICAvKioKKysgICAgICogRm9yIHZpZGVvLCBhIHBvc2l0 aXZlIG9yIG5lZ2F0aXZlIHZhbHVlLCB3aGljaCBpcyB0eXBpY2FsbHkgaW5kaWNhdGluZworKyAg ICAgKiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBlYWNoIHBpY3R1cmUgbGluZSwgYnV0IGl0IGNhbiBh bHNvIGJlOgorKyAgICAgKiAtIHRoZSBuZWdhdGl2ZSBieXRlIHNpemUgb2YgbGluZXMgZm9yIHZl cnRpY2FsIGZsaXBwaW5nCisrICAgICAqICAgKHdpdGggZGF0YVtuXSBwb2ludGluZyB0byB0aGUg ZW5kIG9mIHRoZSBkYXRhCisrICAgICAqIC0gYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBtdWx0aXBs ZSBvZiB0aGUgYnl0ZSBzaXplIGFzIGZvciBhY2Nlc3NpbmcKKysgICAgICogICBldmVuIGFuZCBv ZGQgZmllbGRzIG9mIGEgZnJhbWUgKHBvc3NpYmx5IGZsaXBwZWQpCisrICAgICAqCisrICAgICAq IEZvciBhdWRpbywgb25seSBsaW5lc2l6ZVswXSBtYXkgYmUgc2V0LiBGb3IgcGxhbmFyIGF1ZGlv LCBlYWNoIGNoYW5uZWwKKysgICAgICogcGxhbmUgbXVzdCBiZSB0aGUgc2FtZSBzaXplLgorKyAg ICAgKgorKyAgICAgKiBGb3IgdmlkZW8gdGhlIGxpbmVzaXplcyBzaG91bGQgYmUgbXVsdGlwbGVz IG9mIHRoZSBDUFVzIGFsaWdubWVudAorKyAgICAgKiBwcmVmZXJlbmNlLCB0aGlzIGlzIDE2IG9y IDMyIGZvciBtb2Rlcm4gZGVza3RvcCBDUFVzLgorKyAgICAgKiBTb21lIGNvZGUgcmVxdWlyZXMg c3VjaCBhbGlnbm1lbnQgb3RoZXIgY29kZSBjYW4gYmUgc2xvd2VyIHdpdGhvdXQKKysgICAgICog Y29ycmVjdCBhbGlnbm1lbnQsIGZvciB5ZXQgb3RoZXIgaXQgbWFrZXMgbm8gZGlmZmVyZW5jZS4K KysgICAgICoKKysgICAgICogQG5vdGUgVGhlIGxpbmVzaXplIG1heSBiZSBsYXJnZXIgdGhhbiB0 aGUgc2l6ZSBvZiB1c2FibGUgZGF0YSAtLSB0aGVyZQorKyAgICAgKiBtYXkgYmUgZXh0cmEgcGFk ZGluZyBwcmVzZW50IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorKyAgICAgKgorKyAgICAgKiBA YXR0ZW50aW9uIEluIGNhc2Ugb2YgdmlkZW8sIGxpbmUgc2l6ZSB2YWx1ZXMgY2FuIGJlIG5lZ2F0 aXZlIHRvIGFjaGlldmUKKysgICAgICogYSB2ZXJ0aWNhbGx5IGludmVydGVkIGl0ZXJhdGlvbiBv dmVyIGltYWdlIGxpbmVzLgorKyAgICAgKi8KKysgICAgaW50IGxpbmVzaXplW0FWX05VTV9EQVRB X1BPSU5URVJTXTsKKysKKysgICAgLyoqCisrICAgICAqIHBvaW50ZXJzIHRvIHRoZSBkYXRhIHBs YW5lcy9jaGFubmVscy4KKysgICAgICoKKysgICAgICogRm9yIHZpZGVvLCB0aGlzIHNob3VsZCBz aW1wbHkgcG9pbnQgdG8gZGF0YVtdLgorKyAgICAgKgorKyAgICAgKiBGb3IgcGxhbmFyIGF1ZGlv LCBlYWNoIGNoYW5uZWwgaGFzIGEgc2VwYXJhdGUgZGF0YSBwb2ludGVyLCBhbmQKKysgICAgICog bGluZXNpemVbMF0gY29udGFpbnMgdGhlIHNpemUgb2YgZWFjaCBjaGFubmVsIGJ1ZmZlci4KKysg ICAgICogRm9yIHBhY2tlZCBhdWRpbywgdGhlcmUgaXMganVzdCBvbmUgZGF0YSBwb2ludGVyLCBh bmQgbGluZXNpemVbMF0KKysgICAgICogY29udGFpbnMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGJ1 ZmZlciBmb3IgYWxsIGNoYW5uZWxzLgorKyAgICAgKgorKyAgICAgKiBOb3RlOiBCb3RoIGRhdGEg YW5kIGV4dGVuZGVkX2RhdGEgc2hvdWxkIGFsd2F5cyBiZSBzZXQgaW4gYSB2YWxpZCBmcmFtZSwK KysgICAgICogYnV0IGZvciBwbGFuYXIgYXVkaW8gd2l0aCBtb3JlIGNoYW5uZWxzIHRoYXQgY2Fu IGZpdCBpbiBkYXRhLAorKyAgICAgKiBleHRlbmRlZF9kYXRhIG11c3QgYmUgdXNlZCBpbiBvcmRl ciB0byBhY2Nlc3MgYWxsIGNoYW5uZWxzLgorKyAgICAgKi8KKysgICAgdWludDhfdCAqKmV4dGVu ZGVkX2RhdGE7CisrCisrICAgIC8qKgorKyAgICAgKiBAbmFtZSBWaWRlbyBkaW1lbnNpb25zCisr ICAgICAqIFZpZGVvIGZyYW1lcyBvbmx5LiBUaGUgY29kZWQgZGltZW5zaW9ucyAoaW4gcGl4ZWxz KSBvZiB0aGUgdmlkZW8gZnJhbWUsCisrICAgICAqIGkuZS4gdGhlIHNpemUgb2YgdGhlIHJlY3Rh bmdsZSB0aGF0IGNvbnRhaW5zIHNvbWUgd2VsbC1kZWZpbmVkIHZhbHVlcy4KKysgICAgICoKKysg ICAgICogQG5vdGUgVGhlIHBhcnQgb2YgdGhlIGZyYW1lIGludGVuZGVkIGZvciBkaXNwbGF5L3By ZXNlbnRhdGlvbiBpcyBmdXJ0aGVyCisrICAgICAqIHJlc3RyaWN0ZWQgYnkgdGhlIEByZWYgY3Jv cHBpbmcgIkNyb3BwaW5nIHJlY3RhbmdsZSIuCisrICAgICAqIEB7CisrICAgICAqLworKyAgICBp bnQgd2lkdGgsIGhlaWdodDsKKysgICAgLyoqCisrICAgICAqIEB9CisrICAgICAqLworKworKyAg ICAvKioKKysgICAgICogbnVtYmVyIG9mIGF1ZGlvIHNhbXBsZXMgKHBlciBjaGFubmVsKSBkZXNj cmliZWQgYnkgdGhpcyBmcmFtZQorKyAgICAgKi8KKysgICAgaW50IG5iX3NhbXBsZXM7CisrCisr ICAgIC8qKgorKyAgICAgKiBmb3JtYXQgb2YgdGhlIGZyYW1lLCAtMSBpZiB1bmtub3duIG9yIHVu c2V0CisrICAgICAqIFZhbHVlcyBjb3JyZXNwb25kIHRvIGVudW0gQVZQaXhlbEZvcm1hdCBmb3Ig dmlkZW8gZnJhbWVzLAorKyAgICAgKiBlbnVtIEFWU2FtcGxlRm9ybWF0IGZvciBhdWRpbykKKysg ICAgICovCisrICAgIGludCBmb3JtYXQ7CisrCisrICAgIC8qKgorKyAgICAgKiBQaWN0dXJlIHR5 cGUgb2YgdGhlIGZyYW1lLgorKyAgICAgKi8KKysgICAgZW51bSBBVlBpY3R1cmVUeXBlIHBpY3Rf dHlwZTsKKysKKysgICAgLyoqCisrICAgICAqIFNhbXBsZSBhc3BlY3QgcmF0aW8gZm9yIHRoZSB2 aWRlbyBmcmFtZSwgMC8xIGlmIHVua25vd24vdW5zcGVjaWZpZWQuCisrICAgICAqLworKyAgICBB VlJhdGlvbmFsIHNhbXBsZV9hc3BlY3RfcmF0aW87CisrCisrICAgIC8qKgorKyAgICAgKiBQcmVz ZW50YXRpb24gdGltZXN0YW1wIGluIHRpbWVfYmFzZSB1bml0cyAodGltZSB3aGVuIGZyYW1lIHNo b3VsZCBiZSBzaG93biB0byB1c2VyKS4KKysgICAgICovCisrICAgIGludDY0X3QgcHRzOworKwor KyAgICAvKioKKysgICAgICogRFRTIGNvcGllZCBmcm9tIHRoZSBBVlBhY2tldCB0aGF0IHRyaWdn ZXJlZCByZXR1cm5pbmcgdGhpcyBmcmFtZS4gKGlmIGZyYW1lIHRocmVhZGluZyBpc24ndCB1c2Vk KQorKyAgICAgKiBUaGlzIGlzIGFsc28gdGhlIFByZXNlbnRhdGlvbiB0aW1lIG9mIHRoaXMgQVZG cmFtZSBjYWxjdWxhdGVkIGZyb20KKysgICAgICogb25seSBBVlBhY2tldC5kdHMgdmFsdWVzIHdp dGhvdXQgcHRzIHZhbHVlcy4KKysgICAgICovCisrICAgIGludDY0X3QgcGt0X2R0czsKKysKKysg ICAgLyoqCisrICAgICAqIFRpbWUgYmFzZSBmb3IgdGhlIHRpbWVzdGFtcHMgaW4gdGhpcyBmcmFt ZS4KKysgICAgICogSW4gdGhlIGZ1dHVyZSwgdGhpcyBmaWVsZCBtYXkgYmUgc2V0IG9uIGZyYW1l cyBvdXRwdXQgYnkgZGVjb2RlcnMgb3IKKysgICAgICogZmlsdGVycywgYnV0IGl0cyB2YWx1ZSB3 aWxsIGJlIGJ5IGRlZmF1bHQgaWdub3JlZCBvbiBpbnB1dCB0byBlbmNvZGVycworKyAgICAgKiBv ciBmaWx0ZXJzLgorKyAgICAgKi8KKysgICAgQVZSYXRpb25hbCB0aW1lX2Jhc2U7CisrCisrICAg IC8qKgorKyAgICAgKiBxdWFsaXR5IChiZXR3ZWVuIDEgKGdvb2QpIGFuZCBGRl9MQU1CREFfTUFY IChiYWQpKQorKyAgICAgKi8KKysgICAgaW50IHF1YWxpdHk7CisrCisrICAgIC8qKgorKyAgICAg KiBGcmFtZSBvd25lcidzIHByaXZhdGUgZGF0YS4KKysgICAgICoKKysgICAgICogVGhpcyBmaWVs ZCBtYXkgYmUgc2V0IGJ5IHRoZSBjb2RlIHRoYXQgYWxsb2NhdGVzL293bnMgdGhlIGZyYW1lIGRh dGEuCisrICAgICAqIEl0IGlzIHRoZW4gbm90IHRvdWNoZWQgYnkgYW55IGxpYnJhcnkgZnVuY3Rp b25zLCBleGNlcHQ6CisrICAgICAqIC0gaXQgaXMgY29waWVkIHRvIG90aGVyIHJlZmVyZW5jZXMg YnkgYXZfZnJhbWVfY29weV9wcm9wcygpIChhbmQgaGVuY2UgYnkKKysgICAgICogICBhdl9mcmFt ZV9yZWYoKSk7CisrICAgICAqIC0gaXQgaXMgc2V0IHRvIE5VTEwgd2hlbiB0aGUgZnJhbWUgaXMg Y2xlYXJlZCBieSBhdl9mcmFtZV91bnJlZigpCisrICAgICAqIC0gb24gdGhlIGNhbGxlcidzIGV4 cGxpY2l0IHJlcXVlc3QuIEUuZy4gbGliYXZjb2RlYyBlbmNvZGVycy9kZWNvZGVycworKyAgICAg KiAgIHdpbGwgY29weSB0aGlzIGZpZWxkIHRvL2Zyb20gQHJlZiBBVlBhY2tldCAiQVZQYWNrZXRz IiBpZiB0aGUgY2FsbGVyIHNldHMKKysgICAgICogICBAcmVmIEFWX0NPREVDX0ZMQUdfQ09QWV9P UEFRVUUuCisrICAgICAqCisrICAgICAqIEBzZWUgb3BhcXVlX3JlZiB0aGUgcmVmZXJlbmNlLWNv dW50ZWQgYW5hbG9ndWUKKysgICAgICovCisrICAgIHZvaWQgKm9wYXF1ZTsKKysKKysgICAgLyoq CisrICAgICAqIE51bWJlciBvZiBmaWVsZHMgaW4gdGhpcyBmcmFtZSB3aGljaCBzaG91bGQgYmUg cmVwZWF0ZWQsIGkuZS4gdGhlIHRvdGFsCisrICAgICAqIGR1cmF0aW9uIG9mIHRoaXMgZnJhbWUg c2hvdWxkIGJlIHJlcGVhdF9waWN0ICsgMiBub3JtYWwgZmllbGQgZHVyYXRpb25zLgorKyAgICAg KgorKyAgICAgKiBGb3IgaW50ZXJsYWNlZCBmcmFtZXMgdGhpcyBmaWVsZCBtYXkgYmUgc2V0IHRv IDEsIHdoaWNoIHNpZ25hbHMgdGhhdCB0aGlzCisrICAgICAqIGZyYW1lIHNob3VsZCBiZSBwcmVz ZW50ZWQgYXMgMyBmaWVsZHM6IGJlZ2lubmluZyB3aXRoIHRoZSBmaXJzdCBmaWVsZCAoYXMKKysg ICAgICogZGV0ZXJtaW5lZCBieSBBVl9GUkFNRV9GTEFHX1RPUF9GSUVMRF9GSVJTVCBiZWluZyBz ZXQgb3Igbm90KSwgZm9sbG93ZWQKKysgICAgICogYnkgdGhlIHNlY29uZCBmaWVsZCwgYW5kIHRo ZW4gdGhlIGZpcnN0IGZpZWxkIGFnYWluLgorKyAgICAgKgorKyAgICAgKiBGb3IgcHJvZ3Jlc3Np dmUgZnJhbWVzIHRoaXMgZmllbGQgbWF5IGJlIHNldCB0byBhIG11bHRpcGxlIG9mIDIsIHdoaWNo CisrICAgICAqIHNpZ25hbHMgdGhhdCB0aGlzIGZyYW1lJ3MgZHVyYXRpb24gc2hvdWxkIGJlIChy ZXBlYXRfcGljdCArIDIpIC8gMgorKyAgICAgKiBub3JtYWwgZnJhbWUgZHVyYXRpb25zLgorKyAg ICAgKgorKyAgICAgKiBAbm90ZSBUaGlzIGZpZWxkIGlzIGNvbXB1dGVkIGZyb20gTVBFRzIgcmVw ZWF0X2ZpcnN0X2ZpZWxkIGZsYWcgYW5kIGl0cworKyAgICAgKiBhc3NvY2lhdGVkIGZsYWdzLCBI LjI2NCBwaWNfc3RydWN0IGZyb20gcGljdHVyZSB0aW1pbmcgU0VJLCBhbmQKKysgICAgICogdGhl aXIgYW5hbG9ndWVzIGluIG90aGVyIGNvZGVjcy4gVHlwaWNhbGx5IGl0IHNob3VsZCBvbmx5IGJl IHVzZWQgd2hlbgorKyAgICAgKiBoaWdoZXItbGF5ZXIgdGltaW5nIGluZm9ybWF0aW9uIGlzIG5v dCBhdmFpbGFibGUuCisrICAgICAqLworKyAgICBpbnQgcmVwZWF0X3BpY3Q7CisrCisrICAgIC8q KgorKyAgICAgKiBTYW1wbGUgcmF0ZSBvZiB0aGUgYXVkaW8gZGF0YS4KKysgICAgICovCisrICAg IGludCBzYW1wbGVfcmF0ZTsKKysKKysgICAgLyoqCisrICAgICAqIEFWQnVmZmVyIHJlZmVyZW5j ZXMgYmFja2luZyB0aGUgZGF0YSBmb3IgdGhpcyBmcmFtZS4gQWxsIHRoZSBwb2ludGVycyBpbgor KyAgICAgKiBkYXRhIGFuZCBleHRlbmRlZF9kYXRhIG11c3QgcG9pbnQgaW5zaWRlIG9uZSBvZiB0 aGUgYnVmZmVycyBpbiBidWYgb3IKKysgICAgICogZXh0ZW5kZWRfYnVmLiBUaGlzIGFycmF5IG11 c3QgYmUgZmlsbGVkIGNvbnRpZ3VvdXNseSAtLSBpZiBidWZbaV0gaXMKKysgICAgICogbm9uLU5V TEwgdGhlbiBidWZbal0gbXVzdCBhbHNvIGJlIG5vbi1OVUxMIGZvciBhbGwgaiA8IGkuCisrICAg ICAqCisrICAgICAqIFRoZXJlIG1heSBiZSBhdCBtb3N0IG9uZSBBVkJ1ZmZlciBwZXIgZGF0YSBw bGFuZSwgc28gZm9yIHZpZGVvIHRoaXMgYXJyYXkKKysgICAgICogYWx3YXlzIGNvbnRhaW5zIGFs bCB0aGUgcmVmZXJlbmNlcy4gRm9yIHBsYW5hciBhdWRpbyB3aXRoIG1vcmUgdGhhbgorKyAgICAg KiBBVl9OVU1fREFUQV9QT0lOVEVSUyBjaGFubmVscywgdGhlcmUgbWF5IGJlIG1vcmUgYnVmZmVy cyB0aGFuIGNhbiBmaXQgaW4KKysgICAgICogdGhpcyBhcnJheS4gVGhlbiB0aGUgZXh0cmEgQVZC dWZmZXJSZWYgcG9pbnRlcnMgYXJlIHN0b3JlZCBpbiB0aGUKKysgICAgICogZXh0ZW5kZWRfYnVm IGFycmF5LgorKyAgICAgKi8KKysgICAgQVZCdWZmZXJSZWYgKmJ1ZltBVl9OVU1fREFUQV9QT0lO VEVSU107CisrCisrICAgIC8qKgorKyAgICAgKiBGb3IgcGxhbmFyIGF1ZGlvIHdoaWNoIHJlcXVp cmVzIG1vcmUgdGhhbiBBVl9OVU1fREFUQV9QT0lOVEVSUworKyAgICAgKiBBVkJ1ZmZlclJlZiBw b2ludGVycywgdGhpcyBhcnJheSB3aWxsIGhvbGQgYWxsIHRoZSByZWZlcmVuY2VzIHdoaWNoCisr ICAgICAqIGNhbm5vdCBmaXQgaW50byBBVkZyYW1lLmJ1Zi4KKysgICAgICoKKysgICAgICogTm90 ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gQVZGcmFtZS5leHRlbmRlZF9kYXRhLCB3aGlj aCBhbHdheXMKKysgICAgICogY29udGFpbnMgYWxsIHRoZSBwb2ludGVycy4gVGhpcyBhcnJheSBv bmx5IGNvbnRhaW5zIHRoZSBleHRyYSBwb2ludGVycywKKysgICAgICogd2hpY2ggY2Fubm90IGZp dCBpbnRvIEFWRnJhbWUuYnVmLgorKyAgICAgKgorKyAgICAgKiBUaGlzIGFycmF5IGlzIGFsd2F5 cyBhbGxvY2F0ZWQgdXNpbmcgYXZfbWFsbG9jKCkgYnkgd2hvZXZlciBjb25zdHJ1Y3RzCisrICAg ICAqIHRoZSBmcmFtZS4gSXQgaXMgZnJlZWQgaW4gYXZfZnJhbWVfdW5yZWYoKS4KKysgICAgICov CisrICAgIEFWQnVmZmVyUmVmICoqZXh0ZW5kZWRfYnVmOworKyAgICAvKioKKysgICAgICogTnVt YmVyIG9mIGVsZW1lbnRzIGluIGV4dGVuZGVkX2J1Zi4KKysgICAgICovCisrICAgIGludCAgICAg ICAgbmJfZXh0ZW5kZWRfYnVmOworKworKyAgICBBVkZyYW1lU2lkZURhdGEgKipzaWRlX2RhdGE7 CisrICAgIGludCAgICAgICAgICAgIG5iX3NpZGVfZGF0YTsKKysKKysvKioKKysgKiBAZGVmZ3Jv dXAgbGF2dV9mcmFtZV9mbGFncyBBVl9GUkFNRV9GTEFHUworKyAqIEBpbmdyb3VwIGxhdnVfZnJh bWUKKysgKiBGbGFncyBkZXNjcmliaW5nIGFkZGl0aW9uYWwgZnJhbWUgcHJvcGVydGllcy4KKysg KgorKyAqIEB7CisrICovCisrCisrLyoqCisrICogVGhlIGZyYW1lIGRhdGEgbWF5IGJlIGNvcnJ1 cHRlZCwgZS5nLiBkdWUgdG8gZGVjb2RpbmcgZXJyb3JzLgorKyAqLworKyNkZWZpbmUgQVZfRlJB TUVfRkxBR19DT1JSVVBUICAgICAgICgxIDw8IDApCisrLyoqCisrICogQSBmbGFnIHRvIG1hcmsg ZnJhbWVzIHRoYXQgYXJlIGtleWZyYW1lcy4KKysgKi8KKysjZGVmaW5lIEFWX0ZSQU1FX0ZMQUdf S0VZICgxIDw8IDEpCisrLyoqCisrICogQSBmbGFnIHRvIG1hcmsgdGhlIGZyYW1lcyB3aGljaCBu ZWVkIHRvIGJlIGRlY29kZWQsIGJ1dCBzaG91bGRuJ3QgYmUgb3V0cHV0LgorKyAqLworKyNkZWZp bmUgQVZfRlJBTUVfRkxBR19ESVNDQVJEICAgKDEgPDwgMikKKysvKioKKysgKiBBIGZsYWcgdG8g bWFyayBmcmFtZXMgd2hvc2UgY29udGVudCBpcyBpbnRlcmxhY2VkLgorKyAqLworKyNkZWZpbmUg QVZfRlJBTUVfRkxBR19JTlRFUkxBQ0VEICgxIDw8IDMpCisrLyoqCisrICogQSBmbGFnIHRvIG1h cmsgZnJhbWVzIHdoZXJlIHRoZSB0b3AgZmllbGQgaXMgZGlzcGxheWVkIGZpcnN0IGlmIHRoZSBj b250ZW50CisrICogaXMgaW50ZXJsYWNlZC4KKysgKi8KKysjZGVmaW5lIEFWX0ZSQU1FX0ZMQUdf VE9QX0ZJRUxEX0ZJUlNUICgxIDw8IDQpCisrLyoqCisrICogQSBkZWNvZGVyIGNhbiB1c2UgdGhp cyBmbGFnIHRvIG1hcmsgZnJhbWVzIHdoaWNoIHdlcmUgb3JpZ2luYWxseSBlbmNvZGVkIGxvc3Ns ZXNzbHkuCisrICoKKysgKiBGb3IgY29kaW5nIGJpdHN0cmVhbSBmb3JtYXRzIHdoaWNoIHN1cHBv cnQgYm90aCBsb3NzbGVzcyBhbmQgbG9zc3kKKysgKiBlbmNvZGluZywgaXQgaXMgc29tZXRpbWVz IHBvc3NpYmxlIGZvciBhIGRlY29kZXIgdG8gZGV0ZXJtaW5lIHdoaWNoIG1ldGhvZAorKyAqIHdh cyB1c2VkIHdoZW4gdGhlIGJpdHN0cmVhbSB3YXMgZW5jb2RlZC4KKysgKi8KKysjZGVmaW5lIEFW X0ZSQU1FX0ZMQUdfTE9TU0xFU1MgICAgICAgICgxIDw8IDUpCisrLyoqCisrICogQH0KKysgKi8K KysKKysgICAgLyoqCisrICAgICAqIEZyYW1lIGZsYWdzLCBhIGNvbWJpbmF0aW9uIG9mIEByZWYg bGF2dV9mcmFtZV9mbGFncworKyAgICAgKi8KKysgICAgaW50IGZsYWdzOworKworKyAgICAvKioK KysgICAgICogTVBFRyB2cyBKUEVHIFlVViByYW5nZS4KKysgICAgICogLSBlbmNvZGluZzogU2V0 IGJ5IHVzZXIKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMKKysgICAgICov CisrICAgIGVudW0gQVZDb2xvclJhbmdlIGNvbG9yX3JhbmdlOworKworKyAgICBlbnVtIEFWQ29s b3JQcmltYXJpZXMgY29sb3JfcHJpbWFyaWVzOworKworKyAgICBlbnVtIEFWQ29sb3JUcmFuc2Zl ckNoYXJhY3RlcmlzdGljIGNvbG9yX3RyYzsKKysKKysgICAgLyoqCisrICAgICAqIFlVViBjb2xv cnNwYWNlIHR5cGUuCisrICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyCisrICAgICAqIC0g ZGVjb2Rpbmc6IFNldCBieSBsaWJhdmNvZGVjCisrICAgICAqLworKyAgICBlbnVtIEFWQ29sb3JT cGFjZSBjb2xvcnNwYWNlOworKworKyAgICBlbnVtIEFWQ2hyb21hTG9jYXRpb24gY2hyb21hX2xv Y2F0aW9uOworKworKyAgICAvKioKKysgICAgICogZnJhbWUgdGltZXN0YW1wIGVzdGltYXRlZCB1 c2luZyB2YXJpb3VzIGhldXJpc3RpY3MsIGluIHN0cmVhbSB0aW1lIGJhc2UKKysgICAgICogLSBl bmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IHNldCBieSBsaWJhdmNvZGVjLCBy ZWFkIGJ5IHVzZXIuCisrICAgICAqLworKyAgICBpbnQ2NF90IGJlc3RfZWZmb3J0X3RpbWVzdGFt cDsKKysKKysgICAgLyoqCisrICAgICAqIG1ldGFkYXRhLgorKyAgICAgKiAtIGVuY29kaW5nOiBT ZXQgYnkgdXNlci4KKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29kZWMuCisrICAg ICAqLworKyAgICBBVkRpY3Rpb25hcnkgKm1ldGFkYXRhOworKworKyAgICAvKioKKysgICAgICog ZGVjb2RlIGVycm9yIGZsYWdzIG9mIHRoZSBmcmFtZSwgc2V0IHRvIGEgY29tYmluYXRpb24gb2YK KysgICAgICogRkZfREVDT0RFX0VSUk9SX3h4eCBmbGFncyBpZiB0aGUgZGVjb2RlciBwcm9kdWNl ZCBhIGZyYW1lLCBidXQgdGhlcmUKKysgICAgICogd2VyZSBlcnJvcnMgZHVyaW5nIHRoZSBkZWNv ZGluZy4KKysgICAgICogLSBlbmNvZGluZzogdW51c2VkCisrICAgICAqIC0gZGVjb2Rpbmc6IHNl dCBieSBsaWJhdmNvZGVjLCByZWFkIGJ5IHVzZXIuCisrICAgICAqLworKyAgICBpbnQgZGVjb2Rl X2Vycm9yX2ZsYWdzOworKyNkZWZpbmUgRkZfREVDT0RFX0VSUk9SX0lOVkFMSURfQklUU1RSRUFN ICAgMQorKyNkZWZpbmUgRkZfREVDT0RFX0VSUk9SX01JU1NJTkdfUkVGRVJFTkNFICAgMgorKyNk ZWZpbmUgRkZfREVDT0RFX0VSUk9SX0NPTkNFQUxNRU5UX0FDVElWRSAgNAorKyNkZWZpbmUgRkZf REVDT0RFX0VSUk9SX0RFQ09ERV9TTElDRVMgICAgICAgOAorKworKyAgICAvKioKKysgICAgICog Rm9yIGh3YWNjZWwtZm9ybWF0IGZyYW1lcywgdGhpcyBzaG91bGQgYmUgYSByZWZlcmVuY2UgdG8g dGhlCisrICAgICAqIEFWSFdGcmFtZXNDb250ZXh0IGRlc2NyaWJpbmcgdGhlIGZyYW1lLgorKyAg ICAgKi8KKysgICAgQVZCdWZmZXJSZWYgKmh3X2ZyYW1lc19jdHg7CisrCisrICAgIC8qKgorKyAg ICAgKiBGcmFtZSBvd25lcidzIHByaXZhdGUgZGF0YS4KKysgICAgICoKKysgICAgICogVGhpcyBm aWVsZCBtYXkgYmUgc2V0IGJ5IHRoZSBjb2RlIHRoYXQgYWxsb2NhdGVzL293bnMgdGhlIGZyYW1l IGRhdGEuCisrICAgICAqIEl0IGlzIHRoZW4gbm90IHRvdWNoZWQgYnkgYW55IGxpYnJhcnkgZnVu Y3Rpb25zLCBleGNlcHQ6CisrICAgICAqIC0gYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5 aW5nIGJ1ZmZlciBpcyBwcm9wYWdhdGVkIGJ5CisrICAgICAqICAgYXZfZnJhbWVfY29weV9wcm9w cygpIChhbmQgaGVuY2UgYnkgYXZfZnJhbWVfcmVmKCkpOworKyAgICAgKiAtIGl0IGlzIHVucmVm ZXJlbmNlZCBpbiBhdl9mcmFtZV91bnJlZigpOworKyAgICAgKiAtIG9uIHRoZSBjYWxsZXIncyBl eHBsaWNpdCByZXF1ZXN0LiBFLmcuIGxpYmF2Y29kZWMgZW5jb2RlcnMvZGVjb2RlcnMKKysgICAg ICogICB3aWxsIHByb3BhZ2F0ZSBhIG5ldyByZWZlcmVuY2UgdG8vZnJvbSBAcmVmIEFWUGFja2V0 ICJBVlBhY2tldHMiIGlmIHRoZQorKyAgICAgKiAgIGNhbGxlciBzZXRzIEByZWYgQVZfQ09ERUNf RkxBR19DT1BZX09QQVFVRS4KKysgICAgICoKKysgICAgICogQHNlZSBvcGFxdWUgdGhlIHBsYWlu IHBvaW50ZXIgYW5hbG9ndWUKKysgICAgICovCisrICAgIEFWQnVmZmVyUmVmICpvcGFxdWVfcmVm OworKworKyAgICAvKioKKysgICAgICogQGFuY2hvciBjcm9wcGluZworKyAgICAgKiBAbmFtZSBD cm9wcGluZworKyAgICAgKiBWaWRlbyBmcmFtZXMgb25seS4gVGhlIG51bWJlciBvZiBwaXhlbHMg dG8gZGlzY2FyZCBmcm9tIHRoZQorKyAgICAgKiB0b3AvYm90dG9tL2xlZnQvcmlnaHQgYm9yZGVy IG9mIHRoZSBmcmFtZSB0byBvYnRhaW4gdGhlIHN1Yi1yZWN0YW5nbGUgb2YKKysgICAgICogdGhl IGZyYW1lIGludGVuZGVkIGZvciBwcmVzZW50YXRpb24uCisrICAgICAqIEB7CisrICAgICAqLwor KyAgICBzaXplX3QgY3JvcF90b3A7CisrICAgIHNpemVfdCBjcm9wX2JvdHRvbTsKKysgICAgc2l6 ZV90IGNyb3BfbGVmdDsKKysgICAgc2l6ZV90IGNyb3BfcmlnaHQ7CisrICAgIC8qKgorKyAgICAg KiBAfQorKyAgICAgKi8KKysKKysgICAgLyoqCisrICAgICAqIFJlZlN0cnVjdCByZWZlcmVuY2Ug Zm9yIGludGVybmFsIHVzZSBieSBhIHNpbmdsZSBsaWJhdiogbGlicmFyeS4KKysgICAgICogTXVz dCBub3QgYmUgdXNlZCB0byB0cmFuc2ZlciBkYXRhIGJldHdlZW4gbGlicmFyaWVzLgorKyAgICAg KiBIYXMgdG8gYmUgTlVMTCB3aGVuIG93bmVyc2hpcCBvZiB0aGUgZnJhbWUgbGVhdmVzIHRoZSBy ZXNwZWN0aXZlIGxpYnJhcnkuCisrICAgICAqCisrICAgICAqIENvZGUgb3V0c2lkZSB0aGUgRkZt cGVnIGxpYnMgbXVzdCBuZXZlciBjaGVjayBvciBjaGFuZ2UgcHJpdmF0ZV9yZWYuCisrICAgICAq LworKyAgICB2b2lkICpwcml2YXRlX3JlZjsKKysKKysgICAgLyoqCisrICAgICAqIENoYW5uZWwg bGF5b3V0IG9mIHRoZSBhdWRpbyBkYXRhLgorKyAgICAgKi8KKysgICAgQVZDaGFubmVsTGF5b3V0 IGNoX2xheW91dDsKKysKKysgICAgLyoqCisrICAgICAqIER1cmF0aW9uIG9mIHRoZSBmcmFtZSwg aW4gdGhlIHNhbWUgdW5pdHMgYXMgcHRzLiAwIGlmIHVua25vd24uCisrICAgICAqLworKyAgICBp bnQ2NF90IGR1cmF0aW9uOworKworKyAgICAvKioKKysgICAgICogSW5kaWNhdGVzIGhvdyB0aGUg YWxwaGEgY2hhbm5lbCBvZiB0aGUgdmlkZW8gaXMgdG8gYmUgaGFuZGxlZC4KKysgICAgICogLSBl bmNvZGluZzogU2V0IGJ5IHVzZXIKKysgICAgICogLSBkZWNvZGluZzogU2V0IGJ5IGxpYmF2Y29k ZWMKKysgICAgICovCisrICAgIGVudW0gQVZBbHBoYU1vZGUgYWxwaGFfbW9kZTsKKyt9IEFWRnJh bWU7CisrCisrCisrLyoqCisrICogQWxsb2NhdGUgYW4gQVZGcmFtZSBhbmQgc2V0IGl0cyBmaWVs ZHMgdG8gZGVmYXVsdCB2YWx1ZXMuICBUaGUgcmVzdWx0aW5nCisrICogc3RydWN0IG11c3QgYmUg ZnJlZWQgdXNpbmcgYXZfZnJhbWVfZnJlZSgpLgorKyAqCisrICogQHJldHVybiBBbiBBVkZyYW1l IGZpbGxlZCB3aXRoIGRlZmF1bHQgdmFsdWVzIG9yIE5VTEwgb24gZmFpbHVyZS4KKysgKgorKyAq IEBub3RlIHRoaXMgb25seSBhbGxvY2F0ZXMgdGhlIEFWRnJhbWUgaXRzZWxmLCBub3QgdGhlIGRh dGEgYnVmZmVycy4gVGhvc2UKKysgKiBtdXN0IGJlIGFsbG9jYXRlZCB0aHJvdWdoIG90aGVyIG1l YW5zLCBlLmcuIHdpdGggYXZfZnJhbWVfZ2V0X2J1ZmZlcigpIG9yCisrICogbWFudWFsbHkuCisr ICovCisrQVZGcmFtZSAqYXZfZnJhbWVfYWxsb2Modm9pZCk7CisrCisrLyoqCisrICogRnJlZSB0 aGUgZnJhbWUgYW5kIGFueSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgb2JqZWN0cyBpbiBpdCwKKysg KiBlLmcuIGV4dGVuZGVkX2RhdGEuIElmIHRoZSBmcmFtZSBpcyByZWZlcmVuY2UgY291bnRlZCwg aXQgd2lsbCBiZQorKyAqIHVucmVmZXJlbmNlZCBmaXJzdC4KKysgKgorKyAqIEBwYXJhbSBmcmFt ZSBmcmFtZSB0byBiZSBmcmVlZC4gVGhlIHBvaW50ZXIgd2lsbCBiZSBzZXQgdG8gTlVMTC4KKysg Ki8KKyt2b2lkIGF2X2ZyYW1lX2ZyZWUoQVZGcmFtZSAqKmZyYW1lKTsKKysKKysvKioKKysgKiBT ZXQgdXAgYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGRlc2NyaWJlZCBieSB0aGUgc291cmNl IGZyYW1lLgorKyAqCisrICogQ29weSBmcmFtZSBwcm9wZXJ0aWVzIGZyb20gc3JjIHRvIGRzdCBh bmQgY3JlYXRlIGEgbmV3IHJlZmVyZW5jZSBmb3IgZWFjaAorKyAqIEFWQnVmZmVyUmVmIGZyb20g c3JjLgorKyAqCisrICogSWYgc3JjIGlzIG5vdCByZWZlcmVuY2UgY291bnRlZCwgbmV3IGJ1ZmZl cnMgYXJlIGFsbG9jYXRlZCBhbmQgdGhlIGRhdGEgaXMKKysgKiBjb3BpZWQuCisrICoKKysgKiBA d2FybmluZzogZHN0IE1VU1QgaGF2ZSBiZWVuIGVpdGhlciB1bnJlZmVyZW5jZWQgd2l0aCBhdl9m cmFtZV91bnJlZihkc3QpLAorKyAqICAgICAgICAgICBvciBuZXdseSBhbGxvY2F0ZWQgd2l0aCBh dl9mcmFtZV9hbGxvYygpIGJlZm9yZSBjYWxsaW5nIHRoaXMKKysgKiAgICAgICAgICAgZnVuY3Rp b24sIG9yIHVuZGVmaW5lZCBiZWhhdmlvciB3aWxsIG9jY3VyLgorKyAqCisrICogQHJldHVybiAw IG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBvbiBlcnJvcgorKyAqLworK2ludCBhdl9m cmFtZV9yZWYoQVZGcmFtZSAqZHN0LCBjb25zdCBBVkZyYW1lICpzcmMpOworKworKy8qKgorKyAq IEVuc3VyZSB0aGUgZGVzdGluYXRpb24gZnJhbWUgcmVmZXJzIHRvIHRoZSBzYW1lIGRhdGEgZGVz Y3JpYmVkIGJ5IHRoZSBzb3VyY2UKKysgKiBmcmFtZSwgZWl0aGVyIGJ5IGNyZWF0aW5nIGEgbmV3 IHJlZmVyZW5jZSBmb3IgZWFjaCBBVkJ1ZmZlclJlZiBmcm9tIHNyYyBpZgorKyAqIHRoZXkgZGlm ZmVyIGZyb20gdGhvc2UgaW4gZHN0LCBieSBhbGxvY2F0aW5nIG5ldyBidWZmZXJzIGFuZCBjb3B5 aW5nIGRhdGEgaWYKKysgKiBzcmMgaXMgbm90IHJlZmVyZW5jZSBjb3VudGVkLCBvciBieSB1bnJl ZmVyZW5jaW5nIGl0IGlmIHNyYyBpcyBlbXB0eS4KKysgKgorKyAqIEZyYW1lIHByb3BlcnRpZXMg b24gZHN0IHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhvc2UgZnJvbSBzcmMuCisrICoKKysgKiBAcmV0 dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBBVkVSUk9SIG9uIGVycm9yLiBPbiBlcnJvciwg ZHN0IGlzCisrICogICAgICAgICB1bnJlZmVyZW5jZWQuCisrICovCisraW50IGF2X2ZyYW1lX3Jl cGxhY2UoQVZGcmFtZSAqZHN0LCBjb25zdCBBVkZyYW1lICpzcmMpOworKworKy8qKgorKyAqIENy ZWF0ZSBhIG5ldyBmcmFtZSB0aGF0IHJlZmVyZW5jZXMgdGhlIHNhbWUgZGF0YSBhcyBzcmMuCisr ICoKKysgKiBUaGlzIGlzIGEgc2hvcnRjdXQgZm9yIGF2X2ZyYW1lX2FsbG9jKCkrYXZfZnJhbWVf cmVmKCkuCisrICoKKysgKiBAcmV0dXJuIG5ld2x5IGNyZWF0ZWQgQVZGcmFtZSBvbiBzdWNjZXNz LCBOVUxMIG9uIGVycm9yLgorKyAqLworK0FWRnJhbWUgKmF2X2ZyYW1lX2Nsb25lKGNvbnN0IEFW RnJhbWUgKnNyYyk7CisrCisrLyoqCisrICogVW5yZWZlcmVuY2UgYWxsIHRoZSBidWZmZXJzIHJl ZmVyZW5jZWQgYnkgZnJhbWUgYW5kIHJlc2V0IHRoZSBmcmFtZSBmaWVsZHMuCisrICovCisrdm9p ZCBhdl9mcmFtZV91bnJlZihBVkZyYW1lICpmcmFtZSk7CisrCisrLyoqCisrICogTW92ZSBldmVy eXRoaW5nIGNvbnRhaW5lZCBpbiBzcmMgdG8gZHN0IGFuZCByZXNldCBzcmMuCisrICoKKysgKiBA d2FybmluZzogZHN0IGlzIG5vdCB1bnJlZmVyZW5jZWQsIGJ1dCBkaXJlY3RseSBvdmVyd3JpdHRl biB3aXRob3V0IHJlYWRpbmcKKysgKiAgICAgICAgICAgb3IgZGVhbGxvY2F0aW5nIGl0cyBjb250 ZW50cy4gQ2FsbCBhdl9mcmFtZV91bnJlZihkc3QpIG1hbnVhbGx5CisrICogICAgICAgICAgIGJl Zm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gdG8gZW5zdXJlIHRoYXQgbm8gbWVtb3J5IGlzIGxl YWtlZC4KKysgKi8KKyt2b2lkIGF2X2ZyYW1lX21vdmVfcmVmKEFWRnJhbWUgKmRzdCwgQVZGcmFt ZSAqc3JjKTsKKysKKysvKioKKysgKiBBbGxvY2F0ZSBuZXcgYnVmZmVyKHMpIGZvciBhdWRpbyBv ciB2aWRlbyBkYXRhLgorKyAqCisrICogVGhlIGZvbGxvd2luZyBmaWVsZHMgbXVzdCBiZSBzZXQg b24gZnJhbWUgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbjoKKysgKiAtIGZvcm1hdCAocGl4 ZWwgZm9ybWF0IGZvciB2aWRlbywgc2FtcGxlIGZvcm1hdCBmb3IgYXVkaW8pCisrICogLSB3aWR0 aCBhbmQgaGVpZ2h0IGZvciB2aWRlbworKyAqIC0gbmJfc2FtcGxlcyBhbmQgY2hfbGF5b3V0IGZv ciBhdWRpbworKyAqCisrICogVGhpcyBmdW5jdGlvbiB3aWxsIGZpbGwgQVZGcmFtZS5kYXRhIGFu ZCBBVkZyYW1lLmJ1ZiBhcnJheXMgYW5kLCBpZgorKyAqIG5lY2Vzc2FyeSwgYWxsb2NhdGUgYW5k IGZpbGwgQVZGcmFtZS5leHRlbmRlZF9kYXRhIGFuZCBBVkZyYW1lLmV4dGVuZGVkX2J1Zi4KKysg KiBGb3IgcGxhbmFyIGZvcm1hdHMsIG9uZSBidWZmZXIgd2lsbCBiZSBhbGxvY2F0ZWQgZm9yIGVh Y2ggcGxhbmUuCisrICoKKysgKiBAd2FybmluZzogaWYgZnJhbWUgYWxyZWFkeSBoYXMgYmVlbiBh bGxvY2F0ZWQsIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsCisrICogICAgICAgICAgIGxlYWsg bWVtb3J5LiBJbiBhZGRpdGlvbiwgdW5kZWZpbmVkIGJlaGF2aW9yIGNhbiBvY2N1ciBpbiBjZXJ0 YWluCisrICogICAgICAgICAgIGNhc2VzLgorKyAqCisrICogQHBhcmFtIGZyYW1lIGZyYW1lIGlu IHdoaWNoIHRvIHN0b3JlIHRoZSBuZXcgYnVmZmVycy4KKysgKiBAcGFyYW0gYWxpZ24gUmVxdWly ZWQgYnVmZmVyIHNpemUgYW5kIGRhdGEgcG9pbnRlciBhbGlnbm1lbnQuIElmIGVxdWFsIHRvIDAs CisrICogICAgICAgICAgICAgIGFsaWdubWVudCB3aWxsIGJlIGNob3NlbiBhdXRvbWF0aWNhbGx5 IGZvciB0aGUgY3VycmVudCBDUFUuCisrICogICAgICAgICAgICAgIEl0IGlzIGhpZ2hseSByZWNv bW1lbmRlZCB0byBwYXNzIDAgaGVyZSB1bmxlc3MgeW91IGtub3cgd2hhdAorKyAqICAgICAgICAg ICAgICB5b3UgYXJlIGRvaW5nLgorKyAqCisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVn YXRpdmUgQVZFUlJPUiBvbiBlcnJvci4KKysgKi8KKytpbnQgYXZfZnJhbWVfZ2V0X2J1ZmZlcihB VkZyYW1lICpmcmFtZSwgaW50IGFsaWduKTsKKysKKysvKioKKysgKiBDaGVjayBpZiB0aGUgZnJh bWUgZGF0YSBpcyB3cml0YWJsZS4KKysgKgorKyAqIEByZXR1cm4gQSBwb3NpdGl2ZSB2YWx1ZSBp ZiB0aGUgZnJhbWUgZGF0YSBpcyB3cml0YWJsZSAod2hpY2ggaXMgdHJ1ZSBpZiBhbmQKKysgKiBv bmx5IGlmIGVhY2ggb2YgdGhlIHVuZGVybHlpbmcgYnVmZmVycyBoYXMgb25seSBvbmUgcmVmZXJl bmNlLCBuYW1lbHkgdGhlIG9uZQorKyAqIHN0b3JlZCBpbiB0aGlzIGZyYW1lKS4gUmV0dXJuIDAg b3RoZXJ3aXNlLgorKyAqCisrICogSWYgMSBpcyByZXR1cm5lZCB0aGUgYW5zd2VyIGlzIHZhbGlk IHVudGlsIGF2X2J1ZmZlcl9yZWYoKSBpcyBjYWxsZWQgb24gYW55CisrICogb2YgdGhlIHVuZGVy bHlpbmcgQVZCdWZmZXJSZWZzIChlLmcuIHRocm91Z2ggYXZfZnJhbWVfcmVmKCkgb3IgZGlyZWN0 bHkpLgorKyAqCisrICogQHNlZSBhdl9mcmFtZV9tYWtlX3dyaXRhYmxlKCksIGF2X2J1ZmZlcl9p c193cml0YWJsZSgpCisrICovCisraW50IGF2X2ZyYW1lX2lzX3dyaXRhYmxlKEFWRnJhbWUgKmZy YW1lKTsKKysKKysvKioKKysgKiBFbnN1cmUgdGhhdCB0aGUgZnJhbWUgZGF0YSBpcyB3cml0YWJs ZSwgYXZvaWRpbmcgZGF0YSBjb3B5IGlmIHBvc3NpYmxlLgorKyAqCisrICogRG8gbm90aGluZyBp ZiB0aGUgZnJhbWUgaXMgd3JpdGFibGUsIGFsbG9jYXRlIG5ldyBidWZmZXJzIGFuZCBjb3B5IHRo ZSBkYXRhCisrICogaWYgaXQgaXMgbm90LiBOb24tcmVmY291bnRlZCBmcmFtZXMgYmVoYXZlIGFz IG5vbi13cml0YWJsZSwgaS5lLiBhIGNvcHkKKysgKiBpcyBhbHdheXMgbWFkZS4KKysgKgorKyAq IEByZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1Igb24gZXJyb3IuCisrICoK KysgKiBAc2VlIGF2X2ZyYW1lX2lzX3dyaXRhYmxlKCksIGF2X2J1ZmZlcl9pc193cml0YWJsZSgp LAorKyAqIGF2X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkKKysgKi8KKytpbnQgYXZfZnJhbWVfbWFr ZV93cml0YWJsZShBVkZyYW1lICpmcmFtZSk7CisrCisrLyoqCisrICogQ29weSB0aGUgZnJhbWUg ZGF0YSBmcm9tIHNyYyB0byBkc3QuCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFs bG9jYXRlIGFueXRoaW5nLCBkc3QgbXVzdCBiZSBhbHJlYWR5IGluaXRpYWxpemVkIGFuZAorKyAq IGFsbG9jYXRlZCB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgc3JjLgorKyAqCisrICogVGhp cyBmdW5jdGlvbiBvbmx5IGNvcGllcyB0aGUgZnJhbWUgZGF0YSAoaS5lLiB0aGUgY29udGVudHMg b2YgdGhlIGRhdGEgLworKyAqIGV4dGVuZGVkIGRhdGEgYXJyYXlzKSwgbm90IGFueSBvdGhlciBw cm9wZXJ0aWVzLgorKyAqCisrICogQHJldHVybiA+PSAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUg QVZFUlJPUiBvbiBlcnJvci4KKysgKi8KKytpbnQgYXZfZnJhbWVfY29weShBVkZyYW1lICpkc3Qs IGNvbnN0IEFWRnJhbWUgKnNyYyk7CisrCisrLyoqCisrICogQ29weSBvbmx5ICJtZXRhZGF0YSIg ZmllbGRzIGZyb20gc3JjIHRvIGRzdC4KKysgKgorKyAqIE1ldGFkYXRhIGZvciB0aGUgcHVycG9z ZSBvZiB0aGlzIGZ1bmN0aW9uIGFyZSB0aG9zZSBmaWVsZHMgdGhhdCBkbyBub3QgYWZmZWN0Cisr ICogdGhlIGRhdGEgbGF5b3V0IGluIHRoZSBidWZmZXJzLiAgRS5nLiBwdHMsIHNhbXBsZSByYXRl IChmb3IgYXVkaW8pIG9yIHNhbXBsZQorKyAqIGFzcGVjdCByYXRpbyAoZm9yIHZpZGVvKSwgYnV0 IG5vdCB3aWR0aC9oZWlnaHQgb3IgY2hhbm5lbCBsYXlvdXQuCisrICogU2lkZSBkYXRhIGlzIGFs c28gY29waWVkLgorKyAqLworK2ludCBhdl9mcmFtZV9jb3B5X3Byb3BzKEFWRnJhbWUgKmRzdCwg Y29uc3QgQVZGcmFtZSAqc3JjKTsKKysKKysvKioKKysgKiBHZXQgdGhlIGJ1ZmZlciByZWZlcmVu Y2UgYSBnaXZlbiBkYXRhIHBsYW5lIGlzIHN0b3JlZCBpbi4KKysgKgorKyAqIEBwYXJhbSBmcmFt ZSB0aGUgZnJhbWUgdG8gZ2V0IHRoZSBwbGFuZSdzIGJ1ZmZlciBmcm9tCisrICogQHBhcmFtIHBs YW5lIGluZGV4IG9mIHRoZSBkYXRhIHBsYW5lIG9mIGludGVyZXN0IGluIGZyYW1lLT5leHRlbmRl ZF9kYXRhLgorKyAqCisrICogQHJldHVybiB0aGUgYnVmZmVyIHJlZmVyZW5jZSB0aGF0IGNvbnRh aW5zIHRoZSBwbGFuZSBvciBOVUxMIGlmIHRoZSBpbnB1dAorKyAqIGZyYW1lIGlzIG5vdCB2YWxp ZC4KKysgKi8KKytBVkJ1ZmZlclJlZiAqYXZfZnJhbWVfZ2V0X3BsYW5lX2J1ZmZlcihjb25zdCBB VkZyYW1lICpmcmFtZSwgaW50IHBsYW5lKTsKKysKKysvKioKKysgKiBBZGQgYSBuZXcgc2lkZSBk YXRhIHRvIGEgZnJhbWUuCisrICoKKysgKiBAcGFyYW0gZnJhbWUgYSBmcmFtZSB0byB3aGljaCB0 aGUgc2lkZSBkYXRhIHNob3VsZCBiZSBhZGRlZAorKyAqIEBwYXJhbSB0eXBlIHR5cGUgb2YgdGhl IGFkZGVkIHNpZGUgZGF0YQorKyAqIEBwYXJhbSBzaXplIHNpemUgb2YgdGhlIHNpZGUgZGF0YQor KyAqCisrICogQHJldHVybiBuZXdseSBhZGRlZCBzaWRlIGRhdGEgb24gc3VjY2VzcywgTlVMTCBv biBlcnJvcgorKyAqLworK0FWRnJhbWVTaWRlRGF0YSAqYXZfZnJhbWVfbmV3X3NpZGVfZGF0YShB VkZyYW1lICpmcmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZW51bSBBVkZyYW1lU2lkZURhdGFUeXBlIHR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBzaXplKTsKKysKKysvKioKKysgKiBBZGQgYSBuZXcgc2lk ZSBkYXRhIHRvIGEgZnJhbWUgZnJvbSBhbiBleGlzdGluZyBBVkJ1ZmZlclJlZgorKyAqCisrICog QHBhcmFtIGZyYW1lIGEgZnJhbWUgdG8gd2hpY2ggdGhlIHNpZGUgZGF0YSBzaG91bGQgYmUgYWRk ZWQKKysgKiBAcGFyYW0gdHlwZSAgdGhlIHR5cGUgb2YgdGhlIGFkZGVkIHNpZGUgZGF0YQorKyAq IEBwYXJhbSBidWYgICBhbiBBVkJ1ZmZlclJlZiB0byBhZGQgYXMgc2lkZSBkYXRhLiBUaGUgb3du ZXJzaGlwIG9mCisrICogICAgICAgICAgICAgIHRoZSByZWZlcmVuY2UgaXMgdHJhbnNmZXJyZWQg dG8gdGhlIGZyYW1lLgorKyAqCisrICogQHJldHVybiBuZXdseSBhZGRlZCBzaWRlIGRhdGEgb24g c3VjY2VzcywgTlVMTCBvbiBlcnJvci4gT24gZmFpbHVyZQorKyAqICAgICAgICAgdGhlIGZyYW1l IGlzIHVuY2hhbmdlZCBhbmQgdGhlIEFWQnVmZmVyUmVmIHJlbWFpbnMgb3duZWQgYnkKKysgKiAg ICAgICAgIHRoZSBjYWxsZXIuCisrICovCisrQVZGcmFtZVNpZGVEYXRhICphdl9mcmFtZV9uZXdf c2lkZV9kYXRhX2Zyb21fYnVmKEFWRnJhbWUgKmZyYW1lLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWRnJhbWVTaWRlRGF0YVR5cGUgdHlw ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZC dWZmZXJSZWYgKmJ1Zik7CisrCisrLyoqCisrICogQHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHNp ZGUgZGF0YSBvZiBhIGdpdmVuIHR5cGUgb24gc3VjY2VzcywgTlVMTCBpZiB0aGVyZQorKyAqIGlz IG5vIHNpZGUgZGF0YSB3aXRoIHN1Y2ggdHlwZSBpbiB0aGlzIGZyYW1lLgorKyAqLworK0FWRnJh bWVTaWRlRGF0YSAqYXZfZnJhbWVfZ2V0X3NpZGVfZGF0YShjb25zdCBBVkZyYW1lICpmcmFtZSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVkZyYW1lU2lk ZURhdGFUeXBlIHR5cGUpOworKworKy8qKgorKyAqIFJlbW92ZSBhbmQgZnJlZSBhbGwgc2lkZSBk YXRhIGluc3RhbmNlcyBvZiB0aGUgZ2l2ZW4gdHlwZS4KKysgKi8KKyt2b2lkIGF2X2ZyYW1lX3Jl bW92ZV9zaWRlX2RhdGEoQVZGcmFtZSAqZnJhbWUsIGVudW0gQVZGcmFtZVNpZGVEYXRhVHlwZSB0 eXBlKTsKKysKKysKKysvKioKKysgKiBGbGFncyBmb3IgZnJhbWUgY3JvcHBpbmcuCisrICovCisr ZW51bSB7CisrICAgIC8qKgorKyAgICAgKiBBcHBseSB0aGUgbWF4aW11bSBwb3NzaWJsZSBjcm9w cGluZywgZXZlbiBpZiBpdCByZXF1aXJlcyBzZXR0aW5nIHRoZQorKyAgICAgKiBBVkZyYW1lLmRh dGFbXSBlbnRyaWVzIHRvIHVuYWxpZ25lZCBwb2ludGVycy4gUGFzc2luZyB1bmFsaWduZWQgZGF0 YQorKyAgICAgKiB0byBGRm1wZWcgQVBJIGlzIGdlbmVyYWxseSBub3QgYWxsb3dlZCwgYW5kIGNh dXNlcyB1bmRlZmluZWQgYmVoYXZpb3IKKysgICAgICogKHN1Y2ggYXMgY3Jhc2hlcykuIFlvdSBj YW4gcGFzcyB1bmFsaWduZWQgZGF0YSBvbmx5IHRvIEZGbXBlZyBBUElzIHRoYXQKKysgICAgICog YXJlIGV4cGxpY2l0bHkgZG9jdW1lbnRlZCB0byBhY2NlcHQgaXQuIFVzZSB0aGlzIGZsYWcgb25s eSBpZiB5b3UKKysgICAgICogYWJzb2x1dGVseSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKysg ICAgICovCisrICAgIEFWX0ZSQU1FX0NST1BfVU5BTElHTkVEICAgICA9IDEgPDwgMCwKKyt9Owor KworKy8qKgorKyAqIENyb3AgdGhlIGdpdmVuIHZpZGVvIEFWRnJhbWUgYWNjb3JkaW5nIHRvIGl0 cyBjcm9wX2xlZnQvY3JvcF90b3AvY3JvcF9yaWdodC8KKysgKiBjcm9wX2JvdHRvbSBmaWVsZHMu IElmIGNyb3BwaW5nIGlzIHN1Y2Nlc3NmdWwsIHRoZSBmdW5jdGlvbiB3aWxsIGFkanVzdCB0aGUK KysgKiBkYXRhIHBvaW50ZXJzIGFuZCB0aGUgd2lkdGgvaGVpZ2h0IGZpZWxkcywgYW5kIHNldCB0 aGUgY3JvcCBmaWVsZHMgdG8gMC4KKysgKgorKyAqIEluIGFsbCBjYXNlcywgdGhlIGNyb3BwaW5n IGJvdW5kYXJpZXMgd2lsbCBiZSByb3VuZGVkIHRvIHRoZSBpbmhlcmVudAorKyAqIGFsaWdubWVu dCBvZiB0aGUgcGl4ZWwgZm9ybWF0LiBJbiBzb21lIGNhc2VzLCBzdWNoIGFzIGZvciBvcGFxdWUg aHdhY2NlbAorKyAqIGZvcm1hdHMsIHRoZSBsZWZ0L3RvcCBjcm9wcGluZyBpcyBpZ25vcmVkLiBU aGUgY3JvcCBmaWVsZHMgYXJlIHNldCB0byAwIGV2ZW4KKysgKiBpZiB0aGUgY3JvcHBpbmcgd2Fz IHJvdW5kZWQgb3IgaWdub3JlZC4KKysgKgorKyAqIEBwYXJhbSBmcmFtZSB0aGUgZnJhbWUgd2hp Y2ggc2hvdWxkIGJlIGNyb3BwZWQKKysgKiBAcGFyYW0gZmxhZ3MgU29tZSBjb21iaW5hdGlvbiBv ZiBBVl9GUkFNRV9DUk9QXyogZmxhZ3MsIG9yIDAuCisrICoKKysgKiBAcmV0dXJuID49IDAgb24g c3VjY2VzcywgYSBuZWdhdGl2ZSBBVkVSUk9SIG9uIGVycm9yLiBJZiB0aGUgY3JvcHBpbmcgZmll bGRzCisrICogd2VyZSBpbnZhbGlkLCBBVkVSUk9SKEVSQU5HRSkgaXMgcmV0dXJuZWQsIGFuZCBu b3RoaW5nIGlzIGNoYW5nZWQuCisrICovCisraW50IGF2X2ZyYW1lX2FwcGx5X2Nyb3BwaW5nKEFW RnJhbWUgKmZyYW1lLCBpbnQgZmxhZ3MpOworKworKy8qKgorKyAqIEByZXR1cm4gYSBzdHJpbmcg aWRlbnRpZnlpbmcgdGhlIHNpZGUgZGF0YSB0eXBlCisrICovCisrY29uc3QgY2hhciAqYXZfZnJh bWVfc2lkZV9kYXRhX25hbWUoZW51bSBBVkZyYW1lU2lkZURhdGFUeXBlIHR5cGUpOworKworKy8q KgorKyAqIEByZXR1cm4gc2lkZSBkYXRhIGRlc2NyaXB0b3IgY29ycmVzcG9uZGluZyB0byBhIGdp dmVuIHNpZGUgZGF0YSB0eXBlLCBOVUxMCisrICogICAgICAgICB3aGVuIG5vdCBhdmFpbGFibGUu CisrICovCisrY29uc3QgQVZTaWRlRGF0YURlc2NyaXB0b3IgKmF2X2ZyYW1lX3NpZGVfZGF0YV9k ZXNjKGVudW0gQVZGcmFtZVNpZGVEYXRhVHlwZSB0eXBlKTsKKysKKysvKioKKysgKiBGcmVlIGFs bCBzaWRlIGRhdGEgZW50cmllcyBhbmQgdGhlaXIgY29udGVudHMsIHRoZW4gemVyb2VzIG91dCB0 aGUKKysgKiB2YWx1ZXMgd2hpY2ggdGhlIHBvaW50ZXJzIGFyZSBwb2ludGluZyB0by4KKysgKgor KyAqIEBwYXJhbSBzZCAgICBwb2ludGVyIHRvIGFycmF5IG9mIHNpZGUgZGF0YSB0byBmcmVlLiBX aWxsIGJlIHNldCB0byBOVUxMCisrICogICAgICAgICAgICAgIHVwb24gcmV0dXJuLgorKyAqIEBw YXJhbSBuYl9zZCBwb2ludGVyIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgbnVtYmVyIG9m IGVudHJpZXMgaW4KKysgKiAgICAgICAgICAgICAgdGhlIGFycmF5LiBXaWxsIGJlIHNldCB0byAw IHVwb24gcmV0dXJuLgorKyAqLworK3ZvaWQgYXZfZnJhbWVfc2lkZV9kYXRhX2ZyZWUoQVZGcmFt ZVNpZGVEYXRhICoqKnNkLCBpbnQgKm5iX3NkKTsKKysKKysvKioKKysgKiBSZW1vdmUgZXhpc3Rp bmcgZW50cmllcyBiZWZvcmUgYWRkaW5nIG5ldyBvbmVzLgorKyAqLworKyNkZWZpbmUgQVZfRlJB TUVfU0lERV9EQVRBX0ZMQUdfVU5JUVVFICgxIDw8IDApCisrLyoqCisrICogRG9uJ3QgYWRkIGEg bmV3IGVudHJ5IGlmIGFub3RoZXIgb2YgdGhlIHNhbWUgdHlwZSBleGlzdHMuCisrICogQXBwbGll cyBvbmx5IGZvciBzaWRlIGRhdGEgdHlwZXMgd2l0aG91dCB0aGUgQVZfU0lERV9EQVRBX1BST1Bf TVVMVEkgcHJvcC4KKysgKi8KKysjZGVmaW5lIEFWX0ZSQU1FX1NJREVfREFUQV9GTEFHX1JFUExB Q0UgKDEgPDwgMSkKKysvKioKKysgKiBDcmVhdGUgYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSBwYXNz ZWQgaW4gYnVmZmVyIGluc3RlYWQgb2YgdGFraW5nIG93bmVyc2hpcAorKyAqIG9mIGl0LgorKyAq LworKyNkZWZpbmUgQVZfRlJBTUVfU0lERV9EQVRBX0ZMQUdfTkVXX1JFRiAoMSA8PCAyKQorKwor Ky8qKgorKyAqIEFkZCBuZXcgc2lkZSBkYXRhIGVudHJ5IHRvIGFuIGFycmF5LgorKyAqCisrICog QHBhcmFtIHNkICAgIHBvaW50ZXIgdG8gYXJyYXkgb2Ygc2lkZSBkYXRhIHRvIHdoaWNoIHRvIGFk ZCBhbm90aGVyIGVudHJ5LAorKyAqICAgICAgICAgICAgICBvciB0byBOVUxMIGluIG9yZGVyIHRv IHN0YXJ0IGEgbmV3IGFycmF5LgorKyAqIEBwYXJhbSBuYl9zZCBwb2ludGVyIHRvIGFuIGludGVn ZXIgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4KKysgKiAgICAgICAgICAgICAg dGhlIGFycmF5LgorKyAqIEBwYXJhbSB0eXBlICB0eXBlIG9mIHRoZSBhZGRlZCBzaWRlIGRhdGEK KysgKiBAcGFyYW0gc2l6ZSAgc2l6ZSBvZiB0aGUgc2lkZSBkYXRhCisrICogQHBhcmFtIGZsYWdz IFNvbWUgY29tYmluYXRpb24gb2YgQVZfRlJBTUVfU0lERV9EQVRBX0ZMQUdfKiBmbGFncywgb3Ig MC4KKysgKgorKyAqIEByZXR1cm4gbmV3bHkgYWRkZWQgc2lkZSBkYXRhIG9uIHN1Y2Nlc3MsIE5V TEwgb24gZXJyb3IuCisrICogQG5vdGUgSW4gY2FzZSBvZiBBVl9GUkFNRV9TSURFX0RBVEFfRkxB R19VTklRVUUgYmVpbmcgc2V0LCBlbnRyaWVzIG9mCisrICogICAgICAgbWF0Y2hpbmcgQVZGcmFt ZVNpZGVEYXRhVHlwZSB3aWxsIGJlIHJlbW92ZWQgYmVmb3JlIHRoZSBhZGRpdGlvbgorKyAqICAg ICAgIGlzIGF0dGVtcHRlZC4KKysgKiBAbm90ZSBJbiBjYXNlIG9mIEFWX0ZSQU1FX1NJREVfREFU QV9GTEFHX1JFUExBQ0UgYmVpbmcgc2V0LCBpZiBhbgorKyAqICAgICAgIGVudHJ5IG9mIHRoZSBz YW1lIHR5cGUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmVwbGFjZWQgaW5zdGVhZC4KKysg Ki8KKytBVkZyYW1lU2lkZURhdGEgKmF2X2ZyYW1lX3NpZGVfZGF0YV9uZXcoQVZGcmFtZVNpZGVE YXRhICoqKnNkLCBpbnQgKm5iX3NkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbnVtIEFWRnJhbWVTaWRlRGF0YVR5cGUgdHlwZSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBmbGFncyk7 CisrCisrLyoqCisrICogQWRkIGEgbmV3IHNpZGUgZGF0YSBlbnRyeSB0byBhbiBhcnJheSBmcm9t IGFuIGV4aXN0aW5nIEFWQnVmZmVyUmVmLgorKyAqCisrICogQHBhcmFtIHNkICAgIHBvaW50ZXIg dG8gYXJyYXkgb2Ygc2lkZSBkYXRhIHRvIHdoaWNoIHRvIGFkZCBhbm90aGVyIGVudHJ5LAorKyAq ICAgICAgICAgICAgICBvciB0byBOVUxMIGluIG9yZGVyIHRvIHN0YXJ0IGEgbmV3IGFycmF5Lgor KyAqIEBwYXJhbSBuYl9zZCBwb2ludGVyIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgbnVt YmVyIG9mIGVudHJpZXMgaW4KKysgKiAgICAgICAgICAgICAgdGhlIGFycmF5LgorKyAqIEBwYXJh bSB0eXBlICB0eXBlIG9mIHRoZSBhZGRlZCBzaWRlIGRhdGEKKysgKiBAcGFyYW0gYnVmICAgUG9p bnRlciB0byBBVkJ1ZmZlclJlZiB0byBhZGQgdG8gdGhlIGFycmF5LiBPbiBzdWNjZXNzLAorKyAq ICAgICAgICAgICAgICB0aGUgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBBVkJ1ZmZl clJlZiBhbmQgKmJ1ZiBpcworKyAqICAgICAgICAgICAgICBzZXQgdG8gTlVMTCwgdW5sZXNzIEFW X0ZSQU1FX1NJREVfREFUQV9GTEFHX05FV19SRUYgaXMgc2V0CisrICogICAgICAgICAgICAgIGlu IHdoaWNoIGNhc2UgdGhlIG93bmVyc2hpcCB3aWxsIHJlbWFpbiB3aXRoIHRoZSBjYWxsZXIuCisr ICogQHBhcmFtIGZsYWdzIFNvbWUgY29tYmluYXRpb24gb2YgQVZfRlJBTUVfU0lERV9EQVRBX0ZM QUdfKiBmbGFncywgb3IgMC4KKysgKgorKyAqIEByZXR1cm4gbmV3bHkgYWRkZWQgc2lkZSBkYXRh IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZXJyb3IuCisrICogQG5vdGUgSW4gY2FzZSBvZiBBVl9GUkFN RV9TSURFX0RBVEFfRkxBR19VTklRVUUgYmVpbmcgc2V0LCBlbnRyaWVzIG9mCisrICogICAgICAg bWF0Y2hpbmcgQVZGcmFtZVNpZGVEYXRhVHlwZSB3aWxsIGJlIHJlbW92ZWQgYmVmb3JlIHRoZSBh ZGRpdGlvbgorKyAqICAgICAgIGlzIGF0dGVtcHRlZC4KKysgKiBAbm90ZSBJbiBjYXNlIG9mIEFW X0ZSQU1FX1NJREVfREFUQV9GTEFHX1JFUExBQ0UgYmVpbmcgc2V0LCBpZiBhbgorKyAqICAgICAg IGVudHJ5IG9mIHRoZSBzYW1lIHR5cGUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmVwbGFj ZWQgaW5zdGVhZC4KKysgKgorKyAqLworK0FWRnJhbWVTaWRlRGF0YSAqYXZfZnJhbWVfc2lkZV9k YXRhX2FkZChBVkZyYW1lU2lkZURhdGEgKioqc2QsIGludCAqbmJfc2QsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZGcmFtZVNpZGVEYXRhVHlwZSB0eXBl LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkJ1ZmZlclJlZiAq KmJ1ZiwgdW5zaWduZWQgaW50IGZsYWdzKTsKKysKKysvKioKKysgKiBBZGQgYSBuZXcgc2lkZSBk YXRhIGVudHJ5IHRvIGFuIGFycmF5IGJhc2VkIG9uIGV4aXN0aW5nIHNpZGUgZGF0YSwgdGFraW5n CisrICogYSByZWZlcmVuY2UgdG93YXJkcyB0aGUgY29udGFpbmVkIEFWQnVmZmVyUmVmLgorKyAq CisrICogQHBhcmFtIHNkICAgIHBvaW50ZXIgdG8gYXJyYXkgb2Ygc2lkZSBkYXRhIHRvIHdoaWNo IHRvIGFkZCBhbm90aGVyIGVudHJ5LAorKyAqICAgICAgICAgICAgICBvciB0byBOVUxMIGluIG9y ZGVyIHRvIHN0YXJ0IGEgbmV3IGFycmF5LgorKyAqIEBwYXJhbSBuYl9zZCBwb2ludGVyIHRvIGFu IGludGVnZXIgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4KKysgKiAgICAgICAg ICAgICAgdGhlIGFycmF5LgorKyAqIEBwYXJhbSBzcmMgICBzaWRlIGRhdGEgdG8gYmUgY2xvbmVk LCB3aXRoIGEgbmV3IHJlZmVyZW5jZSB1dGlsaXplZAorKyAqICAgICAgICAgICAgICBmb3IgdGhl IGJ1ZmZlci4KKysgKiBAcGFyYW0gZmxhZ3MgU29tZSBjb21iaW5hdGlvbiBvZiBBVl9GUkFNRV9T SURFX0RBVEFfRkxBR18qIGZsYWdzLCBvciAwLgorKyAqCisrICogQHJldHVybiBuZWdhdGl2ZSBl cnJvciBjb2RlIG9uIGZhaWx1cmUsID49MCBvbiBzdWNjZXNzLgorKyAqIEBub3RlIEluIGNhc2Ug b2YgQVZfRlJBTUVfU0lERV9EQVRBX0ZMQUdfVU5JUVVFIGJlaW5nIHNldCwgZW50cmllcyBvZgor KyAqICAgICAgIG1hdGNoaW5nIEFWRnJhbWVTaWRlRGF0YVR5cGUgd2lsbCBiZSByZW1vdmVkIGJl Zm9yZSB0aGUgYWRkaXRpb24KKysgKiAgICAgICBpcyBhdHRlbXB0ZWQuCisrICogQG5vdGUgSW4g Y2FzZSBvZiBBVl9GUkFNRV9TSURFX0RBVEFfRkxBR19SRVBMQUNFIGJlaW5nIHNldCwgaWYgYW4K KysgKiAgICAgICBlbnRyeSBvZiB0aGUgc2FtZSB0eXBlIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxs IGJlIHJlcGxhY2VkIGluc3RlYWQuCisrICovCisraW50IGF2X2ZyYW1lX3NpZGVfZGF0YV9jbG9u ZShBVkZyYW1lU2lkZURhdGEgKioqc2QsIGludCAqbmJfc2QsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBBVkZyYW1lU2lkZURhdGEgKnNyYywgdW5zaWduZWQgaW50IGZsYWdz KTsKKysKKysvKioKKysgKiBHZXQgYSBzaWRlIGRhdGEgZW50cnkgb2YgYSBzcGVjaWZpYyB0eXBl IGZyb20gYW4gYXJyYXkuCisrICoKKysgKiBAcGFyYW0gc2QgICAgYXJyYXkgb2Ygc2lkZSBkYXRh LgorKyAqIEBwYXJhbSBuYl9zZCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBlbnRy aWVzIGluIHRoZSBhcnJheS4KKysgKiBAcGFyYW0gdHlwZSAgdHlwZSBvZiBzaWRlIGRhdGEgdG8g YmUgcXVlcmllZAorKyAqCisrICogQHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHNpZGUgZGF0YSBv ZiBhIGdpdmVuIHR5cGUgb24gc3VjY2VzcywgTlVMTCBpZiB0aGVyZQorKyAqICAgICAgICAgaXMg bm8gc2lkZSBkYXRhIHdpdGggc3VjaCB0eXBlIGluIHRoaXMgc2V0LgorKyAqLworK2NvbnN0IEFW RnJhbWVTaWRlRGF0YSAqYXZfZnJhbWVfc2lkZV9kYXRhX2dldF9jKGNvbnN0IEFWRnJhbWVTaWRl RGF0YSAqIGNvbnN0ICpzZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBpbnQgbmJfc2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZW51bSBBVkZyYW1lU2lkZURhdGFUeXBlIHR5cGUpOworKwor Ky8qKgorKyAqIFdyYXBwZXIgYXJvdW5kIGF2X2ZyYW1lX3NpZGVfZGF0YV9nZXRfYygpIHRvIHdv cmthcm91bmQgdGhlIGxpbWl0YXRpb24KKysgKiB0aGF0IGZvciBhbnkgdHlwZSBUIHRoZSBjb252 ZXJzaW9uIGZyb20gVCAqIGNvbnN0ICogdG8gY29uc3QgVCAqIGNvbnN0ICoKKysgKiBpcyBub3Qg cGVyZm9ybWVkIGF1dG9tYXRpY2FsbHkgaW4gQy4KKysgKiBAc2VlIGF2X2ZyYW1lX3NpZGVfZGF0 YV9nZXRfYygpCisrICovCisrc3RhdGljIGlubGluZQorK2NvbnN0IEFWRnJhbWVTaWRlRGF0YSAq YXZfZnJhbWVfc2lkZV9kYXRhX2dldChBVkZyYW1lU2lkZURhdGEgKiBjb25zdCAqc2QsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBuYl9z ZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBB VkZyYW1lU2lkZURhdGFUeXBlIHR5cGUpCisreworKyAgICByZXR1cm4gYXZfZnJhbWVfc2lkZV9k YXRhX2dldF9jKChjb25zdCBBVkZyYW1lU2lkZURhdGEgKiBjb25zdCAqKXNkLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX3NkLCB0eXBlKTsKKyt9CisrCisrLyoqCisr ICogUmVtb3ZlIGFuZCBmcmVlIGFsbCBzaWRlIGRhdGEgaW5zdGFuY2VzIG9mIHRoZSBnaXZlbiB0 eXBlIGZyb20gYW4gYXJyYXkuCisrICovCisrdm9pZCBhdl9mcmFtZV9zaWRlX2RhdGFfcmVtb3Zl KEFWRnJhbWVTaWRlRGF0YSAqKipzZCwgaW50ICpuYl9zZCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZW51bSBBVkZyYW1lU2lkZURhdGFUeXBlIHR5cGUpOworKworKy8qKgorKyAq IFJlbW92ZSBhbmQgZnJlZSBhbGwgc2lkZSBkYXRhIGluc3RhbmNlcyB0aGF0IG1hdGNoIGFueSBv ZiB0aGUgZ2l2ZW4KKysgKiBzaWRlIGRhdGEgcHJvcGVydGllcy4gKFNlZSBlbnVtIEFWU2lkZURh dGFQcm9wcykKKysgKi8KKyt2b2lkIGF2X2ZyYW1lX3NpZGVfZGF0YV9yZW1vdmVfYnlfcHJvcHMo QVZGcmFtZVNpZGVEYXRhICoqKnNkLCBpbnQgKm5iX3NkLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgcHJvcHMpOworKworKy8qKgorKyAqIEB9CisrICovCisr CisrI2VuZGlmIC8qIEFWVVRJTF9GUkFNRV9IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQv c3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvaHdjb250 ZXh0LmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBh cnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvaHdjb250ZXh0LmgKKy0tLSBNdXNlU2NvcmUtNC43LjQv c3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvaHdjb250 ZXh0LmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NzE1OTQ1NiArMDIwMAorKysrIE11 c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xp YmF2dXRpbC9od2NvbnRleHQuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NzAzNDkxNSArMDIwMAor QEAgLTAsMCArMSw2MDEgQEAKKysvKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4K KysgKgorKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1wZWcg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGgg RkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQorKyAqLworKworKyNpZm5kZWYgQVZVVElMX0hXQ09OVEVYVF9ICisrI2RlZmlu ZSBBVlVUSUxfSFdDT05URVhUX0gKKysKKysjaW5jbHVkZSAiYnVmZmVyLmgiCisrI2luY2x1ZGUg ImZyYW1lLmgiCisrI2luY2x1ZGUgImxvZy5oIgorKyNpbmNsdWRlICJwaXhmbXQuaCIKKysKKytl bnVtIEFWSFdEZXZpY2VUeXBlIHsKKysgICAgQVZfSFdERVZJQ0VfVFlQRV9OT05FLAorKyAgICBB Vl9IV0RFVklDRV9UWVBFX1ZEUEFVLAorKyAgICBBVl9IV0RFVklDRV9UWVBFX0NVREEsCisrICAg IEFWX0hXREVWSUNFX1RZUEVfVkFBUEksCisrICAgIEFWX0hXREVWSUNFX1RZUEVfRFhWQTIsCisr ICAgIEFWX0hXREVWSUNFX1RZUEVfUVNWLAorKyAgICBBVl9IV0RFVklDRV9UWVBFX1ZJREVPVE9P TEJPWCwKKysgICAgQVZfSFdERVZJQ0VfVFlQRV9EM0QxMVZBLAorKyAgICBBVl9IV0RFVklDRV9U WVBFX0RSTSwKKysgICAgQVZfSFdERVZJQ0VfVFlQRV9PUEVOQ0wsCisrICAgIEFWX0hXREVWSUNF X1RZUEVfTUVESUFDT0RFQywKKysgICAgQVZfSFdERVZJQ0VfVFlQRV9WVUxLQU4sCisrICAgIEFW X0hXREVWSUNFX1RZUEVfRDNEMTJWQSwKKysgICAgQVZfSFdERVZJQ0VfVFlQRV9BTUYsCisrICAg IC8qIE9wZW5IYXJtb255IENvZGVjIGRldmljZSAqLworKyAgICBBVl9IV0RFVklDRV9UWVBFX09I Q09ERUMsCisrfTsKKysKKysvKioKKysgKiBUaGlzIHN0cnVjdCBhZ2dyZWdhdGVzIGFsbCB0aGUg KGhhcmR3YXJlL3ZlbmRvci1zcGVjaWZpYykgImhpZ2gtbGV2ZWwiIHN0YXRlLAorKyAqIGkuZS4g c3RhdGUgdGhhdCBpcyBub3QgdGllZCB0byBhIGNvbmNyZXRlIHByb2Nlc3NpbmcgY29uZmlndXJh dGlvbi4KKysgKiBFLmcuLCBpbiBhbiBBUEkgdGhhdCBzdXBwb3J0cyBoYXJkd2FyZS1hY2NlbGVy YXRlZCBlbmNvZGluZyBhbmQgZGVjb2RpbmcsCisrICogdGhpcyBzdHJ1Y3Qgd2lsbCAoaWYgcG9z c2libGUpIHdyYXAgdGhlIHN0YXRlIHRoYXQgaXMgY29tbW9uIHRvIGJvdGggZW5jb2RpbmcKKysg KiBhbmQgZGVjb2RpbmcgYW5kIGZyb20gd2hpY2ggc3BlY2lmaWMgaW5zdGFuY2VzIG9mIGVuY29k ZXJzIG9yIGRlY29kZXJzIGNhbiBiZQorKyAqIGRlcml2ZWQuCisrICoKKysgKiBUaGlzIHN0cnVj dCBpcyByZWZlcmVuY2UtY291bnRlZCB3aXRoIHRoZSBBVkJ1ZmZlciBtZWNoYW5pc20uIFRoZQor KyAqIGF2X2h3ZGV2aWNlX2N0eF9hbGxvYygpIGNvbnN0cnVjdG9yIHlpZWxkcyBhIHJlZmVyZW5j ZSwgd2hvc2UgZGF0YSBmaWVsZAorKyAqIHBvaW50cyB0byB0aGUgYWN0dWFsIEFWSFdEZXZpY2VD b250ZXh0LiBGdXJ0aGVyIG9iamVjdHMgZGVyaXZlZCBmcm9tCisrICogQVZIV0RldmljZUNvbnRl eHQgKHN1Y2ggYXMgQVZIV0ZyYW1lc0NvbnRleHQsIGRlc2NyaWJpbmcgYSBmcmFtZSBwb29sIHdp dGgKKysgKiBzcGVjaWZpYyBwcm9wZXJ0aWVzKSB3aWxsIGhvbGQgYW4gaW50ZXJuYWwgcmVmZXJl bmNlIHRvIGl0LiBBZnRlciBhbGwgdGhlCisrICogcmVmZXJlbmNlcyBhcmUgcmVsZWFzZWQsIHRo ZSBBVkhXRGV2aWNlQ29udGV4dCBpdHNlbGYgd2lsbCBiZSBmcmVlZCwKKysgKiBvcHRpb25hbGx5 IGludm9raW5nIGEgdXNlci1zcGVjaWZpZWQgY2FsbGJhY2sgZm9yIHVuaW5pdGlhbGl6aW5nIHRo ZSBoYXJkd2FyZQorKyAqIHN0YXRlLgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWSFdEZXZpY2VD b250ZXh0IHsKKysgICAgLyoqCisrICAgICAqIEEgY2xhc3MgZm9yIGxvZ2dpbmcuIFNldCBieSBh dl9od2RldmljZV9jdHhfYWxsb2MoKS4KKysgICAgICovCisrICAgIGNvbnN0IEFWQ2xhc3MgKmF2 X2NsYXNzOworKworKyAgICAvKioKKysgICAgICogVGhpcyBmaWVsZCBpZGVudGlmaWVzIHRoZSB1 bmRlcmx5aW5nIEFQSSB1c2VkIGZvciBoYXJkd2FyZSBhY2Nlc3MuCisrICAgICAqCisrICAgICAq IFRoaXMgZmllbGQgaXMgc2V0IHdoZW4gdGhpcyBzdHJ1Y3QgaXMgYWxsb2NhdGVkIGFuZCBuZXZl ciBjaGFuZ2VkCisrICAgICAqIGFmdGVyd2FyZHMuCisrICAgICAqLworKyAgICBlbnVtIEFWSFdE ZXZpY2VUeXBlIHR5cGU7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGUgZm9ybWF0LXNwZWNpZmlj IGRhdGEsIGFsbG9jYXRlZCBhbmQgZnJlZWQgYnkgbGliYXZ1dGlsIGFsb25nIHdpdGgKKysgICAg ICogdGhpcyBjb250ZXh0LgorKyAgICAgKgorKyAgICAgKiBTaG91bGQgYmUgY2FzdCBieSB0aGUg dXNlciB0byB0aGUgZm9ybWF0LXNwZWNpZmljIGNvbnRleHQgZGVmaW5lZCBpbiB0aGUKKysgICAg ICogY29ycmVzcG9uZGluZyBoZWFkZXIgKGh3Y29udGV4dF8qLmgpIGFuZCBmaWxsZWQgYXMgZGVz Y3JpYmVkIGluIHRoZQorKyAgICAgKiBkb2N1bWVudGF0aW9uIGJlZm9yZSBjYWxsaW5nIGF2X2h3 ZGV2aWNlX2N0eF9pbml0KCkuCisrICAgICAqCisrICAgICAqIEFmdGVyIGNhbGxpbmcgYXZfaHdk ZXZpY2VfY3R4X2luaXQoKSB0aGlzIHN0cnVjdCBzaG91bGQgbm90IGJlIG1vZGlmaWVkCisrICAg ICAqIGJ5IHRoZSBjYWxsZXIuCisrICAgICAqLworKyAgICB2b2lkICpod2N0eDsKKysKKysgICAg LyoqCisrICAgICAqIFRoaXMgZmllbGQgbWF5IGJlIHNldCBieSB0aGUgY2FsbGVyIGJlZm9yZSBj YWxsaW5nIGF2X2h3ZGV2aWNlX2N0eF9pbml0KCkuCisrICAgICAqCisrICAgICAqIElmIG5vbi1O VUxMLCB0aGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGxhc3QgcmVmZXJlbmNl IHRvCisrICAgICAqIHRoaXMgY29udGV4dCBpcyB1bnJlZmVyZW5jZWQsIGltbWVkaWF0ZWx5IGJl Zm9yZSBpdCBpcyBmcmVlZC4KKysgICAgICoKKysgICAgICogQG5vdGUgd2hlbiBvdGhlciBvYmpl Y3RzIChlLmcgYW4gQVZIV0ZyYW1lc0NvbnRleHQpIGFyZSBkZXJpdmVkIGZyb20gdGhpcworKyAg ICAgKiAgICAgICBzdHJ1Y3QsIHRoaXMgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGFmdGVyIGFs bCBzdWNoIGNoaWxkIG9iamVjdHMKKysgICAgICogICAgICAgYXJlIGZ1bGx5IHVuaW5pdGlhbGl6 ZWQgYW5kIHRoZWlyIHJlc3BlY3RpdmUgZGVzdHJ1Y3RvcnMgaW52b2tlZC4KKysgICAgICovCisr ICAgIHZvaWQgKCpmcmVlKShzdHJ1Y3QgQVZIV0RldmljZUNvbnRleHQgKmN0eCk7CisrCisrICAg IC8qKgorKyAgICAgKiBBcmJpdHJhcnkgdXNlciBkYXRhLCB0byBiZSB1c2VkIGUuZy4gYnkgdGhl IGZyZWUoKSBjYWxsYmFjay4KKysgICAgICovCisrICAgIHZvaWQgKnVzZXJfb3BhcXVlOworK30g QVZIV0RldmljZUNvbnRleHQ7CisrCisrLyoqCisrICogVGhpcyBzdHJ1Y3QgZGVzY3JpYmVzIGEg c2V0IG9yIHBvb2wgb2YgImhhcmR3YXJlIiBmcmFtZXMgKGkuZS4gdGhvc2Ugd2l0aAorKyAqIGRh dGEgbm90IGxvY2F0ZWQgaW4gbm9ybWFsIHN5c3RlbSBtZW1vcnkpLiBBbGwgdGhlIGZyYW1lcyBp biB0aGUgcG9vbCBhcmUKKysgKiBhc3N1bWVkIHRvIGJlIGFsbG9jYXRlZCBpbiB0aGUgc2FtZSB3 YXkgYW5kIGludGVyY2hhbmdlYWJsZS4KKysgKgorKyAqIFRoaXMgc3RydWN0IGlzIHJlZmVyZW5j ZS1jb3VudGVkIHdpdGggdGhlIEFWQnVmZmVyIG1lY2hhbmlzbSBhbmQgdGllZCB0byBhCisrICog Z2l2ZW4gQVZIV0RldmljZUNvbnRleHQgaW5zdGFuY2UuIFRoZSBhdl9od2ZyYW1lX2N0eF9hbGxv YygpIGNvbnN0cnVjdG9yCisrICogeWllbGRzIGEgcmVmZXJlbmNlLCB3aG9zZSBkYXRhIGZpZWxk IHBvaW50cyB0byB0aGUgYWN0dWFsIEFWSFdGcmFtZXNDb250ZXh0CisrICogc3RydWN0LgorKyAq LworK3R5cGVkZWYgc3RydWN0IEFWSFdGcmFtZXNDb250ZXh0IHsKKysgICAgLyoqCisrICAgICAq IEEgY2xhc3MgZm9yIGxvZ2dpbmcuCisrICAgICAqLworKyAgICBjb25zdCBBVkNsYXNzICphdl9j bGFzczsKKysKKysgICAgLyoqCisrICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgQVZI V0RldmljZUNvbnRleHQuIFRoaXMgcmVmZXJlbmNlIGlzIG93bmVkIGFuZAorKyAgICAgKiBtYW5h Z2VkIGJ5IHRoZSBlbmNsb3NpbmcgQVZIV0ZyYW1lc0NvbnRleHQsIGJ1dCB0aGUgY2FsbGVyIG1h eSBkZXJpdmUKKysgICAgICogYWRkaXRpb25hbCByZWZlcmVuY2VzIGZyb20gaXQuCisrICAgICAq LworKyAgICBBVkJ1ZmZlclJlZiAqZGV2aWNlX3JlZjsKKysKKysgICAgLyoqCisrICAgICAqIFRo ZSBwYXJlbnQgQVZIV0RldmljZUNvbnRleHQuIFRoaXMgaXMgc2ltcGx5IGEgcG9pbnRlciB0bwor KyAgICAgKiBkZXZpY2VfcmVmLT5kYXRhIHByb3ZpZGVkIGZvciBjb252ZW5pZW5jZS4KKysgICAg ICoKKysgICAgICogU2V0IGJ5IGxpYmF2dXRpbCBpbiBhdl9od2ZyYW1lX2N0eF9pbml0KCkuCisr ICAgICAqLworKyAgICBBVkhXRGV2aWNlQ29udGV4dCAqZGV2aWNlX2N0eDsKKysKKysgICAgLyoq CisrICAgICAqIFRoZSBmb3JtYXQtc3BlY2lmaWMgZGF0YSwgYWxsb2NhdGVkIGFuZCBmcmVlZCBh dXRvbWF0aWNhbGx5IGFsb25nIHdpdGgKKysgICAgICogdGhpcyBjb250ZXh0LgorKyAgICAgKgor KyAgICAgKiBUaGUgdXNlciBzaGFsbCBpZ25vcmUgdGhpcyBmaWVsZCBpZiB0aGUgY29ycmVzcG9u ZGluZyBmb3JtYXQtc3BlY2lmaWMKKysgICAgICogaGVhZGVyIChod2NvbnRleHRfKi5oKSBkb2Vz IG5vdCBkZWZpbmUgYSBjb250ZXh0IHRvIGJlIHVzZWQgYXMKKysgICAgICogQVZIV0ZyYW1lc0Nv bnRleHQuaHdjdHguCisrICAgICAqCisrICAgICAqIE90aGVyd2lzZSwgaXQgc2hvdWxkIGJlIGNh c3QgYnkgdGhlIHVzZXIgdG8gc2FpZCBjb250ZXh0IGFuZCBmaWxsZWQKKysgICAgICogYXMgZGVz Y3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGJlZm9yZSBjYWxsaW5nIGF2X2h3ZnJhbWVfY3R4 X2luaXQoKS4KKysgICAgICoKKysgICAgICogQWZ0ZXIgYW55IGZyYW1lcyB1c2luZyB0aGlzIGNv bnRleHQgYXJlIGNyZWF0ZWQsIHRoZSBjb250ZW50cyBvZiB0aGlzCisrICAgICAqIHN0cnVjdCBz aG91bGQgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBjYWxsZXIuCisrICAgICAqLworKyAgICB2b2lk ICpod2N0eDsKKysKKysgICAgLyoqCisrICAgICAqIFRoaXMgZmllbGQgbWF5IGJlIHNldCBieSB0 aGUgY2FsbGVyIGJlZm9yZSBjYWxsaW5nIGF2X2h3ZnJhbWVfY3R4X2luaXQoKS4KKysgICAgICoK KysgICAgICogSWYgbm9uLU5VTEwsIHRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2hlbiB0 aGUgbGFzdCByZWZlcmVuY2UgdG8KKysgICAgICogdGhpcyBjb250ZXh0IGlzIHVucmVmZXJlbmNl ZCwgaW1tZWRpYXRlbHkgYmVmb3JlIGl0IGlzIGZyZWVkLgorKyAgICAgKi8KKysgICAgdm9pZCAo KmZyZWUpKHN0cnVjdCBBVkhXRnJhbWVzQ29udGV4dCAqY3R4KTsKKysKKysgICAgLyoqCisrICAg ICAqIEFyYml0cmFyeSB1c2VyIGRhdGEsIHRvIGJlIHVzZWQgZS5nLiBieSB0aGUgZnJlZSgpIGNh bGxiYWNrLgorKyAgICAgKi8KKysgICAgdm9pZCAqdXNlcl9vcGFxdWU7CisrCisrICAgIC8qKgor KyAgICAgKiBBIHBvb2wgZnJvbSB3aGljaCB0aGUgZnJhbWVzIGFyZSBhbGxvY2F0ZWQgYnkgYXZf aHdmcmFtZV9nZXRfYnVmZmVyKCkuCisrICAgICAqIFRoaXMgZmllbGQgbWF5IGJlIHNldCBieSB0 aGUgY2FsbGVyIGJlZm9yZSBjYWxsaW5nIGF2X2h3ZnJhbWVfY3R4X2luaXQoKS4KKysgICAgICog VGhlIGJ1ZmZlcnMgcmV0dXJuZWQgYnkgY2FsbGluZyBhdl9idWZmZXJfcG9vbF9nZXQoKSBvbiB0 aGlzIHBvb2wgbXVzdAorKyAgICAgKiBoYXZlIHRoZSBwcm9wZXJ0aWVzIGRlc2NyaWJlZCBpbiB0 aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgY29ycmVzcG9uZGluZyBodworKyAgICAgKiB0eXBlJ3Mg aGVhZGVyIChod2NvbnRleHRfKi5oKS4gVGhlIHBvb2wgd2lsbCBiZSBmcmVlZCBzdHJpY3RseSBi ZWZvcmUKKysgICAgICogdGhpcyBzdHJ1Y3QncyBmcmVlKCkgY2FsbGJhY2sgaXMgaW52b2tlZC4K KysgICAgICoKKysgICAgICogVGhpcyBmaWVsZCBtYXkgYmUgTlVMTCwgdGhlbiBsaWJhdnV0aWwg d2lsbCBhdHRlbXB0IHRvIGFsbG9jYXRlIGEgcG9vbAorKyAgICAgKiBpbnRlcm5hbGx5LiBOb3Rl IHRoYXQgY2VydGFpbiBkZXZpY2UgdHlwZXMgZW5mb3JjZSBwb29scyBhbGxvY2F0ZWQgYXQKKysg ICAgICogZml4ZWQgc2l6ZSAoZnJhbWUgY291bnQpLCB3aGljaCBjYW5ub3QgYmUgZXh0ZW5kZWQg ZHluYW1pY2FsbHkuIEluIHN1Y2ggYQorKyAgICAgKiBjYXNlLCBpbml0aWFsX3Bvb2xfc2l6ZSBt dXN0IGJlIHNldCBhcHByb3ByaWF0ZWx5LgorKyAgICAgKi8KKysgICAgQVZCdWZmZXJQb29sICpw b29sOworKworKyAgICAvKioKKysgICAgICogSW5pdGlhbCBzaXplIG9mIHRoZSBmcmFtZSBwb29s LiBJZiBhIGRldmljZSB0eXBlIGRvZXMgbm90IHN1cHBvcnQKKysgICAgICogZHluYW1pY2FsbHkg cmVzaXppbmcgdGhlIHBvb2wsIHRoZW4gdGhpcyBpcyBhbHNvIHRoZSBtYXhpbXVtIHBvb2wgc2l6 ZS4KKysgICAgICoKKysgICAgICogTWF5IGJlIHNldCBieSB0aGUgY2FsbGVyIGJlZm9yZSBjYWxs aW5nIGF2X2h3ZnJhbWVfY3R4X2luaXQoKS4gTXVzdCBiZQorKyAgICAgKiBzZXQgaWYgcG9vbCBp cyBOVUxMIGFuZCB0aGUgZGV2aWNlIHR5cGUgZG9lcyBub3Qgc3VwcG9ydCBkeW5hbWljIHBvb2xz LgorKyAgICAgKi8KKysgICAgaW50IGluaXRpYWxfcG9vbF9zaXplOworKworKyAgICAvKioKKysg ICAgICogVGhlIHBpeGVsIGZvcm1hdCBpZGVudGlmeWluZyB0aGUgdW5kZXJseWluZyBIVyBzdXJm YWNlIHR5cGUuCisrICAgICAqCisrICAgICAqIE11c3QgYmUgYSBod2FjY2VsIGZvcm1hdCwgaS5l LiB0aGUgY29ycmVzcG9uZGluZyBkZXNjcmlwdG9yIG11c3QgaGF2ZSB0aGUKKysgICAgICogQVZf UElYX0ZNVF9GTEFHX0hXQUNDRUwgZmxhZyBzZXQuCisrICAgICAqCisrICAgICAqIE11c3QgYmUg c2V0IGJ5IHRoZSB1c2VyIGJlZm9yZSBjYWxsaW5nIGF2X2h3ZnJhbWVfY3R4X2luaXQoKS4KKysg ICAgICovCisrICAgIGVudW0gQVZQaXhlbEZvcm1hdCBmb3JtYXQ7CisrCisrICAgIC8qKgorKyAg ICAgKiBUaGUgcGl4ZWwgZm9ybWF0IGlkZW50aWZ5aW5nIHRoZSBhY3R1YWwgZGF0YSBsYXlvdXQg b2YgdGhlIGhhcmR3YXJlCisrICAgICAqIGZyYW1lcy4KKysgICAgICoKKysgICAgICogTXVzdCBi ZSBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgY2FsbGluZyBhdl9od2ZyYW1lX2N0eF9pbml0KCku CisrICAgICAqCisrICAgICAqIEBub3RlIHdoZW4gdGhlIHVuZGVybHlpbmcgQVBJIGRvZXMgbm90 IHByb3ZpZGUgdGhlIGV4YWN0IGRhdGEgbGF5b3V0LCBidXQKKysgICAgICogb25seSB0aGUgY29s b3JzcGFjZS9iaXQgZGVwdGgsIHRoaXMgZmllbGQgc2hvdWxkIGJlIHNldCB0byB0aGUgZnVsbHkK KysgICAgICogcGxhbmFyIHZlcnNpb24gb2YgdGhhdCBmb3JtYXQgKGUuZy4gZm9yIDgtYml0IDQy MCBZVVYgaXQgc2hvdWxkIGJlCisrICAgICAqIEFWX1BJWF9GTVRfWVVWNDIwUCwgbm90IEFWX1BJ WF9GTVRfTlYxMiBvciBhbnl0aGluZyBlbHNlKS4KKysgICAgICovCisrICAgIGVudW0gQVZQaXhl bEZvcm1hdCBzd19mb3JtYXQ7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGUgYWxsb2NhdGVkIGRp bWVuc2lvbnMgb2YgdGhlIGZyYW1lcyBpbiB0aGlzIHBvb2wuCisrICAgICAqCisrICAgICAqIE11 c3QgYmUgc2V0IGJ5IHRoZSB1c2VyIGJlZm9yZSBjYWxsaW5nIGF2X2h3ZnJhbWVfY3R4X2luaXQo KS4KKysgICAgICovCisrICAgIGludCB3aWR0aCwgaGVpZ2h0OworK30gQVZIV0ZyYW1lc0NvbnRl eHQ7CisrCisrLyoqCisrICogTG9vayB1cCBhbiBBVkhXRGV2aWNlVHlwZSBieSBuYW1lLgorKyAq CisrICogQHBhcmFtIG5hbWUgU3RyaW5nIG5hbWUgb2YgdGhlIGRldmljZSB0eXBlIChjYXNlLWlu c2Vuc2l0aXZlKS4KKysgKiBAcmV0dXJuIFRoZSB0eXBlIGZyb20gZW51bSBBVkhXRGV2aWNlVHlw ZSwgb3IgQVZfSFdERVZJQ0VfVFlQRV9OT05FIGlmCisrICogICAgICAgICBub3QgZm91bmQuCisr ICovCisrZW51bSBBVkhXRGV2aWNlVHlwZSBhdl9od2RldmljZV9maW5kX3R5cGVfYnlfbmFtZShj b25zdCBjaGFyICpuYW1lKTsKKysKKysvKiogR2V0IHRoZSBzdHJpbmcgbmFtZSBvZiBhbiBBVkhX RGV2aWNlVHlwZS4KKysgKgorKyAqIEBwYXJhbSB0eXBlIFR5cGUgZnJvbSBlbnVtIEFWSFdEZXZp Y2VUeXBlLgorKyAqIEByZXR1cm4gUG9pbnRlciB0byBhIHN0YXRpYyBzdHJpbmcgY29udGFpbmlu ZyB0aGUgbmFtZSwgb3IgTlVMTCBpZiB0aGUgdHlwZQorKyAqICAgICAgICAgaXMgbm90IHZhbGlk LgorKyAqLworK2NvbnN0IGNoYXIgKmF2X2h3ZGV2aWNlX2dldF90eXBlX25hbWUoZW51bSBBVkhX RGV2aWNlVHlwZSB0eXBlKTsKKysKKysvKioKKysgKiBJdGVyYXRlIG92ZXIgc3VwcG9ydGVkIGRl dmljZSB0eXBlcy4KKysgKgorKyAqIEBwYXJhbSBwcmV2IEFWX0hXREVWSUNFX1RZUEVfTk9ORSBp bml0aWFsbHksIHRoZW4gdGhlIHByZXZpb3VzIHR5cGUKKysgKiAgICAgICAgICAgICByZXR1cm5l ZCBieSB0aGlzIGZ1bmN0aW9uIGluIHN1YnNlcXVlbnQgaXRlcmF0aW9ucy4KKysgKiBAcmV0dXJu IFRoZSBuZXh0IHVzYWJsZSBkZXZpY2UgdHlwZSBmcm9tIGVudW0gQVZIV0RldmljZVR5cGUsIG9y CisrICogICAgICAgICBBVl9IV0RFVklDRV9UWVBFX05PTkUgaWYgdGhlcmUgYXJlIG5vIG1vcmUu CisrICovCisrZW51bSBBVkhXRGV2aWNlVHlwZSBhdl9od2RldmljZV9pdGVyYXRlX3R5cGVzKGVu dW0gQVZIV0RldmljZVR5cGUgcHJldik7CisrCisrLyoqCisrICogQWxsb2NhdGUgYW4gQVZIV0Rl dmljZUNvbnRleHQgZm9yIGEgZ2l2ZW4gaGFyZHdhcmUgdHlwZS4KKysgKgorKyAqIEBwYXJhbSB0 eXBlIHRoZSB0eXBlIG9mIHRoZSBoYXJkd2FyZSBkZXZpY2UgdG8gYWxsb2NhdGUuCisrICogQHJl dHVybiBhIHJlZmVyZW5jZSB0byB0aGUgbmV3bHkgY3JlYXRlZCBBVkhXRGV2aWNlQ29udGV4dCBv biBzdWNjZXNzIG9yIE5VTEwKKysgKiAgICAgICAgIG9uIGZhaWx1cmUuCisrICovCisrQVZCdWZm ZXJSZWYgKmF2X2h3ZGV2aWNlX2N0eF9hbGxvYyhlbnVtIEFWSFdEZXZpY2VUeXBlIHR5cGUpOwor KworKy8qKgorKyAqIEZpbmFsaXplIHRoZSBkZXZpY2UgY29udGV4dCBiZWZvcmUgdXNlLiBUaGlz IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyCisrICogdGhlIGNvbnRleHQgaXMgZmlsbGVk IHdpdGggYWxsIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbiBhbmQgYmVmb3JlIGl0IGlzCisrICog dXNlZCBpbiBhbnkgd2F5LgorKyAqCisrICogQHBhcmFtIHJlZiBhIHJlZmVyZW5jZSB0byB0aGUg QVZIV0RldmljZUNvbnRleHQKKysgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBB VkVSUk9SIGNvZGUgb24gZmFpbHVyZQorKyAqLworK2ludCBhdl9od2RldmljZV9jdHhfaW5pdChB VkJ1ZmZlclJlZiAqcmVmKTsKKysKKysvKioKKysgKiBPcGVuIGEgZGV2aWNlIG9mIHRoZSBzcGVj aWZpZWQgdHlwZSBhbmQgY3JlYXRlIGFuIEFWSFdEZXZpY2VDb250ZXh0IGZvciBpdC4KKysgKgor KyAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBpbnRlbmRlZCB0byBjb3ZlciB0aGUg c2ltcGxlIGNhc2VzLiBDYWxsZXJzCisrICogd2hvIG5lZWQgdG8gZmluZS10dW5lIGRldmljZSBj cmVhdGlvbi9tYW5hZ2VtZW50IHNob3VsZCBvcGVuIHRoZSBkZXZpY2UKKysgKiBtYW51YWxseSBh bmQgdGhlbiB3cmFwIGl0IGluIGFuIEFWSFdEZXZpY2VDb250ZXh0IHVzaW5nCisrICogYXZfaHdk ZXZpY2VfY3R4X2FsbG9jKCkvYXZfaHdkZXZpY2VfY3R4X2luaXQoKS4KKysgKgorKyAqIFRoZSBy ZXR1cm5lZCBjb250ZXh0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYW5kIHJlYWR5IGZvciB1c2Us IHRoZSBjYWxsZXIKKysgKiBzaG91bGQgbm90IGNhbGwgYXZfaHdkZXZpY2VfY3R4X2luaXQoKSBv biBpdC4gVGhlIHVzZXJfb3BhcXVlL2ZyZWUgZmllbGRzIG9mCisrICogdGhlIGNyZWF0ZWQgQVZI V0RldmljZUNvbnRleHQgYXJlIHNldCBieSB0aGlzIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJl CisrICogdG91Y2hlZCBieSB0aGUgY2FsbGVyLgorKyAqCisrICogQHBhcmFtIGRldmljZV9jdHgg T24gc3VjY2VzcywgYSByZWZlcmVuY2UgdG8gdGhlIG5ld2x5LWNyZWF0ZWQgZGV2aWNlIGNvbnRl eHQKKysgKiAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHdyaXR0ZW4gaGVyZS4gVGhlIHJlZmVy ZW5jZSBpcyBvd25lZCBieSB0aGUgY2FsbGVyCisrICogICAgICAgICAgICAgICAgICAgYW5kIG11 c3QgYmUgcmVsZWFzZWQgd2l0aCBhdl9idWZmZXJfdW5yZWYoKSB3aGVuIG5vIGxvbmdlcgorKyAq ICAgICAgICAgICAgICAgICAgIG5lZWRlZC4gT24gZmFpbHVyZSwgTlVMTCB3aWxsIGJlIHdyaXR0 ZW4gdG8gdGhpcyBwb2ludGVyLgorKyAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBkZXZp Y2UgdG8gY3JlYXRlLgorKyAqIEBwYXJhbSBkZXZpY2UgQSB0eXBlLXNwZWNpZmljIHN0cmluZyBp ZGVudGlmeWluZyB0aGUgZGV2aWNlIHRvIG9wZW4uCisrICogQHBhcmFtIG9wdHMgQSBkaWN0aW9u YXJ5IG9mIGFkZGl0aW9uYWwgKHR5cGUtc3BlY2lmaWMpIG9wdGlvbnMgdG8gdXNlIGluCisrICog ICAgICAgICAgICAgb3BlbmluZyB0aGUgZGV2aWNlLiBUaGUgZGljdGlvbmFyeSByZW1haW5zIG93 bmVkIGJ5IHRoZSBjYWxsZXIuCisrICogQHBhcmFtIGZsYWdzIGN1cnJlbnRseSB1bnVzZWQKKysg KgorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBvbiBm YWlsdXJlLgorKyAqLworK2ludCBhdl9od2RldmljZV9jdHhfY3JlYXRlKEFWQnVmZmVyUmVmICoq ZGV2aWNlX2N0eCwgZW51bSBBVkhXRGV2aWNlVHlwZSB0eXBlLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmRldmljZSwgQVZEaWN0aW9uYXJ5ICpvcHRzLCBpbnQgZmxh Z3MpOworKworKy8qKgorKyAqIENyZWF0ZSBhIG5ldyBkZXZpY2Ugb2YgdGhlIHNwZWNpZmllZCB0 eXBlIGZyb20gYW4gZXhpc3RpbmcgZGV2aWNlLgorKyAqCisrICogSWYgdGhlIHNvdXJjZSBkZXZp Y2UgaXMgYSBkZXZpY2Ugb2YgdGhlIHRhcmdldCB0eXBlIG9yIHdhcyBvcmlnaW5hbGx5CisrICog ZGVyaXZlZCBmcm9tIHN1Y2ggYSBkZXZpY2UgKHBvc3NpYmx5IHRocm91Z2ggb25lIG9yIG1vcmUg aW50ZXJtZWRpYXRlCisrICogZGV2aWNlcyBvZiBvdGhlciB0eXBlcyksIHRoZW4gdGhpcyB3aWxs IHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUKKysgKiBleGlzdGluZyBkZXZpY2Ugb2YgdGhlIHNh bWUgdHlwZSBhcyBpcyByZXF1ZXN0ZWQuCisrICoKKysgKiBPdGhlcndpc2UsIGl0IHdpbGwgYXR0 ZW1wdCB0byBkZXJpdmUgYSBuZXcgZGV2aWNlIGZyb20gdGhlIGdpdmVuIHNvdXJjZQorKyAqIGRl dmljZS4gIElmIGRpcmVjdCBkZXJpdmF0aW9uIHRvIHRoZSBuZXcgdHlwZSBpcyBub3QgaW1wbGVt ZW50ZWQsIGl0IHdpbGwKKysgKiBhdHRlbXB0IHRoZSBzYW1lIGRlcml2YXRpb24gZnJvbSBlYWNo IGFuY2VzdG9yIG9mIHRoZSBzb3VyY2UgZGV2aWNlIGluCisrICogdHVybiBsb29raW5nIGZvciBh biBpbXBsZW1lbnRlZCBkZXJpdmF0aW9uIG1ldGhvZC4KKysgKgorKyAqIEBwYXJhbSBkc3RfY3R4 IE9uIHN1Y2Nlc3MsIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseS1jcmVhdGVkCisrICogICAgICAg ICAgICAgICAgQVZIV0RldmljZUNvbnRleHQuCisrICogQHBhcmFtIHR5cGUgICAgVGhlIHR5cGUg b2YgdGhlIG5ldyBkZXZpY2UgdG8gY3JlYXRlLgorKyAqIEBwYXJhbSBzcmNfY3R4IEEgcmVmZXJl bmNlIHRvIGFuIGV4aXN0aW5nIEFWSFdEZXZpY2VDb250ZXh0IHdoaWNoIHdpbGwgYmUKKysgKiAg ICAgICAgICAgICAgICB1c2VkIHRvIGNyZWF0ZSB0aGUgbmV3IGRldmljZS4KKysgKiBAcGFyYW0g ZmxhZ3MgICBDdXJyZW50bHkgdW51c2VkOyBzaG91bGQgYmUgc2V0IHRvIHplcm8uCisrICogQHJl dHVybiAgICAgICAgWmVybyBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBvbiBm YWlsdXJlLgorKyAqLworK2ludCBhdl9od2RldmljZV9jdHhfY3JlYXRlX2Rlcml2ZWQoQVZCdWZm ZXJSZWYgKipkc3RfY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51 bSBBVkhXRGV2aWNlVHlwZSB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQVZCdWZmZXJSZWYgKnNyY19jdHgsIGludCBmbGFncyk7CisrCisrLyoqCisrICogQ3JlYXRl IGEgbmV3IGRldmljZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgZnJvbSBhbiBleGlzdGluZyBkZXZp Y2UuCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBzYW1lIGFjdGlvbiBhcyBh dl9od2RldmljZV9jdHhfY3JlYXRlX2Rlcml2ZWQsCisrICogaG93ZXZlciwgaXQgaXMgYWJsZSB0 byBzZXQgb3B0aW9ucyBmb3IgdGhlIG5ldyBkZXZpY2UgdG8gYmUgZGVyaXZlZC4KKysgKgorKyAq IEBwYXJhbSBkc3RfY3R4IE9uIHN1Y2Nlc3MsIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseS1jcmVh dGVkCisrICogICAgICAgICAgICAgICAgQVZIV0RldmljZUNvbnRleHQuCisrICogQHBhcmFtIHR5 cGUgICAgVGhlIHR5cGUgb2YgdGhlIG5ldyBkZXZpY2UgdG8gY3JlYXRlLgorKyAqIEBwYXJhbSBz cmNfY3R4IEEgcmVmZXJlbmNlIHRvIGFuIGV4aXN0aW5nIEFWSFdEZXZpY2VDb250ZXh0IHdoaWNo IHdpbGwgYmUKKysgKiAgICAgICAgICAgICAgICB1c2VkIHRvIGNyZWF0ZSB0aGUgbmV3IGRldmlj ZS4KKysgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgbmV3IGRldmljZSB0byBjcmVh dGUsIHNhbWUgZm9ybWF0IGFzIGluCisrICogICAgICAgICAgICAgICAgYXZfaHdkZXZpY2VfY3R4 X2NyZWF0ZS4KKysgKiBAcGFyYW0gZmxhZ3MgICBDdXJyZW50bHkgdW51c2VkOyBzaG91bGQgYmUg c2V0IHRvIHplcm8uCisrICogQHJldHVybiAgICAgICAgWmVybyBvbiBzdWNjZXNzLCBhIG5lZ2F0 aXZlIEFWRVJST1IgY29kZSBvbiBmYWlsdXJlLgorKyAqLworK2ludCBhdl9od2RldmljZV9jdHhf Y3JlYXRlX2Rlcml2ZWRfb3B0cyhBVkJ1ZmZlclJlZiAqKmRzdF9jdHgsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZIV0RldmljZVR5cGUgdHlwZSwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZCdWZmZXJSZWYgKnNyY19j dHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRGljdGlvbmFy eSAqb3B0aW9ucywgaW50IGZsYWdzKTsKKysKKysvKioKKysgKiBBbGxvY2F0ZSBhbiBBVkhXRnJh bWVzQ29udGV4dCB0aWVkIHRvIGEgZ2l2ZW4gZGV2aWNlIGNvbnRleHQuCisrICoKKysgKiBAcGFy YW0gZGV2aWNlX2N0eCBhIHJlZmVyZW5jZSB0byBhIEFWSFdEZXZpY2VDb250ZXh0LiBUaGlzIGZ1 bmN0aW9uIHdpbGwgbWFrZQorKyAqICAgICAgICAgICAgICAgICAgIGEgbmV3IHJlZmVyZW5jZSBm b3IgaW50ZXJuYWwgdXNlLCB0aGUgb25lIHBhc3NlZCB0byB0aGUKKysgKiAgICAgICAgICAgICAg ICAgICBmdW5jdGlvbiByZW1haW5zIG93bmVkIGJ5IHRoZSBjYWxsZXIuCisrICogQHJldHVybiBh IHJlZmVyZW5jZSB0byB0aGUgbmV3bHkgY3JlYXRlZCBBVkhXRnJhbWVzQ29udGV4dCBvbiBzdWNj ZXNzIG9yIE5VTEwKKysgKiAgICAgICAgIG9uIGZhaWx1cmUuCisrICovCisrQVZCdWZmZXJSZWYg KmF2X2h3ZnJhbWVfY3R4X2FsbG9jKEFWQnVmZmVyUmVmICpkZXZpY2VfY3R4KTsKKysKKysvKioK KysgKiBGaW5hbGl6ZSB0aGUgY29udGV4dCBiZWZvcmUgdXNlLiBUaGlzIGZ1bmN0aW9uIG11c3Qg YmUgY2FsbGVkIGFmdGVyIHRoZQorKyAqIGNvbnRleHQgaXMgZmlsbGVkIHdpdGggYWxsIHRoZSBy ZXF1aXJlZCBpbmZvcm1hdGlvbiBhbmQgYmVmb3JlIGl0IGlzIGF0dGFjaGVkCisrICogdG8gYW55 IGZyYW1lcy4KKysgKgorKyAqIEBwYXJhbSByZWYgYSByZWZlcmVuY2UgdG8gdGhlIEFWSFdGcmFt ZXNDb250ZXh0CisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBj b2RlIG9uIGZhaWx1cmUKKysgKi8KKytpbnQgYXZfaHdmcmFtZV9jdHhfaW5pdChBVkJ1ZmZlclJl ZiAqcmVmKTsKKysKKysvKioKKysgKiBBbGxvY2F0ZSBhIG5ldyBmcmFtZSBhdHRhY2hlZCB0byB0 aGUgZ2l2ZW4gQVZIV0ZyYW1lc0NvbnRleHQuCisrICoKKysgKiBAcGFyYW0gaHdmcmFtZV9jdHgg YSByZWZlcmVuY2UgdG8gYW4gQVZIV0ZyYW1lc0NvbnRleHQKKysgKiBAcGFyYW0gZnJhbWUgYW4g ZW1wdHkgKGZyZXNobHkgYWxsb2NhdGVkIG9yIHVucmVmZmVkKSBmcmFtZSB0byBiZSBmaWxsZWQg d2l0aAorKyAqICAgICAgICAgICAgICBuZXdseSBhbGxvY2F0ZWQgYnVmZmVycy4KKysgKiBAcGFy YW0gZmxhZ3MgY3VycmVudGx5IHVudXNlZCwgc2hvdWxkIGJlIHNldCB0byB6ZXJvCisrICogQHJl dHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBjb2RlIG9uIGZhaWx1cmUKKysg Ki8KKytpbnQgYXZfaHdmcmFtZV9nZXRfYnVmZmVyKEFWQnVmZmVyUmVmICpod2ZyYW1lX2N0eCwg QVZGcmFtZSAqZnJhbWUsIGludCBmbGFncyk7CisrCisrLyoqCisrICogQ29weSBkYXRhIHRvIG9y IGZyb20gYSBodyBzdXJmYWNlLiBBdCBsZWFzdCBvbmUgb2YgZHN0L3NyYyBtdXN0IGhhdmUgYW4K KysgKiBBVkhXRnJhbWVzQ29udGV4dCBhdHRhY2hlZC4KKysgKgorKyAqIElmIHNyYyBoYXMgYW4g QVZIV0ZyYW1lc0NvbnRleHQgYXR0YWNoZWQsIHRoZW4gdGhlIGZvcm1hdCBvZiBkc3QgKGlmIHNl dCkKKysgKiBtdXN0IHVzZSBvbmUgb2YgdGhlIGZvcm1hdHMgcmV0dXJuZWQgYnkgYXZfaHdmcmFt ZV90cmFuc2Zlcl9nZXRfZm9ybWF0cyhzcmMsCisrICogQVZfSFdGUkFNRV9UUkFOU0ZFUl9ESVJF Q1RJT05fRlJPTSkuCisrICogSWYgZHN0IGhhcyBhbiBBVkhXRnJhbWVzQ29udGV4dCBhdHRhY2hl ZCwgdGhlbiB0aGUgZm9ybWF0IG9mIHNyYyBtdXN0IHVzZSBvbmUKKysgKiBvZiB0aGUgZm9ybWF0 cyByZXR1cm5lZCBieSBhdl9od2ZyYW1lX3RyYW5zZmVyX2dldF9mb3JtYXRzKGRzdCwKKysgKiBB Vl9IV0ZSQU1FX1RSQU5TRkVSX0RJUkVDVElPTl9UTykKKysgKgorKyAqIGRzdCBtYXkgYmUgImNs ZWFuIiAoaS5lLiB3aXRoIGRhdGEvYnVmIHBvaW50ZXJzIHVuc2V0KSwgaW4gd2hpY2ggY2FzZSB0 aGUKKysgKiBkYXRhIGJ1ZmZlcnMgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhpcyBmdW5jdGlvbiB1 c2luZyBhdl9mcmFtZV9nZXRfYnVmZmVyKCkuCisrICogSWYgZHN0LT5mb3JtYXQgaXMgc2V0LCB0 aGVuIHRoaXMgZm9ybWF0IHdpbGwgYmUgdXNlZCwgb3RoZXJ3aXNlICh3aGVuCisrICogZHN0LT5m b3JtYXQgaXMgQVZfUElYX0ZNVF9OT05FKSB0aGUgZmlyc3QgYWNjZXB0YWJsZSBmb3JtYXQgd2ls bCBiZSBjaG9zZW4uCisrICoKKysgKiBUaGUgdHdvIGZyYW1lcyBtdXN0IGhhdmUgbWF0Y2hpbmcg YWxsb2NhdGVkIGRpbWVuc2lvbnMgKGkuZS4gZXF1YWwgdG8KKysgKiBBVkhXRnJhbWVzQ29udGV4 dC53aWR0aC9oZWlnaHQpLCBzaW5jZSBub3QgYWxsIGRldmljZSB0eXBlcyBzdXBwb3J0CisrICog dHJhbnNmZXJyaW5nIGEgc3ViLXJlY3RhbmdsZSBvZiB0aGUgd2hvbGUgc3VyZmFjZS4gVGhlIGRp c3BsYXkgZGltZW5zaW9ucworKyAqIChpLmUuIEFWRnJhbWUud2lkdGgvaGVpZ2h0KSBtYXkgYmUg c21hbGxlciB0aGFuIHRoZSBhbGxvY2F0ZWQgZGltZW5zaW9ucywgYnV0CisrICogYWxzbyBoYXZl IHRvIGJlIGVxdWFsIGZvciBib3RoIGZyYW1lcy4gV2hlbiB0aGUgZGlzcGxheSBkaW1lbnNpb25z IGFyZQorKyAqIHNtYWxsZXIgdGhhbiB0aGUgYWxsb2NhdGVkIGRpbWVuc2lvbnMsIHRoZSBjb250 ZW50IG9mIHRoZSBwYWRkaW5nIGluIHRoZQorKyAqIGRlc3RpbmF0aW9uIGZyYW1lIGlzIHVuc3Bl Y2lmaWVkLgorKyAqCisrICogQHBhcmFtIGRzdCB0aGUgZGVzdGluYXRpb24gZnJhbWUuIGRzdCBp cyBub3QgdG91Y2hlZCBvbiBmYWlsdXJlLgorKyAqIEBwYXJhbSBzcmMgdGhlIHNvdXJjZSBmcmFt ZS4KKysgKiBAcGFyYW0gZmxhZ3MgY3VycmVudGx5IHVudXNlZCwgc2hvdWxkIGJlIHNldCB0byB6 ZXJvCisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBlcnJvciBj b2RlIG9uIGZhaWx1cmUuCisrICovCisraW50IGF2X2h3ZnJhbWVfdHJhbnNmZXJfZGF0YShBVkZy YW1lICpkc3QsIGNvbnN0IEFWRnJhbWUgKnNyYywgaW50IGZsYWdzKTsKKysKKytlbnVtIEFWSFdG cmFtZVRyYW5zZmVyRGlyZWN0aW9uIHsKKysgICAgLyoqCisrICAgICAqIFRyYW5zZmVyIHRoZSBk YXRhIGZyb20gdGhlIHF1ZXJpZWQgaHcgZnJhbWUuCisrICAgICAqLworKyAgICBBVl9IV0ZSQU1F X1RSQU5TRkVSX0RJUkVDVElPTl9GUk9NLAorKworKyAgICAvKioKKysgICAgICogVHJhbnNmZXIg dGhlIGRhdGEgdG8gdGhlIHF1ZXJpZWQgaHcgZnJhbWUuCisrICAgICAqLworKyAgICBBVl9IV0ZS QU1FX1RSQU5TRkVSX0RJUkVDVElPTl9UTywKKyt9OworKworKy8qKgorKyAqIEdldCBhIGxpc3Qg b2YgcG9zc2libGUgc291cmNlIG9yIHRhcmdldCBmb3JtYXRzIHVzYWJsZSBpbgorKyAqIGF2X2h3 ZnJhbWVfdHJhbnNmZXJfZGF0YSgpLgorKyAqCisrICogQHBhcmFtIGh3ZnJhbWVfY3R4IHRoZSBm cmFtZSBjb250ZXh0IHRvIG9idGFpbiB0aGUgaW5mb3JtYXRpb24gZm9yCisrICogQHBhcmFtIGRp ciB0aGUgZGlyZWN0aW9uIG9mIHRoZSB0cmFuc2ZlcgorKyAqIEBwYXJhbSBmb3JtYXRzIHRoZSBw b2ludGVyIHRvIHRoZSBvdXRwdXQgZm9ybWF0IGxpc3Qgd2lsbCBiZSB3cml0dGVuIGhlcmUuCisr ICogICAgICAgICAgICAgICAgVGhlIGxpc3QgaXMgdGVybWluYXRlZCB3aXRoIEFWX1BJWF9GTVRf Tk9ORSBhbmQgbXVzdCBiZSBmcmVlZAorKyAqICAgICAgICAgICAgICAgIGJ5IHRoZSBjYWxsZXIg d2hlbiBubyBsb25nZXIgbmVlZGVkIHVzaW5nIGF2X2ZyZWUoKS4KKysgKiAgICAgICAgICAgICAg ICBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgc3VjY2Vzc2Z1bGx5LCB0aGUgZm9ybWF0IGxpc3Qg d2lsbAorKyAqICAgICAgICAgICAgICAgIGhhdmUgYXQgbGVhc3Qgb25lIGl0ZW0gKG5vdCBjb3Vu dGluZyB0aGUgdGVybWluYXRvcikuCisrICogICAgICAgICAgICAgICAgT24gZmFpbHVyZSwgdGhl IGNvbnRlbnRzIG9mIHRoaXMgcG9pbnRlciBhcmUgdW5zcGVjaWZpZWQuCisrICogQHBhcmFtIGZs YWdzIGN1cnJlbnRseSB1bnVzZWQsIHNob3VsZCBiZSBzZXQgdG8gemVybworKyAqIEByZXR1cm4g MCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBvbiBmYWlsdXJlLgorKyAqLwor K2ludCBhdl9od2ZyYW1lX3RyYW5zZmVyX2dldF9mb3JtYXRzKEFWQnVmZmVyUmVmICpod2ZyYW1l X2N0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWSFdGcmFt ZVRyYW5zZmVyRGlyZWN0aW9uIGRpciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgKipmb3JtYXRzLCBpbnQgZmxhZ3MpOworKworKworKy8q KgorKyAqIFRoaXMgc3RydWN0IGRlc2NyaWJlcyB0aGUgY29uc3RyYWludHMgb24gaGFyZHdhcmUg ZnJhbWVzIGF0dGFjaGVkIHRvCisrICogYSBnaXZlbiBkZXZpY2Ugd2l0aCBhIGhhcmR3YXJlLXNw ZWNpZmljIGNvbmZpZ3VyYXRpb24uICBUaGlzIGlzIHJldHVybmVkCisrICogYnkgYXZfaHdkZXZp Y2VfZ2V0X2h3ZnJhbWVfY29uc3RyYWludHMoKSBhbmQgbXVzdCBiZSBmcmVlZCBieQorKyAqIGF2 X2h3ZnJhbWVfY29uc3RyYWludHNfZnJlZSgpIGFmdGVyIHVzZS4KKysgKi8KKyt0eXBlZGVmIHN0 cnVjdCBBVkhXRnJhbWVzQ29uc3RyYWludHMgeworKyAgICAvKioKKysgICAgICogQSBsaXN0IG9m IHBvc3NpYmxlIHZhbHVlcyBmb3IgZm9ybWF0IGluIHRoZSBod19mcmFtZXNfY3R4LAorKyAgICAg KiB0ZXJtaW5hdGVkIGJ5IEFWX1BJWF9GTVRfTk9ORS4gIFRoaXMgbWVtYmVyIHdpbGwgYWx3YXlz IGJlIGZpbGxlZC4KKysgICAgICovCisrICAgIGVudW0gQVZQaXhlbEZvcm1hdCAqdmFsaWRfaHdf Zm9ybWF0czsKKysKKysgICAgLyoqCisrICAgICAqIEEgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMg Zm9yIHN3X2Zvcm1hdCBpbiB0aGUgaHdfZnJhbWVzX2N0eCwKKysgICAgICogdGVybWluYXRlZCBi eSBBVl9QSVhfRk1UX05PTkUuICBDYW4gYmUgTlVMTCBpZiB0aGlzIGluZm9ybWF0aW9uIGlzCisr ICAgICAqIG5vdCBrbm93bi4KKysgICAgICovCisrICAgIGVudW0gQVZQaXhlbEZvcm1hdCAqdmFs aWRfc3dfZm9ybWF0czsKKysKKysgICAgLyoqCisrICAgICAqIFRoZSBtaW5pbXVtIHNpemUgb2Yg ZnJhbWVzIGluIHRoaXMgaHdfZnJhbWVzX2N0eC4KKysgICAgICogKFplcm8gaWYgbm90IGtub3du LikKKysgICAgICovCisrICAgIGludCBtaW5fd2lkdGg7CisrICAgIGludCBtaW5faGVpZ2h0Owor KworKyAgICAvKioKKysgICAgICogVGhlIG1heGltdW0gc2l6ZSBvZiBmcmFtZXMgaW4gdGhpcyBo d19mcmFtZXNfY3R4LgorKyAgICAgKiAoSU5UX01BWCBpZiBub3Qga25vd24gLyBubyBsaW1pdC4p CisrICAgICAqLworKyAgICBpbnQgbWF4X3dpZHRoOworKyAgICBpbnQgbWF4X2hlaWdodDsKKyt9 IEFWSFdGcmFtZXNDb25zdHJhaW50czsKKysKKysvKioKKysgKiBBbGxvY2F0ZSBhIEhXLXNwZWNp ZmljIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciBhIGdpdmVuIEhXIGRldmljZS4KKysgKiBB ZnRlciB1c2UsIHRoZSB1c2VyIG11c3QgZnJlZSBhbGwgbWVtYmVycyBhcyByZXF1aXJlZCBieSB0 aGUgc3BlY2lmaWMKKysgKiBoYXJkd2FyZSBzdHJ1Y3R1cmUgYmVpbmcgdXNlZCwgdGhlbiBmcmVl IHRoZSBzdHJ1Y3R1cmUgaXRzZWxmIHdpdGgKKysgKiBhdl9mcmVlKCkuCisrICoKKysgKiBAcGFy YW0gZGV2aWNlX2N0eCBhIHJlZmVyZW5jZSB0byB0aGUgYXNzb2NpYXRlZCBBVkhXRGV2aWNlQ29u dGV4dC4KKysgKiBAcmV0dXJuIFRoZSBuZXdseSBjcmVhdGVkIEhXLXNwZWNpZmljIGNvbmZpZ3Vy YXRpb24gc3RydWN0dXJlIG9uCisrICogICAgICAgICBzdWNjZXNzIG9yIE5VTEwgb24gZmFpbHVy ZS4KKysgKi8KKyt2b2lkICphdl9od2RldmljZV9od2NvbmZpZ19hbGxvYyhBVkJ1ZmZlclJlZiAq ZGV2aWNlX2N0eCk7CisrCisrLyoqCisrICogR2V0IHRoZSBjb25zdHJhaW50cyBvbiBIVyBmcmFt ZXMgZ2l2ZW4gYSBkZXZpY2UgYW5kIHRoZSBIVy1zcGVjaWZpYworKyAqIGNvbmZpZ3VyYXRpb24g dG8gYmUgdXNlZCB3aXRoIHRoYXQgZGV2aWNlLiAgSWYgbm8gSFctc3BlY2lmaWMKKysgKiBjb25m aWd1cmF0aW9uIGlzIHByb3ZpZGVkLCByZXR1cm5zIHRoZSBtYXhpbXVtIHBvc3NpYmxlIGNhcGFi aWxpdGllcworKyAqIG9mIHRoZSBkZXZpY2UuCisrICoKKysgKiBAcGFyYW0gcmVmIGEgcmVmZXJl bmNlIHRvIHRoZSBhc3NvY2lhdGVkIEFWSFdEZXZpY2VDb250ZXh0LgorKyAqIEBwYXJhbSBod2Nv bmZpZyBhIGZpbGxlZCBIVy1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSwgb3IgTlVM TAorKyAqICAgICAgICB0byByZXR1cm4gdGhlIG1heGltdW0gcG9zc2libGUgY2FwYWJpbGl0aWVz IG9mIHRoZSBkZXZpY2UuCisrICogQHJldHVybiBBVkhXRnJhbWVzQ29uc3RyYWludHMgc3RydWN0 dXJlIGRlc2NyaWJpbmcgdGhlIGNvbnN0cmFpbnRzCisrICogICAgICAgICBvbiB0aGUgZGV2aWNl LCBvciBOVUxMIGlmIG5vdCBhdmFpbGFibGUuCisrICovCisrQVZIV0ZyYW1lc0NvbnN0cmFpbnRz ICphdl9od2RldmljZV9nZXRfaHdmcmFtZV9jb25zdHJhaW50cyhBVkJ1ZmZlclJlZiAqcmVmLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgdm9pZCAqaHdjb25maWcpOworKworKy8qKgorKyAqIEZyZWUgYW4gQVZIV0ZyYW1l Q29uc3RyYWludHMgc3RydWN0dXJlLgorKyAqCisrICogQHBhcmFtIGNvbnN0cmFpbnRzIFRoZSAo ZmlsbGVkIG9yIHVuZmlsbGVkKSBBVkhXRnJhbWVDb25zdHJhaW50cyBzdHJ1Y3R1cmUuCisrICov Cisrdm9pZCBhdl9od2ZyYW1lX2NvbnN0cmFpbnRzX2ZyZWUoQVZIV0ZyYW1lc0NvbnN0cmFpbnRz ICoqY29uc3RyYWludHMpOworKworKworKy8qKgorKyAqIEZsYWdzIHRvIGFwcGx5IHRvIGZyYW1l IG1hcHBpbmdzLgorKyAqLworK2VudW0geworKyAgICAvKioKKysgICAgICogVGhlIG1hcHBpbmcg bXVzdCBiZSByZWFkYWJsZS4KKysgICAgICovCisrICAgIEFWX0hXRlJBTUVfTUFQX1JFQUQgICAg ICA9IDEgPDwgMCwKKysgICAgLyoqCisrICAgICAqIFRoZSBtYXBwaW5nIG11c3QgYmUgd3JpdGVh YmxlLgorKyAgICAgKi8KKysgICAgQVZfSFdGUkFNRV9NQVBfV1JJVEUgICAgID0gMSA8PCAxLAor KyAgICAvKioKKysgICAgICogVGhlIG1hcHBlZCBmcmFtZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGNv bXBsZXRlbHkgaW4gc3Vic2VxdWVudAorKyAgICAgKiBvcGVyYXRpb25zLCBzbyB0aGUgY3VycmVu dCBmcmFtZSBkYXRhIG5lZWQgbm90IGJlIGxvYWRlZC4gIEFueSB2YWx1ZXMKKysgICAgICogd2hp Y2ggYXJlIG5vdCBvdmVyd3JpdHRlbiBhcmUgdW5zcGVjaWZpZWQuCisrICAgICAqLworKyAgICBB Vl9IV0ZSQU1FX01BUF9PVkVSV1JJVEUgPSAxIDw8IDIsCisrICAgIC8qKgorKyAgICAgKiBUaGUg bWFwcGluZyBtdXN0IGJlIGRpcmVjdC4gIFRoYXQgaXMsIHRoZXJlIG11c3Qgbm90IGJlIGFueSBj b3B5aW5nIGluCisrICAgICAqIHRoZSBtYXAgb3IgdW5tYXAgc3RlcHMuICBOb3RlIHRoYXQgcGVy Zm9ybWFuY2Ugb2YgZGlyZWN0IG1hcHBpbmdzIG1heQorKyAgICAgKiBiZSBtdWNoIGxvd2VyIHRo YW4gbm9ybWFsIG1lbW9yeS4KKysgICAgICovCisrICAgIEFWX0hXRlJBTUVfTUFQX0RJUkVDVCAg ICA9IDEgPDwgMywKKyt9OworKworKy8qKgorKyAqIE1hcCBhIGhhcmR3YXJlIGZyYW1lLgorKyAq CisrICogVGhpcyBoYXMgYSBudW1iZXIgb2YgZGlmZmVyZW50IHBvc3NpYmxlIGVmZmVjdHMsIGRl cGVuZGluZyBvbiB0aGUgZm9ybWF0CisrICogYW5kIG9yaWdpbiBvZiB0aGUgc3JjIGFuZCBkc3Qg ZnJhbWVzLiAgT24gaW5wdXQsIHNyYyBzaG91bGQgYmUgYSB1c2FibGUKKysgKiBmcmFtZSB3aXRo IHZhbGlkIGJ1ZmZlcnMgYW5kIGRzdCBzaG91bGQgYmUgYmxhbmsgKHR5cGljYWxseSBhcyBqdXN0 IGNyZWF0ZWQKKysgKiBieSBhdl9mcmFtZV9hbGxvYygpKS4gIHNyYyBzaG91bGQgaGF2ZSBhbiBh c3NvY2lhdGVkIGh3ZnJhbWUgY29udGV4dCwgYW5kCisrICogZHN0IG1heSBvcHRpb25hbGx5IGhh dmUgYSBmb3JtYXQgYW5kIGFzc29jaWF0ZWQgaHdmcmFtZSBjb250ZXh0LgorKyAqCisrICogSWYg c3JjIHdhcyBjcmVhdGVkIGJ5IG1hcHBpbmcgYSBmcmFtZSBmcm9tIHRoZSBod2ZyYW1lIGNvbnRl eHQgb2YgZHN0LAorKyAqIHRoZW4gdGhpcyBmdW5jdGlvbiB1bmRvZXMgdGhlIG1hcHBpbmcgLSBk c3QgaXMgcmVwbGFjZWQgYnkgYSByZWZlcmVuY2UgdG8KKysgKiB0aGUgZnJhbWUgdGhhdCBzcmMg d2FzIG9yaWdpbmFsbHkgbWFwcGVkIGZyb20uCisrICoKKysgKiBJZiBib3RoIHNyYyBhbmQgZHN0 IGhhdmUgYW4gYXNzb2NpYXRlZCBod2ZyYW1lIGNvbnRleHQsIHRoZW4gdGhpcyBmdW5jdGlvbgor KyAqIGF0dGVtcHRzIHRvIG1hcCB0aGUgc3JjIGZyYW1lIGZyb20gaXRzIGhhcmR3YXJlIGNvbnRl eHQgdG8gdGhhdCBvZiBkc3QgYW5kCisrICogdGhlbiBmaWxsIGRzdCB3aXRoIGFwcHJvcHJpYXRl IGRhdGEgdG8gYmUgdXNhYmxlIHRoZXJlLiAgVGhpcyB3aWxsIG9ubHkgYmUKKysgKiBwb3NzaWJs ZSBpZiB0aGUgaHdmcmFtZSBjb250ZXh0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2VzIGFyZSBjb21w YXRpYmxlIC0KKysgKiBnaXZlbiBjb21wYXRpYmxlIGRldmljZXMsIGF2X2h3ZnJhbWVfY3R4X2Ny ZWF0ZV9kZXJpdmVkKCkgY2FuIGJlIHVzZWQgdG8KKysgKiBjcmVhdGUgYSBod2ZyYW1lIGNvbnRl eHQgZm9yIGRzdCBpbiB3aGljaCBtYXBwaW5nIHNob3VsZCBiZSBwb3NzaWJsZS4KKysgKgorKyAq IElmIHNyYyBoYXMgYSBod2ZyYW1lIGNvbnRleHQgYnV0IGRzdCBkb2VzIG5vdCwgdGhlbiB0aGUg c3JjIGZyYW1lIGlzCisrICogbWFwcGVkIHRvIG5vcm1hbCBtZW1vcnkgYW5kIHNob3VsZCB0aGVy ZWFmdGVyIGJlIHVzYWJsZSBhcyBhIG5vcm1hbCBmcmFtZS4KKysgKiBJZiB0aGUgZm9ybWF0IGlz IHNldCBvbiBkc3QsIHRoZW4gdGhlIG1hcHBpbmcgd2lsbCBhdHRlbXB0IHRvIGNyZWF0ZSBkc3QK KysgKiB3aXRoIHRoYXQgZm9ybWF0IGFuZCBmYWlsIGlmIGl0IGlzIG5vdCBwb3NzaWJsZS4gIElm IGZvcm1hdCBpcyB1bnNldCAoaXMKKysgKiBBVl9QSVhfRk1UX05PTkUpIHRoZW4gZHN0IHdpbGwg YmUgbWFwcGVkIHdpdGggd2hhdGV2ZXIgdGhlIG1vc3QgYXBwcm9wcmlhdGUKKysgKiBmb3JtYXQg dG8gdXNlIGlzIChwcm9iYWJseSB0aGUgc3dfZm9ybWF0IG9mIHRoZSBzcmMgaHdmcmFtZSBjb250 ZXh0KS4KKysgKgorKyAqIEEgcmV0dXJuIHZhbHVlIG9mIEFWRVJST1IoRU5PU1lTKSBpbmRpY2F0 ZXMgdGhhdCB0aGUgbWFwcGluZyBpcyBub3QKKysgKiBwb3NzaWJsZSB3aXRoIHRoZSBnaXZlbiBh cmd1bWVudHMgYW5kIGh3ZnJhbWUgc2V0dXAsIHdoaWxlIG90aGVyIHJldHVybgorKyAqIHZhbHVl cyBpbmRpY2F0ZSB0aGF0IGl0IGZhaWxlZCBzb21laG93LgorKyAqCisrICogT24gZmFpbHVyZSwg dGhlIGRlc3RpbmF0aW9uIGZyYW1lIHdpbGwgYmUgbGVmdCBibGFuaywgZXhjZXB0IGZvciB0aGUK KysgKiBod19mcmFtZXNfY3R4L2Zvcm1hdCBmaWVsZHMgdGhleSBtYXkgaGF2ZSBiZWVuIHNldCBi eSB0aGUgY2FsbGVyIC0gdGhvc2Ugd2lsbAorKyAqIGJlIHByZXNlcnZlZCBhcyB0aGV5IHdlcmUu CisrICoKKysgKiBAcGFyYW0gZHN0IERlc3RpbmF0aW9uIGZyYW1lLCB0byBjb250YWluIHRoZSBt YXBwaW5nLgorKyAqIEBwYXJhbSBzcmMgU291cmNlIGZyYW1lLCB0byBiZSBtYXBwZWQuCisrICog QHBhcmFtIGZsYWdzIFNvbWUgY29tYmluYXRpb24gb2YgQVZfSFdGUkFNRV9NQVBfKiBmbGFncy4K KysgKiBAcmV0dXJuIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgQVZFUlJPUiBjb2RlIG9uIGZh aWx1cmUuCisrICovCisraW50IGF2X2h3ZnJhbWVfbWFwKEFWRnJhbWUgKmRzdCwgY29uc3QgQVZG cmFtZSAqc3JjLCBpbnQgZmxhZ3MpOworKworKworKy8qKgorKyAqIENyZWF0ZSBhbmQgaW5pdGlh bGlzZSBhbiBBVkhXRnJhbWVzQ29udGV4dCBhcyBhIG1hcHBpbmcgb2YgYW5vdGhlciBleGlzdGlu ZworKyAqIEFWSFdGcmFtZXNDb250ZXh0IG9uIGEgZGlmZmVyZW50IGRldmljZS4KKysgKgorKyAq IGF2X2h3ZnJhbWVfY3R4X2luaXQoKSBzaG91bGQgbm90IGJlIGNhbGxlZCBhZnRlciB0aGlzLgor KyAqCisrICogQHBhcmFtIGRlcml2ZWRfZnJhbWVfY3R4ICBPbiBzdWNjZXNzLCBhIHJlZmVyZW5j ZSB0byB0aGUgbmV3bHkgY3JlYXRlZAorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZI V0ZyYW1lc0NvbnRleHQuCisrICogQHBhcmFtIGZvcm1hdCAgICAgICAgICAgICBUaGUgQVZQaXhl bEZvcm1hdCBmb3IgdGhlIGRlcml2ZWQgY29udGV4dC4KKysgKiBAcGFyYW0gZGVyaXZlZF9kZXZp Y2VfY3R4IEEgcmVmZXJlbmNlIHRvIHRoZSBkZXZpY2UgdG8gY3JlYXRlIHRoZSBuZXcKKysgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFWSFdGcmFtZXNDb250ZXh0IG9uLgorKyAqIEBwYXJh bSBzb3VyY2VfZnJhbWVfY3R4ICAgQSByZWZlcmVuY2UgdG8gYW4gZXhpc3RpbmcgQVZIV0ZyYW1l c0NvbnRleHQKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHdpbGwgYmUgbWFw cGVkIHRvIHRoZSBkZXJpdmVkIGNvbnRleHQuCisrICogQHBhcmFtIGZsYWdzICBTb21lIGNvbWJp bmF0aW9uIG9mIEFWX0hXRlJBTUVfTUFQXyogZmxhZ3MsIGRlZmluaW5nIHRoZQorKyAqICAgICAg ICAgICAgICAgbWFwcGluZyBwYXJhbWV0ZXJzIHRvIGFwcGx5IHRvIGZyYW1lcyB3aGljaCBhcmUg YWxsb2NhdGVkCisrICogICAgICAgICAgICAgICBpbiB0aGUgZGVyaXZlZCBkZXZpY2UuCisrICog QHJldHVybiAgICAgICBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBvbiBm YWlsdXJlLgorKyAqLworK2ludCBhdl9od2ZyYW1lX2N0eF9jcmVhdGVfZGVyaXZlZChBVkJ1ZmZl clJlZiAqKmRlcml2ZWRfZnJhbWVfY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgZm9ybWF0LAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBVkJ1ZmZlclJlZiAqZGVyaXZlZF9kZXZpY2VfY3R4LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBVkJ1ZmZlclJlZiAqc291cmNlX2ZyYW1lX2N0eCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKTsKKysKKysjZW5kaWYg LyogQVZVVElMX0hXQ09OVEVYVF9IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2Zy YW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvaW1ndXRpbHMuaC5m Zm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZt cGVnL3Y5L2xpYmF2dXRpbC9pbWd1dGlscy5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFt ZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2ltZ3V0aWxzLmguZmZt cGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NzMxMDIxNiArMDIwMAorKysrIE11c2VTY29yZS00 LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9p bWd1dGlscy5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjc3MjE1NTU0ICswMjAwCitAQCAtMCwwICsx LDM3NyBAQAorKy8qCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorKyAqCisrICog RkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIEZGbXBlZyBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBGb3VuZGF0aW9uLCBJbmMuLCA1 MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNB CisrICovCisrCisrI2lmbmRlZiBBVlVUSUxfSU1HVVRJTFNfSAorKyNkZWZpbmUgQVZVVElMX0lN R1VUSUxTX0gKKysKKysvKioKKysgKiBAZmlsZQorKyAqIG1pc2MgaW1hZ2UgdXRpbGl0aWVzCisr ICoKKysgKiBAYWRkdG9ncm91cCBsYXZ1X3BpY3R1cmUKKysgKiBAeworKyAqLworKworKyNpbmNs dWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2luY2x1ZGUgInBpeGRlc2Mu aCIKKysjaW5jbHVkZSAicGl4Zm10LmgiCisrI2luY2x1ZGUgInJhdGlvbmFsLmgiCisrCisrLyoq CisrICogQ29tcHV0ZSB0aGUgbWF4IHBpeGVsIHN0ZXAgZm9yIGVhY2ggcGxhbmUgb2YgYW4gaW1h Z2Ugd2l0aCBhCisrICogZm9ybWF0IGRlc2NyaWJlZCBieSBwaXhkZXNjLgorKyAqCisrICogVGhl IHBpeGVsIHN0ZXAgaXMgdGhlIGRpc3RhbmNlIGluIGJ5dGVzIGJldHdlZW4gdGhlIGZpcnN0IGJ5 dGUgb2YKKysgKiB0aGUgZ3JvdXAgb2YgYnl0ZXMgd2hpY2ggZGVzY3JpYmUgYSBwaXhlbCBjb21w b25lbnQgYW5kIHRoZSBmaXJzdAorKyAqIGJ5dGUgb2YgdGhlIHN1Y2Nlc3NpdmUgZ3JvdXAgaW4g dGhlIHNhbWUgcGxhbmUgZm9yIHRoZSBzYW1lCisrICogY29tcG9uZW50LgorKyAqCisrICogQHBh cmFtIG1heF9waXhzdGVwcyBhbiBhcnJheSB3aGljaCBpcyBmaWxsZWQgd2l0aCB0aGUgbWF4IHBp eGVsIHN0ZXAKKysgKiBmb3IgZWFjaCBwbGFuZS4gU2luY2UgYSBwbGFuZSBtYXkgY29udGFpbiBk aWZmZXJlbnQgcGl4ZWwKKysgKiBjb21wb25lbnRzLCB0aGUgY29tcHV0ZWQgbWF4X3BpeHN0ZXBz W3BsYW5lXSBpcyByZWxhdGl2ZSB0byB0aGUKKysgKiBjb21wb25lbnQgaW4gdGhlIHBsYW5lIHdp dGggdGhlIG1heCBwaXhlbCBzdGVwLgorKyAqIEBwYXJhbSBtYXhfcGl4c3RlcF9jb21wcyBhbiBh cnJheSB3aGljaCBpcyBmaWxsZWQgd2l0aCB0aGUgY29tcG9uZW50CisrICogZm9yIGVhY2ggcGxh bmUgd2hpY2ggaGFzIHRoZSBtYXggcGl4ZWwgc3RlcC4gTWF5IGJlIE5VTEwuCisrICogQHBhcmFt IHBpeGRlc2MgdGhlIEFWUGl4Rm10RGVzY3JpcHRvciBmb3IgdGhlIGltYWdlLCBkZXNjcmliaW5n IGl0cyBmb3JtYXQKKysgKi8KKyt2b2lkIGF2X2ltYWdlX2ZpbGxfbWF4X3BpeHN0ZXBzKGludCBt YXhfcGl4c3RlcHNbNF0sIGludCBtYXhfcGl4c3RlcF9jb21wc1s0XSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqcGl4ZGVzYyk7Cisr CisrLyoqCisrICogQ29tcHV0ZSB0aGUgc2l6ZSBvZiBhbiBpbWFnZSBsaW5lIHdpdGggZm9ybWF0 IHBpeF9mbXQgYW5kIHdpZHRoCisrICogd2lkdGggZm9yIHRoZSBwbGFuZSBwbGFuZS4KKysgKgor KyAqIEByZXR1cm4gdGhlIGNvbXB1dGVkIHNpemUgaW4gYnl0ZXMKKysgKi8KKytpbnQgYXZfaW1h Z2VfZ2V0X2xpbmVzaXplKGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10LCBpbnQgd2lkdGgsIGlu dCBwbGFuZSk7CisrCisrLyoqCisrICogRmlsbCBwbGFuZSBsaW5lc2l6ZXMgZm9yIGFuIGltYWdl IHdpdGggcGl4ZWwgZm9ybWF0IHBpeF9mbXQgYW5kCisrICogd2lkdGggd2lkdGguCisrICoKKysg KiBAcGFyYW0gbGluZXNpemVzIGFycmF5IHRvIGJlIGZpbGxlZCB3aXRoIHRoZSBsaW5lc2l6ZSBm b3IgZWFjaCBwbGFuZQorKyAqIEBwYXJhbSBwaXhfZm10IHRoZSBBVlBpeGVsRm9ybWF0IG9mIHRo ZSBpbWFnZQorKyAqIEBwYXJhbSB3aWR0aCB3aWR0aCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzCisr ICogQHJldHVybiA+PSAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2Rl IG90aGVyd2lzZQorKyAqLworK2ludCBhdl9pbWFnZV9maWxsX2xpbmVzaXplcyhpbnQgbGluZXNp emVzWzRdLCBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwgaW50IHdpZHRoKTsKKysKKysvKioK KysgKiBGaWxsIHBsYW5lIHNpemVzIGZvciBhbiBpbWFnZSB3aXRoIHBpeGVsIGZvcm1hdCBwaXhf Zm10IGFuZCBoZWlnaHQgaGVpZ2h0LgorKyAqCisrICogQHBhcmFtIHNpemUgdGhlIGFycmF5IHRv IGJlIGZpbGxlZCB3aXRoIHRoZSBzaXplIG9mIGVhY2ggaW1hZ2UgcGxhbmUKKysgKiBAcGFyYW0g cGl4X2ZtdCB0aGUgQVZQaXhlbEZvcm1hdCBvZiB0aGUgaW1hZ2UKKysgKiBAcGFyYW0gaGVpZ2h0 IGhlaWdodCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzCisrICogQHBhcmFtIGxpbmVzaXplcyB0aGUg YXJyYXkgY29udGFpbmluZyB0aGUgbGluZXNpemUgZm9yIGVhY2gKKysgKiAgICAgICAgcGxhbmUs IHNob3VsZCBiZSBmaWxsZWQgYnkgYXZfaW1hZ2VfZmlsbF9saW5lc2l6ZXMoKQorKyAqIEByZXR1 cm4gPj0gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndp c2UKKysgKgorKyAqIEBub3RlIFRoZSBsaW5lc2l6ZSBwYXJhbWV0ZXJzIGhhdmUgdGhlIHR5cGUg cHRyZGlmZl90IGhlcmUsIHdoaWxlIHRoZXkgYXJlCisrICogICAgICAgaW50IGZvciBhdl9pbWFn ZV9maWxsX2xpbmVzaXplcygpLgorKyAqLworK2ludCBhdl9pbWFnZV9maWxsX3BsYW5lX3NpemVz KHNpemVfdCBzaXplWzRdLCBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCBjb25zdCBwdHJkaWZmX3QgbGluZXNpemVz WzRdKTsKKysKKysvKioKKysgKiBGaWxsIHBsYW5lIGRhdGEgcG9pbnRlcnMgZm9yIGFuIGltYWdl IHdpdGggcGl4ZWwgZm9ybWF0IHBpeF9mbXQgYW5kCisrICogaGVpZ2h0IGhlaWdodC4KKysgKgor KyAqIEBwYXJhbSBkYXRhIHBvaW50ZXJzIGFycmF5IHRvIGJlIGZpbGxlZCB3aXRoIHRoZSBwb2lu dGVyIGZvciBlYWNoIGltYWdlIHBsYW5lCisrICogQHBhcmFtIHBpeF9mbXQgdGhlIEFWUGl4ZWxG b3JtYXQgb2YgdGhlIGltYWdlCisrICogQHBhcmFtIGhlaWdodCBoZWlnaHQgb2YgdGhlIGltYWdl IGluIHBpeGVscworKyAqIEBwYXJhbSBwdHIgdGhlIHBvaW50ZXIgdG8gYSBidWZmZXIgd2hpY2gg d2lsbCBjb250YWluIHRoZSBpbWFnZQorKyAqIEBwYXJhbSBsaW5lc2l6ZXMgdGhlIGFycmF5IGNv bnRhaW5pbmcgdGhlIGxpbmVzaXplIGZvciBlYWNoCisrICogcGxhbmUsIHNob3VsZCBiZSBmaWxs ZWQgYnkgYXZfaW1hZ2VfZmlsbF9saW5lc2l6ZXMoKQorKyAqIEByZXR1cm4gdGhlIHNpemUgaW4g Ynl0ZXMgcmVxdWlyZWQgZm9yIHRoZSBpbWFnZSBidWZmZXIsIGEgbmVnYXRpdmUKKysgKiBlcnJv ciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZQorKyAqLworK2ludCBhdl9pbWFnZV9maWxsX3BvaW50 ZXJzKHVpbnQ4X3QgKmRhdGFbNF0sIGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10LCBpbnQgaGVp Z2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnB0ciwgY29uc3QgaW50 IGxpbmVzaXplc1s0XSk7CisrCisrLyoqCisrICogQWxsb2NhdGUgYW4gaW1hZ2Ugd2l0aCBzaXpl IHcgYW5kIGggYW5kIHBpeGVsIGZvcm1hdCBwaXhfZm10LCBhbmQKKysgKiBmaWxsIHBvaW50ZXJz IGFuZCBsaW5lc2l6ZXMgYWNjb3JkaW5nbHkuCisrICogVGhlIGFsbG9jYXRlZCBpbWFnZSBidWZm ZXIgaGFzIHRvIGJlIGZyZWVkIGJ5IHVzaW5nCisrICogYXZfZnJlZXAoJnBvaW50ZXJzWzBdKS4K KysgKgorKyAqIEBwYXJhbSBwb2ludGVycyBhcnJheSB0byBiZSBmaWxsZWQgd2l0aCB0aGUgcG9p bnRlciBmb3IgZWFjaCBpbWFnZSBwbGFuZQorKyAqIEBwYXJhbSBsaW5lc2l6ZXMgdGhlIGFycmF5 IGZpbGxlZCB3aXRoIHRoZSBsaW5lc2l6ZSBmb3IgZWFjaCBwbGFuZQorKyAqIEBwYXJhbSB3IHdp ZHRoIG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMKKysgKiBAcGFyYW0gaCBoZWlnaHQgb2YgdGhlIGlt YWdlIGluIHBpeGVscworKyAqIEBwYXJhbSBwaXhfZm10IHRoZSBBVlBpeGVsRm9ybWF0IG9mIHRo ZSBpbWFnZQorKyAqIEBwYXJhbSBhbGlnbiB0aGUgdmFsdWUgdG8gdXNlIGZvciBidWZmZXIgc2l6 ZSBhbGlnbm1lbnQKKysgKiBAcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIHJlcXVpcmVkIGZvciB0 aGUgaW1hZ2UgYnVmZmVyLCBhIG5lZ2F0aXZlCisrICogZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZh aWx1cmUKKysgKi8KKytpbnQgYXZfaW1hZ2VfYWxsb2ModWludDhfdCAqcG9pbnRlcnNbNF0sIGlu dCBsaW5lc2l6ZXNbNF0sCisrICAgICAgICAgICAgICAgICAgIGludCB3LCBpbnQgaCwgZW51bSBB VlBpeGVsRm9ybWF0IHBpeF9mbXQsIGludCBhbGlnbik7CisrCisrLyoqCisrICogQ29weSBpbWFn ZSBwbGFuZSBmcm9tIHNyYyB0byBkc3QuCisrICogVGhhdCBpcywgY29weSAiaGVpZ2h0IiBudW1i ZXIgb2YgbGluZXMgb2YgImJ5dGV3aWR0aCIgYnl0ZXMgZWFjaC4KKysgKiBUaGUgZmlyc3QgYnl0 ZSBvZiBlYWNoIHN1Y2Nlc3NpdmUgbGluZSBpcyBzZXBhcmF0ZWQgYnkgKl9saW5lc2l6ZQorKyAq IGJ5dGVzLgorKyAqCisrICogYnl0ZXdpZHRoIG11c3QgYmUgY29udGFpbmVkIGJ5IGJvdGggYWJz b2x1dGUgdmFsdWVzIG9mIGRzdF9saW5lc2l6ZQorKyAqIGFuZCBzcmNfbGluZXNpemUsIG90aGVy d2lzZSB0aGUgZnVuY3Rpb24gYmVoYXZpb3IgaXMgdW5kZWZpbmVkLgorKyAqCisrICogQHBhcmFt IGRzdCAgICAgICAgICBkZXN0aW5hdGlvbiBwbGFuZSB0byBjb3B5IHRvCisrICogQHBhcmFtIGRz dF9saW5lc2l6ZSBsaW5lc2l6ZSBmb3IgdGhlIGltYWdlIHBsYW5lIGluIGRzdAorKyAqIEBwYXJh bSBzcmMgICAgICAgICAgc291cmNlIHBsYW5lIHRvIGNvcHkgZnJvbQorKyAqIEBwYXJhbSBzcmNf bGluZXNpemUgbGluZXNpemUgZm9yIHRoZSBpbWFnZSBwbGFuZSBpbiBzcmMKKysgKiBAcGFyYW0g aGVpZ2h0ICAgICAgIGhlaWdodCAobnVtYmVyIG9mIGxpbmVzKSBvZiB0aGUgcGxhbmUKKysgKi8K Kyt2b2lkIGF2X2ltYWdlX2NvcHlfcGxhbmUodWludDhfdCAgICAgICAqZHN0LCBpbnQgZHN0X2xp bmVzaXplLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzcmMsIGlu dCBzcmNfbGluZXNpemUsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGludCBieXRld2lkdGgs IGludCBoZWlnaHQpOworKworKy8qKgorKyAqIENvcHkgaW1hZ2UgZGF0YSBsb2NhdGVkIGluIHVu Y2FjaGVhYmxlIChlLmcuIEdQVSBtYXBwZWQpIG1lbW9yeS4gV2hlcmUKKysgKiBhdmFpbGFibGUs IHRoaXMgZnVuY3Rpb24gd2lsbCB1c2Ugc3BlY2lhbCBmdW5jdGlvbmFsaXR5IGZvciByZWFkaW5n IGZyb20gc3VjaAorKyAqIG1lbW9yeSwgd2hpY2ggbWF5IHJlc3VsdCBpbiBncmVhdGx5IGltcHJv dmVkIHBlcmZvcm1hbmNlIGNvbXBhcmVkIHRvIHBsYWluCisrICogYXZfaW1hZ2VfY29weV9wbGFu ZSgpLgorKyAqCisrICogYnl0ZXdpZHRoIG11c3QgYmUgY29udGFpbmVkIGJ5IGJvdGggYWJzb2x1 dGUgdmFsdWVzIG9mIGRzdF9saW5lc2l6ZQorKyAqIGFuZCBzcmNfbGluZXNpemUsIG90aGVyd2lz ZSB0aGUgZnVuY3Rpb24gYmVoYXZpb3IgaXMgdW5kZWZpbmVkLgorKyAqCisrICogQG5vdGUgVGhl IGxpbmVzaXplIHBhcmFtZXRlcnMgaGF2ZSB0aGUgdHlwZSBwdHJkaWZmX3QgaGVyZSwgd2hpbGUg dGhleSBhcmUKKysgKiAgICAgICBpbnQgZm9yIGF2X2ltYWdlX2NvcHlfcGxhbmUoKS4KKysgKiBA bm90ZSBPbiB4ODYsIHRoZSBsaW5lc2l6ZXMgY3VycmVudGx5IG5lZWQgdG8gYmUgYWxpZ25lZCB0 byB0aGUgY2FjaGVsaW5lCisrICogICAgICAgc2l6ZSAoaS5lLiA2NCkgdG8gZ2V0IGltcHJvdmVk IHBlcmZvcm1hbmNlLgorKyAqLworK3ZvaWQgYXZfaW1hZ2VfY29weV9wbGFuZV91Y19mcm9tKHVp bnQ4X3QgICAgICAgKmRzdCwgcHRyZGlmZl90IGRzdF9saW5lc2l6ZSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzcmMsIHB0cmRpZmZfdCBzcmNfbGlu ZXNpemUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90IGJ5dGV3 aWR0aCwgaW50IGhlaWdodCk7CisrCisrLyoqCisrICogQ29weSBpbWFnZSBpbiBzcmNfZGF0YSB0 byBkc3RfZGF0YS4KKysgKgorKyAqIEBwYXJhbSBkc3RfZGF0YSAgICAgIGRlc3RpbmF0aW9uIGlt YWdlIGRhdGEgYnVmZmVyIHRvIGNvcHkgdG8KKysgKiBAcGFyYW0gZHN0X2xpbmVzaXplcyBsaW5l c2l6ZXMgZm9yIHRoZSBpbWFnZSBpbiBkc3RfZGF0YQorKyAqIEBwYXJhbSBzcmNfZGF0YSAgICAg IHNvdXJjZSBpbWFnZSBkYXRhIGJ1ZmZlciB0byBjb3B5IGZyb20KKysgKiBAcGFyYW0gc3JjX2xp bmVzaXplcyBsaW5lc2l6ZXMgZm9yIHRoZSBpbWFnZSBpbiBzcmNfZGF0YQorKyAqIEBwYXJhbSBw aXhfZm10ICAgICAgIHRoZSBBVlBpeGVsRm9ybWF0IG9mIHRoZSBpbWFnZQorKyAqIEBwYXJhbSB3 aWR0aCAgICAgICAgIHdpZHRoIG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMKKysgKiBAcGFyYW0gaGVp Z2h0ICAgICAgICBoZWlnaHQgb2YgdGhlIGltYWdlIGluIHBpeGVscworKyAqLworK3ZvaWQgYXZf aW1hZ2VfY29weSh1aW50OF90ICogY29uc3QgZHN0X2RhdGFbNF0sIGNvbnN0IGludCBkc3RfbGlu ZXNpemVzWzRdLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICogY29uc3Qgc3Jj X2RhdGFbNF0sIGNvbnN0IGludCBzcmNfbGluZXNpemVzWzRdLAorKyAgICAgICAgICAgICAgICAg ICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKysK KysvKioKKysgKiBXcmFwcGVyIGFyb3VuZCBhdl9pbWFnZV9jb3B5KCkgdG8gd29ya2Fyb3VuZCB0 aGUgbGltaXRhdGlvbgorKyAqIHRoYXQgdGhlIGNvbnZlcnNpb24gZnJvbSB1aW50OF90ICogY29u c3QgKiB0byBjb25zdCB1aW50OF90ICogY29uc3QgKgorKyAqIGlzIG5vdCBwZXJmb3JtZWQgYXV0 b21hdGljYWxseSBpbiBDLgorKyAqIEBzZWUgYXZfaW1hZ2VfY29weSgpCisrICovCisrc3RhdGlj IGlubGluZQorK3ZvaWQgYXZfaW1hZ2VfY29weTIodWludDhfdCAqIGNvbnN0IGRzdF9kYXRhWzRd LCBjb25zdCBpbnQgZHN0X2xpbmVzaXplc1s0XSwKKysgICAgICAgICAgICAgICAgICAgIHVpbnQ4 X3QgKiBjb25zdCBzcmNfZGF0YVs0XSwgY29uc3QgaW50IHNyY19saW5lc2l6ZXNbNF0sCisrICAg ICAgICAgICAgICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwgaW50IHdpZHRoLCBp bnQgaGVpZ2h0KQorK3sKKysgICAgYXZfaW1hZ2VfY29weShkc3RfZGF0YSwgZHN0X2xpbmVzaXpl cywKKysgICAgICAgICAgICAgICAgICAoY29uc3QgdWludDhfdCAqIGNvbnN0ICopc3JjX2RhdGEs IHNyY19saW5lc2l6ZXMsCisrICAgICAgICAgICAgICAgICAgcGl4X2ZtdCwgd2lkdGgsIGhlaWdo dCk7CisrfQorKworKy8qKgorKyAqIENvcHkgaW1hZ2UgZGF0YSBsb2NhdGVkIGluIHVuY2FjaGVh YmxlIChlLmcuIEdQVSBtYXBwZWQpIG1lbW9yeS4gV2hlcmUKKysgKiBhdmFpbGFibGUsIHRoaXMg ZnVuY3Rpb24gd2lsbCB1c2Ugc3BlY2lhbCBmdW5jdGlvbmFsaXR5IGZvciByZWFkaW5nIGZyb20g c3VjaAorKyAqIG1lbW9yeSwgd2hpY2ggbWF5IHJlc3VsdCBpbiBncmVhdGx5IGltcHJvdmVkIHBl cmZvcm1hbmNlIGNvbXBhcmVkIHRvIHBsYWluCisrICogYXZfaW1hZ2VfY29weSgpLgorKyAqCisr ICogVGhlIGRhdGEgcG9pbnRlcnMgYW5kIHRoZSBsaW5lc2l6ZXMgbXVzdCBiZSBhbGlnbmVkIHRv IHRoZSBtYXhpbXVtIHJlcXVpcmVkCisrICogYnkgdGhlIENQVSBhcmNoaXRlY3R1cmUuCisrICoK KysgKiBAbm90ZSBUaGUgbGluZXNpemUgcGFyYW1ldGVycyBoYXZlIHRoZSB0eXBlIHB0cmRpZmZf dCBoZXJlLCB3aGlsZSB0aGV5IGFyZQorKyAqICAgICAgIGludCBmb3IgYXZfaW1hZ2VfY29weSgp LgorKyAqIEBub3RlIE9uIHg4NiwgdGhlIGxpbmVzaXplcyBjdXJyZW50bHkgbmVlZCB0byBiZSBh bGlnbmVkIHRvIHRoZSBjYWNoZWxpbmUKKysgKiAgICAgICBzaXplIChpLmUuIDY0KSB0byBnZXQg aW1wcm92ZWQgcGVyZm9ybWFuY2UuCisrICovCisrdm9pZCBhdl9pbWFnZV9jb3B5X3VjX2Zyb20o dWludDhfdCAqIGNvbnN0IGRzdF9kYXRhWzRdLCAgICAgICBjb25zdCBwdHJkaWZmX3QgZHN0X2xp bmVzaXplc1s0XSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICog Y29uc3Qgc3JjX2RhdGFbNF0sIGNvbnN0IHB0cmRpZmZfdCBzcmNfbGluZXNpemVzWzRdLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10LCBpbnQg d2lkdGgsIGludCBoZWlnaHQpOworKworKy8qKgorKyAqIFNldHVwIHRoZSBkYXRhIHBvaW50ZXJz IGFuZCBsaW5lc2l6ZXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBpbWFnZQorKyAqIHBhcmFtZXRl cnMgYW5kIHRoZSBwcm92aWRlZCBhcnJheS4KKysgKgorKyAqIFRoZSBmaWVsZHMgb2YgdGhlIGdp dmVuIGltYWdlIGFyZSBmaWxsZWQgaW4gYnkgdXNpbmcgdGhlIHNyYworKyAqIGFkZHJlc3Mgd2hp Y2ggcG9pbnRzIHRvIHRoZSBpbWFnZSBkYXRhIGJ1ZmZlci4gRGVwZW5kaW5nIG9uIHRoZQorKyAq IHNwZWNpZmllZCBwaXhlbCBmb3JtYXQsIG9uZSBvciBtdWx0aXBsZSBpbWFnZSBkYXRhIHBvaW50 ZXJzIGFuZAorKyAqIGxpbmUgc2l6ZXMgd2lsbCBiZSBzZXQuICBJZiBhIHBsYW5hciBmb3JtYXQg aXMgc3BlY2lmaWVkLCBzZXZlcmFsCisrICogcG9pbnRlcnMgd2lsbCBiZSBzZXQgcG9pbnRpbmcg dG8gdGhlIGRpZmZlcmVudCBwaWN0dXJlIHBsYW5lcyBhbmQKKysgKiB0aGUgbGluZSBzaXplcyBv ZiB0aGUgZGlmZmVyZW50IHBsYW5lcyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUKKysgKiBsaW5lc19z aXplcyBhcnJheS4gQ2FsbCB3aXRoIHNyYyA9PSBOVUxMIHRvIGdldCB0aGUgcmVxdWlyZWQKKysg KiBzaXplIGZvciB0aGUgc3JjIGJ1ZmZlci4KKysgKgorKyAqIFRvIGFsbG9jYXRlIHRoZSBidWZm ZXIgYW5kIGZpbGwgaW4gdGhlIGRzdF9kYXRhIGFuZCBkc3RfbGluZXNpemUgaW4KKysgKiBvbmUg Y2FsbCwgdXNlIGF2X2ltYWdlX2FsbG9jKCkuCisrICoKKysgKiBAcGFyYW0gZHN0X2RhdGEgICAg ICBkYXRhIHBvaW50ZXJzIHRvIGJlIGZpbGxlZCBpbgorKyAqIEBwYXJhbSBkc3RfbGluZXNpemUg IGxpbmVzaXplcyBmb3IgdGhlIGltYWdlIGluIGRzdF9kYXRhIHRvIGJlIGZpbGxlZCBpbgorKyAq IEBwYXJhbSBzcmMgICAgICAgICAgIGJ1ZmZlciB3aGljaCB3aWxsIGNvbnRhaW4gb3IgY29udGFp bnMgdGhlIGFjdHVhbCBpbWFnZSBkYXRhLCBjYW4gYmUgTlVMTAorKyAqIEBwYXJhbSBwaXhfZm10 ICAgICAgIHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIGltYWdlCisrICogQHBhcmFtIHdpZHRoICAg ICAgICAgdGhlIHdpZHRoIG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMKKysgKiBAcGFyYW0gaGVpZ2h0 ICAgICAgICB0aGUgaGVpZ2h0IG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMKKysgKiBAcGFyYW0gYWxp Z24gICAgICAgICB0aGUgdmFsdWUgdXNlZCBpbiBzcmMgZm9yIGxpbmVzaXplIGFsaWdubWVudAor KyAqIEByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgcmVxdWlyZWQgZm9yIHNyYywgYSBuZWdhdGl2 ZSBlcnJvciBjb2RlCisrICogaW4gY2FzZSBvZiBmYWlsdXJlCisrICovCisraW50IGF2X2ltYWdl X2ZpbGxfYXJyYXlzKHVpbnQ4X3QgKmRzdF9kYXRhWzRdLCBpbnQgZHN0X2xpbmVzaXplWzRdLAor KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzcmMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgIGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10LCBpbnQgd2lkdGgsIGlu dCBoZWlnaHQsIGludCBhbGlnbik7CisrCisrLyoqCisrICogUmV0dXJuIHRoZSBzaXplIGluIGJ5 dGVzIG9mIHRoZSBhbW91bnQgb2YgZGF0YSByZXF1aXJlZCB0byBzdG9yZSBhbgorKyAqIGltYWdl IHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuCisrICoKKysgKiBAcGFyYW0gcGl4X2ZtdCAgdGhl IHBpeGVsIGZvcm1hdCBvZiB0aGUgaW1hZ2UKKysgKiBAcGFyYW0gd2lkdGggICAgdGhlIHdpZHRo IG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMKKysgKiBAcGFyYW0gaGVpZ2h0ICAgdGhlIGhlaWdodCBv ZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzCisrICogQHBhcmFtIGFsaWduICAgIHRoZSBhc3N1bWVkIGxp bmVzaXplIGFsaWdubWVudAorKyAqIEByZXR1cm4gdGhlIGJ1ZmZlciBzaXplIGluIGJ5dGVzLCBh IG5lZ2F0aXZlIGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCisrICovCisraW50IGF2X2lt YWdlX2dldF9idWZmZXJfc2l6ZShlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwgaW50IHdpZHRo LCBpbnQgaGVpZ2h0LCBpbnQgYWxpZ24pOworKworKy8qKgorKyAqIENvcHkgaW1hZ2UgZGF0YSBm cm9tIGFuIGltYWdlIGludG8gYSBidWZmZXIuCisrICoKKysgKiBhdl9pbWFnZV9nZXRfYnVmZmVy X3NpemUoKSBjYW4gYmUgdXNlZCB0byBjb21wdXRlIHRoZSByZXF1aXJlZCBzaXplCisrICogZm9y IHRoZSBidWZmZXIgdG8gZmlsbC4KKysgKgorKyAqIEBwYXJhbSBkc3QgICAgICAgICAgIGEgYnVm ZmVyIGludG8gd2hpY2ggcGljdHVyZSBkYXRhIHdpbGwgYmUgY29waWVkCisrICogQHBhcmFtIGRz dF9zaXplICAgICAgdGhlIHNpemUgaW4gYnl0ZXMgb2YgZHN0CisrICogQHBhcmFtIHNyY19kYXRh ICAgICAgcG9pbnRlcnMgY29udGFpbmluZyB0aGUgc291cmNlIGltYWdlIGRhdGEKKysgKiBAcGFy YW0gc3JjX2xpbmVzaXplICBsaW5lc2l6ZXMgZm9yIHRoZSBpbWFnZSBpbiBzcmNfZGF0YQorKyAq IEBwYXJhbSBwaXhfZm10ICAgICAgIHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIHNvdXJjZSBpbWFn ZQorKyAqIEBwYXJhbSB3aWR0aCAgICAgICAgIHRoZSB3aWR0aCBvZiB0aGUgc291cmNlIGltYWdl IGluIHBpeGVscworKyAqIEBwYXJhbSBoZWlnaHQgICAgICAgIHRoZSBoZWlnaHQgb2YgdGhlIHNv dXJjZSBpbWFnZSBpbiBwaXhlbHMKKysgKiBAcGFyYW0gYWxpZ24gICAgICAgICB0aGUgYXNzdW1l ZCBsaW5lc2l6ZSBhbGlnbm1lbnQgZm9yIGRzdAorKyAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBi eXRlcyB3cml0dGVuIHRvIGRzdCwgb3IgYSBuZWdhdGl2ZSB2YWx1ZQorKyAqIChlcnJvciBjb2Rl KSBvbiBlcnJvcgorKyAqLworK2ludCBhdl9pbWFnZV9jb3B5X3RvX2J1ZmZlcih1aW50OF90ICpk c3QsIGludCBkc3Rfc2l6ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWlu dDhfdCAqIGNvbnN0IHNyY19kYXRhWzRdLCBjb25zdCBpbnQgc3JjX2xpbmVzaXplWzRdLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwgaW50 IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgYWxpZ24pOworKworKy8qKgorKyAqIENoZWNrIGlmIHRo ZSBnaXZlbiBkaW1lbnNpb24gb2YgYW4gaW1hZ2UgaXMgdmFsaWQsIG1lYW5pbmcgdGhhdCBhbGwK KysgKiBieXRlcyBvZiB0aGUgaW1hZ2UgY2FuIGJlIGFkZHJlc3NlZCB3aXRoIGEgc2lnbmVkIGlu dC4KKysgKgorKyAqIEBwYXJhbSB3IHRoZSB3aWR0aCBvZiB0aGUgcGljdHVyZQorKyAqIEBwYXJh bSBoIHRoZSBoZWlnaHQgb2YgdGhlIHBpY3R1cmUKKysgKiBAcGFyYW0gbG9nX29mZnNldCB0aGUg b2Zmc2V0IHRvIHN1bSB0byB0aGUgbG9nIGxldmVsIGZvciBsb2dnaW5nIHdpdGggbG9nX2N0eAor KyAqIEBwYXJhbSBsb2dfY3R4IHRoZSBwYXJlbnQgbG9nZ2luZyBjb250ZXh0LCBpdCBtYXkgYmUg TlVMTAorKyAqIEByZXR1cm4gPj0gMCBpZiB2YWxpZCwgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90 aGVyd2lzZQorKyAqLworK2ludCBhdl9pbWFnZV9jaGVja19zaXplKHVuc2lnbmVkIGludCB3LCB1 bnNpZ25lZCBpbnQgaCwgaW50IGxvZ19vZmZzZXQsIHZvaWQgKmxvZ19jdHgpOworKworKy8qKgor KyAqIENoZWNrIGlmIHRoZSBnaXZlbiBkaW1lbnNpb24gb2YgYW4gaW1hZ2UgaXMgdmFsaWQsIG1l YW5pbmcgdGhhdCBhbGwKKysgKiBieXRlcyBvZiBhIHBsYW5lIG9mIGFuIGltYWdlIHdpdGggdGhl IHNwZWNpZmllZCBwaXhfZm10IGNhbiBiZSBhZGRyZXNzZWQKKysgKiB3aXRoIGEgc2lnbmVkIGlu dC4KKysgKgorKyAqIEBwYXJhbSB3IHRoZSB3aWR0aCBvZiB0aGUgcGljdHVyZQorKyAqIEBwYXJh bSBoIHRoZSBoZWlnaHQgb2YgdGhlIHBpY3R1cmUKKysgKiBAcGFyYW0gbWF4X3BpeGVscyB0aGUg bWF4aW11bSBudW1iZXIgb2YgcGl4ZWxzIHRoZSB1c2VyIHdhbnRzIHRvIGFjY2VwdAorKyAqIEBw YXJhbSBwaXhfZm10IHRoZSBwaXhlbCBmb3JtYXQsIGNhbiBiZSBBVl9QSVhfRk1UX05PTkUgaWYg dW5rbm93bi4KKysgKiBAcGFyYW0gbG9nX29mZnNldCB0aGUgb2Zmc2V0IHRvIHN1bSB0byB0aGUg bG9nIGxldmVsIGZvciBsb2dnaW5nIHdpdGggbG9nX2N0eAorKyAqIEBwYXJhbSBsb2dfY3R4IHRo ZSBwYXJlbnQgbG9nZ2luZyBjb250ZXh0LCBpdCBtYXkgYmUgTlVMTAorKyAqIEByZXR1cm4gPj0g MCBpZiB2YWxpZCwgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZQorKyAqLworK2ludCBh dl9pbWFnZV9jaGVja19zaXplMih1bnNpZ25lZCBpbnQgdywgdW5zaWduZWQgaW50IGgsIGludDY0 X3QgbWF4X3BpeGVscywgZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQsIGludCBsb2dfb2Zmc2V0 LCB2b2lkICpsb2dfY3R4KTsKKysKKysvKioKKysgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc2FtcGxl IGFzcGVjdCByYXRpbyBvZiBhbiBpbWFnZSBpcyB2YWxpZC4KKysgKgorKyAqIEl0IGlzIGNvbnNp ZGVyZWQgaW52YWxpZCBpZiB0aGUgZGVub21pbmF0b3IgaXMgMCBvciBpZiBhcHBseWluZyB0aGUg cmF0aW8KKysgKiB0byB0aGUgaW1hZ2Ugc2l6ZSB3b3VsZCBtYWtlIHRoZSBzbWFsbGVyIGRpbWVu c2lvbiBsZXNzIHRoYW4gMS4gSWYgdGhlCisrICogc2FyIG51bWVyYXRvciBpcyAwLCBpdCBpcyBj b25zaWRlcmVkIHVua25vd24gYW5kIHdpbGwgcmV0dXJuIGFzIHZhbGlkLgorKyAqCisrICogQHBh cmFtIHcgd2lkdGggb2YgdGhlIGltYWdlCisrICogQHBhcmFtIGggaGVpZ2h0IG9mIHRoZSBpbWFn ZQorKyAqIEBwYXJhbSBzYXIgc2FtcGxlIGFzcGVjdCByYXRpbyBvZiB0aGUgaW1hZ2UKKysgKiBA cmV0dXJuIDAgaWYgdmFsaWQsIGEgbmVnYXRpdmUgQVZFUlJPUiBjb2RlIG90aGVyd2lzZQorKyAq LworK2ludCBhdl9pbWFnZV9jaGVja19zYXIodW5zaWduZWQgaW50IHcsIHVuc2lnbmVkIGludCBo LCBBVlJhdGlvbmFsIHNhcik7CisrCisrLyoqCisrICogT3ZlcndyaXRlIHRoZSBpbWFnZSBkYXRh IHdpdGggYmxhY2suIFRoaXMgaXMgc3VpdGFibGUgZm9yIGZpbGxpbmcgYQorKyAqIHN1Yi1yZWN0 YW5nbGUgb2YgYW4gaW1hZ2UsIG1lYW5pbmcgdGhlIHBhZGRpbmcgYmV0d2VlbiB0aGUgcmlnaHQg bW9zdCBwaXhlbAorKyAqIGFuZCB0aGUgbGVmdCBtb3N0IHBpeGVsIG9uIHRoZSBuZXh0IGxpbmUg d2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4uIEZvciBzb21lCisrICogZm9ybWF0cywgdGhlIGltYWdl IHNpemUgbWlnaHQgYmUgcm91bmRlZCB1cCBkdWUgdG8gaW5oZXJlbnQgYWxpZ25tZW50LgorKyAq CisrICogSWYgdGhlIHBpeGVsIGZvcm1hdCBoYXMgYWxwaGEsIHRoZSBhbHBoYSBpcyBjbGVhcmVk IHRvIG9wYXF1ZS4KKysgKgorKyAqIFRoaXMgY2FuIHJldHVybiBhbiBlcnJvciBpZiB0aGUgcGl4 ZWwgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIE5vcm1hbGx5LCBhbGwKKysgKiBub24taHdhY2Nl bCBwaXhlbCBmb3JtYXRzIHNob3VsZCBiZSBzdXBwb3J0ZWQuCisrICoKKysgKiBQYXNzaW5nIE5V TEwgZm9yIGRzdF9kYXRhIGlzIGFsbG93ZWQuIFRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgd2hl dGhlciB0aGUKKysgKiBvcGVyYXRpb24gd291bGQgaGF2ZSBzdWNjZWVkZWQuIChJdCBjYW4gcmV0 dXJuIGFuIGVycm9yIGlmIHRoZSBwaXhfZm10IGlzCisrICogbm90IHN1cHBvcnRlZC4pCisrICoK KysgKiBAcGFyYW0gZHN0X2RhdGEgICAgICBkYXRhIHBvaW50ZXJzIHRvIGRlc3RpbmF0aW9uIGlt YWdlCisrICogQHBhcmFtIGRzdF9saW5lc2l6ZSAgbGluZXNpemVzIGZvciB0aGUgZGVzdGluYXRp b24gaW1hZ2UKKysgKiBAcGFyYW0gcGl4X2ZtdCAgICAgICB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRo ZSBpbWFnZQorKyAqIEBwYXJhbSByYW5nZSAgICAgICAgIHRoZSBjb2xvciByYW5nZSBvZiB0aGUg aW1hZ2UgKGltcG9ydGFudCBmb3IgY29sb3JzcGFjZXMgc3VjaCBhcyBZVVYpCisrICogQHBhcmFt IHdpZHRoICAgICAgICAgdGhlIHdpZHRoIG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMKKysgKiBAcGFy YW0gaGVpZ2h0ICAgICAgICB0aGUgaGVpZ2h0IG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMKKysgKiBA cmV0dXJuIDAgaWYgdGhlIGltYWdlIGRhdGEgd2FzIGNsZWFyZWQsIGEgbmVnYXRpdmUgQVZFUlJP UiBjb2RlIG90aGVyd2lzZQorKyAqLworK2ludCBhdl9pbWFnZV9maWxsX2JsYWNrKHVpbnQ4X3Qg KiBjb25zdCBkc3RfZGF0YVs0XSwgY29uc3QgcHRyZGlmZl90IGRzdF9saW5lc2l6ZVs0XSwKKysg ICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwgZW51bSBB VkNvbG9yUmFuZ2UgcmFuZ2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBp bnQgaGVpZ2h0KTsKKysKKysvKioKKysgKiBPdmVyd3JpdGUgdGhlIGltYWdlIGRhdGEgd2l0aCBh IGNvbG9yLiBUaGlzIGlzIHN1aXRhYmxlIGZvciBmaWxsaW5nIGEKKysgKiBzdWItcmVjdGFuZ2xl IG9mIGFuIGltYWdlLCBtZWFuaW5nIHRoZSBwYWRkaW5nIGJldHdlZW4gdGhlIHJpZ2h0IG1vc3Qg cGl4ZWwKKysgKiBhbmQgdGhlIGxlZnQgbW9zdCBwaXhlbCBvbiB0aGUgbmV4dCBsaW5lIHdpbGwg bm90IGJlIG92ZXJ3cml0dGVuLiBGb3Igc29tZQorKyAqIGZvcm1hdHMsIHRoZSBpbWFnZSBzaXpl IG1pZ2h0IGJlIHJvdW5kZWQgdXAgZHVlIHRvIGluaGVyZW50IGFsaWdubWVudC4KKysgKgorKyAq IElmIHRoZSBwaXhlbCBmb3JtYXQgaGFzIGFscGhhLCBpdCBpcyBhbHNvIHJlcGxhY2VkLiBDb2xv ciBjb21wb25lbnQgdmFsdWVzCisrICogYXJlIGludGVycHJldGVkIGFzIG5hdGl2ZSBpbnRlZ2Vy cyAob3IgaW50ZmxvYXRzKSByZWdhcmRsZXNzIG9mIGFjdHVhbCBwaXhlbAorKyAqIGZvcm1hdCBl bmRpYW5uZXNzLgorKyAqCisrICogVGhpcyBjYW4gcmV0dXJuIGFuIGVycm9yIGlmIHRoZSBwaXhl bCBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4gTm9ybWFsbHksIGFsbAorKyAqIG5vbi1od2FjY2Vs IHBpeGVsIGZvcm1hdHMgc2hvdWxkIGJlIHN1cHBvcnRlZC4KKysgKgorKyAqIFBhc3NpbmcgTlVM TCBmb3IgZHN0X2RhdGEgaXMgYWxsb3dlZC4gVGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyB3aGV0 aGVyIHRoZQorKyAqIG9wZXJhdGlvbiB3b3VsZCBoYXZlIHN1Y2NlZWRlZC4gKEl0IGNhbiByZXR1 cm4gYW4gZXJyb3IgaWYgdGhlIHBpeF9mbXQgaXMKKysgKiBub3Qgc3VwcG9ydGVkLikKKysgKgor KyAqIEBwYXJhbSBkc3RfZGF0YSAgICAgIGRhdGEgcG9pbnRlcnMgdG8gZGVzdGluYXRpb24gaW1h Z2UKKysgKiBAcGFyYW0gZHN0X2xpbmVzaXplICBsaW5lc2l6ZXMgZm9yIHRoZSBkZXN0aW5hdGlv biBpbWFnZQorKyAqIEBwYXJhbSBwaXhfZm10ICAgICAgIHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhl IGltYWdlCisrICogQHBhcmFtIGNvbG9yICAgICAgICAgdGhlIGNvbG9yIGNvbXBvbmVudHMgdG8g YmUgdXNlZCBmb3IgdGhlIGZpbGwKKysgKiBAcGFyYW0gd2lkdGggICAgICAgICB0aGUgd2lkdGgg b2YgdGhlIGltYWdlIGluIHBpeGVscworKyAqIEBwYXJhbSBoZWlnaHQgICAgICAgIHRoZSBoZWln aHQgb2YgdGhlIGltYWdlIGluIHBpeGVscworKyAqIEBwYXJhbSBmbGFncyAgICAgICAgIGN1cnJl bnRseSB1bnVzZWQKKysgKiBAcmV0dXJuIDAgaWYgdGhlIGltYWdlIGRhdGEgd2FzIGZpbGxlZCwg YSBuZWdhdGl2ZSBBVkVSUk9SIGNvZGUgb3RoZXJ3aXNlCisrICovCisraW50IGF2X2ltYWdlX2Zp bGxfY29sb3IodWludDhfdCAqIGNvbnN0IGRzdF9kYXRhWzRdLCBjb25zdCBwdHJkaWZmX3QgZHN0 X2xpbmVzaXplWzRdLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZQaXhlbEZvcm1h dCBwaXhfZm10LCBjb25zdCB1aW50MzJfdCBjb2xvcls0XSwKKysgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmbGFncyk7CisrCisrLyoqCisrICogQH0K KysgKi8KKysKKysKKysjZW5kaWYgLyogQVZVVElMX0lNR1VUSUxTX0ggKi8KK2RpZmYgLXVwIE11 c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xp YmF2dXRpbC9pbnRmbG9hdC5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsv bWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2ludGZsb2F0LmgKKy0tLSBNdXNl U2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJh dnV0aWwvaW50ZmxvYXQuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc3Mzg1OTQyICsw MjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9m Zm1wZWcvdjkvbGliYXZ1dGlsL2ludGZsb2F0LmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42NzczNjIw NzIgKzAyMDAKK0BAIC0wLDAgKzEsNzcgQEAKKysvKgorKyAqIENvcHlyaWdodCAoYykgMjAxMSBN YW5zIFJ1bGxnYXJkCisrICoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoK KysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIElu Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMw MSBVU0EKKysgKi8KKysKKysjaWZuZGVmIEFWVVRJTF9JTlRGTE9BVF9ICisrI2RlZmluZSBBVlVU SUxfSU5URkxPQVRfSAorKworKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSAiYXR0cmli dXRlcy5oIgorKworK3VuaW9uIGF2X2ludGZsb2F0MzIgeworKyAgICB1aW50MzJfdCBpOworKyAg ICBmbG9hdCAgICBmOworK307CisrCisrdW5pb24gYXZfaW50ZmxvYXQ2NCB7CisrICAgIHVpbnQ2 NF90IGk7CisrICAgIGRvdWJsZSAgIGY7CisrfTsKKysKKysvKioKKysgKiBSZWludGVycHJldCBh IDMyLWJpdCBpbnRlZ2VyIGFzIGEgZmxvYXQuCisrICovCisrc3RhdGljIGF2X2Fsd2F5c19pbmxp bmUgZmxvYXQgYXZfaW50MmZsb2F0KHVpbnQzMl90IGkpCisreworKyAgICB1bmlvbiBhdl9pbnRm bG9hdDMyIHY7CisrICAgIHYuaSA9IGk7CisrICAgIHJldHVybiB2LmY7CisrfQorKworKy8qKgor KyAqIFJlaW50ZXJwcmV0IGEgZmxvYXQgYXMgYSAzMi1iaXQgaW50ZWdlci4KKysgKi8KKytzdGF0 aWMgYXZfYWx3YXlzX2lubGluZSB1aW50MzJfdCBhdl9mbG9hdDJpbnQoZmxvYXQgZikKKyt7Cisr ICAgIHVuaW9uIGF2X2ludGZsb2F0MzIgdjsKKysgICAgdi5mID0gZjsKKysgICAgcmV0dXJuIHYu aTsKKyt9CisrCisrLyoqCisrICogUmVpbnRlcnByZXQgYSA2NC1iaXQgaW50ZWdlciBhcyBhIGRv dWJsZS4KKysgKi8KKytzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBkb3VibGUgYXZfaW50MmRvdWJs ZSh1aW50NjRfdCBpKQorK3sKKysgICAgdW5pb24gYXZfaW50ZmxvYXQ2NCB2OworKyAgICB2Lmkg PSBpOworKyAgICByZXR1cm4gdi5mOworK30KKysKKysvKioKKysgKiBSZWludGVycHJldCBhIGRv dWJsZSBhcyBhIDY0LWJpdCBpbnRlZ2VyLgorKyAqLworK3N0YXRpYyBhdl9hbHdheXNfaW5saW5l IHVpbnQ2NF90IGF2X2RvdWJsZTJpbnQoZG91YmxlIGYpCisreworKyAgICB1bmlvbiBhdl9pbnRm bG9hdDY0IHY7CisrICAgIHYuZiA9IGY7CisrICAgIHJldHVybiB2Lmk7CisrfQorKworKyNlbmRp ZiAvKiBBVlVUSUxfSU5URkxPQVRfSCAqLworZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3NyYy9m cmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2xvZy5oLmZmbXBl ZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcv djkvbGliYXZ1dGlsL2xvZy5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVk aWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL2xvZy5oLmZmbXBlZzkJMjAyNi0wOS0w NyAxMjoyMzo0Ny42Nzc1Mjc2MzAgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1l d29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvbG9nLmgJMjAyNi0wOS0w NyAxMjoyMzo0Ny42Nzc0NDU4OTQgKzAyMDAKK0BAIC0wLDAgKzEsNDI3IEBACisrLyoKKysgKiBj b3B5cmlnaHQgKGMpIDIwMDYgTWljaGFlbCBOaWVkZXJtYXllciA8bWljaGFlbG5pQGdteC5hdD4K KysgKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKysgKgorKyAqIEZGbXBlZyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisr ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyCisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V CisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysg KgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyAqLwor KworKyNpZm5kZWYgQVZVVElMX0xPR19ICisrI2RlZmluZSBBVlVUSUxfTE9HX0gKKysKKysjaW5j bHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgImF0dHJpYnV0ZXMuaCIKKysjaW5jbHVkZSAidmVy c2lvbi5oIgorKworK3R5cGVkZWYgZW51bSB7CisrICAgIEFWX0NMQVNTX0NBVEVHT1JZX05BID0g MCwKKysgICAgQVZfQ0xBU1NfQ0FURUdPUllfSU5QVVQsCisrICAgIEFWX0NMQVNTX0NBVEVHT1JZ X09VVFBVVCwKKysgICAgQVZfQ0xBU1NfQ0FURUdPUllfTVVYRVIsCisrICAgIEFWX0NMQVNTX0NB VEVHT1JZX0RFTVVYRVIsCisrICAgIEFWX0NMQVNTX0NBVEVHT1JZX0VOQ09ERVIsCisrICAgIEFW X0NMQVNTX0NBVEVHT1JZX0RFQ09ERVIsCisrICAgIEFWX0NMQVNTX0NBVEVHT1JZX0ZJTFRFUiwK KysgICAgQVZfQ0xBU1NfQ0FURUdPUllfQklUU1RSRUFNX0ZJTFRFUiwKKysgICAgQVZfQ0xBU1Nf Q0FURUdPUllfU1dTQ0FMRVIsCisrICAgIEFWX0NMQVNTX0NBVEVHT1JZX1NXUkVTQU1QTEVSLAor KyAgICBBVl9DTEFTU19DQVRFR09SWV9IV0RFVklDRSwKKysgICAgQVZfQ0xBU1NfQ0FURUdPUllf REVWSUNFX1ZJREVPX09VVFBVVCA9IDQwLAorKyAgICBBVl9DTEFTU19DQVRFR09SWV9ERVZJQ0Vf VklERU9fSU5QVVQsCisrICAgIEFWX0NMQVNTX0NBVEVHT1JZX0RFVklDRV9BVURJT19PVVRQVVQs CisrICAgIEFWX0NMQVNTX0NBVEVHT1JZX0RFVklDRV9BVURJT19JTlBVVCwKKysgICAgQVZfQ0xB U1NfQ0FURUdPUllfREVWSUNFX09VVFBVVCwKKysgICAgQVZfQ0xBU1NfQ0FURUdPUllfREVWSUNF X0lOUFVULAorKyAgICBBVl9DTEFTU19DQVRFR09SWV9OQiAgLy8vPCBub3QgcGFydCBvZiBBQkkv QVBJCisrfUFWQ2xhc3NDYXRlZ29yeTsKKysKKytlbnVtIEFWQ2xhc3NTdGF0ZUZsYWdzIHsKKysg ICAgLyoqCisrICAgICAqIE9iamVjdCBpbml0aWFsaXphdGlvbiBoYXMgZmluaXNoZWQgYW5kIGl0 IGlzIG5vdyBpbiB0aGUgJ3J1bnRpbWUnIHN0YWdlLgorKyAgICAgKiBUaGlzIGFmZmVjdHMgZS5n LiB3aGF0IG9wdGlvbnMgY2FuIGJlIHNldCBvbiB0aGUgb2JqZWN0IChvbmx5CisrICAgICAqIEFW X09QVF9GTEFHX1JVTlRJTUVfUEFSQU0gb3B0aW9ucyBjYW4gYmUgc2V0IG9uIGluaXRpYWxpemVk IG9iamVjdHMpLgorKyAgICAgKi8KKysgICAgQVZfQ0xBU1NfU1RBVEVfSU5JVElBTElaRUQgICAg ICAgICA9ICgxIDw8IDApLAorK307CisrCisrI2RlZmluZSBBVl9JU19JTlBVVF9ERVZJQ0UoY2F0 ZWdvcnkpIFwKKysgICAgKCgoY2F0ZWdvcnkpID09IEFWX0NMQVNTX0NBVEVHT1JZX0RFVklDRV9W SURFT19JTlBVVCkgfHwgXAorKyAgICAgKChjYXRlZ29yeSkgPT0gQVZfQ0xBU1NfQ0FURUdPUllf REVWSUNFX0FVRElPX0lOUFVUKSB8fCBcCisrICAgICAoKGNhdGVnb3J5KSA9PSBBVl9DTEFTU19D QVRFR09SWV9ERVZJQ0VfSU5QVVQpKQorKworKyNkZWZpbmUgQVZfSVNfT1VUUFVUX0RFVklDRShj YXRlZ29yeSkgXAorKyAgICAoKChjYXRlZ29yeSkgPT0gQVZfQ0xBU1NfQ0FURUdPUllfREVWSUNF X1ZJREVPX09VVFBVVCkgfHwgXAorKyAgICAgKChjYXRlZ29yeSkgPT0gQVZfQ0xBU1NfQ0FURUdP UllfREVWSUNFX0FVRElPX09VVFBVVCkgfHwgXAorKyAgICAgKChjYXRlZ29yeSkgPT0gQVZfQ0xB U1NfQ0FURUdPUllfREVWSUNFX09VVFBVVCkpCisrCisrc3RydWN0IEFWT3B0aW9uUmFuZ2VzOwor KworKy8qKgorKyAqIERlc2NyaWJlIHRoZSBjbGFzcyBvZiBhbiBBVkNsYXNzIGNvbnRleHQgc3Ry dWN0dXJlLiBUaGF0IGlzIGFuCisrICogYXJiaXRyYXJ5IHN0cnVjdCBvZiB3aGljaCB0aGUgZmly c3QgZmllbGQgaXMgYSBwb2ludGVyIHRvIGFuCisrICogQVZDbGFzcyBzdHJ1Y3QgKGUuZy4gQVZD b2RlY0NvbnRleHQsIEFWRm9ybWF0Q29udGV4dCBldGMuKS4KKysgKi8KKyt0eXBlZGVmIHN0cnVj dCBBVkNsYXNzIHsKKysgICAgLyoqCisrICAgICAqIFRoZSBuYW1lIG9mIHRoZSBjbGFzczsgdXN1 YWxseSBpdCBpcyB0aGUgc2FtZSBuYW1lIGFzIHRoZQorKyAgICAgKiBjb250ZXh0IHN0cnVjdHVy ZSB0eXBlIHRvIHdoaWNoIHRoZSBBVkNsYXNzIGlzIGFzc29jaWF0ZWQuCisrICAgICAqLworKyAg ICBjb25zdCBjaGFyKiBjbGFzc19uYW1lOworKworKyAgICAvKioKKysgICAgICogQSBwb2ludGVy IHRvIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGUgbmFtZSBvZiBhIGNvbnRleHQKKysgICAg ICogaW5zdGFuY2UgY3R4IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2xhc3MuCisrICAgICAqLworKyAg ICBjb25zdCBjaGFyKiAoKml0ZW1fbmFtZSkodm9pZCogY3R4KTsKKysKKysgICAgLyoqCisrICAg ICAqIEFuIGFycmF5IG9mIG9wdGlvbnMgZm9yIHRoZSBzdHJ1Y3R1cmUgb3IgTlVMTC4KKysgICAg ICogV2hlbiBub24tTlVMTCwgdGhlIGFycmF5IG11c3QgYmUgdGVybWluYXRlZCBieSBhbiBvcHRp b24gd2l0aCBhIE5VTEwKKysgICAgICogbmFtZS4KKysgICAgICoKKysgICAgICogQHNlZSBhdl9z ZXRfZGVmYXVsdF9vcHRpb25zKCkKKysgICAgICovCisrICAgIGNvbnN0IHN0cnVjdCBBVk9wdGlv biAqb3B0aW9uOworKworKyAgICAvKioKKysgICAgICogTElCQVZVVElMX1ZFUlNJT04gd2l0aCB3 aGljaCB0aGlzIHN0cnVjdHVyZSB3YXMgY3JlYXRlZC4KKysgICAgICogVGhpcyBpcyB1c2VkIHRv IGFsbG93IGZpZWxkcyB0byBiZSBhZGRlZCB0byBBVkNsYXNzIHdpdGhvdXQgcmVxdWlyaW5nCisr ICAgICAqIG1ham9yIHZlcnNpb24gYnVtcHMgZXZlcnl3aGVyZS4KKysgICAgICovCisrCisrICAg IGludCB2ZXJzaW9uOworKworKyAgICAvKioKKysgICAgICogT2Zmc2V0IGluIHRoZSBzdHJ1Y3R1 cmUgd2hlcmUgdGhlIGxvZyBsZXZlbCBvZmZzZXQgaXMgc3RvcmVkLiBUaGUgbG9nCisrICAgICAq IGxldmVsIG9mZnNldCBpcyBhbiBpbnQgYWRkZWQgdG8gdGhlIGxvZyBsZXZlbCBmb3IgbG9nZ2lu ZyB3aXRoIHRoaXMKKysgICAgICogb2JqZWN0IGFzIHRoZSBjb250ZXh0LgorKyAgICAgKgorKyAg ICAgKiAwIG1lYW5zIHRoZXJlIGlzIG5vIHN1Y2ggdmFyaWFibGUuCisrICAgICAqLworKyAgICBp bnQgbG9nX2xldmVsX29mZnNldF9vZmZzZXQ7CisrCisrICAgIC8qKgorKyAgICAgKiBPZmZzZXQg aW4gdGhlIHN0cnVjdHVyZSB3aGVyZSBhIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBjb250ZXh0IGZv cgorKyAgICAgKiBsb2dnaW5nIGlzIHN0b3JlZC4gRm9yIGV4YW1wbGUgYSBkZWNvZGVyIGNvdWxk IHBhc3MgaXRzIEFWQ29kZWNDb250ZXh0CisrICAgICAqIHRvIGV2YWwgYXMgc3VjaCBhIHBhcmVu dCBjb250ZXh0LCB3aGljaCBhbiA6OmF2X2xvZygpIGltcGxlbWVudGF0aW9uCisrICAgICAqIGNv dWxkIHRoZW4gbGV2ZXJhZ2UgdG8gZGlzcGxheSB0aGUgcGFyZW50IGNvbnRleHQuCisrICAgICAq CisrICAgICAqIFdoZW4gdGhlIHBvaW50ZXIgaXMgTlVMTCwgb3IgdGhpcyBvZmZzZXQgaXMgemVy bywgdGhlIG9iamVjdCBpcyBhc3N1bWVkCisrICAgICAqIHRvIGhhdmUgbm8gcGFyZW50LgorKyAg ICAgKi8KKysgICAgaW50IHBhcmVudF9sb2dfY29udGV4dF9vZmZzZXQ7CisrCisrICAgIC8qKgor KyAgICAgKiBDYXRlZ29yeSB1c2VkIGZvciB2aXN1YWxpemF0aW9uIChsaWtlIGNvbG9yKS4KKysg ICAgICoKKysgICAgICogT25seSB1c2VkIHdoZW4gOjpnZXRfY2F0ZWdvcnkoKSBpcyBOVUxMLiBV c2UgdGhpcyBmaWVsZCB3aGVuIGFsbAorKyAgICAgKiBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBo YXZlIHRoZSBzYW1lIGNhdGVnb3J5LCB1c2UgOjpnZXRfY2F0ZWdvcnkoKQorKyAgICAgKiBvdGhl cndpc2UuCisrICAgICAqLworKyAgICBBVkNsYXNzQ2F0ZWdvcnkgY2F0ZWdvcnk7CisrCisrICAg IC8qKgorKyAgICAgKiBDYWxsYmFjayB0byByZXR1cm4gdGhlIGluc3RhbmNlIGNhdGVnb3J5LiBV c2UgdGhpcyBjYWxsYmFjayB3aGVuCisrICAgICAqIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgdGhp cyBjbGFzcyBtYXkgaGF2ZSBkaWZmZXJlbnQgY2F0ZWdvcmllcywKKysgICAgICogOjpjYXRlZ29y eSBvdGhlcndpc2UuCisrICAgICAqLworKyAgICBBVkNsYXNzQ2F0ZWdvcnkgKCpnZXRfY2F0ZWdv cnkpKHZvaWQqIGN0eCk7CisrCisrICAgIC8qKgorKyAgICAgKiBDYWxsYmFjayB0byByZXR1cm4g dGhlIHN1cHBvcnRlZC9hbGxvd2VkIHJhbmdlcy4KKysgICAgICovCisrICAgIGludCAoKnF1ZXJ5 X3Jhbmdlcykoc3RydWN0IEFWT3B0aW9uUmFuZ2VzICoqLCB2b2lkICpvYmosIGNvbnN0IGNoYXIg KmtleSwgaW50IGZsYWdzKTsKKysKKysgICAgLyoqCisrICAgICAqIFJldHVybiBuZXh0IEFWT3B0 aW9ucy1lbmFibGVkIGNoaWxkIG9yIE5VTEwKKysgICAgICovCisrICAgIHZvaWQqICgqY2hpbGRf bmV4dCkodm9pZCAqb2JqLCB2b2lkICpwcmV2KTsKKysKKysgICAgLyoqCisrICAgICAqIEl0ZXJh dGUgb3ZlciB0aGUgQVZDbGFzc2VzIGNvcnJlc3BvbmRpbmcgdG8gcG90ZW50aWFsIEFWT3B0aW9u cy1lbmFibGVkCisrICAgICAqIGNoaWxkcmVuLgorKyAgICAgKgorKyAgICAgKiBAcGFyYW0gaXRl ciBwb2ludGVyIHRvIG9wYXF1ZSBpdGVyYXRpb24gc3RhdGUuIFRoZSBjYWxsZXIgbXVzdCBpbml0 aWFsaXplCisrICAgICAqICAgICAgICAgICAgICppdGVyIHRvIE5VTEwgYmVmb3JlIHRoZSBmaXJz dCBjYWxsLgorKyAgICAgKiBAcmV0dXJuIEFWQ2xhc3MgZm9yIHRoZSBuZXh0IEFWT3B0aW9ucy1l bmFibGVkIGNoaWxkIG9yIE5VTEwgaWYgdGhlcmUgYXJlCisrICAgICAqICAgICAgICAgbm8gbW9y ZSBzdWNoIGNoaWxkcmVuLgorKyAgICAgKgorKyAgICAgKiBAbm90ZSBUaGUgZGlmZmVyZW5jZSBi ZXR3ZWVuIDo6Y2hpbGRfbmV4dCgpIGFuZCA6OmNoaWxkX2NsYXNzX2l0ZXJhdGUoKQorKyAgICAg KiAgICAgICBpcyB0aGF0IDo6Y2hpbGRfbmV4dCgpIGl0ZXJhdGVzIG92ZXIgX2FjdHVhbF8gY2hp bGRyZW4gb2YgYW4KKysgICAgICogICAgICAgX2V4aXN0aW5nXyBvYmplY3QgaW5zdGFuY2UsIHdo aWxlIDo6Y2hpbGRfY2xhc3NfaXRlcmF0ZSgpIGl0ZXJhdGVzCisrICAgICAqICAgICAgIG92ZXIg dGhlIGNsYXNzZXMgb2YgYWxsIF9wb3RlbnRpYWxfIGNoaWxkcmVuIG9mIGFueSBwb3NzaWJsZQor KyAgICAgKiAgICAgICBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgorKyAgICAgKi8KKysgICAgY29u c3Qgc3RydWN0IEFWQ2xhc3MqICgqY2hpbGRfY2xhc3NfaXRlcmF0ZSkodm9pZCAqKml0ZXIpOwor KworKyAgICAvKioKKysgICAgICogV2hlbiBub24temVybywgb2Zmc2V0IGluIHRoZSBvYmplY3Qg dG8gYW4gdW5zaWduZWQgaW50IGhvbGRpbmcgb2JqZWN0CisrICAgICAqIHN0YXRlIGZsYWdzLCBh IGNvbWJpbmF0aW9uIG9mIEFWQ2xhc3NTdGF0ZUZsYWdzIHZhbHVlcy4gVGhlIGZsYWdzIGFyZQor KyAgICAgKiB1cGRhdGVkIGJ5IHRoZSBvYmplY3QgdG8gc2lnbmFsIGl0cyBzdGF0ZSB0byB0aGUg Z2VuZXJpYyBjb2RlLgorKyAgICAgKgorKyAgICAgKiBBZGRlZCBpbiB2ZXJzaW9uIDU5LjQxLjEw MC4KKysgICAgICovCisrICAgIGludCBzdGF0ZV9mbGFnc19vZmZzZXQ7CisrfSBBVkNsYXNzOwor KworKy8qKgorKyAqIEBhZGR0b2dyb3VwIGxhdnVfbG9nCisrICoKKysgKiBAeworKyAqCisrICog QGRlZmdyb3VwIGxhdnVfbG9nX2NvbnN0YW50cyBMb2dnaW5nIENvbnN0YW50cworKyAqCisrICog QHsKKysgKi8KKysKKysvKioKKysgKiBQcmludCBubyBvdXRwdXQuCisrICovCisrI2RlZmluZSBB Vl9MT0dfUVVJRVQgICAgLTgKKysKKysvKioKKysgKiBTb21ldGhpbmcgd2VudCByZWFsbHkgd3Jv bmcgYW5kIHdlIHdpbGwgY3Jhc2ggbm93LgorKyAqLworKyNkZWZpbmUgQVZfTE9HX1BBTklDICAg ICAwCisrCisrLyoqCisrICogU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHJlY292ZXJ5IGlzIG5v dCBwb3NzaWJsZS4KKysgKiBGb3IgZXhhbXBsZSwgbm8gaGVhZGVyIHdhcyBmb3VuZCBmb3IgYSBm b3JtYXQgd2hpY2ggZGVwZW5kcworKyAqIG9uIGhlYWRlcnMgb3IgYW4gaWxsZWdhbCBjb21iaW5h dGlvbiBvZiBwYXJhbWV0ZXJzIGlzIHVzZWQuCisrICovCisrI2RlZmluZSBBVl9MT0dfRkFUQUwg ICAgIDgKKysKKysvKioKKysgKiBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgY2Fubm90IGxvc3Ns ZXNzbHkgYmUgcmVjb3ZlcmVkLgorKyAqIEhvd2V2ZXIsIG5vdCBhbGwgZnV0dXJlIGRhdGEgaXMg YWZmZWN0ZWQuCisrICovCisrI2RlZmluZSBBVl9MT0dfRVJST1IgICAgMTYKKysKKysvKioKKysg KiBTb21ldGhpbmcgc29tZWhvdyBkb2VzIG5vdCBsb29rIGNvcnJlY3QuIFRoaXMgbWF5IG9yIG1h eSBub3QKKysgKiBsZWFkIHRvIHByb2JsZW1zLiBBbiBleGFtcGxlIHdvdWxkIGJlIHRoZSB1c2Ug b2YgJy12c3RyaWN0IC0yJy4KKysgKi8KKysjZGVmaW5lIEFWX0xPR19XQVJOSU5HICAyNAorKwor Ky8qKgorKyAqIFN0YW5kYXJkIGluZm9ybWF0aW9uLgorKyAqLworKyNkZWZpbmUgQVZfTE9HX0lO Rk8gICAgIDMyCisrCisrLyoqCisrICogRGV0YWlsZWQgaW5mb3JtYXRpb24uCisrICovCisrI2Rl ZmluZSBBVl9MT0dfVkVSQk9TRSAgNDAKKysKKysvKioKKysgKiBTdHVmZiB3aGljaCBpcyBvbmx5 IHVzZWZ1bCBmb3IgbGliYXYqIGRldmVsb3BlcnMuCisrICovCisrI2RlZmluZSBBVl9MT0dfREVC VUcgICAgNDgKKysKKysvKioKKysgKiBFeHRyZW1lbHkgdmVyYm9zZSBkZWJ1Z2dpbmcsIHVzZWZ1 bCBmb3IgbGliYXYqIGRldmVsb3BtZW50LgorKyAqLworKyNkZWZpbmUgQVZfTE9HX1RSQUNFICAg IDU2CisrCisrI2RlZmluZSBBVl9MT0dfTUFYX09GRlNFVCAoQVZfTE9HX1RSQUNFIC0gQVZfTE9H X1FVSUVUKQorKworKy8qKgorKyAqIEB9CisrICovCisrCisrLyoqCisrICogU2V0cyBhZGRpdGlv bmFsIGNvbG9ycyBmb3IgZXh0ZW5kZWQgZGVidWdnaW5nIHNlc3Npb25zLgorKyAqIEBjb2RlCisr ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHfEFWX0xPR19DKDEzNCksICJNZXNzYWdlIGluIHB1 cnBsZVxuIik7CisrICAgQGVuZGNvZGUKKysgKiBSZXF1aXJlcyAyNTZjb2xvciB0ZXJtaW5hbCBz dXBwb3J0LiBVc2VzIG91dHNpZGUgZGVidWdnaW5nIGlzIG5vdAorKyAqIHJlY29tbWVuZGVkLgor KyAqLworKyNkZWZpbmUgQVZfTE9HX0MoeCkgKCh4KSA8PCA4KQorKworKy8qKgorKyAqIFNlbmQg dGhlIHNwZWNpZmllZCBtZXNzYWdlIHRvIHRoZSBsb2cgaWYgdGhlIGxldmVsIGlzIGxlc3MgdGhh biBvciBlcXVhbAorKyAqIHRvIHRoZSBjdXJyZW50IGF2X2xvZ19sZXZlbC4gQnkgZGVmYXVsdCwg YWxsIGxvZ2dpbmcgbWVzc2FnZXMgYXJlIHNlbnQgdG8KKysgKiBzdGRlcnIuIFRoaXMgYmVoYXZp b3IgY2FuIGJlIGFsdGVyZWQgYnkgc2V0dGluZyBhIGRpZmZlcmVudCBsb2dnaW5nIGNhbGxiYWNr CisrICogZnVuY3Rpb24uCisrICogQHNlZSBhdl9sb2dfc2V0X2NhbGxiYWNrCisrICoKKysgKiBA cGFyYW0gYXZjbCBBIHBvaW50ZXIgdG8gYW4gYXJiaXRyYXJ5IHN0cnVjdCBvZiB3aGljaCB0aGUg Zmlyc3QgZmllbGQgaXMgYQorKyAqICAgICAgICBwb2ludGVyIHRvIGFuIEFWQ2xhc3Mgc3RydWN0 IG9yIE5VTEwgaWYgZ2VuZXJhbCBsb2cuCisrICogQHBhcmFtIGxldmVsIFRoZSBpbXBvcnRhbmNl IGxldmVsIG9mIHRoZSBtZXNzYWdlIGV4cHJlc3NlZCB1c2luZyBhIEByZWYKKysgKiAgICAgICAg bGF2dV9sb2dfY29uc3RhbnRzICJMb2dnaW5nIENvbnN0YW50Ii4KKysgKiBAcGFyYW0gZm10IFRo ZSBmb3JtYXQgc3RyaW5nIChwcmludGYtY29tcGF0aWJsZSkgdGhhdCBzcGVjaWZpZXMgaG93Cisr ICogICAgICAgIHN1YnNlcXVlbnQgYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG8gb3V0cHV0Lgor KyAqLworK3ZvaWQgYXZfbG9nKHZvaWQgKmF2Y2wsIGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10 LCAuLi4pIGF2X3ByaW50Zl9mb3JtYXQoMywgNCk7CisrCisrLyoqCisrICogU2VuZCB0aGUgc3Bl Y2lmaWVkIG1lc3NhZ2UgdG8gdGhlIGxvZyBvbmNlIHdpdGggdGhlIGluaXRpYWxfbGV2ZWwgYW5k IHRoZW4gd2l0aAorKyAqIHRoZSBzdWJzZXF1ZW50X2xldmVsLiBCeSBkZWZhdWx0LCBhbGwgbG9n Z2luZyBtZXNzYWdlcyBhcmUgc2VudCB0bworKyAqIHN0ZGVyci4gVGhpcyBiZWhhdmlvciBjYW4g YmUgYWx0ZXJlZCBieSBzZXR0aW5nIGEgZGlmZmVyZW50IGxvZ2dpbmcgY2FsbGJhY2sKKysgKiBm dW5jdGlvbi4KKysgKiBAc2VlIGF2X2xvZworKyAqCisrICogQHBhcmFtIGF2Y2wgQSBwb2ludGVy IHRvIGFuIGFyYml0cmFyeSBzdHJ1Y3Qgb2Ygd2hpY2ggdGhlIGZpcnN0IGZpZWxkIGlzIGEKKysg KiAgICAgICAgcG9pbnRlciB0byBhbiBBVkNsYXNzIHN0cnVjdCBvciBOVUxMIGlmIGdlbmVyYWwg bG9nLgorKyAqIEBwYXJhbSBpbml0aWFsX2xldmVsIGltcG9ydGFuY2UgbGV2ZWwgb2YgdGhlIG1l c3NhZ2UgZXhwcmVzc2VkIHVzaW5nIGEgQHJlZgorKyAqICAgICAgICBsYXZ1X2xvZ19jb25zdGFu dHMgIkxvZ2dpbmcgQ29uc3RhbnQiIGZvciB0aGUgZmlyc3Qgb2NjdXJyZW5jZS4KKysgKiBAcGFy YW0gc3Vic2VxdWVudF9sZXZlbCBpbXBvcnRhbmNlIGxldmVsIG9mIHRoZSBtZXNzYWdlIGV4cHJl c3NlZCB1c2luZyBhIEByZWYKKysgKiAgICAgICAgbGF2dV9sb2dfY29uc3RhbnRzICJMb2dnaW5n IENvbnN0YW50IiBhZnRlciB0aGUgZmlyc3Qgb2NjdXJyZW5jZS4KKysgKiBAcGFyYW0gZm10IFRo ZSBmb3JtYXQgc3RyaW5nIChwcmludGYtY29tcGF0aWJsZSkgdGhhdCBzcGVjaWZpZXMgaG93Cisr ICogICAgICAgIHN1YnNlcXVlbnQgYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG8gb3V0cHV0Lgor KyAqIEBwYXJhbSBzdGF0ZSBhIHZhcmlhYmxlIHRvIGtlZXAgdHJhayBvZiBpZiBhIG1lc3NhZ2Ug aGFzIGFscmVhZHkgYmVlbiBwcmludGVkCisrICogICAgICAgIHRoaXMgbXVzdCBiZSBpbml0aWFs aXplZCB0byAwIGJlZm9yZSB0aGUgZmlyc3QgdXNlLiBUaGUgc2FtZSBzdGF0ZQorKyAqICAgICAg ICBtdXN0IG5vdCBiZSBhY2Nlc3NlZCBieSAyIFRocmVhZHMgc2ltdWx0YW5lb3VzbHkuCisrICov Cisrdm9pZCBhdl9sb2dfb25jZSh2b2lkKiBhdmNsLCBpbnQgaW5pdGlhbF9sZXZlbCwgaW50IHN1 YnNlcXVlbnRfbGV2ZWwsIGludCAqc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBhdl9wcmlu dGZfZm9ybWF0KDUsIDYpOworKworKworKy8qKgorKyAqIFNlbmQgdGhlIHNwZWNpZmllZCBtZXNz YWdlIHRvIHRoZSBsb2cgaWYgdGhlIGxldmVsIGlzIGxlc3MgdGhhbiBvciBlcXVhbAorKyAqIHRv IHRoZSBjdXJyZW50IGF2X2xvZ19sZXZlbC4gQnkgZGVmYXVsdCwgYWxsIGxvZ2dpbmcgbWVzc2Fn ZXMgYXJlIHNlbnQgdG8KKysgKiBzdGRlcnIuIFRoaXMgYmVoYXZpb3IgY2FuIGJlIGFsdGVyZWQg Ynkgc2V0dGluZyBhIGRpZmZlcmVudCBsb2dnaW5nIGNhbGxiYWNrCisrICogZnVuY3Rpb24uCisr ICogQHNlZSBhdl9sb2dfc2V0X2NhbGxiYWNrCisrICoKKysgKiBAcGFyYW0gYXZjbCBBIHBvaW50 ZXIgdG8gYW4gYXJiaXRyYXJ5IHN0cnVjdCBvZiB3aGljaCB0aGUgZmlyc3QgZmllbGQgaXMgYQor KyAqICAgICAgICBwb2ludGVyIHRvIGFuIEFWQ2xhc3Mgc3RydWN0LgorKyAqIEBwYXJhbSBsZXZl bCBUaGUgaW1wb3J0YW5jZSBsZXZlbCBvZiB0aGUgbWVzc2FnZSBleHByZXNzZWQgdXNpbmcgYSBA cmVmCisrICogICAgICAgIGxhdnVfbG9nX2NvbnN0YW50cyAiTG9nZ2luZyBDb25zdGFudCIuCisr ICogQHBhcmFtIGZtdCBUaGUgZm9ybWF0IHN0cmluZyAocHJpbnRmLWNvbXBhdGlibGUpIHRoYXQg c3BlY2lmaWVzIGhvdworKyAqICAgICAgICBzdWJzZXF1ZW50IGFyZ3VtZW50cyBhcmUgY29udmVy dGVkIHRvIG91dHB1dC4KKysgKiBAcGFyYW0gdmwgVGhlIGFyZ3VtZW50cyByZWZlcmVuY2VkIGJ5 IHRoZSBmb3JtYXQgc3RyaW5nLgorKyAqLworK3ZvaWQgYXZfdmxvZyh2b2lkICphdmNsLCBpbnQg bGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCB2bCk7CisrCisrLyoqCisrICogR2V0IHRo ZSBjdXJyZW50IGxvZyBsZXZlbAorKyAqCisrICogQHNlZSBsYXZ1X2xvZ19jb25zdGFudHMKKysg KgorKyAqIEByZXR1cm4gQ3VycmVudCBsb2cgbGV2ZWwKKysgKi8KKytpbnQgYXZfbG9nX2dldF9s ZXZlbCh2b2lkKTsKKysKKysvKioKKysgKiBTZXQgdGhlIGxvZyBsZXZlbAorKyAqCisrICogQHNl ZSBsYXZ1X2xvZ19jb25zdGFudHMKKysgKgorKyAqIEBwYXJhbSBsZXZlbCBMb2dnaW5nIGxldmVs CisrICovCisrdm9pZCBhdl9sb2dfc2V0X2xldmVsKGludCBsZXZlbCk7CisrCisrLyoqCisrICog U2V0IHRoZSBsb2dnaW5nIGNhbGxiYWNrCisrICoKKysgKiBAbm90ZSBUaGUgY2FsbGJhY2sgbXVz dCBiZSB0aHJlYWQgc2FmZSwgZXZlbiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QgdXNlCisr ICogICAgICAgdGhyZWFkcyBpdHNlbGYgYXMgc29tZSBjb2RlY3MgYXJlIG11bHRpdGhyZWFkZWQu CisrICoKKysgKiBAc2VlIGF2X2xvZ19kZWZhdWx0X2NhbGxiYWNrCisrICoKKysgKiBAcGFyYW0g Y2FsbGJhY2sgQSBsb2dnaW5nIGZ1bmN0aW9uIHdpdGggYSBjb21wYXRpYmxlIHNpZ25hdHVyZS4K KysgKi8KKyt2b2lkIGF2X2xvZ19zZXRfY2FsbGJhY2sodm9pZCAoKmNhbGxiYWNrKSh2b2lkKiwg aW50LCBjb25zdCBjaGFyKiwgdmFfbGlzdCkpOworKworKy8qKgorKyAqIERlZmF1bHQgbG9nZ2lu ZyBjYWxsYmFjaworKyAqCisrICogSXQgcHJpbnRzIHRoZSBtZXNzYWdlIHRvIHN0ZGVyciwgb3B0 aW9uYWxseSBjb2xvcml6aW5nIGl0LgorKyAqCisrICogQHBhcmFtIGF2Y2wgQSBwb2ludGVyIHRv IGFuIGFyYml0cmFyeSBzdHJ1Y3Qgb2Ygd2hpY2ggdGhlIGZpcnN0IGZpZWxkIGlzIGEKKysgKiAg ICAgICAgcG9pbnRlciB0byBhbiBBVkNsYXNzIHN0cnVjdC4KKysgKiBAcGFyYW0gbGV2ZWwgVGhl IGltcG9ydGFuY2UgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgZXhwcmVzc2VkIHVzaW5nIGEgQHJlZgor KyAqICAgICAgICBsYXZ1X2xvZ19jb25zdGFudHMgIkxvZ2dpbmcgQ29uc3RhbnQiLgorKyAqIEBw YXJhbSBmbXQgVGhlIGZvcm1hdCBzdHJpbmcgKHByaW50Zi1jb21wYXRpYmxlKSB0aGF0IHNwZWNp ZmllcyBob3cKKysgKiAgICAgICAgc3Vic2VxdWVudCBhcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0 byBvdXRwdXQuCisrICogQHBhcmFtIHZsIFRoZSBhcmd1bWVudHMgcmVmZXJlbmNlZCBieSB0aGUg Zm9ybWF0IHN0cmluZy4KKysgKi8KKyt2b2lkIGF2X2xvZ19kZWZhdWx0X2NhbGxiYWNrKHZvaWQg KmF2Y2wsIGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmFfbGlzdCB2bCk7CisrCisrLyoqCisrICogUmV0dXJuIHRoZSBjb250ZXh0IG5h bWUKKysgKgorKyAqIEBwYXJhbSAgY3R4IFRoZSBBVkNsYXNzIGNvbnRleHQKKysgKgorKyAqIEBy ZXR1cm4gVGhlIEFWQ2xhc3MgY2xhc3NfbmFtZQorKyAqLworK2NvbnN0IGNoYXIqIGF2X2RlZmF1 bHRfaXRlbV9uYW1lKHZvaWQqIGN0eCk7CisrQVZDbGFzc0NhdGVnb3J5IGF2X2RlZmF1bHRfZ2V0 X2NhdGVnb3J5KHZvaWQgKnB0cik7CisrCisrLyoqCisrICogRm9ybWF0IGEgbGluZSBvZiBsb2cg dGhlIHNhbWUgd2F5IGFzIHRoZSBkZWZhdWx0IGNhbGxiYWNrLgorKyAqIEBwYXJhbSBsaW5lICAg ICAgICAgIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBmb3JtYXR0ZWQgbGluZQorKyAqIEBwYXJhbSBs aW5lX3NpemUgICAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorKyAqIEBwYXJhbSBwcmludF9wcmVmaXgg IHVzZWQgdG8gc3RvcmUgd2hldGhlciB0aGUgcHJlZml4IG11c3QgYmUgcHJpbnRlZDsKKysgKiAg ICAgICAgICAgICAgICAgICAgICBtdXN0IHBvaW50IHRvIGEgcGVyc2lzdGVudCBpbnRlZ2VyIGlu aXRpYWxseSBzZXQgdG8gMQorKyAqLworK3ZvaWQgYXZfbG9nX2Zvcm1hdF9saW5lKHZvaWQgKnB0 ciwgaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgdmwsCisrICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqbGluZSwgaW50IGxpbmVfc2l6ZSwgaW50ICpwcmludF9wcmVmaXgp OworKworKy8qKgorKyAqIEZvcm1hdCBhIGxpbmUgb2YgbG9nIHRoZSBzYW1lIHdheSBhcyB0aGUg ZGVmYXVsdCBjYWxsYmFjay4KKysgKiBAcGFyYW0gbGluZSAgICAgICAgICBidWZmZXIgdG8gcmVj ZWl2ZSB0aGUgZm9ybWF0dGVkIGxpbmU7CisrICogICAgICAgICAgICAgICAgICAgICAgbWF5IGJl IE5VTEwgaWYgbGluZV9zaXplIGlzIDAKKysgKiBAcGFyYW0gbGluZV9zaXplICAgICBzaXplIG9m IHRoZSBidWZmZXI7IGF0IG1vc3QgbGluZV9zaXplLTEgY2hhcmFjdGVycyB3aWxsCisrICogICAg ICAgICAgICAgICAgICAgICAgYmUgd3JpdHRlbiB0byB0aGUgYnVmZmVyLCBwbHVzIG9uZSBudWxs IHRlcm1pbmF0b3IKKysgKiBAcGFyYW0gcHJpbnRfcHJlZml4ICB1c2VkIHRvIHN0b3JlIHdoZXRo ZXIgdGhlIHByZWZpeCBtdXN0IGJlIHByaW50ZWQ7CisrICogICAgICAgICAgICAgICAgICAgICAg bXVzdCBwb2ludCB0byBhIHBlcnNpc3RlbnQgaW50ZWdlciBpbml0aWFsbHkgc2V0IHRvIDEKKysg KiBAcmV0dXJuIFJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBpZiBhbiBlcnJvciBvY2N1cnJlZCwg b3RoZXJ3aXNlIHJldHVybnMKKysgKiAgICAgICAgIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0 aGF0IHdvdWxkIGhhdmUgYmVlbiB3cml0dGVuIGZvciBhCisrICogICAgICAgICBzdWZmaWNpZW50 bHkgbGFyZ2UgYnVmZmVyLCBub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsCisrICog ICAgICAgICBjaGFyYWN0ZXIuIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbm90IGxlc3MgdGhhbiBs aW5lX3NpemUsIGl0IG1lYW5zCisrICogICAgICAgICB0aGF0IHRoZSBsb2cgbWVzc2FnZSB3YXMg dHJ1bmNhdGVkIHRvIGZpdCB0aGUgYnVmZmVyLgorKyAqLworK2ludCBhdl9sb2dfZm9ybWF0X2xp bmUyKHZvaWQgKnB0ciwgaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgdmwsCisr ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbGluZSwgaW50IGxpbmVfc2l6ZSwgaW50ICpw cmludF9wcmVmaXgpOworKworKy8qKgorKyAqIFNraXAgcmVwZWF0ZWQgbWVzc2FnZXMsIHRoaXMg cmVxdWlyZXMgdGhlIHVzZXIgYXBwIHRvIHVzZSBhdl9sb2coKSBpbnN0ZWFkIG9mCisrICogKGYp cHJpbnRmIGFzIHRoZSAyIHdvdWxkIG90aGVyd2lzZSBpbnRlcmZlcmUgYW5kIGxlYWQgdG8KKysg KiAiTGFzdCBtZXNzYWdlIHJlcGVhdGVkIHggdGltZXMiIG1lc3NhZ2VzIGJlbG93IChmKXByaW50 ZiBtZXNzYWdlcyB3aXRoIHNvbWUKKysgKiBiYWQgbHVjay4KKysgKiBBbHNvIHRvIHJlY2VpdmUg dGhlIGxhc3QsICJsYXN0IHJlcGVhdGVkIiBsaW5lIGlmIGFueSwgdGhlIHVzZXIgYXBwIG11c3QK KysgKiBjYWxsIGF2X2xvZyhOVUxMLCBBVl9MT0dfUVVJRVQsICIlcyIsICIiKTsgYXQgdGhlIGVu ZAorKyAqLworKyNkZWZpbmUgQVZfTE9HX1NLSVBfUkVQRUFURUQgMQorKworKy8qKgorKyAqIElu Y2x1ZGUgdGhlIGxvZyBzZXZlcml0eSBpbiBtZXNzYWdlcyBvcmlnaW5hdGluZyBmcm9tIGNvZGVj cy4KKysgKgorKyAqIFJlc3VsdHMgaW4gbWVzc2FnZXMgc3VjaCBhczoKKysgKiBbcmF3dmlkZW8g QCAweERFQURCRUVGXSBbZXJyb3JdIGVuY29kZSBkaWQgbm90IHByb2R1Y2UgdmFsaWQgcHRzCisr ICovCisrI2RlZmluZSBBVl9MT0dfUFJJTlRfTEVWRUwgMgorKworKy8qKgorKyAqIEluY2x1ZGUg c3lzdGVtIHRpbWUgaW4gbG9nIG91dHB1dC4KKysgKi8KKysjZGVmaW5lIEFWX0xPR19QUklOVF9U SU1FIDQKKysKKysvKioKKysgKiBJbmNsdWRlIHN5c3RlbSBkYXRlIGFuZCB0aW1lIGluIGxvZyBv dXRwdXQuCisrICovCisrI2RlZmluZSBBVl9MT0dfUFJJTlRfREFURVRJTUUgOAorKworK3ZvaWQg YXZfbG9nX3NldF9mbGFncyhpbnQgYXJnKTsKKytpbnQgYXZfbG9nX2dldF9mbGFncyh2b2lkKTsK KysKKysvKioKKysgKiBAfQorKyAqLworKworKyNlbmRpZiAvKiBBVlVUSUxfTE9HX0ggKi8KK2Rp ZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZt cGVnL3Y5L2xpYmF2dXRpbC9tYWNyb3MuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJh bWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9tYWNyb3MuaAorLS0t IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5 L2xpYmF2dXRpbC9tYWNyb3MuaC5mZm1wZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc3NjEyOTkw ICswMjAwCisrKysgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0 eS9mZm1wZWcvdjkvbGliYXZ1dGlsL21hY3Jvcy5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjc3NTg4 MTkyICswMjAwCitAQCAtMCwwICsxLDgwIEBACisrLyoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBv ZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisr ICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBh bG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAq IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv biwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysvKioKKysgKiBAZmlsZQorKyAqIEBpbmdy b3VwIGxhdnUKKysgKiBVdGlsaXR5IFByZXByb2Nlc3NvciBtYWNyb3MKKysgKi8KKysKKysjaWZu ZGVmIEFWVVRJTF9NQUNST1NfSAorKyNkZWZpbmUgQVZVVElMX01BQ1JPU19ICisrCisrI2luY2x1 ZGUgImxpYmF2dXRpbC9hdmNvbmZpZy5oIgorKworKyNpZiBBVl9IQVZFX0JJR0VORElBTgorKyMg ICBkZWZpbmUgQVZfTkUoYmUsIGxlKSAoYmUpCisrI2Vsc2UKKysjICAgZGVmaW5lIEFWX05FKGJl LCBsZSkgKGxlKQorKyNlbmRpZgorKworKy8qKgorKyAqIENvbXBhcmF0b3IuCisrICogRm9yIHR3 byBudW1lcmljYWwgZXhwcmVzc2lvbnMgeCBhbmQgeSwgZ2l2ZXMgMSBpZiB4ID4geSwgLTEgaWYg eCA8IHksIGFuZCAwCisrICogaWYgeCA9PSB5LiBUaGlzIGlzIHVzZWZ1bCBmb3IgaW5zdGFuY2Ug aW4gYSBxc29ydCBjb21wYXJhdG9yIGNhbGxiYWNrLgorKyAqIEZ1cnRoZXJtb3JlLCBjb21waWxl cnMgYXJlIGFibGUgdG8gb3B0aW1pemUgdGhpcyB0byBicmFuY2hsZXNzIGNvZGUsIGFuZAorKyAq IHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmZsb3cgd2l0aCBzaWduZWQgdHlwZXMuCisrICogQXMg d2l0aCBtYW55IG1hY3JvcywgdGhpcyBldmFsdWF0ZXMgaXRzIGFyZ3VtZW50IG11bHRpcGxlIHRp bWVzLCBpdCB0aHVzCisrICogbXVzdCBub3QgaGF2ZSBhIHNpZGUtZWZmZWN0LgorKyAqLworKyNk ZWZpbmUgRkZESUZGU0lHTih4LHkpICgoKHgpPih5KSkgLSAoKHgpPCh5KSkpCisrCisrI2RlZmlu ZSBGRk1BWChhLGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisrI2RlZmluZSBGRk1BWDMoYSxi LGMpIEZGTUFYKEZGTUFYKGEsYiksYykKKysjZGVmaW5lIEZGTUlOKGEsYikgKChhKSA+IChiKSA/ IChiKSA6IChhKSkKKysjZGVmaW5lIEZGTUlOMyhhLGIsYykgRkZNSU4oRkZNSU4oYSxiKSxjKQor KworKyNkZWZpbmUgRkZTV0FQKHR5cGUsYSxiKSBkb3t0eXBlIFNXQVBfdG1wPSBiOyBiPSBhOyBh PSBTV0FQX3RtcDt9d2hpbGUoMCkKKysjZGVmaW5lIEZGX0FSUkFZX0VMRU1TKGEpIChzaXplb2Yo YSkgLyBzaXplb2YoKGEpWzBdKSkKKysKKysjZGVmaW5lIE1LVEFHKGEsYixjLGQpICAgKChhKSB8 ICgoYikgPDwgOCkgfCAoKGMpIDw8IDE2KSB8ICgodW5zaWduZWQpKGQpIDw8IDI0KSkKKysjZGVm aW5lIE1LQkVUQUcoYSxiLGMsZCkgKChkKSB8ICgoYykgPDwgOCkgfCAoKGIpIDw8IDE2KSB8ICgo dW5zaWduZWQpKGEpIDw8IDI0KSkKKysKKysvKioKKysgKiBAYWRkdG9ncm91cCBwcmVwcm9jX21p c2MgUHJlcHJvY2Vzc29yIFN0cmluZyBNYWNyb3MKKysgKgorKyAqIFN0cmluZyBtYW5pcHVsYXRp b24gbWFjcm9zCisrICoKKysgKiBAeworKyAqLworKworKyNkZWZpbmUgQVZfU1RSSU5HSUZZKHMp ICAgICAgICAgQVZfVE9TVFJJTkcocykKKysjZGVmaW5lIEFWX1RPU1RSSU5HKHMpICNzCisrCisr I2RlZmluZSBBVl9HTFVFKGEsIGIpIGEgIyMgYgorKyNkZWZpbmUgQVZfSk9JTihhLCBiKSBBVl9H TFVFKGEsIGIpCisrCisrLyoqCisrICogQH0KKysgKi8KKysKKysjZGVmaW5lIEFWX1BSQUdNQShz KSBfUHJhZ21hKCNzKQorKworKyNkZWZpbmUgRkZBTElHTih4LCBhKSAoKCh4KSsoYSktMSkmfigo YSktMSkpCisrCisrI2VuZGlmIC8qIEFWVVRJTF9NQUNST1NfSCAqLworZGlmZiAtdXAgTXVzZVNj b3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1 dGlsL21hdGhlbWF0aWNzLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9t ZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvbWF0aGVtYXRpY3MuaAorLS0tIE11 c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xp YmF2dXRpbC9tYXRoZW1hdGljcy5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42Nzc3Mjgz MTAgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBh cnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvbWF0aGVtYXRpY3MuaAkyMDI2LTA5LTA3IDEyOjIzOjQ3 LjY3NzY2NjIzMCArMDIwMAorQEAgLTAsMCArMSwzMDAgQEAKKysvKgorKyAqIGNvcHlyaWdodCAo YykgMjAwNS0yMDEyIE1pY2hhZWwgTmllZGVybWF5ZXIgPG1pY2hhZWxuaUBnbXguYXQ+CisrICoK KysgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl cgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAq IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0 cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysv KioKKysgKiBAZmlsZQorKyAqIEBhZGR0b2dyb3VwIGxhdnVfbWF0aAorKyAqIE1hdGhlbWF0aWNh bCB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCB0aW1lc3RhbXAgYW5kIHRpbWUgYmFzZS4KKysg Ki8KKysKKysjaWZuZGVmIEFWVVRJTF9NQVRIRU1BVElDU19ICisrI2RlZmluZSBBVlVUSUxfTUFU SEVNQVRJQ1NfSAorKworKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSA8bWF0aC5oPgor KyNpbmNsdWRlICJhdHRyaWJ1dGVzLmgiCisrI2luY2x1ZGUgInJhdGlvbmFsLmgiCisrI2luY2x1 ZGUgImludGZsb2F0LmgiCisrCisrI2lmbmRlZiBNX0UKKysjZGVmaW5lIE1fRSAgICAgICAgICAg IDIuNzE4MjgxODI4NDU5MDQ1MjM1NCAgIC8qIGUgKi8KKysjZW5kaWYKKysjaWZuZGVmIE1fRWYK KysjZGVmaW5lIE1fRWYgICAgICAgICAgIDIuNzE4MjgxODI4NDU5MDQ1MjM1NGYgIC8qIGUgKi8K KysjZW5kaWYKKysjaWZuZGVmIE1fTE4yCisrI2RlZmluZSBNX0xOMiAgICAgICAgICAwLjY5MzE0 NzE4MDU1OTk0NTMwOTQyICAvKiBsb2dfZSAyICovCisrI2VuZGlmCisrI2lmbmRlZiBNX0xOMmYK KysjZGVmaW5lIE1fTE4yZiAgICAgICAgIDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDJmIC8qIGxvZ19l IDIgKi8KKysjZW5kaWYKKysjaWZuZGVmIE1fTE4xMAorKyNkZWZpbmUgTV9MTjEwICAgICAgICAg Mi4zMDI1ODUwOTI5OTQwNDU2ODQwMiAgLyogbG9nX2UgMTAgKi8KKysjZW5kaWYKKysjaWZuZGVm IE1fTE4xMGYKKysjZGVmaW5lIE1fTE4xMGYgICAgICAgIDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDJm IC8qIGxvZ19lIDEwICovCisrI2VuZGlmCisrI2lmbmRlZiBNX0xPRzJfMTAKKysjZGVmaW5lIE1f TE9HMl8xMCAgICAgIDMuMzIxOTI4MDk0ODg3MzYyMzQ3ODcgIC8qIGxvZ18yIDEwICovCisrI2Vu ZGlmCisrI2lmbmRlZiBNX0xPRzJfMTBmCisrI2RlZmluZSBNX0xPRzJfMTBmICAgICAzLjMyMTky ODA5NDg4NzM2MjM0Nzg3ZiAvKiBsb2dfMiAxMCAqLworKyNlbmRpZgorKyNpZm5kZWYgTV9QSEkK KysjZGVmaW5lIE1fUEhJICAgICAgICAgIDEuNjE4MDMzOTg4NzQ5ODk0ODQ4MjAgICAvKiBwaGkg LyBnb2xkZW4gcmF0aW8gKi8KKysjZW5kaWYKKysjaWZuZGVmIE1fUEhJZgorKyNkZWZpbmUgTV9Q SElmICAgICAgICAgMS42MTgwMzM5ODg3NDk4OTQ4NDgyMGYgIC8qIHBoaSAvIGdvbGRlbiByYXRp byAqLworKyNlbmRpZgorKyNpZm5kZWYgTV9QSQorKyNkZWZpbmUgTV9QSSAgICAgICAgICAgMy4x NDE1OTI2NTM1ODk3OTMyMzg0NiAgLyogcGkgKi8KKysjZW5kaWYKKysjaWZuZGVmIE1fUElmCisr I2RlZmluZSBNX1BJZiAgICAgICAgICAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2ZiAvKiBwaSAqLwor KyNlbmRpZgorKyNpZm5kZWYgTV9QSV8yCisrI2RlZmluZSBNX1BJXzIgICAgICAgICAxLjU3MDc5 NjMyNjc5NDg5NjYxOTIzICAvKiBwaS8yICovCisrI2VuZGlmCisrI2lmbmRlZiBNX1BJXzJmCisr I2RlZmluZSBNX1BJXzJmICAgICAgICAxLjU3MDc5NjMyNjc5NDg5NjYxOTIzZiAvKiBwaS8yICov CisrI2VuZGlmCisrI2lmbmRlZiBNX1BJXzQKKysjZGVmaW5lIE1fUElfNCAgICAgICAgIDAuNzg1 Mzk4MTYzMzk3NDQ4MzA5NjIgIC8qIHBpLzQgKi8KKysjZW5kaWYKKysjaWZuZGVmIE1fUElfNGYK KysjZGVmaW5lIE1fUElfNGYgICAgICAgIDAuNzg1Mzk4MTYzMzk3NDQ4MzA5NjJmIC8qIHBpLzQg Ki8KKysjZW5kaWYKKysjaWZuZGVmIE1fMV9QSQorKyNkZWZpbmUgTV8xX1BJICAgICAgICAgMC4z MTgzMDk4ODYxODM3OTA2NzE1NCAgLyogMS9waSAqLworKyNlbmRpZgorKyNpZm5kZWYgTV8xX1BJ ZgorKyNkZWZpbmUgTV8xX1BJZiAgICAgICAgMC4zMTgzMDk4ODYxODM3OTA2NzE1NGYgLyogMS9w aSAqLworKyNlbmRpZgorKyNpZm5kZWYgTV8yX1BJCisrI2RlZmluZSBNXzJfUEkgICAgICAgICAw LjYzNjYxOTc3MjM2NzU4MTM0MzA4ICAvKiAyL3BpICovCisrI2VuZGlmCisrI2lmbmRlZiBNXzJf UElmCisrI2RlZmluZSBNXzJfUElmICAgICAgICAwLjYzNjYxOTc3MjM2NzU4MTM0MzA4ZiAvKiAy L3BpICovCisrI2VuZGlmCisrI2lmbmRlZiBNXzJfU1FSVFBJCisrI2RlZmluZSBNXzJfU1FSVFBJ ICAgICAxLjEyODM3OTE2NzA5NTUxMjU3MzkwICAvKiAyL3NxcnQocGkpICovCisrI2VuZGlmCisr I2lmbmRlZiBNXzJfU1FSVFBJZgorKyNkZWZpbmUgTV8yX1NRUlRQSWYgICAgMS4xMjgzNzkxNjcw OTU1MTI1NzM5MGYgLyogMi9zcXJ0KHBpKSAqLworKyNlbmRpZgorKyNpZm5kZWYgTV9TUVJUMV8y CisrI2RlZmluZSBNX1NRUlQxXzIgICAgICAwLjcwNzEwNjc4MTE4NjU0NzUyNDQwICAvKiAxL3Nx cnQoMikgKi8KKysjZW5kaWYKKysjaWZuZGVmIE1fU1FSVDFfMmYKKysjZGVmaW5lIE1fU1FSVDFf MmYgICAgIDAuNzA3MTA2NzgxMTg2NTQ3NTI0NDBmIC8qIDEvc3FydCgyKSAqLworKyNlbmRpZgor KyNpZm5kZWYgTV9TUVJUMgorKyNkZWZpbmUgTV9TUVJUMiAgICAgICAgMS40MTQyMTM1NjIzNzMw OTUwNDg4MCAgLyogc3FydCgyKSAqLworKyNlbmRpZgorKyNpZm5kZWYgTV9TUVJUMmYKKysjZGVm aW5lIE1fU1FSVDJmICAgICAgIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBmIC8qIHNxcnQoMikgKi8K KysjZW5kaWYKKysjaWZuZGVmIE5BTgorKyNkZWZpbmUgTkFOICAgICAgICAgICAgYXZfaW50MmZs b2F0KDB4N2ZjMDAwMDApCisrI2VuZGlmCisrI2lmbmRlZiBJTkZJTklUWQorKyNkZWZpbmUgSU5G SU5JVFkgICAgICAgYXZfaW50MmZsb2F0KDB4N2Y4MDAwMDApCisrI2VuZGlmCisrCisrLyoqCisr ICogQGFkZHRvZ3JvdXAgbGF2dV9tYXRoCisrICoKKysgKiBAeworKyAqLworKworKy8qKgorKyAq IFJvdW5kaW5nIG1ldGhvZHMuCisrICovCisrZW51bSBBVlJvdW5kaW5nIHsKKysgICAgQVZfUk9V TkRfWkVSTyAgICAgPSAwLCAvLy88IFJvdW5kIHRvd2FyZCB6ZXJvLgorKyAgICBBVl9ST1VORF9J TkYgICAgICA9IDEsIC8vLzwgUm91bmQgYXdheSBmcm9tIHplcm8uCisrICAgIEFWX1JPVU5EX0RP V04gICAgID0gMiwgLy8vPCBSb3VuZCB0b3dhcmQgLWluZmluaXR5LgorKyAgICBBVl9ST1VORF9V UCAgICAgICA9IDMsIC8vLzwgUm91bmQgdG93YXJkICtpbmZpbml0eS4KKysgICAgQVZfUk9VTkRf TkVBUl9JTkYgPSA1LCAvLy88IFJvdW5kIHRvIG5lYXJlc3QgYW5kIGhhbGZ3YXkgY2FzZXMgYXdh eSBmcm9tIHplcm8uCisrICAgIC8qKgorKyAgICAgKiBGbGFnIHRlbGxpbmcgcmVzY2FsaW5nIGZ1 bmN0aW9ucyB0byBwYXNzIGBJTlQ2NF9NSU5gL2BNQVhgIHRocm91Z2gKKysgICAgICogdW5jaGFu Z2VkLCBhdm9pZGluZyBzcGVjaWFsIGNhc2VzIGZvciAjQVZfTk9QVFNfVkFMVUUuCisrICAgICAq CisrICAgICAqIFVubGlrZSBvdGhlciB2YWx1ZXMgb2YgdGhlIGVudW1lcmF0aW9uIEFWUm91bmRp bmcsIHRoaXMgdmFsdWUgaXMgYQorKyAgICAgKiBiaXRtYXNrIHRoYXQgbXVzdCBiZSB1c2VkIGlu IGNvbmp1bmN0aW9uIHdpdGggYW5vdGhlciB2YWx1ZSBvZiB0aGUKKysgICAgICogZW51bWVyYXRp b24gdGhyb3VnaCBhIGJpdHdpc2UgT1IsIGluIG9yZGVyIHRvIHNldCBiZWhhdmlvciBmb3Igbm9y bWFsCisrICAgICAqIGNhc2VzLgorKyAgICAgKgorKyAgICAgKiBAY29kZXsuY30KKysgICAgICog YXZfcmVzY2FsZV9ybmQoMywgMSwgMiwgQVZfUk9VTkRfVVAgfCBBVl9ST1VORF9QQVNTX01JTk1B WCk7CisrICAgICAqIC8vIFJlc2NhbGluZyAzOgorKyAgICAgKiAvLyAgICAgQ2FsY3VsYXRpbmcg MyAqIDEgLyAyCisrICAgICAqIC8vICAgICAzIC8gMiBpcyByb3VuZGVkIHVwIHRvIDIKKysgICAg ICogLy8gICAgID0+IDIKKysgICAgICoKKysgICAgICogYXZfcmVzY2FsZV9ybmQoQVZfTk9QVFNf VkFMVUUsIDEsIDIsIEFWX1JPVU5EX1VQIHwgQVZfUk9VTkRfUEFTU19NSU5NQVgpOworKyAgICAg KiAvLyBSZXNjYWxpbmcgQVZfTk9QVFNfVkFMVUU6CisrICAgICAqIC8vICAgICBBVl9OT1BUU19W QUxVRSA9PSBJTlQ2NF9NSU4KKysgICAgICogLy8gICAgIEFWX05PUFRTX1ZBTFVFIGlzIHBhc3Nl ZCB0aHJvdWdoCisrICAgICAqIC8vICAgICA9PiBBVl9OT1BUU19WQUxVRQorKyAgICAgKiBAZW5k Y29kZQorKyAgICAgKi8KKysgICAgQVZfUk9VTkRfUEFTU19NSU5NQVggPSA4MTkyLAorK307Cisr CisrLyoqCisrICogQ29tcHV0ZSB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgdHdvIGlu dGVnZXIgb3BlcmFuZHMuCisrICoKKysgKiBAcGFyYW0gYSBPcGVyYW5kCisrICogQHBhcmFtIGIg T3BlcmFuZAorKyAqIEByZXR1cm4gR0NEIG9mIGEgYW5kIGIgdXAgdG8gc2lnbjsgaWYgYSA+PSAw IGFuZCBiID49IDAsIHJldHVybiB2YWx1ZSBpcyA+PSAwOworKyAqIGlmIGEgPT0gMCBhbmQgYiA9 PSAwLCByZXR1cm5zIDAuCisrICovCisraW50NjRfdCBhdl9jb25zdCBhdl9nY2QoaW50NjRfdCBh LCBpbnQ2NF90IGIpOworKworKy8qKgorKyAqIFJlc2NhbGUgYSA2NC1iaXQgaW50ZWdlciB3aXRo IHJvdW5kaW5nIHRvIG5lYXJlc3QuCisrICoKKysgKiBUaGUgb3BlcmF0aW9uIGlzIG1hdGhlbWF0 aWNhbGx5IGVxdWl2YWxlbnQgdG8gYGEgKiBiIC8gY2AsIGJ1dCB3cml0aW5nIHRoYXQKKysgKiBk aXJlY3RseSBjYW4gb3ZlcmZsb3cuCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxl bnQgdG8gYXZfcmVzY2FsZV9ybmQoKSB3aXRoICNBVl9ST1VORF9ORUFSX0lORi4KKysgKgorKyAq IEBzZWUgYXZfcmVzY2FsZV9ybmQoKSwgYXZfcmVzY2FsZV9xKCksIGF2X3Jlc2NhbGVfcV9ybmQo KQorKyAqLworK2ludDY0X3QgYXZfcmVzY2FsZShpbnQ2NF90IGEsIGludDY0X3QgYiwgaW50NjRf dCBjKSBhdl9jb25zdDsKKysKKysvKioKKysgKiBSZXNjYWxlIGEgNjQtYml0IGludGVnZXIgd2l0 aCBzcGVjaWZpZWQgcm91bmRpbmcuCisrICoKKysgKiBUaGUgb3BlcmF0aW9uIGlzIG1hdGhlbWF0 aWNhbGx5IGVxdWl2YWxlbnQgdG8gYGEgKiBiIC8gY2AsIGJ1dCB3cml0aW5nIHRoYXQKKysgKiBk aXJlY3RseSBjYW4gb3ZlcmZsb3csIGFuZCBkb2VzIG5vdCBzdXBwb3J0IGRpZmZlcmVudCByb3Vu ZGluZyBtZXRob2RzLgorKyAqIElmIHRoZSByZXN1bHQgaXMgbm90IHJlcHJlc2VudGFibGUgdGhl biBJTlQ2NF9NSU4gaXMgcmV0dXJuZWQuCisrICoKKysgKiBAc2VlIGF2X3Jlc2NhbGUoKSwgYXZf cmVzY2FsZV9xKCksIGF2X3Jlc2NhbGVfcV9ybmQoKQorKyAqLworK2ludDY0X3QgYXZfcmVzY2Fs ZV9ybmQoaW50NjRfdCBhLCBpbnQ2NF90IGIsIGludDY0X3QgYywgZW51bSBBVlJvdW5kaW5nIHJu ZCkgYXZfY29uc3Q7CisrCisrLyoqCisrICogUmVzY2FsZSBhIDY0LWJpdCBpbnRlZ2VyIGJ5IDIg cmF0aW9uYWwgbnVtYmVycy4KKysgKgorKyAqIFRoZSBvcGVyYXRpb24gaXMgbWF0aGVtYXRpY2Fs bHkgZXF1aXZhbGVudCB0byBgYSAqIGJxIC8gY3FgLgorKyAqCisrICogVGhpcyBmdW5jdGlvbiBp cyBlcXVpdmFsZW50IHRvIGF2X3Jlc2NhbGVfcV9ybmQoKSB3aXRoICNBVl9ST1VORF9ORUFSX0lO Ri4KKysgKgorKyAqIEBzZWUgYXZfcmVzY2FsZSgpLCBhdl9yZXNjYWxlX3JuZCgpLCBhdl9yZXNj YWxlX3Ffcm5kKCkKKysgKi8KKytpbnQ2NF90IGF2X3Jlc2NhbGVfcShpbnQ2NF90IGEsIEFWUmF0 aW9uYWwgYnEsIEFWUmF0aW9uYWwgY3EpIGF2X2NvbnN0OworKworKy8qKgorKyAqIFJlc2NhbGUg YSA2NC1iaXQgaW50ZWdlciBieSAyIHJhdGlvbmFsIG51bWJlcnMgd2l0aCBzcGVjaWZpZWQgcm91 bmRpbmcuCisrICoKKysgKiBUaGUgb3BlcmF0aW9uIGlzIG1hdGhlbWF0aWNhbGx5IGVxdWl2YWxl bnQgdG8gYGEgKiBicSAvIGNxYC4KKysgKgorKyAqIEBzZWUgYXZfcmVzY2FsZSgpLCBhdl9yZXNj YWxlX3JuZCgpLCBhdl9yZXNjYWxlX3EoKQorKyAqLworK2ludDY0X3QgYXZfcmVzY2FsZV9xX3Ju ZChpbnQ2NF90IGEsIEFWUmF0aW9uYWwgYnEsIEFWUmF0aW9uYWwgY3EsCisrICAgICAgICAgICAg ICAgICAgICAgICAgIGVudW0gQVZSb3VuZGluZyBybmQpIGF2X2NvbnN0OworKworKy8qKgorKyAq IENvbXBhcmUgdHdvIHRpbWVzdGFtcHMgZWFjaCBpbiBpdHMgb3duIHRpbWUgYmFzZS4KKysgKgor KyAqIEByZXR1cm4gT25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorKyAqICAgICAgICAgLSAt MSBpZiBgdHNfYWAgaXMgYmVmb3JlIGB0c19iYAorKyAqICAgICAgICAgLSAxIGlmIGB0c19hYCBp cyBhZnRlciBgdHNfYmAKKysgKiAgICAgICAgIC0gMCBpZiB0aGV5IHJlcHJlc2VudCB0aGUgc2Ft ZSBwb3NpdGlvbgorKyAqCisrICogQHdhcm5pbmcKKysgKiBUaGUgcmVzdWx0IG9mIHRoZSBmdW5j dGlvbiBpcyB1bmRlZmluZWQgaWYgb25lIG9mIHRoZSB0aW1lc3RhbXBzIGlzIG91dHNpZGUKKysg KiB0aGUgYGludDY0X3RgIHJhbmdlIHdoZW4gcmVwcmVzZW50ZWQgaW4gdGhlIG90aGVyJ3MgdGlt ZWJhc2UuCisrICovCisraW50IGF2X2NvbXBhcmVfdHMoaW50NjRfdCB0c19hLCBBVlJhdGlvbmFs IHRiX2EsIGludDY0X3QgdHNfYiwgQVZSYXRpb25hbCB0Yl9iKTsKKysKKysvKioKKysgKiBDb21w YXJlIHRoZSByZW1haW5kZXJzIG9mIHR3byBpbnRlZ2VyIG9wZXJhbmRzIGRpdmlkZWQgYnkgYSBj b21tb24gZGl2aXNvci4KKysgKgorKyAqIEluIG90aGVyIHdvcmRzLCBjb21wYXJlIHRoZSBsZWFz dCBzaWduaWZpY2FudCBgbG9nMihtb2QpYCBiaXRzIG9mIGludGVnZXJzCisrICogYGFgIGFuZCBg YmAuCisrICoKKysgKiBAY29kZXsuY30KKysgKiBhdl9jb21wYXJlX21vZCgweDExLCAweDAyLCAw eDEwKSA8IDAgLy8gc2luY2UgMHgxMSAlIDB4MTAgICgweDEpIDwgMHgwMiAlIDB4MTAgICgweDIp CisrICogYXZfY29tcGFyZV9tb2QoMHgxMSwgMHgwMiwgMHgyMCkgPiAwIC8vIHNpbmNlIDB4MTEg JSAweDIwICgweDExKSA+IDB4MDIgJSAweDIwICgweDAyKQorKyAqIEBlbmRjb2RlCisrICoKKysg KiBAcGFyYW0gYSBPcGVyYW5kCisrICogQHBhcmFtIGIgT3BlcmFuZAorKyAqIEBwYXJhbSBtb2Qg RGl2aXNvcjsgbXVzdCBiZSBhIHBvd2VyIG9mIDIKKysgKiBAcmV0dXJuCisrICogICAgICAgICAt IGEgbmVnYXRpdmUgdmFsdWUgaWYgYGEgJSBtb2QgPCBiICUgbW9kYAorKyAqICAgICAgICAgLSBh IHBvc2l0aXZlIHZhbHVlIGlmIGBhICUgbW9kID4gYiAlIG1vZGAKKysgKiAgICAgICAgIC0gemVy byAgICAgICAgICAgICBpZiBgYSAlIG1vZCA9PSBiICUgbW9kYAorKyAqLworK2ludDY0X3QgYXZf Y29tcGFyZV9tb2QodWludDY0X3QgYSwgdWludDY0X3QgYiwgdWludDY0X3QgbW9kKTsKKysKKysv KioKKysgKiBSZXNjYWxlIGEgdGltZXN0YW1wIHdoaWxlIHByZXNlcnZpbmcga25vd24gZHVyYXRp b25zLgorKyAqCisrICogVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgcGVy IGF1ZGlvIHBhY2tldCB0byBzY2FsZSB0aGUgaW5wdXQKKysgKiB0aW1lc3RhbXAgdG8gYSBkaWZm ZXJlbnQgdGltZSBiYXNlLiBDb21wYXJlZCB0byBhIHNpbXBsZSBhdl9yZXNjYWxlX3EoKQorKyAq IGNhbGwsIHRoaXMgZnVuY3Rpb24gaXMgcm9idXN0IGFnYWluc3QgcG9zc2libGUgaW5jb25zaXN0 ZW50IGZyYW1lIGR1cmF0aW9ucy4KKysgKgorKyAqIFRoZSBgbGFzdGAgcGFyYW1ldGVyIGlzIGEg c3RhdGUgdmFyaWFibGUgdGhhdCBtdXN0IGJlIHByZXNlcnZlZCBmb3IgYWxsCisrICogc3Vic2Vx dWVudCBjYWxscyBmb3IgdGhlIHNhbWUgc3RyZWFtLiBGb3IgdGhlIGZpcnN0IGNhbGwsIGAqbGFz dGAgc2hvdWxkIGJlCisrICogaW5pdGlhbGl6ZWQgdG8gI0FWX05PUFRTX1ZBTFVFLgorKyAqCisr ICogQHBhcmFtW2luXSAgICAgaW5fdGIgICAgSW5wdXQgdGltZSBiYXNlCisrICogQHBhcmFtW2lu XSAgICAgaW5fdHMgICAgSW5wdXQgdGltZXN0YW1wCisrICogQHBhcmFtW2luXSAgICAgZnNfdGIg ICAgRHVyYXRpb24gdGltZSBiYXNlOyB0eXBpY2FsbHkgdGhpcyBpcyBmaW5lci1ncmFpbmVkCisr ICogICAgICAgICAgICAgICAgICAgICAgICAgKGdyZWF0ZXIpIHRoYW4gYGluX3RiYCBhbmQgYG91 dF90YmAKKysgKiBAcGFyYW1baW5dICAgICBkdXJhdGlvbiBEdXJhdGlvbiB0aWxsIHRoZSBuZXh0 IGNhbGwgdG8gdGhpcyBmdW5jdGlvbiAoaS5lLgorKyAqICAgICAgICAgICAgICAgICAgICAgICAg IGR1cmF0aW9uIG9mIHRoZSBjdXJyZW50IHBhY2tldC9mcmFtZSkKKysgKiBAcGFyYW1baW4sb3V0 XSBsYXN0ICAgICBQb2ludGVyIHRvIGEgdGltZXN0YW1wIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZgor KyAqICAgICAgICAgICAgICAgICAgICAgICAgIGBmc190YmAsIGFjdGluZyBhcyBhIHN0YXRlIHZh cmlhYmxlCisrICogQHBhcmFtW2luXSAgICAgb3V0X3RiICAgT3V0cHV0IHRpbWViYXNlCisrICog QHJldHVybiAgICAgICAgVGltZXN0YW1wIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZiBgb3V0X3RiYAor KyAqCisrICogQG5vdGUgSW4gdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiwgImR1cmF0aW9u IiBpcyBpbiB0ZXJtIG9mIHNhbXBsZXMsIG5vdAorKyAqICAgICAgIHNlY29uZHMuCisrICovCisr aW50NjRfdCBhdl9yZXNjYWxlX2RlbHRhKEFWUmF0aW9uYWwgaW5fdGIsIGludDY0X3QgaW5fdHMs ICBBVlJhdGlvbmFsIGZzX3RiLCBpbnQgZHVyYXRpb24sIGludDY0X3QgKmxhc3QsIEFWUmF0aW9u YWwgb3V0X3RiKTsKKysKKysvKioKKysgKiBBZGQgYSB2YWx1ZSB0byBhIHRpbWVzdGFtcC4KKysg KgorKyAqIFRoaXMgZnVuY3Rpb24gZ3VhcmFudGVlcyB0aGF0IHdoZW4gdGhlIHNhbWUgdmFsdWUg aXMgcmVwZWF0ZWRseSBhZGRlZCB0aGF0CisrICogbm8gYWNjdW11bGF0aW9uIG9mIHJvdW5kaW5n IGVycm9ycyBvY2N1cnMuCisrICoKKysgKiBAcGFyYW1baW5dIHRzICAgICBJbnB1dCB0aW1lc3Rh bXAKKysgKiBAcGFyYW1baW5dIHRzX3RiICBJbnB1dCB0aW1lc3RhbXAgdGltZSBiYXNlCisrICog QHBhcmFtW2luXSBpbmMgICAgVmFsdWUgdG8gYmUgYWRkZWQKKysgKiBAcGFyYW1baW5dIGluY190 YiBUaW1lIGJhc2Ugb2YgYGluY2AKKysgKi8KKytpbnQ2NF90IGF2X2FkZF9zdGFibGUoQVZSYXRp b25hbCB0c190YiwgaW50NjRfdCB0cywgQVZSYXRpb25hbCBpbmNfdGIsIGludDY0X3QgaW5jKTsK KysKKysvKioKKysgKiAwdGggb3JkZXIgbW9kaWZpZWQgYmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBm aXJzdCBraW5kLgorKyAqLworK2RvdWJsZSBhdl9iZXNzZWxfaTAoZG91YmxlIHgpOworKworKy8q KgorKyAqIEB9CisrICovCisrCisrI2VuZGlmIC8qIEFWVVRJTF9NQVRIRU1BVElDU19IICovCitk aWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2Zm bXBlZy92OS9saWJhdnV0aWwvbWVtLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1l d29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvbWVtLmgKKy0tLSBNdXNl U2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJh dnV0aWwvbWVtLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3NzkxMzY5NyArMDIwMAor KysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVn L3Y5L2xpYmF2dXRpbC9tZW0uaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3Nzc5NjY3NyArMDIwMAor QEAgLTAsMCArMSw2MDcgQEAKKysvKgorKyAqIGNvcHlyaWdodCAoYykgMjAwNiBNaWNoYWVsIE5p ZWRlcm1heWVyIDxtaWNoYWVsbmlAZ214LmF0PgorKyAqCisrICogVGhpcyBmaWxlIGlzIHBhcnQg b2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgor KyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2Ug YWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysg KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrLyoqCisrICogQGZpbGUKKysgKiBAaW5n cm91cCBsYXZ1X21lbQorKyAqIE1lbW9yeSBoYW5kbGluZyBmdW5jdGlvbnMKKysgKi8KKysKKysj aWZuZGVmIEFWVVRJTF9NRU1fSAorKyNkZWZpbmUgQVZVVElMX01FTV9ICisrCisrI2luY2x1ZGUg PHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysKKysjaW5jbHVkZSAiYXR0cmlidXRl cy5oIgorKworKy8qKgorKyAqIEBhZGR0b2dyb3VwIGxhdnVfbWVtCisrICogVXRpbGl0aWVzIGZv ciBtYW5pcHVsYXRpbmcgbWVtb3J5LgorKyAqCisrICogRkZtcGVnIGhhcyBzZXZlcmFsIGFwcGxp Y2F0aW9ucyBvZiBtZW1vcnkgdGhhdCBhcmUgbm90IHJlcXVpcmVkIG9mIGEgdHlwaWNhbAorKyAq IHByb2dyYW0uIEZvciBleGFtcGxlLCB0aGUgY29tcHV0aW5nLWhlYXZ5IGNvbXBvbmVudHMgbGlr ZSB2aWRlbyBkZWNvZGluZyBhbmQKKysgKiBlbmNvZGluZyBjYW4gYmUgc3BlZCB1cCBzaWduaWZp Y2FudGx5IHRocm91Z2ggdGhlIHVzZSBvZiBhbGlnbmVkIG1lbW9yeS4KKysgKgorKyAqIEhvd2V2 ZXIsIGZvciBlYWNoIG9mIEZGbXBlZydzIGFwcGxpY2F0aW9ucyBvZiBtZW1vcnksIHRoZXJlIG1p Z2h0IG5vdCBiZSBhCisrICogcmVjb2duaXplZCBvciBzdGFuZGFyZGl6ZWQgQVBJIGZvciB0aGF0 IHNwZWNpZmljIHVzZS4gTWVtb3J5IGFsaWdubWVudCwgZm9yCisrICogaW5zdGFuY2UsIHZhcmll cyB3aWxkbHkgZGVwZW5kaW5nIG9uIG9wZXJhdGluZyBzeXN0ZW1zLCBhcmNoaXRlY3R1cmVzLCBh bmQKKysgKiBjb21waWxlcnMuIEhlbmNlLCB0aGlzIGNvbXBvbmVudCBvZiBAcmVmIGxpYmF2dXRp bCBpcyBjcmVhdGVkIHRvIG1ha2UKKysgKiBkZWFsaW5nIHdpdGggbWVtb3J5IGNvbnNpc3RlbnRs eSBwb3NzaWJsZSBvbiBhbGwgcGxhdGZvcm1zLgorKyAqCisrICogQHsKKysgKi8KKysKKysvKioK KysgKiBAZGVmZ3JvdXAgbGF2dV9tZW1fYXR0cnMgRnVuY3Rpb24gQXR0cmlidXRlcworKyAqIEZ1 bmN0aW9uIGF0dHJpYnV0ZXMgYXBwbGljYWJsZSB0byBtZW1vcnkgaGFuZGxpbmcgZnVuY3Rpb25z LgorKyAqCisrICogVGhlc2UgZnVuY3Rpb24gYXR0cmlidXRlcyBjYW4gaGVscCBjb21waWxlcnMg ZW1pdCBtb3JlIHVzZWZ1bCB3YXJuaW5ncywgb3IKKysgKiBnZW5lcmF0ZSBiZXR0ZXIgY29kZS4K KysgKiBAeworKyAqLworKworKy8qKgorKyAqIEBkZWYgYXZfbWFsbG9jX2F0dHJpYgorKyAqIEZ1 bmN0aW9uIGF0dHJpYnV0ZSBkZW5vdGluZyBhIG1hbGxvYy1saWtlIGZ1bmN0aW9uLgorKyAqCisr ICogQHNlZSA8YSBocmVmPSJodHRwczovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL0NvbW1v bi1GdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtYWxsb2Nf MDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMzI1MSI+RnVuY3Rpb24gYXR0cmlidXRlIGBtYWxsb2Ng IGluIEdDQydzIGRvY3VtZW50YXRpb248L2E+CisrICovCisrCisrI2lmIEFWX0dDQ19WRVJTSU9O X0FUX0xFQVNUKDMsMSkKKysgICAgI2RlZmluZSBhdl9tYWxsb2NfYXR0cmliIF9fYXR0cmlidXRl X18oKF9fbWFsbG9jX18pKQorKyNlbHNlCisrICAgICNkZWZpbmUgYXZfbWFsbG9jX2F0dHJpYgor KyNlbmRpZgorKworKy8qKgorKyAqIEBkZWYgYXZfYWxsb2Nfc2l6ZSguLi4pCisrICogRnVuY3Rp b24gYXR0cmlidXRlIHVzZWQgb24gYSBmdW5jdGlvbiB0aGF0IGFsbG9jYXRlcyBtZW1vcnksIHdo b3NlIHNpemUgaXMKKysgKiBnaXZlbiBieSB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcihzKS4KKysg KgorKyAqIEBjb2Rley5jfQorKyAqIHZvaWQgKmF2X21hbGxvYyhzaXplX3Qgc2l6ZSkgYXZfYWxs b2Nfc2l6ZSgxKTsKKysgKiB2b2lkICphdl9jYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6 ZSkgYXZfYWxsb2Nfc2l6ZSgxLCAyKTsKKysgKiBAZW5kY29kZQorKyAqCisrICogQHBhcmFtIC4u LiBPbmUgb3IgdHdvIHBhcmFtZXRlciBpbmRleGVzLCBzZXBhcmF0ZWQgYnkgYSBjb21tYQorKyAq CisrICogQHNlZSA8YSBocmVmPSJodHRwczovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL0Nv bW1vbi1GdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhbGxv Y18wMDVmc2l6ZV8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0zMjIwIj5GdW5jdGlvbiBhdHRyaWJ1 dGUgYGFsbG9jX3NpemVgIGluIEdDQydzIGRvY3VtZW50YXRpb248L2E+CisrICovCisrCisrI2lm IEFWX0dDQ19WRVJTSU9OX0FUX0xFQVNUKDQsMykKKysgICAgI2RlZmluZSBhdl9hbGxvY19zaXpl KC4uLikgX19hdHRyaWJ1dGVfXygoYWxsb2Nfc2l6ZShfX1ZBX0FSR1NfXykpKQorKyNlbHNlCisr ICAgICNkZWZpbmUgYXZfYWxsb2Nfc2l6ZSguLi4pCisrI2VuZGlmCisrCisrLyoqCisrICogQH0K KysgKi8KKysKKysvKioKKysgKiBAZGVmZ3JvdXAgbGF2dV9tZW1fZnVuY3MgSGVhcCBNYW5hZ2Vt ZW50CisrICogRnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nLCBmcmVlaW5nLCBh bmQgY29weWluZyBtZW1vcnkuCisrICoKKysgKiBBbGwgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rp b25zIGhhdmUgYSBidWlsdC1pbiB1cHBlciBsaW1pdCBvZiBgSU5UX01BWGAKKysgKiBieXRlcy4g VGhpcyBtYXkgYmUgY2hhbmdlZCB3aXRoIGF2X21heF9hbGxvYygpLCBhbHRob3VnaCBleGVyY2lz ZSBleHRyZW1lCisrICogY2F1dGlvbiB3aGVuIGRvaW5nIHNvLgorKyAqCisrICogQHsKKysgKi8K KysKKysvKioKKysgKiBBbGxvY2F0ZSBhIG1lbW9yeSBibG9jayB3aXRoIGFsaWdubWVudCBzdWl0 YWJsZSBmb3IgYWxsIG1lbW9yeSBhY2Nlc3NlcworKyAqIChpbmNsdWRpbmcgdmVjdG9ycyBpZiBh dmFpbGFibGUgb24gdGhlIENQVSkuCisrICoKKysgKiBAcGFyYW0gc2l6ZSBTaXplIGluIGJ5dGVz IGZvciB0aGUgbWVtb3J5IGJsb2NrIHRvIGJlIGFsbG9jYXRlZAorKyAqIEByZXR1cm4gUG9pbnRl ciB0byB0aGUgYWxsb2NhdGVkIGJsb2NrLCBvciBgTlVMTGAgaWYgdGhlIGJsb2NrIGNhbm5vdAor KyAqICAgICAgICAgYmUgYWxsb2NhdGVkCisrICogQHNlZSBhdl9tYWxsb2N6KCkKKysgKi8KKyt2 b2lkICphdl9tYWxsb2Moc2l6ZV90IHNpemUpIGF2X21hbGxvY19hdHRyaWIgYXZfYWxsb2Nfc2l6 ZSgxKTsKKysKKysvKioKKysgKiBBbGxvY2F0ZSBhIG1lbW9yeSBibG9jayB3aXRoIGFsaWdubWVu dCBzdWl0YWJsZSBmb3IgYWxsIG1lbW9yeSBhY2Nlc3NlcworKyAqIChpbmNsdWRpbmcgdmVjdG9y cyBpZiBhdmFpbGFibGUgb24gdGhlIENQVSkgYW5kIHplcm8gYWxsIHRoZSBieXRlcyBvZiB0aGUK KysgKiBibG9jay4KKysgKgorKyAqIEBwYXJhbSBzaXplIFNpemUgaW4gYnl0ZXMgZm9yIHRoZSBt ZW1vcnkgYmxvY2sgdG8gYmUgYWxsb2NhdGVkCisrICogQHJldHVybiBQb2ludGVyIHRvIHRoZSBh bGxvY2F0ZWQgYmxvY2ssIG9yIGBOVUxMYCBpZiBpdCBjYW5ub3QgYmUgYWxsb2NhdGVkCisrICog QHNlZSBhdl9tYWxsb2MoKQorKyAqLworK3ZvaWQgKmF2X21hbGxvY3ooc2l6ZV90IHNpemUpIGF2 X21hbGxvY19hdHRyaWIgYXZfYWxsb2Nfc2l6ZSgxKTsKKysKKysvKioKKysgKiBBbGxvY2F0ZSBh IG1lbW9yeSBibG9jayBmb3IgYW4gYXJyYXkgd2l0aCBhdl9tYWxsb2MoKS4KKysgKgorKyAqIFRo ZSBhbGxvY2F0ZWQgbWVtb3J5IHdpbGwgaGF2ZSBzaXplIGBzaXplICogbm1lbWJgIGJ5dGVzLgor KyAqCisrICogQHBhcmFtIG5tZW1iIE51bWJlciBvZiBlbGVtZW50CisrICogQHBhcmFtIHNpemUg IFNpemUgb2YgYSBzaW5nbGUgZWxlbWVudAorKyAqIEByZXR1cm4gUG9pbnRlciB0byB0aGUgYWxs b2NhdGVkIGJsb2NrLCBvciBgTlVMTGAgaWYgdGhlIGJsb2NrIGNhbm5vdAorKyAqICAgICAgICAg YmUgYWxsb2NhdGVkCisrICogQHNlZSBhdl9tYWxsb2MoKQorKyAqLworK2F2X2FsbG9jX3NpemUo MSwgMikgdm9pZCAqYXZfbWFsbG9jX2FycmF5KHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpOwor KworKy8qKgorKyAqIEFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIGZvciBhbiBhcnJheSB3aXRoIGF2 X21hbGxvY3ooKS4KKysgKgorKyAqIFRoZSBhbGxvY2F0ZWQgbWVtb3J5IHdpbGwgaGF2ZSBzaXpl IGBzaXplICogbm1lbWJgIGJ5dGVzLgorKyAqCisrICogQHBhcmFtIG5tZW1iIE51bWJlciBvZiBl bGVtZW50cworKyAqIEBwYXJhbSBzaXplICBTaXplIG9mIHRoZSBzaW5nbGUgZWxlbWVudAorKyAq IEByZXR1cm4gUG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGJsb2NrLCBvciBgTlVMTGAgaWYgdGhl IGJsb2NrIGNhbm5vdAorKyAqICAgICAgICAgYmUgYWxsb2NhdGVkCisrICoKKysgKiBAc2VlIGF2 X21hbGxvY3ooKQorKyAqIEBzZWUgYXZfbWFsbG9jX2FycmF5KCkKKysgKi8KKyt2b2lkICphdl9j YWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSkgYXZfbWFsbG9jX2F0dHJpYiBhdl9hbGxv Y19zaXplKDEsIDIpOworKworKy8qKgorKyAqIEFsbG9jYXRlLCByZWFsbG9jYXRlLCBvciBmcmVl IGEgYmxvY2sgb2YgbWVtb3J5LgorKyAqCisrICogSWYgYHB0cmAgaXMgYE5VTExgIGFuZCBgc2l6 ZWAgPiAwLCBhbGxvY2F0ZSBhIG5ldyBibG9jay4gT3RoZXJ3aXNlLCBleHBhbmQgb3IKKysgKiBz aHJpbmsgdGhhdCBibG9jayBvZiBtZW1vcnkgYWNjb3JkaW5nIHRvIGBzaXplYC4KKysgKgorKyAq IEBwYXJhbSBwdHIgIFBvaW50ZXIgdG8gYSBtZW1vcnkgYmxvY2sgYWxyZWFkeSBhbGxvY2F0ZWQg d2l0aAorKyAqICAgICAgICAgICAgIGF2X3JlYWxsb2MoKSBvciBgTlVMTGAKKysgKiBAcGFyYW0g c2l6ZSBTaXplIGluIGJ5dGVzIG9mIHRoZSBtZW1vcnkgYmxvY2sgdG8gYmUgYWxsb2NhdGVkIG9y CisrICogICAgICAgICAgICAgcmVhbGxvY2F0ZWQKKysgKgorKyAqIEByZXR1cm4gUG9pbnRlciB0 byBhIG5ld2x5LXJlYWxsb2NhdGVkIGJsb2NrIG9yIGBOVUxMYCBpZiB0aGUgYmxvY2sKKysgKiAg ICAgICAgIGNhbm5vdCBiZSByZWFsbG9jYXRlZAorKyAqCisrICogQHdhcm5pbmcgVW5saWtlIGF2 X21hbGxvYygpLCB0aGUgcmV0dXJuZWQgcG9pbnRlciBpcyBub3QgZ3VhcmFudGVlZCB0byBiZQor KyAqICAgICAgICAgIGNvcnJlY3RseSBhbGlnbmVkLiBUaGUgcmV0dXJuZWQgcG9pbnRlciBtdXN0 IGJlIGZyZWVkIGFmdGVyIGV2ZW4KKysgKiAgICAgICAgICBpZiBzaXplIGlzIHplcm8uCisrICog QHNlZSBhdl9mYXN0X3JlYWxsb2MoKQorKyAqIEBzZWUgYXZfcmVhbGxvY3AoKQorKyAqLworK3Zv aWQgKmF2X3JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgYXZfYWxsb2Nfc2l6ZSgyKTsK KysKKysvKioKKysgKiBBbGxvY2F0ZSwgcmVhbGxvY2F0ZSwgb3IgZnJlZSBhIGJsb2NrIG9mIG1l bW9yeSB0aHJvdWdoIGEgcG9pbnRlciB0byBhCisrICogcG9pbnRlci4KKysgKgorKyAqIElmIGAq cHRyYCBpcyBgTlVMTGAgYW5kIGBzaXplYCA+IDAsIGFsbG9jYXRlIGEgbmV3IGJsb2NrLiBJZiBg c2l6ZWAgaXMKKysgKiB6ZXJvLCBmcmVlIHRoZSBtZW1vcnkgYmxvY2sgcG9pbnRlZCB0byBieSBg KnB0cmAuIE90aGVyd2lzZSwgZXhwYW5kIG9yCisrICogc2hyaW5rIHRoYXQgYmxvY2sgb2YgbWVt b3J5IGFjY29yZGluZyB0byBgc2l6ZWAuCisrICoKKysgKiBAcGFyYW1baW4sb3V0XSBwdHIgIFBv aW50ZXIgdG8gYSBwb2ludGVyIHRvIGEgbWVtb3J5IGJsb2NrIGFscmVhZHkgYWxsb2NhdGVkCisr ICogICAgICAgICAgICAgICAgICAgICB3aXRoIGF2X3JlYWxsb2MoKSwgb3IgYSBwb2ludGVyIHRv IGBOVUxMYC4gVGhlIHBvaW50ZXIKKysgKiAgICAgICAgICAgICAgICAgICAgIGlzIHVwZGF0ZWQg b24gc3VjY2Vzcywgb3IgZnJlZWQgb24gZmFpbHVyZS4KKysgKiBAcGFyYW1baW5dICAgICBzaXpl IFNpemUgaW4gYnl0ZXMgZm9yIHRoZSBtZW1vcnkgYmxvY2sgdG8gYmUgYWxsb2NhdGVkIG9yCisr ICogICAgICAgICAgICAgICAgICAgICByZWFsbG9jYXRlZAorKyAqCisrICogQHJldHVybiBaZXJv IG9uIHN1Y2Nlc3MsIGFuIEFWRVJST1IgZXJyb3IgY29kZSBvbiBmYWlsdXJlCisrICoKKysgKiBA d2FybmluZyBVbmxpa2UgYXZfbWFsbG9jKCksIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIG5vdCBn dWFyYW50ZWVkIHRvIGJlCisrICogICAgICAgICAgY29ycmVjdGx5IGFsaWduZWQuCisrICovCisr YXZfd2Fybl91bnVzZWRfcmVzdWx0CisraW50IGF2X3JlYWxsb2NwKHZvaWQgKnB0ciwgc2l6ZV90 IHNpemUpOworKworKy8qKgorKyAqIEFsbG9jYXRlLCByZWFsbG9jYXRlLCBvciBmcmVlIGEgYmxv Y2sgb2YgbWVtb3J5LgorKyAqCisrICogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIHRoaW5n IGFzIGF2X3JlYWxsb2MoKSwgZXhjZXB0OgorKyAqIC0gSXQgdGFrZXMgdHdvIHNpemUgYXJndW1l bnRzIGFuZCBhbGxvY2F0ZXMgYG5lbGVtICogZWxzaXplYCBieXRlcywKKysgKiAgIGFmdGVyIGNo ZWNraW5nIHRoZSByZXN1bHQgb2YgdGhlIG11bHRpcGxpY2F0aW9uIGZvciBpbnRlZ2VyIG92ZXJm bG93LgorKyAqIC0gSXQgZnJlZXMgdGhlIGlucHV0IGJsb2NrIGluIGNhc2Ugb2YgZmFpbHVyZSwg dGh1cyBhdm9pZGluZyB0aGUgbWVtb3J5CisrICogICBsZWFrIHdpdGggdGhlIGNsYXNzaWMKKysg KiAgIEBjb2Rley5jfQorKyAqICAgYnVmID0gcmVhbGxvYyhidWYpOworKyAqICAgaWYgKCFidWYp CisrICogICAgICAgcmV0dXJuIC0xOworKyAqICAgQGVuZGNvZGUKKysgKiAgIHBhdHRlcm4uCisr ICovCisrdm9pZCAqYXZfcmVhbGxvY19mKHZvaWQgKnB0ciwgc2l6ZV90IG5lbGVtLCBzaXplX3Qg ZWxzaXplKTsKKysKKysvKioKKysgKiBBbGxvY2F0ZSwgcmVhbGxvY2F0ZSwgb3IgZnJlZSBhbiBh cnJheS4KKysgKgorKyAqIElmIGBwdHJgIGlzIGBOVUxMYCBhbmQgYG5tZW1iYCA+IDAsIGFsbG9j YXRlIGEgbmV3IGJsb2NrLgorKyAqCisrICogQHBhcmFtIHB0ciAgIFBvaW50ZXIgdG8gYSBtZW1v cnkgYmxvY2sgYWxyZWFkeSBhbGxvY2F0ZWQgd2l0aAorKyAqICAgICAgICAgICAgICBhdl9yZWFs bG9jKCkgb3IgYE5VTExgCisrICogQHBhcmFtIG5tZW1iIE51bWJlciBvZiBlbGVtZW50cyBpbiB0 aGUgYXJyYXkKKysgKiBAcGFyYW0gc2l6ZSAgU2l6ZSBvZiB0aGUgc2luZ2xlIGVsZW1lbnQgb2Yg dGhlIGFycmF5CisrICoKKysgKiBAcmV0dXJuIFBvaW50ZXIgdG8gYSBuZXdseS1yZWFsbG9jYXRl ZCBibG9jayBvciBOVUxMIGlmIHRoZSBibG9jaworKyAqICAgICAgICAgY2Fubm90IGJlIHJlYWxs b2NhdGVkCisrICoKKysgKiBAd2FybmluZyBVbmxpa2UgYXZfbWFsbG9jKCksIHRoZSBhbGxvY2F0 ZWQgbWVtb3J5IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlCisrICogICAgICAgICAgY29ycmVjdGx5 IGFsaWduZWQuIFRoZSByZXR1cm5lZCBwb2ludGVyIG11c3QgYmUgZnJlZWQgYWZ0ZXIgZXZlbiBp ZgorKyAqICAgICAgICAgIG5tZW1iIGlzIHplcm8uCisrICogQHNlZSBhdl9yZWFsbG9jcF9hcnJh eSgpCisrICovCisrYXZfYWxsb2Nfc2l6ZSgyLCAzKSB2b2lkICphdl9yZWFsbG9jX2FycmF5KHZv aWQgKnB0ciwgc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSk7CisrCisrLyoqCisrICogQWxsb2Nh dGUsIHJlYWxsb2NhdGUgYW4gYXJyYXkgdGhyb3VnaCBhIHBvaW50ZXIgdG8gYSBwb2ludGVyLgor KyAqCisrICogSWYgYCpwdHJgIGlzIGBOVUxMYCBhbmQgYG5tZW1iYCA+IDAsIGFsbG9jYXRlIGEg bmV3IGJsb2NrLgorKyAqCisrICogQHBhcmFtW2luLG91dF0gcHRyICAgUG9pbnRlciB0byBhIHBv aW50ZXIgdG8gYSBtZW1vcnkgYmxvY2sgYWxyZWFkeQorKyAqICAgICAgICAgICAgICAgICAgICAg IGFsbG9jYXRlZCB3aXRoIGF2X3JlYWxsb2MoKSwgb3IgYSBwb2ludGVyIHRvIGBOVUxMYC4KKysg KiAgICAgICAgICAgICAgICAgICAgICBUaGUgcG9pbnRlciBpcyB1cGRhdGVkIG9uIHN1Y2Nlc3Ms IG9yIGZyZWVkIG9uIGZhaWx1cmUuCisrICogQHBhcmFtW2luXSAgICAgbm1lbWIgTnVtYmVyIG9m IGVsZW1lbnRzCisrICogQHBhcmFtW2luXSAgICAgc2l6ZSAgU2l6ZSBvZiB0aGUgc2luZ2xlIGVs ZW1lbnQKKysgKgorKyAqIEByZXR1cm4gWmVybyBvbiBzdWNjZXNzLCBhbiBBVkVSUk9SIGVycm9y IGNvZGUgb24gZmFpbHVyZQorKyAqCisrICogQHdhcm5pbmcgVW5saWtlIGF2X21hbGxvYygpLCB0 aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBub3QgZ3VhcmFudGVlZCB0byBiZQorKyAqICAgICAgICAg IGNvcnJlY3RseSBhbGlnbmVkLiAqcHRyIG11c3QgYmUgZnJlZWQgYWZ0ZXIgZXZlbiBpZiBubWVt YiBpcyB6ZXJvLgorKyAqLworK2ludCBhdl9yZWFsbG9jcF9hcnJheSh2b2lkICpwdHIsIHNpemVf dCBubWVtYiwgc2l6ZV90IHNpemUpOworKworKy8qKgorKyAqIFJlYWxsb2NhdGUgdGhlIGdpdmVu IGJ1ZmZlciBpZiBpdCBpcyBub3QgbGFyZ2UgZW5vdWdoLCBvdGhlcndpc2UgZG8gbm90aGluZy4K KysgKgorKyAqIElmIHRoZSBnaXZlbiBidWZmZXIgaXMgYE5VTExgLCB0aGVuIGEgbmV3IHVuaW5p dGlhbGl6ZWQgYnVmZmVyIGlzIGFsbG9jYXRlZC4KKysgKgorKyAqIElmIHRoZSBnaXZlbiBidWZm ZXIgaXMgbm90IGxhcmdlIGVub3VnaCwgYW5kIHJlYWxsb2NhdGlvbiBmYWlscywgYE5VTExgIGlz CisrICogcmV0dXJuZWQgYW5kIGAqc2l6ZWAgaXMgc2V0IHRvIDAsIGJ1dCB0aGUgb3JpZ2luYWwg YnVmZmVyIGlzIG5vdCBjaGFuZ2VkIG9yCisrICogZnJlZWQuCisrICoKKysgKiBBIHR5cGljYWwg dXNlIHBhdHRlcm4gZm9sbG93czoKKysgKgorKyAqIEBjb2Rley5jfQorKyAqIHVpbnQ4X3QgKmJ1 ZiA9IC4uLjsKKysgKiB1aW50OF90ICpuZXdfYnVmID0gYXZfZmFzdF9yZWFsbG9jKGJ1ZiwgJmN1 cnJlbnRfc2l6ZSwgc2l6ZV9uZWVkZWQpOworKyAqIGlmICghbmV3X2J1ZikgeworKyAqICAgICAv LyBBbGxvY2F0aW9uIGZhaWxlZDsgY2xlYW4gdXAgb3JpZ2luYWwgYnVmZmVyCisrICogICAgIGF2 X2ZyZWVwKCZidWYpOworKyAqICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworKyAqIH0KKysg KiBAZW5kY29kZQorKyAqCisrICogQHBhcmFtW2luLG91dF0gcHRyICAgICAgQWxyZWFkeSBhbGxv Y2F0ZWQgYnVmZmVyLCBvciBgTlVMTGAKKysgKiBAcGFyYW1baW4sb3V0XSBzaXplICAgICBQb2lu dGVyIHRvIHRoZSBzaXplIG9mIGJ1ZmZlciBgcHRyYC4gYCpzaXplYCBpcworKyAqICAgICAgICAg ICAgICAgICAgICAgICAgIHVwZGF0ZWQgdG8gdGhlIG5ldyBhbGxvY2F0ZWQgc2l6ZSwgaW4gcGFy dGljdWxhciAwCisrICogICAgICAgICAgICAgICAgICAgICAgICAgaW4gY2FzZSBvZiBmYWlsdXJl LgorKyAqIEBwYXJhbVtpbl0gICAgIG1pbl9zaXplIERlc2lyZWQgbWluaW1hbCBzaXplIG9mIGJ1 ZmZlciBgcHRyYAorKyAqIEByZXR1cm4gYHB0cmAgaWYgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91 Z2gsIGEgcG9pbnRlciB0byBuZXdseSByZWFsbG9jYXRlZAorKyAqICAgICAgICAgYnVmZmVyIGlm IHRoZSBidWZmZXIgd2FzIG5vdCBsYXJnZSBlbm91Z2gsIG9yIGBOVUxMYCBpbiBjYXNlIG9mCisr ICogICAgICAgICBlcnJvcgorKyAqIEBzZWUgYXZfcmVhbGxvYygpCisrICogQHNlZSBhdl9mYXN0 X21hbGxvYygpCisrICovCisrdm9pZCAqYXZfZmFzdF9yZWFsbG9jKHZvaWQgKnB0ciwgdW5zaWdu ZWQgaW50ICpzaXplLCBzaXplX3QgbWluX3NpemUpOworKworKy8qKgorKyAqIEFsbG9jYXRlIGEg YnVmZmVyLCByZXVzaW5nIHRoZSBnaXZlbiBvbmUgaWYgbGFyZ2UgZW5vdWdoLgorKyAqCisrICog Q29udHJhcnkgdG8gYXZfZmFzdF9yZWFsbG9jKCksIHRoZSBjdXJyZW50IGJ1ZmZlciBjb250ZW50 cyBtaWdodCBub3QgYmUKKysgKiBwcmVzZXJ2ZWQgYW5kIG9uIGVycm9yIHRoZSBvbGQgYnVmZmVy IGlzIGZyZWVkLCB0aHVzIG5vIHNwZWNpYWwgaGFuZGxpbmcgdG8KKysgKiBhdm9pZCBtZW1sZWFr cyBpcyBuZWNlc3NhcnkuCisrICoKKysgKiBgKnB0cmAgaXMgYWxsb3dlZCB0byBiZSBgTlVMTGAs IGluIHdoaWNoIGNhc2UgYWxsb2NhdGlvbiBhbHdheXMgaGFwcGVucyBpZgorKyAqIGBzaXplX25l ZWRlZGAgaXMgZ3JlYXRlciB0aGFuIDAuCisrICoKKysgKiBAY29kZXsuY30KKysgKiB1aW50OF90 ICpidWYgPSAuLi47CisrICogYXZfZmFzdF9tYWxsb2MoJmJ1ZiwgJmN1cnJlbnRfc2l6ZSwgc2l6 ZV9uZWVkZWQpOworKyAqIGlmICghYnVmKSB7CisrICogICAgIC8vIEFsbG9jYXRpb24gZmFpbGVk OyBidWYgYWxyZWFkeSBmcmVlZAorKyAqICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworKyAq IH0KKysgKiBAZW5kY29kZQorKyAqCisrICogQHBhcmFtW2luLG91dF0gcHRyICAgICAgUG9pbnRl ciB0byBwb2ludGVyIHRvIGFuIGFscmVhZHkgYWxsb2NhdGVkIGJ1ZmZlci4KKysgKiAgICAgICAg ICAgICAgICAgICAgICAgICBgKnB0cmAgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHBvaW50ZXIg dG8gbmV3CisrICogICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIG9uIHN1Y2Nlc3Mgb3Ig YE5VTExgIG9uIGZhaWx1cmUKKysgKiBAcGFyYW1baW4sb3V0XSBzaXplICAgICBQb2ludGVyIHRv IHRoZSBzaXplIG9mIGJ1ZmZlciBgKnB0cmAuIGAqc2l6ZWAgaXMKKysgKiAgICAgICAgICAgICAg ICAgICAgICAgICB1cGRhdGVkIHRvIHRoZSBuZXcgYWxsb2NhdGVkIHNpemUsIGluIHBhcnRpY3Vs YXIgMAorKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGluIGNhc2Ugb2YgZmFpbHVyZS4KKysg KiBAcGFyYW1baW5dICAgICBtaW5fc2l6ZSBEZXNpcmVkIG1pbmltYWwgc2l6ZSBvZiBidWZmZXIg YCpwdHJgCisrICogQHNlZSBhdl9yZWFsbG9jKCkKKysgKiBAc2VlIGF2X2Zhc3RfbWFsbG9jeigp CisrICovCisrdm9pZCBhdl9mYXN0X21hbGxvYyh2b2lkICpwdHIsIHVuc2lnbmVkIGludCAqc2l6 ZSwgc2l6ZV90IG1pbl9zaXplKTsKKysKKysvKioKKysgKiBBbGxvY2F0ZSBhbmQgY2xlYXIgYSBi dWZmZXIsIHJldXNpbmcgdGhlIGdpdmVuIG9uZSBpZiBsYXJnZSBlbm91Z2guCisrICoKKysgKiBM aWtlIGF2X2Zhc3RfbWFsbG9jKCksIGJ1dCBhbGwgbmV3bHkgYWxsb2NhdGVkIHNwYWNlIGlzIGlu aXRpYWxseSBjbGVhcmVkLgorKyAqIFJldXNlZCBidWZmZXIgaXMgbm90IGNsZWFyZWQuCisrICoK KysgKiBgKnB0cmAgaXMgYWxsb3dlZCB0byBiZSBgTlVMTGAsIGluIHdoaWNoIGNhc2UgYWxsb2Nh dGlvbiBhbHdheXMgaGFwcGVucyBpZgorKyAqIGBzaXplX25lZWRlZGAgaXMgZ3JlYXRlciB0aGFu IDAuCisrICoKKysgKiBAcGFyYW1baW4sb3V0XSBwdHIgICAgICBQb2ludGVyIHRvIHBvaW50ZXIg dG8gYW4gYWxyZWFkeSBhbGxvY2F0ZWQgYnVmZmVyLgorKyAqICAgICAgICAgICAgICAgICAgICAg ICAgIGAqcHRyYCB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggcG9pbnRlciB0byBuZXcKKysgKiAg ICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgb24gc3VjY2VzcyBvciBgTlVMTGAgb24gZmFp bHVyZQorKyAqIEBwYXJhbVtpbixvdXRdIHNpemUgICAgIFBvaW50ZXIgdG8gdGhlIHNpemUgb2Yg YnVmZmVyIGAqcHRyYC4gYCpzaXplYCBpcworKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHVw ZGF0ZWQgdG8gdGhlIG5ldyBhbGxvY2F0ZWQgc2l6ZSwgaW4gcGFydGljdWxhciAwCisrICogICAg ICAgICAgICAgICAgICAgICAgICAgaW4gY2FzZSBvZiBmYWlsdXJlLgorKyAqIEBwYXJhbVtpbl0g ICAgIG1pbl9zaXplIERlc2lyZWQgbWluaW1hbCBzaXplIG9mIGJ1ZmZlciBgKnB0cmAKKysgKiBA c2VlIGF2X2Zhc3RfbWFsbG9jKCkKKysgKi8KKyt2b2lkIGF2X2Zhc3RfbWFsbG9jeih2b2lkICpw dHIsIHVuc2lnbmVkIGludCAqc2l6ZSwgc2l6ZV90IG1pbl9zaXplKTsKKysKKysvKioKKysgKiBG cmVlIGEgbWVtb3J5IGJsb2NrIHdoaWNoIGhhcyBiZWVuIGFsbG9jYXRlZCB3aXRoIGEgZnVuY3Rp b24gb2YgYXZfbWFsbG9jKCkKKysgKiBvciBhdl9yZWFsbG9jKCkgZmFtaWx5LgorKyAqCisrICog QHBhcmFtIHB0ciBQb2ludGVyIHRvIHRoZSBtZW1vcnkgYmxvY2sgd2hpY2ggc2hvdWxkIGJlIGZy ZWVkLgorKyAqCisrICogQG5vdGUgYHB0ciA9IE5VTExgIGlzIGV4cGxpY2l0bHkgYWxsb3dlZC4K KysgKiBAbm90ZSBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgYXZfZnJlZXAoKSBpbnN0 ZWFkLCB0byBwcmV2ZW50IGxlYXZpbmcKKysgKiAgICAgICBiZWhpbmQgZGFuZ2xpbmcgcG9pbnRl cnMuCisrICogQHNlZSBhdl9mcmVlcCgpCisrICovCisrdm9pZCBhdl9mcmVlKHZvaWQgKnB0cik7 CisrCisrLyoqCisrICogRnJlZSBhIG1lbW9yeSBibG9jayB3aGljaCBoYXMgYmVlbiBhbGxvY2F0 ZWQgd2l0aCBhIGZ1bmN0aW9uIG9mIGF2X21hbGxvYygpCisrICogb3IgYXZfcmVhbGxvYygpIGZh bWlseSwgYW5kIHNldCB0aGUgcG9pbnRlciBwb2ludGluZyB0byBpdCB0byBgTlVMTGAuCisrICoK KysgKiBAY29kZXsuY30KKysgKiB1aW50OF90ICpidWYgPSBhdl9tYWxsb2MoMTYpOworKyAqIGF2 X2ZyZWUoYnVmKTsKKysgKiAvLyBidWYgbm93IGNvbnRhaW5zIGEgZGFuZ2xpbmcgcG9pbnRlciB0 byBmcmVlZCBtZW1vcnksIGFuZCBhY2NpZGVudGFsCisrICogLy8gZGVyZWZlcmVuY2Ugb2YgYnVm IHdpbGwgcmVzdWx0IGluIGEgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIG1heSBiZSBhCisrICogLy8g c2VjdXJpdHkgcmlzay4KKysgKgorKyAqIHVpbnQ4X3QgKmJ1ZiA9IGF2X21hbGxvYygxNik7Cisr ICogYXZfZnJlZXAoJmJ1Zik7CisrICogLy8gYnVmIGlzIG5vdyBOVUxMLCBhbmQgYWNjaWRlbnRh bCBkZXJlZmVyZW5jZSB3aWxsIG9ubHkgcmVzdWx0IGluIGEKKysgKiAvLyBOVUxMLXBvaW50ZXIg ZGVyZWZlcmVuY2UuCisrICogQGVuZGNvZGUKKysgKgorKyAqIEBwYXJhbSBwdHIgUG9pbnRlciB0 byB0aGUgcG9pbnRlciB0byB0aGUgbWVtb3J5IGJsb2NrIHdoaWNoIHNob3VsZCBiZSBmcmVlZAor KyAqIEBub3RlIGAqcHRyID0gTlVMTGAgaXMgc2FmZSBhbmQgbGVhZHMgdG8gbm8gYWN0aW9uLgor KyAqIEBzZWUgYXZfZnJlZSgpCisrICovCisrdm9pZCBhdl9mcmVlcCh2b2lkICpwdHIpOworKwor Ky8qKgorKyAqIER1cGxpY2F0ZSBhIHN0cmluZy4KKysgKgorKyAqIEBwYXJhbSBzIFN0cmluZyB0 byBiZSBkdXBsaWNhdGVkCisrICogQHJldHVybiBQb2ludGVyIHRvIGEgbmV3bHktYWxsb2NhdGVk IHN0cmluZyBjb250YWluaW5nIGEKKysgKiAgICAgICAgIGNvcHkgb2YgYHNgIG9yIGBOVUxMYCBp ZiB0aGUgc3RyaW5nIGNhbm5vdCBiZSBhbGxvY2F0ZWQKKysgKiBAc2VlIGF2X3N0cm5kdXAoKQor KyAqLworK2NoYXIgKmF2X3N0cmR1cChjb25zdCBjaGFyICpzKSBhdl9tYWxsb2NfYXR0cmliOwor KworKy8qKgorKyAqIER1cGxpY2F0ZSBhIHN1YnN0cmluZyBvZiBhIHN0cmluZy4KKysgKgorKyAq IEBwYXJhbSBzICAgU3RyaW5nIHRvIGJlIGR1cGxpY2F0ZWQKKysgKiBAcGFyYW0gbGVuIE1heGlt dW0gbGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nIChub3QgY291bnRpbmcgdGhlCisrICog ICAgICAgICAgICB0ZXJtaW5hdGluZyBieXRlKQorKyAqIEByZXR1cm4gUG9pbnRlciB0byBhIG5l d2x5LWFsbG9jYXRlZCBzdHJpbmcgY29udGFpbmluZyBhCisrICogICAgICAgICBzdWJzdHJpbmcg b2YgYHNgIG9yIGBOVUxMYCBpZiB0aGUgc3RyaW5nIGNhbm5vdCBiZSBhbGxvY2F0ZWQKKysgKi8K KytjaGFyICphdl9zdHJuZHVwKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBsZW4pIGF2X21hbGxvY19h dHRyaWI7CisrCisrLyoqCisrICogRHVwbGljYXRlIGEgYnVmZmVyIHdpdGggYXZfbWFsbG9jKCku CisrICoKKysgKiBAcGFyYW0gcCAgICBCdWZmZXIgdG8gYmUgZHVwbGljYXRlZAorKyAqIEBwYXJh bSBzaXplIFNpemUgaW4gYnl0ZXMgb2YgdGhlIGJ1ZmZlciBjb3BpZWQKKysgKiBAcmV0dXJuIFBv aW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIGNvbnRhaW5pbmcgYQorKyAqICAgICAg ICAgY29weSBvZiBgcGAgb3IgYE5VTExgIGlmIHRoZSBidWZmZXIgY2Fubm90IGJlIGFsbG9jYXRl ZAorKyAqLworK3ZvaWQgKmF2X21lbWR1cChjb25zdCB2b2lkICpwLCBzaXplX3Qgc2l6ZSk7Cisr CisrLyoqCisrICogT3ZlcmxhcHBpbmcgbWVtY3B5KCkgaW1wbGVtZW50YXRpb24uCisrICoKKysg KiBAcGFyYW0gZHN0ICBEZXN0aW5hdGlvbiBidWZmZXIKKysgKiBAcGFyYW0gYmFjayBOdW1iZXIg b2YgYnl0ZXMgYmFjayB0byBzdGFydCBjb3B5aW5nIChpLmUuIHRoZSBpbml0aWFsIHNpemUgb2YK KysgKiAgICAgICAgICAgICB0aGUgb3ZlcmxhcHBpbmcgd2luZG93KTsgbXVzdCBiZSA+IDAKKysg KiBAcGFyYW0gY250ICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weTsgbXVzdCBiZSA+PSAwCisrICoK KysgKiBAbm90ZSBgY250ID4gYmFja2AgaXMgdmFsaWQsIHRoaXMgd2lsbCBjb3B5IHRoZSBieXRl cyB3ZSBqdXN0IGNvcGllZCwKKysgKiAgICAgICB0aHVzIGNyZWF0aW5nIGEgcmVwZWF0aW5nIHBh dHRlcm4gd2l0aCBhIHBlcmlvZCBsZW5ndGggb2YgYGJhY2tgLgorKyAqLworK3ZvaWQgYXZfbWVt Y3B5X2JhY2twdHIodWludDhfdCAqZHN0LCBpbnQgYmFjaywgaW50IGNudCk7CisrCisrLyoqCisr ICogQH0KKysgKi8KKysKKysvKioKKysgKiBAZGVmZ3JvdXAgbGF2dV9tZW1fZHluYXJyYXkgRHlu YW1pYyBBcnJheQorKyAqCisrICogVXRpbGl0aWVzIHRvIG1ha2UgYW4gYXJyYXkgZ3JvdyB3aGVu IG5lZWRlZC4KKysgKgorKyAqIFNvbWV0aW1lcywgdGhlIHByb2dyYW1tZXIgd291bGQgd2FudCB0 byBoYXZlIGFuIGFycmF5IHRoYXQgY2FuIGdyb3cgd2hlbgorKyAqIG5lZWRlZC4gVGhlIGxpYmF2 dXRpbCBkeW5hbWljIGFycmF5IHV0aWxpdGllcyBmaWxsIHRoYXQgbmVlZC4KKysgKgorKyAqIGxp YmF2dXRpbCBzdXBwb3J0cyB0d28gc3lzdGVtcyBvZiBhcHBlbmRpbmcgZWxlbWVudHMgb250byBh IGR5bmFtaWNhbGx5CisrICogYWxsb2NhdGVkIGFycmF5LCB0aGUgZmlyc3Qgb25lIHN0b3Jpbmcg dGhlIHBvaW50ZXIgdG8gdGhlIHZhbHVlIGluIHRoZQorKyAqIGFycmF5LCBhbmQgdGhlIHNlY29u ZCBzdG9yaW5nIHRoZSB2YWx1ZSBkaXJlY3RseS4gSW4gYm90aCBzeXN0ZW1zLCB0aGUKKysgKiBj YWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1haW50YWluaW5nIGEgdmFyaWFibGUgY29udGFpbmlu ZyB0aGUgbGVuZ3RoIG9mCisrICogdGhlIGFycmF5LCBhcyB3ZWxsIGFzIGZyZWVpbmcgb2YgdGhl IGFycmF5IGFmdGVyIHVzZS4KKysgKgorKyAqIFRoZSBmaXJzdCBzeXN0ZW0gc3RvcmVzIHBvaW50 ZXJzIHRvIHZhbHVlcyBpbiBhIGJsb2NrIG9mIGR5bmFtaWNhbGx5CisrICogYWxsb2NhdGVkIG1l bW9yeS4gU2luY2Ugb25seSBwb2ludGVycyBhcmUgc3RvcmVkLCB0aGUgZnVuY3Rpb24gZG9lcyBu b3QgbmVlZAorKyAqIHRvIGtub3cgdGhlIHNpemUgb2YgdGhlIHR5cGUuIEJvdGggYXZfZHluYXJy YXlfYWRkKCkgYW5kCisrICogYXZfZHluYXJyYXlfYWRkX25vZnJlZSgpIGltcGxlbWVudCB0aGlz IHN5c3RlbS4KKysgKgorKyAqIEBjb2RlCisrICogdHlwZSAqKmFycmF5ID0gTlVMTDsgLy88IGFu IGFycmF5IG9mIHBvaW50ZXJzIHRvIHZhbHVlcworKyAqIGludCAgICBuYiAgICA9IDA7ICAgIC8v PCBhIHZhcmlhYmxlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkKKysg KgorKyAqIHR5cGUgdG9fYmVfYWRkZWQgID0gLi4uOworKyAqIHR5cGUgdG9fYmVfYWRkZWQyID0g Li4uOworKyAqCisrICogYXZfZHluYXJyYXlfYWRkKCZhcnJheSwgJm5iLCAmdG9fYmVfYWRkZWQp OworKyAqIGlmIChuYiA9PSAwKQorKyAqICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworKyAq CisrICogYXZfZHluYXJyYXlfYWRkKCZhcnJheSwgJm5iLCAmdG9fYmVfYWRkZWQyKTsKKysgKiBp ZiAobmIgPT0gMCkKKysgKiAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKysgKgorKyAqIC8v IE5vdzoKKysgKiAvLyAgbmIgICAgICAgICAgID09IDIKKysgKiAvLyAmdG9fYmVfYWRkZWQgID09 IGFycmF5WzBdCisrICogLy8gJnRvX2JlX2FkZGVkMiA9PSBhcnJheVsxXQorKyAqCisrICogYXZf ZnJlZXAoJmFycmF5KTsKKysgKiBAZW5kY29kZQorKyAqCisrICogVGhlIHNlY29uZCBzeXN0ZW0g c3RvcmVzIHRoZSB2YWx1ZSBkaXJlY3RseSBpbiBhIGJsb2NrIG9mIG1lbW9yeS4gQXMgYQorKyAq IHJlc3VsdCwgdGhlIGZ1bmN0aW9uIGhhcyB0byBrbm93IHRoZSBzaXplIG9mIHRoZSB0eXBlLiBh dl9keW5hcnJheTJfYWRkKCkKKysgKiBpbXBsZW1lbnRzIHRoaXMgbWVjaGFuaXNtLgorKyAqCisr ICogQGNvZGUKKysgKiB0eXBlICphcnJheSA9IE5VTEw7IC8vPCBhbiBhcnJheSBvZiB2YWx1ZXMK KysgKiBpbnQgICBuYiAgICA9IDA7ICAgIC8vPCBhIHZhcmlhYmxlIHRvIGtlZXAgdHJhY2sgb2Yg dGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkKKysgKgorKyAqIHR5cGUgdG9fYmVfYWRkZWQgID0gLi4u OworKyAqIHR5cGUgdG9fYmVfYWRkZWQyID0gLi4uOworKyAqCisrICogdHlwZSAqYWRkciA9IGF2 X2R5bmFycmF5Ml9hZGQoKHZvaWQgKiopJmFycmF5LCAmbmIsIHNpemVvZigqYXJyYXkpLCBOVUxM KTsKKysgKiBpZiAoIWFkZHIpCisrICogICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisrICog bWVtY3B5KGFkZHIsICZ0b19iZV9hZGRlZCwgc2l6ZW9mKHRvX2JlX2FkZGVkKSk7CisrICoKKysg KiAvLyBTaG9ydGN1dCBvZiB0aGUgYWJvdmUuCisrICogdHlwZSAqYWRkciA9IGF2X2R5bmFycmF5 Ml9hZGQoKHZvaWQgKiopJmFycmF5LCAmbmIsIHNpemVvZigqYXJyYXkpLAorKyAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopJnRvX2JlX2FkZGVkMik7CisrICog aWYgKCFhZGRyKQorKyAqICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworKyAqCisrICogLy8g Tm93OgorKyAqIC8vICBuYiAgICAgICAgICAgPT0gMgorKyAqIC8vICB0b19iZV9hZGRlZCAgPT0g YXJyYXlbMF0KKysgKiAvLyAgdG9fYmVfYWRkZWQyID09IGFycmF5WzFdCisrICoKKysgKiBhdl9m cmVlcCgmYXJyYXkpOworKyAqIEBlbmRjb2RlCisrICoKKysgKiBAeworKyAqLworKworKy8qKgor KyAqIEFkZCB0aGUgcG9pbnRlciB0byBhbiBlbGVtZW50IHRvIGEgZHluYW1pYyBhcnJheS4KKysg KgorKyAqIFRoZSBhcnJheSB0byBncm93IGlzIHN1cHBvc2VkIHRvIGJlIGFuIGFycmF5IG9mIHBv aW50ZXJzIHRvCisrICogc3RydWN0dXJlcywgYW5kIHRoZSBlbGVtZW50IHRvIGFkZCBtdXN0IGJl IGEgcG9pbnRlciB0byBhbiBhbHJlYWR5CisrICogYWxsb2NhdGVkIHN0cnVjdHVyZS4KKysgKgor KyAqIFRoZSBhcnJheSBpcyByZWFsbG9jYXRlZCB3aGVuIGl0cyBzaXplIHJlYWNoZXMgcG93ZXJz IG9mIDIuCisrICogVGhlcmVmb3JlLCB0aGUgYW1vcnRpemVkIGNvc3Qgb2YgYWRkaW5nIGFuIGVs ZW1lbnQgaXMgY29uc3RhbnQuCisrICoKKysgKiBJbiBjYXNlIG9mIHN1Y2Nlc3MsIHRoZSBwb2lu dGVyIHRvIHRoZSBhcnJheSBpcyB1cGRhdGVkIGluIG9yZGVyIHRvCisrICogcG9pbnQgdG8gdGhl IG5ldyBncm93biBhcnJheSwgYW5kIHRoZSBudW1iZXIgcG9pbnRlZCB0byBieSBgbmJfcHRyYAor KyAqIGlzIGluY3JlbWVudGVkLgorKyAqIEluIGNhc2Ugb2YgZmFpbHVyZSwgdGhlIGFycmF5IGlz IGZyZWVkLCBgKnRhYl9wdHJgIGlzIHNldCB0byBgTlVMTGAgYW5kCisrICogYCpuYl9wdHJgIGlz IHNldCB0byAwLgorKyAqCisrICogQHBhcmFtW2luLG91dF0gdGFiX3B0ciBQb2ludGVyIHRvIHRo ZSBhcnJheSB0byBncm93CisrICogQHBhcmFtW2luLG91dF0gbmJfcHRyICBQb2ludGVyIHRvIHRo ZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5CisrICogQHBhcmFtW2luXSAgICAgZWxl bSAgICBFbGVtZW50IHRvIGFkZAorKyAqIEBzZWUgYXZfZHluYXJyYXlfYWRkX25vZnJlZSgpLCBh dl9keW5hcnJheTJfYWRkKCkKKysgKi8KKyt2b2lkIGF2X2R5bmFycmF5X2FkZCh2b2lkICp0YWJf cHRyLCBpbnQgKm5iX3B0ciwgdm9pZCAqZWxlbSk7CisrCisrLyoqCisrICogQWRkIGFuIGVsZW1l bnQgdG8gYSBkeW5hbWljIGFycmF5LgorKyAqCisrICogRnVuY3Rpb24gaGFzIHRoZSBzYW1lIGZ1 bmN0aW9uYWxpdHkgYXMgYXZfZHluYXJyYXlfYWRkKCksCisrICogYnV0IGl0IGRvZXNuJ3QgZnJl ZSBtZW1vcnkgb24gZmFpbHMuIEl0IHJldHVybnMgZXJyb3IgY29kZQorKyAqIGluc3RlYWQgYW5k IGxlYXZlIGN1cnJlbnQgYnVmZmVyIHVudG91Y2hlZC4KKysgKgorKyAqIEByZXR1cm4gPj0wIG9u IHN1Y2Nlc3MsIG5lZ2F0aXZlIG90aGVyd2lzZQorKyAqIEBzZWUgYXZfZHluYXJyYXlfYWRkKCks IGF2X2R5bmFycmF5Ml9hZGQoKQorKyAqLworK2F2X3dhcm5fdW51c2VkX3Jlc3VsdAorK2ludCBh dl9keW5hcnJheV9hZGRfbm9mcmVlKHZvaWQgKnRhYl9wdHIsIGludCAqbmJfcHRyLCB2b2lkICpl bGVtKTsKKysKKysvKioKKysgKiBBZGQgYW4gZWxlbWVudCBvZiBzaXplIGBlbGVtX3NpemVgIHRv IGEgZHluYW1pYyBhcnJheS4KKysgKgorKyAqIFRoZSBhcnJheSBpcyByZWFsbG9jYXRlZCB3aGVu IGl0cyBudW1iZXIgb2YgZWxlbWVudHMgcmVhY2hlcyBwb3dlcnMgb2YgMi4KKysgKiBUaGVyZWZv cmUsIHRoZSBhbW9ydGl6ZWQgY29zdCBvZiBhZGRpbmcgYW4gZWxlbWVudCBpcyBjb25zdGFudC4K KysgKgorKyAqIEluIGNhc2Ugb2Ygc3VjY2VzcywgdGhlIHBvaW50ZXIgdG8gdGhlIGFycmF5IGlz IHVwZGF0ZWQgaW4gb3JkZXIgdG8KKysgKiBwb2ludCB0byB0aGUgbmV3IGdyb3duIGFycmF5LCBh bmQgdGhlIG51bWJlciBwb2ludGVkIHRvIGJ5IGBuYl9wdHJgCisrICogaXMgaW5jcmVtZW50ZWQu CisrICogSW4gY2FzZSBvZiBmYWlsdXJlLCB0aGUgYXJyYXkgaXMgZnJlZWQsIGAqdGFiX3B0cmAg aXMgc2V0IHRvIGBOVUxMYCBhbmQKKysgKiBgKm5iX3B0cmAgaXMgc2V0IHRvIDAuCisrICoKKysg KiBAcGFyYW1baW4sb3V0XSB0YWJfcHRyICAgUG9pbnRlciB0byB0aGUgYXJyYXkgdG8gZ3Jvdwor KyAqIEBwYXJhbVtpbixvdXRdIG5iX3B0ciAgICBQb2ludGVyIHRvIHRoZSBudW1iZXIgb2YgZWxl bWVudHMgaW4gdGhlIGFycmF5CisrICogQHBhcmFtW2luXSAgICAgZWxlbV9zaXplIFNpemUgaW4g Ynl0ZXMgb2YgYW4gZWxlbWVudCBpbiB0aGUgYXJyYXkKKysgKiBAcGFyYW1baW5dICAgICBlbGVt X2RhdGEgUG9pbnRlciB0byB0aGUgZGF0YSBvZiB0aGUgZWxlbWVudCB0byBhZGQuIElmCisrICog ICAgICAgICAgICAgICAgICAgICAgICAgIGBOVUxMYCwgdGhlIHNwYWNlIG9mIHRoZSBuZXdseSBh ZGRlZCBlbGVtZW50IGlzCisrICogICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlZCBi dXQgbGVmdCB1bmluaXRpYWxpemVkLgorKyAqCisrICogQHJldHVybiBQb2ludGVyIHRvIHRoZSBk YXRhIG9mIHRoZSBlbGVtZW50IHRvIGNvcHkgaW4gdGhlIG5ld2x5IGFsbG9jYXRlZAorKyAqICAg ICAgICAgc3BhY2UKKysgKiBAc2VlIGF2X2R5bmFycmF5X2FkZCgpLCBhdl9keW5hcnJheV9hZGRf bm9mcmVlKCkKKysgKi8KKyt2b2lkICphdl9keW5hcnJheTJfYWRkKHZvaWQgKip0YWJfcHRyLCBp bnQgKm5iX3B0ciwgc2l6ZV90IGVsZW1fc2l6ZSwKKysgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVpbnQ4X3QgKmVsZW1fZGF0YSk7CisrCisrLyoqCisrICogQH0KKysgKi8KKysKKysvKioK KysgKiBAZGVmZ3JvdXAgbGF2dV9tZW1fbWlzYyBNaXNjZWxsYW5lb3VzIEZ1bmN0aW9ucworKyAq CisrICogT3RoZXIgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24uCisrICoK KysgKiBAeworKyAqLworKworKy8qKgorKyAqIE11bHRpcGx5IHR3byBgc2l6ZV90YCB2YWx1ZXMg Y2hlY2tpbmcgZm9yIG92ZXJmbG93LgorKyAqCisrICogQHBhcmFtW2luXSAgYSAgIE9wZXJhbmQg b2YgbXVsdGlwbGljYXRpb24KKysgKiBAcGFyYW1baW5dICBiICAgT3BlcmFuZCBvZiBtdWx0aXBs aWNhdGlvbgorKyAqIEBwYXJhbVtvdXRdIHIgICBQb2ludGVyIHRvIHRoZSByZXN1bHQgb2YgdGhl IG9wZXJhdGlvbgorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBBVkVSUk9SKEVJTlZBTCkgb24g b3ZlcmZsb3cKKysgKi8KKytpbnQgYXZfc2l6ZV9tdWx0KHNpemVfdCBhLCBzaXplX3QgYiwgc2l6 ZV90ICpyKTsKKysKKysvKioKKysgKiBTZXQgdGhlIG1heGltdW0gc2l6ZSB0aGF0IG1heSBiZSBh bGxvY2F0ZWQgaW4gb25lIGJsb2NrLgorKyAqCisrICogVGhlIHZhbHVlIHNwZWNpZmllZCB3aXRo IHRoaXMgZnVuY3Rpb24gaXMgZWZmZWN0aXZlIGZvciBhbGwgbGliYXZ1dGlsJ3MgQHJlZgorKyAq IGxhdnVfbWVtX2Z1bmNzICJoZWFwIG1hbmFnZW1lbnQgZnVuY3Rpb25zLiIKKysgKgorKyAqIEJ5 IGRlZmF1bHQsIHRoZSBtYXggdmFsdWUgaXMgZGVmaW5lZCBhcyBgSU5UX01BWGAuCisrICoKKysg KiBAcGFyYW0gbWF4IFZhbHVlIHRvIGJlIHNldCBhcyB0aGUgbmV3IG1heGltdW0gc2l6ZQorKyAq CisrICogQHdhcm5pbmcgRXhlcmNpc2UgZXh0cmVtZSBjYXV0aW9uIHdoZW4gdXNpbmcgdGhpcyBm dW5jdGlvbi4gRG9uJ3QgdG91Y2gKKysgKiAgICAgICAgICB0aGlzIGlmIHlvdSBkbyBub3QgdW5k ZXJzdGFuZCB0aGUgZnVsbCBjb25zZXF1ZW5jZSBvZiBkb2luZyBzby4KKysgKi8KKyt2b2lkIGF2 X21heF9hbGxvYyhzaXplX3QgbWF4KTsKKysKKysvKioKKysgKiBAfQorKyAqIEB9CisrICovCisr CisrI2VuZGlmIC8qIEFWVVRJTF9NRU1fSCAqLworZGlmZiAtdXAgTXVzZVNjb3JlLTQuNy40L3Ny Yy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL29wdC5oLmZm bXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1w ZWcvdjkvbGliYXZ1dGlsL29wdC5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsv bWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL29wdC5oLmZmbXBlZzkJMjAyNi0w OS0wNyAxMjoyMzo0Ny42NzgyOTAwNDEgKzAyMDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2Zy YW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvb3B0LmgJMjAyNi0w OS0wNyAxMjoyMzo0Ny42Nzc5ODY2NTIgKzAyMDAKK0BAIC0wLDAgKzEsMTE2MCBAQAorKy8qCisr ICogQVZPcHRpb25zCisrICogY29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgTmllZGVybWF5ZXIg PG1pY2hhZWxuaUBnbXguYXQ+CisrICoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcu CisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRp b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx MTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVmIEFWVVRJTF9PUFRfSAorKyNkZWZpbmUgQVZV VElMX09QVF9ICisrCisrLyoqCisrICogQGZpbGUKKysgKiBBVk9wdGlvbnMKKysgKi8KKysKKysj aW5jbHVkZSAicmF0aW9uYWwuaCIKKysjaW5jbHVkZSAiY2hhbm5lbF9sYXlvdXQuaCIKKysjaW5j bHVkZSAiZGljdC5oIgorKyNpbmNsdWRlICJsb2cuaCIKKysjaW5jbHVkZSAicGl4Zm10LmgiCisr I2luY2x1ZGUgInNhbXBsZWZtdC5oIgorKworKy8qKgorKyAqIEBkZWZncm91cCBhdm9wdGlvbnMg QVZPcHRpb25zCisrICogQGluZ3JvdXAgbGF2dV9kYXRhCisrICogQHsKKysgKiBBVk9wdGlvbnMg cHJvdmlkZSBhIGdlbmVyaWMgc3lzdGVtIHRvIGRlY2xhcmUgb3B0aW9ucyBvbiBhcmJpdHJhcnkg c3RydWN0cworKyAqICgib2JqZWN0cyIpLiBBbiBvcHRpb24gY2FuIGhhdmUgYSBoZWxwIHRleHQs IGEgdHlwZSBhbmQgYSByYW5nZSBvZiBwb3NzaWJsZQorKyAqIHZhbHVlcy4gT3B0aW9ucyBtYXkg dGhlbiBiZSBlbnVtZXJhdGVkLCByZWFkIGFuZCB3cml0dGVuIHRvLgorKyAqCisrICogVGhlcmUg YXJlIHR3byBtb2RlcyBvZiBhY2Nlc3MgdG8gbWVtYmVycyBvZiBBVk9wdGlvbiBhbmQgaXRzIGNo aWxkIHN0cnVjdHMuCisrICogT25lIGlzIGNhbGxlZCAnbmF0aXZlIGFjY2VzcycsIGFuZCByZWZl cnMgdG8gYWNjZXNzIGZyb20gdGhlIGNvZGUgdGhhdAorKyAqIGRlY2xhcmVzIHRoZSBBVk9wdGlv biBpbiBxdWVzdGlvbi4gIFRoZSBvdGhlciBpcyAnZm9yZWlnbiBhY2Nlc3MnLCBhbmQgcmVmZXJz CisrICogdG8gYWNjZXNzIGZyb20gb3RoZXIgY29kZS4KKysgKgorKyAqIENlcnRhaW4gc3RydWN0 IG1lbWJlcnMgaW4gdGhpcyBoZWFkZXIgYXJlIGRvY3VtZW50ZWQgYXMgJ25hdGl2ZSBhY2Nlc3Mg b25seScKKysgKiBvciBzaW1pbGFyIC0gaXQgbWVhbnMgdGhhdCBvbmx5IHRoZSBjb2RlIHRoYXQg ZGVjbGFyZWQgdGhlIEFWT3B0aW9uIGluCisrICogcXVlc3Rpb24gaXMgYWxsb3dlZCB0byBhY2Nl c3MgdGhlIGZpZWxkLiBUaGlzIGFsbG93cyB1cyB0byBleHRlbmQgdGhlCisrICogc2VtYW50aWNz IG9mIHRob3NlIGZpZWxkcyB3aXRob3V0IGJyZWFraW5nIEFQSSBjb21wYXRpYmlsaXR5LgorKyAq CisrICogQHNlY3Rpb24gYXZvcHRpb25zX3Njb3BlIFNjb3BlIG9mIEFWT3B0aW9ucworKyAqCisr ICogQVZPcHRpb25zIGlzIGRlc2lnbmVkIHRvIHN1cHBvcnQgYW55IHNldCBvZiBtdWx0aW1lZGlh IGNvbmZpZ3VyYXRpb24gb3B0aW9ucworKyAqIHRoYXQgY2FuIGJlIGRlZmluZWQgYXQgY29tcGls ZS10aW1lLiAgQWx0aG91Z2ggaXQgaXMgbWFpbmx5IHVzZWQgdG8gZXhwb3NlCisrICogRkZtcGVn IG9wdGlvbnMsIHlvdSBhcmUgd2VsY29tZSB0byBhZGFwdCBpdCB0byB5b3VyIG93biB1c2UgY2Fz ZS4KKysgKgorKyAqIE5vIHNpbmdsZSBhcHByb2FjaCBjYW4gZXZlciBmdWxseSBzb2x2ZSB0aGUg cHJvYmxlbSBvZiBjb25maWd1cmF0aW9uLAorKyAqIGJ1dCBwbGVhc2Ugc3VibWl0IGEgcGF0Y2gg aWYgeW91IGJlbGlldmUgeW91IGhhdmUgZm91bmQgYSBwcm9ibGVtCisrICogdGhhdCBpcyBiZXN0 IHNvbHZlZCBieSBleHRlbmRpbmcgQVZPcHRpb25zLgorKyAqCisrICogQHNlY3Rpb24gYXZvcHRp b25zX2ltcGxlbWVudCBJbXBsZW1lbnRpbmcgQVZPcHRpb25zCisrICogVGhpcyBzZWN0aW9uIGRl c2NyaWJlcyBob3cgdG8gYWRkIEFWT3B0aW9ucyBjYXBhYmlsaXRpZXMgdG8gYSBzdHJ1Y3QuCisr ICoKKysgKiBBbGwgQVZPcHRpb25zLXJlbGF0ZWQgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIGFu IEFWQ2xhc3MuIFRoZXJlZm9yZQorKyAqIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHN0cnVjdCBz aG91bGQgYmUgYSBwb2ludGVyIHRvIGFuIEFWQ2xhc3MgZGVzY3JpYmluZyBpdC4KKysgKiBUaGUg b3B0aW9uIGZpZWxkIG9mIHRoZSBBVkNsYXNzIG11c3QgYmUgc2V0IHRvIGEgTlVMTC10ZXJtaW5h dGVkIHN0YXRpYyBhcnJheQorKyAqIG9mIEFWT3B0aW9ucy4gRWFjaCBBVk9wdGlvbiBtdXN0IGhh dmUgYSBub24tZW1wdHkgbmFtZSwgYSB0eXBlLCBhIGRlZmF1bHQKKysgKiB2YWx1ZSBhbmQgZm9y IG51bWJlci10eXBlIEFWT3B0aW9ucyBhbHNvIGEgcmFuZ2Ugb2YgYWxsb3dlZCB2YWx1ZXMuIEl0 IG11c3QKKysgKiBhbHNvIGRlY2xhcmUgYW4gb2Zmc2V0IGluIGJ5dGVzIGZyb20gdGhlIHN0YXJ0 IG9mIHRoZSBzdHJ1Y3QsIHdoZXJlIHRoZSBmaWVsZAorKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGlz IEFWT3B0aW9uIGlzIGxvY2F0ZWQuIE90aGVyIGZpZWxkcyBpbiB0aGUgQVZPcHRpb24gc3RydWN0 CisrICogc2hvdWxkIGFsc28gYmUgc2V0IHdoZW4gYXBwbGljYWJsZSwgYnV0IGFyZSBub3QgcmVx dWlyZWQuCisrICoKKysgKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgaWxsdXN0cmF0ZXMgYW4gQVZP cHRpb25zLWVuYWJsZWQgc3RydWN0OgorKyAqIEBjb2RlCisrICogdHlwZWRlZiBzdHJ1Y3QgdGVz dF9zdHJ1Y3QgeworKyAqICAgICBjb25zdCBBVkNsYXNzICpjbGFzczsKKysgKiAgICAgaW50ICAg ICAgaW50X29wdDsKKysgKiAgICAgY2hhciAgICAqc3RyX29wdDsKKysgKiAgICAgdWludDhfdCAq YmluX29wdDsKKysgKiAgICAgaW50ICAgICAgYmluX2xlbjsKKysgKiB9IHRlc3Rfc3RydWN0Owor KyAqCisrICogc3RhdGljIGNvbnN0IEFWT3B0aW9uIHRlc3Rfb3B0aW9uc1tdID0geworKyAqICAg eyAidGVzdF9pbnQiLCAiVGhpcyBpcyBhIHRlc3Qgb3B0aW9uIG9mIGludCB0eXBlLiIsIG9mZnNl dG9mKHRlc3Rfc3RydWN0LCBpbnRfb3B0KSwKKysgKiAgICAgQVZfT1BUX1RZUEVfSU5ULCB7IC5p NjQgPSAtMSB9LCBJTlRfTUlOLCBJTlRfTUFYIH0sCisrICogICB7ICJ0ZXN0X3N0ciIsICJUaGlz IGlzIGEgdGVzdCBvcHRpb24gb2Ygc3RyaW5nIHR5cGUuIiwgb2Zmc2V0b2YodGVzdF9zdHJ1Y3Qs IHN0cl9vcHQpLAorKyAqICAgICBBVl9PUFRfVFlQRV9TVFJJTkcgfSwKKysgKiAgIHsgInRlc3Rf YmluIiwgIlRoaXMgaXMgYSB0ZXN0IG9wdGlvbiBvZiBiaW5hcnkgdHlwZS4iLCBvZmZzZXRvZih0 ZXN0X3N0cnVjdCwgYmluX29wdCksCisrICogICAgIEFWX09QVF9UWVBFX0JJTkFSWSB9LAorKyAq ICAgeyBOVUxMIH0sCisrICogfTsKKysgKgorKyAqIHN0YXRpYyBjb25zdCBBVkNsYXNzIHRlc3Rf Y2xhc3MgPSB7CisrICogICAgIC5jbGFzc19uYW1lID0gInRlc3QgY2xhc3MiLAorKyAqICAgICAu aXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAorKyAqICAgICAub3B0aW9uICAgICA9 IHRlc3Rfb3B0aW9ucywKKysgKiAgICAgLnZlcnNpb24gICAgPSBMSUJBVlVUSUxfVkVSU0lPTl9J TlQsCisrICogfTsKKysgKiBAZW5kY29kZQorKyAqCisrICogTmV4dCwgd2hlbiBhbGxvY2F0aW5n IHlvdXIgc3RydWN0LCB5b3UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgQVZDbGFzcyBwb2ludGVyCisr ICogaXMgc2V0IHRvIHRoZSBjb3JyZWN0IHZhbHVlLiBUaGVuLCBhdl9vcHRfc2V0X2RlZmF1bHRz KCkgY2FuIGJlIGNhbGxlZCB0bworKyAqIGluaXRpYWxpemUgZGVmYXVsdHMuIEFmdGVyIHRoYXQg dGhlIHN0cnVjdCBpcyByZWFkeSB0byBiZSB1c2VkIHdpdGggdGhlCisrICogQVZPcHRpb25zIEFQ SS4KKysgKgorKyAqIFdoZW4gY2xlYW5pbmcgdXAsIHlvdSBtYXkgdXNlIHRoZSBhdl9vcHRfZnJl ZSgpIGZ1bmN0aW9uIHRvIGF1dG9tYXRpY2FsbHkKKysgKiBmcmVlIGFsbCB0aGUgYWxsb2NhdGVk IHN0cmluZyBhbmQgYmluYXJ5IG9wdGlvbnMuCisrICoKKysgKiBDb250aW51aW5nIHdpdGggdGhl IGFib3ZlIGV4YW1wbGU6CisrICoKKysgKiBAY29kZQorKyAqIHRlc3Rfc3RydWN0ICphbGxvY190 ZXN0X3N0cnVjdCh2b2lkKQorKyAqIHsKKysgKiAgICAgdGVzdF9zdHJ1Y3QgKnJldCA9IGF2X21h bGxvY3ooc2l6ZW9mKCpyZXQpKTsKKysgKiAgICAgcmV0LT5jbGFzcyA9ICZ0ZXN0X2NsYXNzOwor KyAqICAgICBhdl9vcHRfc2V0X2RlZmF1bHRzKHJldCk7CisrICogICAgIHJldHVybiByZXQ7Cisr ICogfQorKyAqIHZvaWQgZnJlZV90ZXN0X3N0cnVjdCh0ZXN0X3N0cnVjdCAqKmZvbykKKysgKiB7 CisrICogICAgIGF2X29wdF9mcmVlKCpmb28pOworKyAqICAgICBhdl9mcmVlcChmb28pOworKyAq IH0KKysgKiBAZW5kY29kZQorKyAqCisrICogQHN1YnNlY3Rpb24gYXZvcHRpb25zX2ltcGxlbWVu dF9uZXN0aW5nIE5lc3RpbmcKKysgKiAgICAgIEl0IG1heSBoYXBwZW4gdGhhdCBhbiBBVk9wdGlv bnMtZW5hYmxlZCBzdHJ1Y3QgY29udGFpbnMgYW5vdGhlcgorKyAqICAgICAgQVZPcHRpb25zLWVu YWJsZWQgc3RydWN0IGFzIGEgbWVtYmVyIChlLmcuIEFWQ29kZWNDb250ZXh0IGluCisrICogICAg ICBsaWJhdmNvZGVjIGV4cG9ydHMgZ2VuZXJpYyBvcHRpb25zLCB3aGlsZSBpdHMgcHJpdl9kYXRh IGZpZWxkIGV4cG9ydHMKKysgKiAgICAgIGNvZGVjLXNwZWNpZmljIG9wdGlvbnMpLiBJbiBzdWNo IGEgY2FzZSwgaXQgaXMgcG9zc2libGUgdG8gc2V0IHVwIHRoZQorKyAqICAgICAgcGFyZW50IHN0 cnVjdCB0byBleHBvcnQgYSBjaGlsZCdzIG9wdGlvbnMuIFRvIGRvIHRoYXQsIHNpbXBseQorKyAq ICAgICAgaW1wbGVtZW50IEFWQ2xhc3MuY2hpbGRfbmV4dCgpIGFuZCBBVkNsYXNzLmNoaWxkX2Ns YXNzX2l0ZXJhdGUoKSBpbiB0aGUKKysgKiAgICAgIHBhcmVudCBzdHJ1Y3QncyBBVkNsYXNzLgor KyAqICAgICAgQXNzdW1pbmcgdGhhdCB0aGUgdGVzdF9zdHJ1Y3QgZnJvbSBhYm92ZSBub3cgYWxz byBjb250YWlucyBhCisrICogICAgICBjaGlsZF9zdHJ1Y3QgZmllbGQ6CisrICoKKysgKiAgICAg IEBjb2RlCisrICogICAgICB0eXBlZGVmIHN0cnVjdCBjaGlsZF9zdHJ1Y3QgeworKyAqICAgICAg ICAgIEFWQ2xhc3MgKmNsYXNzOworKyAqICAgICAgICAgIGludCBmbGFnc19vcHQ7CisrICogICAg ICB9IGNoaWxkX3N0cnVjdDsKKysgKiAgICAgIHN0YXRpYyBjb25zdCBBVk9wdGlvbiBjaGlsZF9v cHRzW10gPSB7CisrICogICAgICAgICAgeyAidGVzdF9mbGFncyIsICJUaGlzIGlzIGEgdGVzdCBv cHRpb24gb2YgZmxhZ3MgdHlwZS4iLAorKyAqICAgICAgICAgICAgb2Zmc2V0b2YoY2hpbGRfc3Ry dWN0LCBmbGFnc19vcHQpLCBBVl9PUFRfVFlQRV9GTEFHUywgeyAuaTY0ID0gMCB9LCBJTlRfTUlO LCBJTlRfTUFYIH0sCisrICogICAgICAgICAgeyBOVUxMIH0sCisrICogICAgICB9OworKyAqICAg ICAgc3RhdGljIGNvbnN0IEFWQ2xhc3MgY2hpbGRfY2xhc3MgPSB7CisrICogICAgICAgICAgLmNs YXNzX25hbWUgPSAiY2hpbGQgY2xhc3MiLAorKyAqICAgICAgICAgIC5pdGVtX25hbWUgID0gYXZf ZGVmYXVsdF9pdGVtX25hbWUsCisrICogICAgICAgICAgLm9wdGlvbiAgICAgPSBjaGlsZF9vcHRz LAorKyAqICAgICAgICAgIC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAorKyAq ICAgICAgfTsKKysgKgorKyAqICAgICAgdm9pZCAqY2hpbGRfbmV4dCh2b2lkICpvYmosIHZvaWQg KnByZXYpCisrICogICAgICB7CisrICogICAgICAgICAgdGVzdF9zdHJ1Y3QgKnQgPSBvYmo7Cisr ICogICAgICAgICAgaWYgKCFwcmV2ICYmIHQtPmNoaWxkX3N0cnVjdCkKKysgKiAgICAgICAgICAg ICAgcmV0dXJuIHQtPmNoaWxkX3N0cnVjdDsKKysgKiAgICAgICAgICByZXR1cm4gTlVMTAorKyAq ICAgICAgfQorKyAqICAgICAgY29uc3QgQVZDbGFzcyBjaGlsZF9jbGFzc19pdGVyYXRlKHZvaWQg KippdGVyKQorKyAqICAgICAgeworKyAqICAgICAgICAgIGNvbnN0IEFWQ2xhc3MgKmMgPSAqaXRl ciA/IE5VTEwgOiAmY2hpbGRfY2xhc3M7CisrICogICAgICAgICAgKml0ZXIgPSAodm9pZCopKHVp bnRwdHJfdCljOworKyAqICAgICAgICAgIHJldHVybiBjOworKyAqICAgICAgfQorKyAqICAgICAg QGVuZGNvZGUKKysgKiAgICAgIFB1dHRpbmcgY2hpbGRfbmV4dCgpIGFuZCBjaGlsZF9jbGFzc19p dGVyYXRlKCkgYXMgZGVmaW5lZCBhYm92ZSBpbnRvCisrICogICAgICB0ZXN0X2NsYXNzIHdpbGwg bm93IG1ha2UgY2hpbGRfc3RydWN0J3Mgb3B0aW9ucyBhY2Nlc3NpYmxlIHRocm91Z2gKKysgKiAg ICAgIHRlc3Rfc3RydWN0IChhZ2FpbiwgcHJvcGVyIHNldHVwIGFzIGRlc2NyaWJlZCBhYm92ZSBu ZWVkcyB0byBiZSBkb25lIG9uCisrICogICAgICBjaGlsZF9zdHJ1Y3QgcmlnaHQgYWZ0ZXIgaXQg aXMgY3JlYXRlZCkuCisrICoKKysgKiAgICAgIEZyb20gdGhlIGFib3ZlIGV4YW1wbGUgaXQgbWln aHQgbm90IGJlIGNsZWFyIHdoeSBib3RoIGNoaWxkX25leHQoKQorKyAqICAgICAgYW5kIGNoaWxk X2NsYXNzX2l0ZXJhdGUoKSBhcmUgbmVlZGVkLiBUaGUgZGlzdGluY3Rpb24gaXMgdGhhdCBjaGls ZF9uZXh0KCkKKysgKiAgICAgIGl0ZXJhdGVzIG92ZXIgYWN0dWFsbHkgZXhpc3Rpbmcgb2JqZWN0 cywgd2hpbGUgY2hpbGRfY2xhc3NfaXRlcmF0ZSgpCisrICogICAgICBpdGVyYXRlcyBvdmVyIGFs bCBwb3NzaWJsZSBjaGlsZCBjbGFzc2VzLiBFLmcuIGlmIGFuIEFWQ29kZWNDb250ZXh0CisrICog ICAgICB3YXMgaW5pdGlhbGl6ZWQgdG8gdXNlIGEgY29kZWMgd2hpY2ggaGFzIHByaXZhdGUgb3B0 aW9ucywgdGhlbiBpdHMKKysgKiAgICAgIGNoaWxkX25leHQoKSB3aWxsIHJldHVybiBBVkNvZGVj Q29udGV4dC5wcml2X2RhdGEgYW5kIGZpbmlzaAorKyAqICAgICAgaXRlcmF0aW5nLiBPVE9IIGNo aWxkX2NsYXNzX2l0ZXJhdGUoKSBvbiBBVkNvZGVjQ29udGV4dC5hdl9jbGFzcyB3aWxsCisrICog ICAgICBpdGVyYXRlIG92ZXIgYWxsIGF2YWlsYWJsZSBjb2RlY3Mgd2l0aCBwcml2YXRlIG9wdGlv bnMuCisrICoKKysgKiBAc3Vic2VjdGlvbiBhdm9wdGlvbnNfaW1wbGVtZW50X25hbWVkX2NvbnN0 YW50cyBOYW1lZCBjb25zdGFudHMKKysgKiAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIGNyZWF0ZSBu YW1lZCBjb25zdGFudHMgZm9yIG9wdGlvbnMuIFNpbXBseSBzZXQgdGhlIHVuaXQKKysgKiAgICAg IGZpZWxkIG9mIHRoZSBvcHRpb24gdGhlIGNvbnN0YW50cyBzaG91bGQgYXBwbHkgdG8gYSBzdHJp bmcgYW5kCisrICogICAgICBjcmVhdGUgdGhlIGNvbnN0YW50cyB0aGVtc2VsdmVzIGFzIG9wdGlv bnMgb2YgdHlwZSBBVl9PUFRfVFlQRV9DT05TVAorKyAqICAgICAgd2l0aCB0aGVpciB1bml0IGZp ZWxkIHNldCB0byB0aGUgc2FtZSBzdHJpbmcuCisrICogICAgICBUaGVpciBkZWZhdWx0X3ZhbCBm aWVsZCBzaG91bGQgY29udGFpbiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkCisrICogICAgICBjb25z dGFudC4KKysgKiAgICAgIEZvciBleGFtcGxlLCB0byBhZGQgc29tZSBuYW1lZCBjb25zdGFudHMg Zm9yIHRoZSB0ZXN0X2ZsYWdzIG9wdGlvbgorKyAqICAgICAgYWJvdmUsIHB1dCB0aGUgZm9sbG93 aW5nIGludG8gdGhlIGNoaWxkX29wdHMgYXJyYXk6CisrICogICAgICBAY29kZQorKyAqICAgICAg eyAidGVzdF9mbGFncyIsICJUaGlzIGlzIGEgdGVzdCBvcHRpb24gb2YgZmxhZ3MgdHlwZS4iLAor KyAqICAgICAgICBvZmZzZXRvZihjaGlsZF9zdHJ1Y3QsIGZsYWdzX29wdCksIEFWX09QVF9UWVBF X0ZMQUdTLCB7IC5pNjQgPSAwIH0sIElOVF9NSU4sIElOVF9NQVgsICJ0ZXN0X3VuaXQiIH0sCisr ICogICAgICB7ICJmbGFnMSIsICJUaGlzIGlzIGEgZmxhZyB3aXRoIHZhbHVlIDE2IiwgMCwgQVZf T1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IDE2IH0sIDAsIDAsICJ0ZXN0X3VuaXQiIH0sCisrICog ICAgICBAZW5kY29kZQorKyAqCisrICogQHNlY3Rpb24gYXZvcHRpb25zX3VzZSBVc2luZyBBVk9w dGlvbnMKKysgKiBUaGlzIHNlY3Rpb24gZGVhbHMgd2l0aCBhY2Nlc3Npbmcgb3B0aW9ucyBpbiBh biBBVk9wdGlvbnMtZW5hYmxlZCBzdHJ1Y3QuCisrICogU3VjaCBzdHJ1Y3RzIGluIEZGbXBlZyBh cmUgZS5nLiBBVkNvZGVjQ29udGV4dCBpbiBsaWJhdmNvZGVjIG9yCisrICogQVZGb3JtYXRDb250 ZXh0IGluIGxpYmF2Zm9ybWF0LgorKyAqCisrICogQHN1YnNlY3Rpb24gYXZvcHRpb25zX3VzZV9l eGFtaW5lIEV4YW1pbmluZyBBVk9wdGlvbnMKKysgKiBUaGUgYmFzaWMgZnVuY3Rpb25zIGZvciBl eGFtaW5pbmcgb3B0aW9ucyBhcmUgYXZfb3B0X25leHQoKSwgd2hpY2ggaXRlcmF0ZXMKKysgKiBv dmVyIGFsbCBvcHRpb25zIGRlZmluZWQgZm9yIG9uZSBvYmplY3QsIGFuZCBhdl9vcHRfZmluZCgp LCB3aGljaCBzZWFyY2hlcworKyAqIGZvciBhbiBvcHRpb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZS4K KysgKgorKyAqIFRoZSBzaXR1YXRpb24gaXMgbW9yZSBjb21wbGljYXRlZCB3aXRoIG5lc3Rpbmcu IEFuIEFWT3B0aW9ucy1lbmFibGVkIHN0cnVjdAorKyAqIG1heSBoYXZlIEFWT3B0aW9ucy1lbmFi bGVkIGNoaWxkcmVuLiBQYXNzaW5nIHRoZSBBVl9PUFRfU0VBUkNIX0NISUxEUkVOIGZsYWcKKysg KiB0byBhdl9vcHRfZmluZCgpIHdpbGwgbWFrZSB0aGUgZnVuY3Rpb24gc2VhcmNoIGNoaWxkcmVu IHJlY3Vyc2l2ZWx5LgorKyAqCisrICogRm9yIGVudW1lcmF0aW5nIHRoZXJlIGFyZSBiYXNpY2Fs bHkgdHdvIGNhc2VzLiBUaGUgZmlyc3QgaXMgd2hlbiB5b3Ugd2FudCB0bworKyAqIGdldCBhbGwg b3B0aW9ucyB0aGF0IG1heSBwb3RlbnRpYWxseSBleGlzdCBvbiB0aGUgc3RydWN0IGFuZCBpdHMg Y2hpbGRyZW4KKysgKiAoZS5nLiAgd2hlbiBjb25zdHJ1Y3RpbmcgZG9jdW1lbnRhdGlvbikuIElu IHRoYXQgY2FzZSB5b3Ugc2hvdWxkIGNhbGwKKysgKiBhdl9vcHRfY2hpbGRfY2xhc3NfaXRlcmF0 ZSgpIHJlY3Vyc2l2ZWx5IG9uIHRoZSBwYXJlbnQgc3RydWN0J3MgQVZDbGFzcy4gIFRoZQorKyAq IHNlY29uZCBjYXNlIGlzIHdoZW4geW91IGhhdmUgYW4gYWxyZWFkeSBpbml0aWFsaXplZCBzdHJ1 Y3Qgd2l0aCBhbGwgaXRzCisrICogY2hpbGRyZW4gYW5kIHlvdSB3YW50IHRvIGdldCBhbGwgb3B0 aW9ucyB0aGF0IGNhbiBiZSBhY3R1YWxseSB3cml0dGVuIG9yIHJlYWQKKysgKiBmcm9tIGl0LiBJ biB0aGF0IGNhc2UgeW91IHNob3VsZCBjYWxsIGF2X29wdF9jaGlsZF9uZXh0KCkgcmVjdXJzaXZl bHkgKGFuZAorKyAqIGF2X29wdF9uZXh0KCkgb24gZWFjaCByZXN1bHQpLgorKyAqCisrICogQHN1 YnNlY3Rpb24gYXZvcHRpb25zX3VzZV9nZXRfc2V0IFJlYWRpbmcgYW5kIHdyaXRpbmcgQVZPcHRp b25zCisrICogV2hlbiBzZXR0aW5nIG9wdGlvbnMsIHlvdSBvZnRlbiBoYXZlIGEgc3RyaW5nIHJl YWQgZGlyZWN0bHkgZnJvbSB0aGUKKysgKiB1c2VyLiBJbiBzdWNoIGEgY2FzZSwgc2ltcGx5IHBh c3NpbmcgaXQgdG8gYXZfb3B0X3NldCgpIGlzIGVub3VnaC4gRm9yCisrICogbm9uLXN0cmluZyB0 eXBlIG9wdGlvbnMsIGF2X29wdF9zZXQoKSB3aWxsIHBhcnNlIHRoZSBzdHJpbmcgYWNjb3JkaW5n IHRvIHRoZQorKyAqIG9wdGlvbiB0eXBlLgorKyAqCisrICogU2ltaWxhcmx5IGF2X29wdF9nZXQo KSB3aWxsIHJlYWQgYW55IG9wdGlvbiB0eXBlIGFuZCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nCisr ICogd2hpY2ggd2lsbCBiZSByZXR1cm5lZC4gRG8gbm90IGZvcmdldCB0aGF0IHRoZSBzdHJpbmcg aXMgYWxsb2NhdGVkLCBzbyB5b3UKKysgKiBoYXZlIHRvIGZyZWUgaXQgd2l0aCBhdl9mcmVlKCku CisrICoKKysgKiBJbiBzb21lIGNhc2VzIGl0IG1heSBiZSBtb3JlIGNvbnZlbmllbnQgdG8gcHV0 IGFsbCBvcHRpb25zIGludG8gYW4KKysgKiBBVkRpY3Rpb25hcnkgYW5kIGNhbGwgYXZfb3B0X3Nl dF9kaWN0KCkgb24gaXQuIEEgc3BlY2lmaWMgY2FzZSBvZiB0aGlzCisrICogYXJlIHRoZSBmb3Jt YXQvY29kZWMgb3BlbiBmdW5jdGlvbnMgaW4gbGF2Zi9sYXZjIHdoaWNoIHRha2UgYSBkaWN0aW9u YXJ5CisrICogZmlsbGVkIHdpdGggb3B0aW9uIGFzIGEgcGFyYW1ldGVyLiBUaGlzIG1ha2VzIGl0 IHBvc3NpYmxlIHRvIHNldCBzb21lIG9wdGlvbnMKKysgKiB0aGF0IGNhbm5vdCBiZSBzZXQgb3Ro ZXJ3aXNlLCBzaW5jZSBlLmcuIHRoZSBpbnB1dCBmaWxlIGZvcm1hdCBpcyBub3Qga25vd24KKysg KiBiZWZvcmUgdGhlIGZpbGUgaXMgYWN0dWFsbHkgb3BlbmVkLgorKyAqLworKworKy8qKgorKyAq IEFuIG9wdGlvbiB0eXBlIGRldGVybWluZXM6CisrICogLSBmb3IgbmF0aXZlIGFjY2VzcywgdGhl IHVuZGVybHlpbmcgQyB0eXBlIG9mIHRoZSBmaWVsZCB0aGF0IGFuIEFWT3B0aW9uCisrICogICBy ZWZlcnMgdG87CisrICogLSBmb3IgZm9yZWlnbiBhY2Nlc3MsIHRoZSBzZW1hbnRpY3Mgb2YgYWNj ZXNzaW5nIHRoZSBvcHRpb24gdGhyb3VnaCB0aGlzIEFQSSwKKysgKiAgIGUuZy4gd2hpY2ggYXZf b3B0X2dldF8qKCkgYW5kIGF2X29wdF9zZXRfKigpIGZ1bmN0aW9ucyBjYW4gYmUgY2FsbGVkLCBv cgorKyAqICAgd2hhdCBmb3JtYXQgd2lsbCBhdl9vcHRfZ2V0KCkvYXZfb3B0X3NldCgpIGV4cGVj dC9wcm9kdWNlLgorKyAqLworK2VudW0gQVZPcHRpb25UeXBleworKyAgICAvKioKKysgICAgICog VW5kZXJseWluZyBDIHR5cGUgaXMgdW5zaWduZWQgaW50LgorKyAgICAgKi8KKysgICAgQVZfT1BU X1RZUEVfRkxBR1MgPSAxLAorKyAgICAvKioKKysgICAgICogVW5kZXJseWluZyBDIHR5cGUgaXMg aW50LgorKyAgICAgKi8KKysgICAgQVZfT1BUX1RZUEVfSU5ULAorKyAgICAvKioKKysgICAgICog VW5kZXJseWluZyBDIHR5cGUgaXMgaW50NjRfdC4KKysgICAgICovCisrICAgIEFWX09QVF9UWVBF X0lOVDY0LAorKyAgICAvKioKKysgICAgICogVW5kZXJseWluZyBDIHR5cGUgaXMgZG91YmxlLgor KyAgICAgKi8KKysgICAgQVZfT1BUX1RZUEVfRE9VQkxFLAorKyAgICAvKioKKysgICAgICogVW5k ZXJseWluZyBDIHR5cGUgaXMgZmxvYXQuCisrICAgICAqLworKyAgICBBVl9PUFRfVFlQRV9GTE9B VCwKKysgICAgLyoqCisrICAgICAqIFVuZGVybHlpbmcgQyB0eXBlIGlzIGEgdWludDhfdCogdGhh dCBpcyBlaXRoZXIgTlVMTCBvciBwb2ludHMgdG8gYSBDCisrICAgICAqIHN0cmluZyBhbGxvY2F0 ZWQgd2l0aCB0aGUgYXZfbWFsbG9jKCkgZmFtaWx5IG9mIGZ1bmN0aW9ucy4KKysgICAgICovCisr ICAgIEFWX09QVF9UWVBFX1NUUklORywKKysgICAgLyoqCisrICAgICAqIFVuZGVybHlpbmcgQyB0 eXBlIGlzIEFWUmF0aW9uYWwuCisrICAgICAqLworKyAgICBBVl9PUFRfVFlQRV9SQVRJT05BTCwK KysgICAgLyoqCisrICAgICAqIFVuZGVybHlpbmcgQyB0eXBlIGlzIGEgdWludDhfdCogdGhhdCBp cyBlaXRoZXIgTlVMTCBvciBwb2ludHMgdG8gYW4gYXJyYXkKKysgICAgICogYWxsb2NhdGVkIHdp dGggdGhlIGF2X21hbGxvYygpIGZhbWlseSBvZiBmdW5jdGlvbnMuIFRoZSBwb2ludGVyIGlzCisr ICAgICAqIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFuIGludCBjb250YWluaW5nIHRoZSBhcnJh eSBsZW5ndGggaW4gYnl0ZXMuCisrICAgICAqLworKyAgICBBVl9PUFRfVFlQRV9CSU5BUlksCisr ICAgIC8qKgorKyAgICAgKiBVbmRlcmx5aW5nIEMgdHlwZSBpcyBBVkRpY3Rpb25hcnkqLgorKyAg ICAgKi8KKysgICAgQVZfT1BUX1RZUEVfRElDVCwKKysgICAgLyoqCisrICAgICAqIFVuZGVybHlp bmcgQyB0eXBlIGlzIHVpbnQ2NF90LgorKyAgICAgKi8KKysgICAgQVZfT1BUX1RZUEVfVUlOVDY0 LAorKyAgICAvKioKKysgICAgICogU3BlY2lhbCBvcHRpb24gdHlwZSBmb3IgZGVjbGFyaW5nIG5h bWVkIGNvbnN0YW50cy4gRG9lcyBub3QgY29ycmVzcG9uZCB0bworKyAgICAgKiBhbiBhY3R1YWwg ZmllbGQgaW4gdGhlIG9iamVjdCwgb2Zmc2V0IG11c3QgYmUgMC4KKysgICAgICovCisrICAgIEFW X09QVF9UWVBFX0NPTlNULAorKyAgICAvKioKKysgICAgICogVW5kZXJseWluZyBDIHR5cGUgaXMg dHdvIGNvbnNlY3V0aXZlIGludGVnZXJzLgorKyAgICAgKi8KKysgICAgQVZfT1BUX1RZUEVfSU1B R0VfU0laRSwKKysgICAgLyoqCisrICAgICAqIFVuZGVybHlpbmcgQyB0eXBlIGlzIGVudW0gQVZQ aXhlbEZvcm1hdC4KKysgICAgICovCisrICAgIEFWX09QVF9UWVBFX1BJWEVMX0ZNVCwKKysgICAg LyoqCisrICAgICAqIFVuZGVybHlpbmcgQyB0eXBlIGlzIGVudW0gQVZTYW1wbGVGb3JtYXQuCisr ICAgICAqLworKyAgICBBVl9PUFRfVFlQRV9TQU1QTEVfRk1ULAorKyAgICAvKioKKysgICAgICog VW5kZXJseWluZyBDIHR5cGUgaXMgQVZSYXRpb25hbC4KKysgICAgICovCisrICAgIEFWX09QVF9U WVBFX1ZJREVPX1JBVEUsCisrICAgIC8qKgorKyAgICAgKiBVbmRlcmx5aW5nIEMgdHlwZSBpcyBp bnQ2NF90LgorKyAgICAgKi8KKysgICAgQVZfT1BUX1RZUEVfRFVSQVRJT04sCisrICAgIC8qKgor KyAgICAgKiBVbmRlcmx5aW5nIEMgdHlwZSBpcyB1aW50OF90WzRdLgorKyAgICAgKi8KKysgICAg QVZfT1BUX1RZUEVfQ09MT1IsCisrICAgIC8qKgorKyAgICAgKiBVbmRlcmx5aW5nIEMgdHlwZSBp cyBpbnQuCisrICAgICAqLworKyAgICBBVl9PUFRfVFlQRV9CT09MLAorKyAgICAvKioKKysgICAg ICogVW5kZXJseWluZyBDIHR5cGUgaXMgQVZDaGFubmVsTGF5b3V0LgorKyAgICAgKi8KKysgICAg QVZfT1BUX1RZUEVfQ0hMQVlPVVQsCisrICAgIC8qKgorKyAgICAgKiBVbmRlcmx5aW5nIEMgdHlw ZSBpcyB1bnNpZ25lZCBpbnQuCisrICAgICAqLworKyAgICBBVl9PUFRfVFlQRV9VSU5ULAorKwor KyAgICAvKioKKysgICAgICogTWF5IGJlIGNvbWJpbmVkIHdpdGggYW5vdGhlciByZWd1bGFyIG9w dGlvbiB0eXBlIHRvIGRlY2xhcmUgYW4gYXJyYXkKKysgICAgICogb3B0aW9uLgorKyAgICAgKgor KyAgICAgKiBGb3IgYXJyYXkgb3B0aW9ucywgQHJlZiBBVk9wdGlvbi5vZmZzZXQgc2hvdWxkIHJl ZmVyIHRvIGEgcG9pbnRlcgorKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBvcHRpb24gdHlw ZS4gVGhlIHBvaW50ZXIgc2hvdWxkIGJlIGltbWVkaWF0ZWx5CisrICAgICAqIGZvbGxvd2VkIGJ5 IGFuIHVuc2lnbmVkIGludCB0aGF0IHdpbGwgc3RvcmUgdGhlIG51bWJlciBvZiBlbGVtZW50cyBp biB0aGUKKysgICAgICogYXJyYXkuCisrICAgICAqLworKyAgICBBVl9PUFRfVFlQRV9GTEFHX0FS UkFZID0gKDEgPDwgMTYpLAorK307CisrCisrLyoqCisrICogQSBnZW5lcmljIHBhcmFtZXRlciB3 aGljaCBjYW4gYmUgc2V0IGJ5IHRoZSB1c2VyIGZvciBtdXhpbmcgb3IgZW5jb2RpbmcuCisrICov CisrI2RlZmluZSBBVl9PUFRfRkxBR19FTkNPRElOR19QQVJBTSAgKDEgPDwgMCkKKysvKioKKysg KiBBIGdlbmVyaWMgcGFyYW1ldGVyIHdoaWNoIGNhbiBiZSBzZXQgYnkgdGhlIHVzZXIgZm9yIGRl bXV4aW5nIG9yIGRlY29kaW5nLgorKyAqLworKyNkZWZpbmUgQVZfT1BUX0ZMQUdfREVDT0RJTkdf UEFSQU0gICgxIDw8IDEpCisrI2RlZmluZSBBVl9PUFRfRkxBR19BVURJT19QQVJBTSAgICAgKDEg PDwgMykKKysjZGVmaW5lIEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNICAgICAoMSA8PCA0KQorKyNk ZWZpbmUgQVZfT1BUX0ZMQUdfU1VCVElUTEVfUEFSQU0gICgxIDw8IDUpCisrLyoqCisrICogVGhl IG9wdGlvbiBpcyBpbnRlbmRlZCBmb3IgZXhwb3J0aW5nIHZhbHVlcyB0byB0aGUgY2FsbGVyLgor KyAqLworKyNkZWZpbmUgQVZfT1BUX0ZMQUdfRVhQT1JUICAgICAgICAgICgxIDw8IDYpCisrLyoq CisrICogVGhlIG9wdGlvbiBtYXkgbm90IGJlIHNldCB0aHJvdWdoIHRoZSBBVk9wdGlvbnMgQVBJ LCBvbmx5IHJlYWQuCisrICogVGhpcyBmbGFnIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiBBVl9PUFRf RkxBR19FWFBPUlQgaXMgYWxzbyBzZXQuCisrICovCisrI2RlZmluZSBBVl9PUFRfRkxBR19SRUFE T05MWSAgICAgICAgKDEgPDwgNykKKysvKioKKysgKiBBIGdlbmVyaWMgcGFyYW1ldGVyIHdoaWNo IGNhbiBiZSBzZXQgYnkgdGhlIHVzZXIgZm9yIGJpdCBzdHJlYW0gZmlsdGVyaW5nLgorKyAqLwor KyNkZWZpbmUgQVZfT1BUX0ZMQUdfQlNGX1BBUkFNICAgICAgICgxIDw8IDgpCisrCisrLyoqCisr ICogQSBnZW5lcmljIHBhcmFtZXRlciB3aGljaCBjYW4gYmUgc2V0IGJ5IHRoZSB1c2VyIGF0IHJ1 bnRpbWUuCisrICovCisrI2RlZmluZSBBVl9PUFRfRkxBR19SVU5USU1FX1BBUkFNICAgKDEgPDwg MTUpCisrLyoqCisrICogQSBnZW5lcmljIHBhcmFtZXRlciB3aGljaCBjYW4gYmUgc2V0IGJ5IHRo ZSB1c2VyIGZvciBmaWx0ZXJpbmcuCisrICovCisrI2RlZmluZSBBVl9PUFRfRkxBR19GSUxURVJJ TkdfUEFSQU0gKDEgPDwgMTYpCisrLyoqCisrICogU2V0IGlmIG9wdGlvbiBpcyBkZXByZWNhdGVk LCB1c2VycyBzaG91bGQgcmVmZXIgdG8gQVZPcHRpb24uaGVscCB0ZXh0IGZvcgorKyAqIG1vcmUg aW5mb3JtYXRpb24uCisrICovCisrI2RlZmluZSBBVl9PUFRfRkxBR19ERVBSRUNBVEVEICAgICAg KDEgPDwgMTcpCisrLyoqCisrICogU2V0IGlmIG9wdGlvbiBjb25zdGFudHMgY2FuIGFsc28gcmVz aWRlIGluIGNoaWxkIG9iamVjdHMuCisrICovCisrI2RlZmluZSBBVl9PUFRfRkxBR19DSElMRF9D T05TVFMgICAgKDEgPDwgMTgpCisrCisrLyoqCisrICogTWF5IGJlIHNldCBhcyBkZWZhdWx0X3Zh bCBmb3IgQVZfT1BUX1RZUEVfRkxBR19BUlJBWSBvcHRpb25zLgorKyAqLworK3R5cGVkZWYgc3Ry dWN0IEFWT3B0aW9uQXJyYXlEZWYgeworKyAgICAvKioKKysgICAgICogTmF0aXZlIGFjY2VzcyBv bmx5LgorKyAgICAgKgorKyAgICAgKiBEZWZhdWx0IHZhbHVlIG9mIHRoZSBvcHRpb24sIGFzIHdv dWxkIGJlIHNlcmlhbGl6ZWQgYnkgYXZfb3B0X2dldCgpIChpLmUuCisrICAgICAqIHVzaW5nIHRo ZSB2YWx1ZSBvZiBzZXAgYXMgdGhlIHNlcGFyYXRvcikuCisrICAgICAqLworKyAgICBjb25zdCBj aGFyICAgICAgICAgKmRlZjsKKysKKysgICAgLyoqCisrICAgICAqIE1pbmltdW0gbnVtYmVyIG9m IGVsZW1lbnRzIGluIHRoZSBhcnJheS4gV2hlbiB0aGlzIGZpZWxkIGlzIG5vbi16ZXJvLCBkZWYK KysgICAgICogbXVzdCBiZSBub24tTlVMTCBhbmQgY29udGFpbiBhdCBsZWFzdCB0aGlzIG51bWJl ciBvZiBlbGVtZW50cy4KKysgICAgICovCisrICAgIHVuc2lnbmVkICAgICAgICAgICAgc2l6ZV9t aW47CisrICAgIC8qKgorKyAgICAgKiBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUg YXJyYXksIDAgd2hlbiB1bmxpbWl0ZWQuCisrICAgICAqLworKyAgICB1bnNpZ25lZCAgICAgICAg ICAgIHNpemVfbWF4OworKworKyAgICAvKioKKysgICAgICogU2VwYXJhdG9yIGJldHdlZW4gYXJy YXkgZWxlbWVudHMgaW4gc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBvZiB0aGlzCisrICAgICAqIG9w dGlvbiwgdXNlZCBieSBhdl9vcHRfc2V0KCkgYW5kIGF2X29wdF9nZXQoKS4gSXQgbXVzdCBiZSBh IHByaW50YWJsZQorKyAgICAgKiBBU0NJSSBjaGFyYWN0ZXIsIGV4Y2x1ZGluZyBhbHBoYW51bWVy aWMgYW5kIHRoZSBiYWNrc2xhc2guIEEgY29tbWEgaXMKKysgICAgICogdXNlZCB3aGVuIHNlcD0w LgorKyAgICAgKgorKyAgICAgKiBUaGUgc2VwYXJhdG9yIGFuZCB0aGUgYmFja3NsYXNoIG11c3Qg YmUgYmFja3NsYXNoLWVzY2FwZWQgaW4gb3JkZXIgdG8KKysgICAgICogYXBwZWFyIGluIHN0cmlu ZyByZXByZXNlbnRhdGlvbnMgb2YgdGhlIG9wdGlvbiB2YWx1ZS4KKysgICAgICovCisrICAgIGNo YXIgICAgICAgICAgICAgICAgc2VwOworK30gQVZPcHRpb25BcnJheURlZjsKKysKKysvKioKKysg KiBBVk9wdGlvbgorKyAqLworK3R5cGVkZWYgc3RydWN0IEFWT3B0aW9uIHsKKysgICAgY29uc3Qg Y2hhciAqbmFtZTsKKysKKysgICAgLyoqCisrICAgICAqIHNob3J0IEVuZ2xpc2ggaGVscCB0ZXh0 CisrICAgICAqIEB0b2RvIFdoYXQgYWJvdXQgb3RoZXIgbGFuZ3VhZ2VzPworKyAgICAgKi8KKysg ICAgY29uc3QgY2hhciAqaGVscDsKKysKKysgICAgLyoqCisrICAgICAqIE5hdGl2ZSBhY2Nlc3Mg b25seS4KKysgICAgICoKKysgICAgICogVGhlIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgY29udGV4 dCBzdHJ1Y3R1cmUgd2hlcmUgdGhlIG9wdGlvbgorKyAgICAgKiB2YWx1ZSBpcyBzdG9yZWQuIEl0 IHNob3VsZCBiZSAwIGZvciBuYW1lZCBjb25zdGFudHMuCisrICAgICAqLworKyAgICBpbnQgb2Zm c2V0OworKyAgICBlbnVtIEFWT3B0aW9uVHlwZSB0eXBlOworKworKyAgICAvKioKKysgICAgICog TmF0aXZlIGFjY2VzcyBvbmx5LCBleGNlcHQgd2hlbiBkb2N1bWVudGVkIG90aGVyd2lzZS4KKysg ICAgICogdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHNjYWxhciBvcHRpb25zCisrICAgICAqLworKyAg ICB1bmlvbiB7CisrICAgICAgICBpbnQ2NF90IGk2NDsKKysgICAgICAgIGRvdWJsZSBkYmw7Cisr ICAgICAgICBjb25zdCBjaGFyICpzdHI7CisrICAgICAgICAvKiBUT0RPIHRob3NlIGFyZSB1bnVz ZWQgbm93ICovCisrICAgICAgICBBVlJhdGlvbmFsIHE7CisrCisrICAgICAgICAvKioKKysgICAg ICAgICAqIFVzZWQgZm9yIEFWX09QVF9UWVBFX0ZMQUdfQVJSQVkgb3B0aW9ucy4gTWF5IGJlIE5V TEwuCisrICAgICAgICAgKgorKyAgICAgICAgICogRm9yZWlnbiBhY2Nlc3MgdG8gc29tZSBtZW1i ZXJzIGFsbG93ZWQsIGFzIG5vdGVkIGluIEFWT3B0aW9uQXJyYXlEZWYKKysgICAgICAgICAqIGRv Y3VtZW50YXRpb24uCisrICAgICAgICAgKi8KKysgICAgICAgIGNvbnN0IEFWT3B0aW9uQXJyYXlE ZWYgKmFycjsKKysgICAgfSBkZWZhdWx0X3ZhbDsKKysgICAgZG91YmxlIG1pbjsgICAgICAgICAg ICAgICAgIC8vLzwgbWluaW11bSB2YWxpZCB2YWx1ZSBmb3IgdGhlIG9wdGlvbgorKyAgICBkb3Vi bGUgbWF4OyAgICAgICAgICAgICAgICAgLy8vPCBtYXhpbXVtIHZhbGlkIHZhbHVlIGZvciB0aGUg b3B0aW9uCisrCisrICAgIC8qKgorKyAgICAgKiBBIGNvbWJpbmF0aW9uIG9mIEFWX09QVF9GTEFH XyouCisrICAgICAqLworKyAgICBpbnQgZmxhZ3M7CisrCisrICAgIC8qKgorKyAgICAgKiBUaGUg bG9naWNhbCB1bml0IHRvIHdoaWNoIHRoZSBvcHRpb24gYmVsb25ncy4gTm9uLWNvbnN0YW50Cisr ICAgICAqIG9wdGlvbnMgYW5kIGNvcnJlc3BvbmRpbmcgbmFtZWQgY29uc3RhbnRzIHNoYXJlIHRo ZSBzYW1lCisrICAgICAqIHVuaXQuIE1heSBiZSBOVUxMLgorKyAgICAgKi8KKysgICAgY29uc3Qg Y2hhciAqdW5pdDsKKyt9IEFWT3B0aW9uOworKworKy8qKgorKyAqIEEgc2luZ2xlIGFsbG93ZWQg cmFuZ2Ugb2YgdmFsdWVzLCBvciBhIHNpbmdsZSBhbGxvd2VkIHZhbHVlLgorKyAqLworK3R5cGVk ZWYgc3RydWN0IEFWT3B0aW9uUmFuZ2UgeworKyAgICBjb25zdCBjaGFyICpzdHI7CisrICAgIC8q KgorKyAgICAgKiBWYWx1ZSByYW5nZS4KKysgICAgICogRm9yIHN0cmluZyByYW5nZXMgdGhpcyBy ZXByZXNlbnRzIHRoZSBtaW4vbWF4IGxlbmd0aC4KKysgICAgICogRm9yIGRpbWVuc2lvbnMgdGhp cyByZXByZXNlbnRzIHRoZSBtaW4vbWF4IHBpeGVsIGNvdW50IG9yIHdpZHRoL2hlaWdodCBpbiBt dWx0aS1jb21wb25lbnQgY2FzZS4KKysgICAgICovCisrICAgIGRvdWJsZSB2YWx1ZV9taW4sIHZh bHVlX21heDsKKysgICAgLyoqCisrICAgICAqIFZhbHVlJ3MgY29tcG9uZW50IHJhbmdlLgorKyAg ICAgKiBGb3Igc3RyaW5nIHRoaXMgcmVwcmVzZW50cyB0aGUgdW5pY29kZSByYW5nZSBmb3IgY2hh cnMsIDAtMTI3IGxpbWl0cyB0byBBU0NJSS4KKysgICAgICovCisrICAgIGRvdWJsZSBjb21wb25l bnRfbWluLCBjb21wb25lbnRfbWF4OworKyAgICAvKioKKysgICAgICogUmFuZ2UgZmxhZy4KKysg ICAgICogSWYgc2V0IHRvIDEgdGhlIHN0cnVjdCBlbmNvZGVzIGEgcmFuZ2UsIGlmIHNldCB0byAw IGEgc2luZ2xlIHZhbHVlLgorKyAgICAgKi8KKysgICAgaW50IGlzX3JhbmdlOworK30gQVZPcHRp b25SYW5nZTsKKysKKysvKioKKysgKiBMaXN0IG9mIEFWT3B0aW9uUmFuZ2Ugc3RydWN0cy4KKysg Ki8KKyt0eXBlZGVmIHN0cnVjdCBBVk9wdGlvblJhbmdlcyB7CisrICAgIC8qKgorKyAgICAgKiBB cnJheSBvZiBvcHRpb24gcmFuZ2VzLgorKyAgICAgKgorKyAgICAgKiBNb3N0IG9mIG9wdGlvbiB0 eXBlcyB1c2UganVzdCBvbmUgY29tcG9uZW50LgorKyAgICAgKiBGb2xsb3dpbmcgZGVzY3JpYmVz IG11bHRpLWNvbXBvbmVudCBvcHRpb24gdHlwZXM6CisrICAgICAqCisrICAgICAqIEFWX09QVF9U WVBFX0lNQUdFX1NJWkU6CisrICAgICAqIGNvbXBvbmVudCBpbmRleCAwOiByYW5nZSBvZiBwaXhl bCBjb3VudCAod2lkdGggKiBoZWlnaHQpLgorKyAgICAgKiBjb21wb25lbnQgaW5kZXggMTogcmFu Z2Ugb2Ygd2lkdGguCisrICAgICAqIGNvbXBvbmVudCBpbmRleCAyOiByYW5nZSBvZiBoZWlnaHQu CisrICAgICAqCisrICAgICAqIEBub3RlIFRvIG9idGFpbiBtdWx0aS1jb21wb25lbnQgdmVyc2lv biBvZiB0aGlzIHN0cnVjdHVyZSwgdXNlciBtdXN0CisrICAgICAqICAgICAgIHByb3ZpZGUgQVZf T1BUX01VTFRJX0NPTVBPTkVOVF9SQU5HRSB0byBhdl9vcHRfcXVlcnlfcmFuZ2VzIG9yCisrICAg ICAqICAgICAgIGF2X29wdF9xdWVyeV9yYW5nZXNfZGVmYXVsdCBmdW5jdGlvbi4KKysgICAgICoK KysgICAgICogTXVsdGktY29tcG9uZW50IHJhbmdlIGNhbiBiZSByZWFkIGFzIGluIGZvbGxvd2lu ZyBleGFtcGxlOgorKyAgICAgKgorKyAgICAgKiBAY29kZQorKyAgICAgKiBpbnQgcmFuZ2VfaW5k ZXgsIGNvbXBvbmVudF9pbmRleDsKKysgICAgICogQVZPcHRpb25SYW5nZXMgKnJhbmdlczsKKysg ICAgICogQVZPcHRpb25SYW5nZSAqcmFuZ2VbM107IC8vbWF5IHJlcXVpcmUgbW9yZSB0aGFuIDMg aW4gdGhlIGZ1dHVyZS4KKysgICAgICogYXZfb3B0X3F1ZXJ5X3JhbmdlcygmcmFuZ2VzLCBvYmos IGtleSwgQVZfT1BUX01VTFRJX0NPTVBPTkVOVF9SQU5HRSk7CisrICAgICAqIGZvciAocmFuZ2Vf aW5kZXggPSAwOyByYW5nZV9pbmRleCA8IHJhbmdlcy0+bmJfcmFuZ2VzOyByYW5nZV9pbmRleCsr KSB7CisrICAgICAqICAgICBmb3IgKGNvbXBvbmVudF9pbmRleCA9IDA7IGNvbXBvbmVudF9pbmRl eCA8IHJhbmdlcy0+bmJfY29tcG9uZW50czsgY29tcG9uZW50X2luZGV4KyspCisrICAgICAqICAg ICAgICAgcmFuZ2VbY29tcG9uZW50X2luZGV4XSA9IHJhbmdlcy0+cmFuZ2VbcmFuZ2VzLT5uYl9y YW5nZXMgKiBjb21wb25lbnRfaW5kZXggKyByYW5nZV9pbmRleF07CisrICAgICAqICAgICAvL2Rv IHNvbWV0aGluZyB3aXRoIHJhbmdlIGhlcmUuCisrICAgICAqIH0KKysgICAgICogYXZfb3B0X2Zy ZWVwX3JhbmdlcygmcmFuZ2VzKTsKKysgICAgICogQGVuZGNvZGUKKysgICAgICovCisrICAgIEFW T3B0aW9uUmFuZ2UgKipyYW5nZTsKKysgICAgLyoqCisrICAgICAqIE51bWJlciBvZiByYW5nZXMg cGVyIGNvbXBvbmVudC4KKysgICAgICovCisrICAgIGludCBuYl9yYW5nZXM7CisrICAgIC8qKgor KyAgICAgKiBOdW1iZXIgb2YgY29tcG9uZW50cy4KKysgICAgICovCisrICAgIGludCBuYl9jb21w b25lbnRzOworK30gQVZPcHRpb25SYW5nZXM7CisrCisrLyoqCisrICogQGRlZmdyb3VwIG9wdF9t bmcgQVZPcHRpb24gKHVuKWluaXRpYWxpemF0aW9uIGFuZCBpbnNwZWN0aW9uLgorKyAqIEB7Cisr ICovCisrCisrLyoqCisrICogU2V0IHRoZSB2YWx1ZXMgb2YgYWxsIEFWT3B0aW9uIGZpZWxkcyB0 byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKysgKgorKyAqIEBwYXJhbSBzIGFuIEFWT3B0aW9uLWVu YWJsZWQgc3RydWN0IChpdHMgZmlyc3QgbWVtYmVyIG11c3QgYmUgYSBwb2ludGVyIHRvIEFWQ2xh c3MpCisrICovCisrdm9pZCBhdl9vcHRfc2V0X2RlZmF1bHRzKHZvaWQgKnMpOworKworKy8qKgor KyAqIFNldCB0aGUgdmFsdWVzIG9mIGFsbCBBVk9wdGlvbiBmaWVsZHMgdG8gdGhlaXIgZGVmYXVs dCB2YWx1ZXMuIE9ubHkgdGhlc2UKKysgKiBBVk9wdGlvbiBmaWVsZHMgZm9yIHdoaWNoIChvcHQt PmZsYWdzICYgbWFzaykgPT0gZmxhZ3Mgd2lsbCBoYXZlIHRoZWlyCisrICogZGVmYXVsdCBhcHBs aWVkIHRvIHMuCisrICoKKysgKiBAcGFyYW0gcyBhbiBBVk9wdGlvbi1lbmFibGVkIHN0cnVjdCAo aXRzIGZpcnN0IG1lbWJlciBtdXN0IGJlIGEgcG9pbnRlciB0byBBVkNsYXNzKQorKyAqIEBwYXJh bSBtYXNrIGNvbWJpbmF0aW9uIG9mIEFWX09QVF9GTEFHXyoKKysgKiBAcGFyYW0gZmxhZ3MgY29t YmluYXRpb24gb2YgQVZfT1BUX0ZMQUdfKgorKyAqLworK3ZvaWQgYXZfb3B0X3NldF9kZWZhdWx0 czIodm9pZCAqcywgaW50IG1hc2ssIGludCBmbGFncyk7CisrCisrLyoqCisrICogRnJlZSBhbGwg YWxsb2NhdGVkIG9iamVjdHMgaW4gb2JqLgorKyAqLworK3ZvaWQgYXZfb3B0X2ZyZWUodm9pZCAq b2JqKTsKKysKKysvKioKKysgKiBJdGVyYXRlIG92ZXIgYWxsIEFWT3B0aW9ucyBiZWxvbmdpbmcg dG8gb2JqLgorKyAqCisrICogQHBhcmFtIG9iaiBhbiBBVk9wdGlvbnMtZW5hYmxlZCBzdHJ1Y3Qg b3IgYSBkb3VibGUgcG9pbnRlciB0byBhbgorKyAqICAgICAgICAgICAgQVZDbGFzcyBkZXNjcmli aW5nIGl0LgorKyAqIEBwYXJhbSBwcmV2IHJlc3VsdCBvZiB0aGUgcHJldmlvdXMgY2FsbCB0byBh dl9vcHRfbmV4dCgpIG9uIHRoaXMgb2JqZWN0CisrICogICAgICAgICAgICAgb3IgTlVMTAorKyAq IEByZXR1cm4gbmV4dCBBVk9wdGlvbiBvciBOVUxMCisrICovCisrY29uc3QgQVZPcHRpb24gKmF2 X29wdF9uZXh0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgQVZPcHRpb24gKnByZXYpOworKworKy8q KgorKyAqIEl0ZXJhdGUgb3ZlciBBVk9wdGlvbnMtZW5hYmxlZCBjaGlsZHJlbiBvZiBvYmouCisr ICoKKysgKiBAcGFyYW0gcHJldiByZXN1bHQgb2YgYSBwcmV2aW91cyBjYWxsIHRvIHRoaXMgZnVu Y3Rpb24gb3IgTlVMTAorKyAqIEByZXR1cm4gbmV4dCBBVk9wdGlvbnMtZW5hYmxlZCBjaGlsZCBv ciBOVUxMCisrICovCisrdm9pZCAqYXZfb3B0X2NoaWxkX25leHQodm9pZCAqb2JqLCB2b2lkICpw cmV2KTsKKysKKysvKioKKysgKiBJdGVyYXRlIG92ZXIgcG90ZW50aWFsIEFWT3B0aW9ucy1lbmFi bGVkIGNoaWxkcmVuIG9mIHBhcmVudC4KKysgKgorKyAqIEBwYXJhbSBpdGVyIGEgcG9pbnRlciB3 aGVyZSBpdGVyYXRpb24gc3RhdGUgaXMgc3RvcmVkLgorKyAqIEByZXR1cm4gQVZDbGFzcyBjb3Jy ZXNwb25kaW5nIHRvIG5leHQgcG90ZW50aWFsIGNoaWxkIG9yIE5VTEwKKysgKi8KKytjb25zdCBB VkNsYXNzICphdl9vcHRfY2hpbGRfY2xhc3NfaXRlcmF0ZShjb25zdCBBVkNsYXNzICpwYXJlbnQs IHZvaWQgKippdGVyKTsKKysKKysjZGVmaW5lIEFWX09QVF9TRUFSQ0hfQ0hJTERSRU4gICAoMSA8 PCAwKSAvKio8IFNlYXJjaCBpbiBwb3NzaWJsZSBjaGlsZHJlbiBvZiB0aGUKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIG9iamVjdCBmaXJzdC4g Ki8KKysvKioKKysgKiAgVGhlIG9iaiBwYXNzZWQgdG8gYXZfb3B0X2ZpbmQoKSBpcyBmYWtlIC0t IG9ubHkgYSBkb3VibGUgcG9pbnRlciB0byBBVkNsYXNzCisrICogIGluc3RlYWQgb2YgYSByZXF1 aXJlZCBwb2ludGVyIHRvIGEgc3RydWN0IGNvbnRhaW5pbmcgQVZDbGFzcy4gVGhpcyBpcworKyAq ICB1c2VmdWwgZm9yIHNlYXJjaGluZyBmb3Igb3B0aW9ucyB3aXRob3V0IG5lZWRpbmcgdG8gYWxs b2NhdGUgdGhlIGNvcnJlc3BvbmRpbmcKKysgKiAgb2JqZWN0LgorKyAqLworKyNkZWZpbmUgQVZf T1BUX1NFQVJDSF9GQUtFX09CSiAgICgxIDw8IDEpCisrCisrLyoqCisrICogIEluIGF2X29wdF9n ZXQsIHJldHVybiBOVUxMIGlmIHRoZSBvcHRpb24gaGFzIGEgcG9pbnRlciB0eXBlIGFuZCBpcyBz ZXQgdG8gTlVMTCwKKysgKiAgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIGVtcHR5IHN0cmluZy4K KysgKi8KKysjZGVmaW5lIEFWX09QVF9BTExPV19OVUxMICgxIDw8IDIpCisrCisrLyoqCisrICog TWF5IGJlIHVzZWQgd2l0aCBhdl9vcHRfc2V0X2FycmF5KCkgdG8gc2lnbmFsIHRoYXQgbmV3IGVs ZW1lbnRzIHNob3VsZAorKyAqIHJlcGxhY2UgdGhlIGV4aXN0aW5nIG9uZXMgaW4gdGhlIGluZGlj YXRlZCByYW5nZS4KKysgKi8KKysjZGVmaW5lIEFWX09QVF9BUlJBWV9SRVBMQUNFICgxIDw8IDMp CisrCisrLyoqCisrICogIEFsbG93cyBhdl9vcHRfcXVlcnlfcmFuZ2VzIGFuZCBhdl9vcHRfcXVl cnlfcmFuZ2VzX2RlZmF1bHQgdG8gcmV0dXJuIG1vcmUgdGhhbgorKyAqICBvbmUgY29tcG9uZW50 IGZvciBjZXJ0YWluIG9wdGlvbiB0eXBlcy4KKysgKiAgQHNlZSBBVk9wdGlvblJhbmdlcyBmb3Ig ZGV0YWlscy4KKysgKi8KKysjZGVmaW5lIEFWX09QVF9NVUxUSV9DT01QT05FTlRfUkFOR0UgKDEg PDwgMTIpCisrCisrLyoqCisrICogTG9vayBmb3IgYW4gb3B0aW9uIGluIGFuIG9iamVjdC4gQ29u c2lkZXIgb25seSBvcHRpb25zIHdoaWNoCisrICogaGF2ZSBhbGwgdGhlIHNwZWNpZmllZCBmbGFn cyBzZXQuCisrICoKKysgKiBAcGFyYW1baW5dIG9iaiBBIHBvaW50ZXIgdG8gYSBzdHJ1Y3Qgd2hv c2UgZmlyc3QgZWxlbWVudCBpcyBhCisrICogICAgICAgICAgICAgICAgcG9pbnRlciB0byBhbiBB VkNsYXNzLgorKyAqICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHkgYSBkb3VibGUgcG9pbnRl ciB0byBhbiBBVkNsYXNzLCBpZgorKyAqICAgICAgICAgICAgICAgIEFWX09QVF9TRUFSQ0hfRkFL RV9PQkogc2VhcmNoIGZsYWcgaXMgc2V0LgorKyAqIEBwYXJhbVtpbl0gbmFtZSBUaGUgbmFtZSBv ZiB0aGUgb3B0aW9uIHRvIGxvb2sgZm9yLgorKyAqIEBwYXJhbVtpbl0gdW5pdCBXaGVuIHNlYXJj aGluZyBmb3IgbmFtZWQgY29uc3RhbnRzLCBuYW1lIG9mIHRoZSB1bml0CisrICogICAgICAgICAg ICAgICAgIGl0IGJlbG9uZ3MgdG8uCisrICogQHBhcmFtIG9wdF9mbGFncyBGaW5kIG9ubHkgb3B0 aW9ucyB3aXRoIGFsbCB0aGUgc3BlY2lmaWVkIGZsYWdzIHNldCAoQVZfT1BUX0ZMQUcpLgorKyAq IEBwYXJhbSBzZWFyY2hfZmxhZ3MgQSBjb21iaW5hdGlvbiBvZiBBVl9PUFRfU0VBUkNIXyouCisr ICoKKysgKiBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgb3B0aW9uIGZvdW5kLCBvciBOVUxMIGlm IG5vIG9wdGlvbgorKyAqICAgICAgICAgd2FzIGZvdW5kLgorKyAqCisrICogQG5vdGUgT3B0aW9u cyBmb3VuZCB3aXRoIEFWX09QVF9TRUFSQ0hfQ0hJTERSRU4gZmxhZyBtYXkgbm90IGJlIHNldHRh YmxlCisrICogZGlyZWN0bHkgd2l0aCBhdl9vcHRfc2V0KCkuIFVzZSBzcGVjaWFsIGNhbGxzIHdo aWNoIHRha2UgYW4gb3B0aW9ucworKyAqIEFWRGljdGlvbmFyeSAoZS5nLiBhdmZvcm1hdF9vcGVu X2lucHV0KCkpIHRvIHNldCBvcHRpb25zIGZvdW5kIHdpdGggdGhpcworKyAqIGZsYWcuCisrICov CisrY29uc3QgQVZPcHRpb24gKmF2X29wdF9maW5kKHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFt ZSwgY29uc3QgY2hhciAqdW5pdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9w dF9mbGFncywgaW50IHNlYXJjaF9mbGFncyk7CisrCisrLyoqCisrICogTG9vayBmb3IgYW4gb3B0 aW9uIGluIGFuIG9iamVjdC4gQ29uc2lkZXIgb25seSBvcHRpb25zIHdoaWNoCisrICogaGF2ZSBh bGwgdGhlIHNwZWNpZmllZCBmbGFncyBzZXQuCisrICoKKysgKiBAcGFyYW1baW5dIG9iaiBBIHBv aW50ZXIgdG8gYSBzdHJ1Y3Qgd2hvc2UgZmlyc3QgZWxlbWVudCBpcyBhCisrICogICAgICAgICAg ICAgICAgcG9pbnRlciB0byBhbiBBVkNsYXNzLgorKyAqICAgICAgICAgICAgICAgIEFsdGVybmF0 aXZlbHkgYSBkb3VibGUgcG9pbnRlciB0byBhbiBBVkNsYXNzLCBpZgorKyAqICAgICAgICAgICAg ICAgIEFWX09QVF9TRUFSQ0hfRkFLRV9PQkogc2VhcmNoIGZsYWcgaXMgc2V0LgorKyAqIEBwYXJh bVtpbl0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgb3B0aW9uIHRvIGxvb2sgZm9yLgorKyAqIEBwYXJh bVtpbl0gdW5pdCBXaGVuIHNlYXJjaGluZyBmb3IgbmFtZWQgY29uc3RhbnRzLCBuYW1lIG9mIHRo ZSB1bml0CisrICogICAgICAgICAgICAgICAgIGl0IGJlbG9uZ3MgdG8uCisrICogQHBhcmFtIG9w dF9mbGFncyBGaW5kIG9ubHkgb3B0aW9ucyB3aXRoIGFsbCB0aGUgc3BlY2lmaWVkIGZsYWdzIHNl dCAoQVZfT1BUX0ZMQUcpLgorKyAqIEBwYXJhbSBzZWFyY2hfZmxhZ3MgQSBjb21iaW5hdGlvbiBv ZiBBVl9PUFRfU0VBUkNIXyouCisrICogQHBhcmFtW291dF0gdGFyZ2V0X29iaiBpZiBub24tTlVM TCwgYW4gb2JqZWN0IHRvIHdoaWNoIHRoZSBvcHRpb24gYmVsb25ncyB3aWxsIGJlCisrICogd3Jp dHRlbiBoZXJlLiBJdCBtYXkgYmUgZGlmZmVyZW50IGZyb20gb2JqIGlmIEFWX09QVF9TRUFSQ0hf Q0hJTERSRU4gaXMgcHJlc2VudAorKyAqIGluIHNlYXJjaF9mbGFncy4gVGhpcyBwYXJhbWV0ZXIg aXMgaWdub3JlZCBpZiBzZWFyY2hfZmxhZ3MgY29udGFpbgorKyAqIEFWX09QVF9TRUFSQ0hfRkFL RV9PQkouCisrICoKKysgKiBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgb3B0aW9uIGZvdW5kLCBv ciBOVUxMIGlmIG5vIG9wdGlvbgorKyAqICAgICAgICAgd2FzIGZvdW5kLgorKyAqLworK2NvbnN0 IEFWT3B0aW9uICphdl9vcHRfZmluZDIodm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25z dCBjaGFyICp1bml0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdF9mbGFn cywgaW50IHNlYXJjaF9mbGFncywgdm9pZCAqKnRhcmdldF9vYmopOworKworKy8qKgorKyAqIFNo b3cgdGhlIG9iaiBvcHRpb25zLgorKyAqCisrICogQHBhcmFtIHJlcV9mbGFncyByZXF1ZXN0ZWQg ZmxhZ3MgZm9yIHRoZSBvcHRpb25zIHRvIHNob3cuIFNob3cgb25seSB0aGUKKysgKiBvcHRpb25z IGZvciB3aGljaCBpdCBpcyBvcHQtPmZsYWdzICYgcmVxX2ZsYWdzLgorKyAqIEBwYXJhbSByZWpf ZmxhZ3MgcmVqZWN0ZWQgZmxhZ3MgZm9yIHRoZSBvcHRpb25zIHRvIHNob3cuIFNob3cgb25seSB0 aGUKKysgKiBvcHRpb25zIGZvciB3aGljaCBpdCBpcyAhKG9wdC0+ZmxhZ3MgJiByZXFfZmxhZ3Mp LgorKyAqIEBwYXJhbSBhdl9sb2dfb2JqIGxvZyBjb250ZXh0IHRvIHVzZSBmb3Igc2hvd2luZyB0 aGUgb3B0aW9ucworKyAqLworK2ludCBhdl9vcHRfc2hvdzIodm9pZCAqb2JqLCB2b2lkICphdl9s b2dfb2JqLCBpbnQgcmVxX2ZsYWdzLCBpbnQgcmVqX2ZsYWdzKTsKKysKKysvKioKKysgKiBFeHRy YWN0IGEga2V5LXZhbHVlIHBhaXIgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGEgc3RyaW5nLgorKyAq CisrICogQHBhcmFtIHJvcHRzICAgICAgICBwb2ludGVyIHRvIHRoZSBvcHRpb25zIHN0cmluZywg d2lsbCBiZSB1cGRhdGVkIHRvCisrICogICAgICAgICAgICAgICAgICAgICBwb2ludCB0byB0aGUg cmVzdCBvZiB0aGUgc3RyaW5nIChvbmUgb2YgdGhlIHBhaXJzX3NlcAorKyAqICAgICAgICAgICAg ICAgICAgICAgb3IgdGhlIGZpbmFsIE5VTCkKKysgKiBAcGFyYW0ga2V5X3ZhbF9zZXAgIGEgMC10 ZXJtaW5hdGVkIGxpc3Qgb2YgY2hhcmFjdGVycyB1c2VkIHRvIHNlcGFyYXRlCisrICogICAgICAg ICAgICAgICAgICAgICBrZXkgZnJvbSB2YWx1ZSwgZm9yIGV4YW1wbGUgJz0nCisrICogQHBhcmFt IHBhaXJzX3NlcCAgICBhIDAtdGVybWluYXRlZCBsaXN0IG9mIGNoYXJhY3RlcnMgdXNlZCB0byBz ZXBhcmF0ZQorKyAqICAgICAgICAgICAgICAgICAgICAgdHdvIHBhaXJzIGZyb20gZWFjaCBvdGhl ciwgZm9yIGV4YW1wbGUgJzonIG9yICcsJworKyAqIEBwYXJhbSBmbGFncyAgICAgICAgZmxhZ3M7 IHNlZSB0aGUgQVZfT1BUX0ZMQUdfKiB2YWx1ZXMgYmVsb3cKKysgKiBAcGFyYW0gcmtleSAgICAg ICAgIHBhcnNlZCBrZXk7IG11c3QgYmUgZnJlZWQgdXNpbmcgYXZfZnJlZSgpCisrICogQHBhcmFt IHJ2YWwgICAgICAgICBwYXJzZWQgdmFsdWU7IG11c3QgYmUgZnJlZWQgdXNpbmcgYXZfZnJlZSgp CisrICoKKysgKiBAcmV0dXJuICA+PTAgZm9yIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgdmFsdWUg Y29ycmVzcG9uZGluZyB0byBhbgorKyAqICAgICAgICAgIEFWRVJST1IgY29kZSBpbiBjYXNlIG9m IGVycm9yOyBpbiBwYXJ0aWN1bGFyOgorKyAqICAgICAgICAgIEFWRVJST1IoRUlOVkFMKSBpZiBu byBrZXkgaXMgcHJlc2VudAorKyAqCisrICovCisraW50IGF2X29wdF9nZXRfa2V5X3ZhbHVlKGNv bnN0IGNoYXIgKipyb3B0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq a2V5X3ZhbF9zZXAsIGNvbnN0IGNoYXIgKnBhaXJzX3NlcCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgZmxhZ3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipy a2V5LCBjaGFyICoqcnZhbCk7CisrCisrZW51bSB7CisrCisrICAgIC8qKgorKyAgICAgKiBBY2Nl cHQgdG8gcGFyc2UgYSB2YWx1ZSB3aXRob3V0IGEga2V5OyB0aGUga2V5IHdpbGwgdGhlbiBiZSBy ZXR1cm5lZAorKyAgICAgKiBhcyBOVUxMLgorKyAgICAgKi8KKysgICAgQVZfT1BUX0ZMQUdfSU1Q TElDSVRfS0VZID0gMSwKKyt9OworKworKy8qKgorKyAqIEB9CisrICovCisrCisrLyoqCisrICog QGRlZmdyb3VwIG9wdF93cml0ZSBTZXR0aW5nIGFuZCBtb2RpZnlpbmcgb3B0aW9uIHZhbHVlcwor KyAqIEB7CisrICovCisrCisrLyoqCisrICogUGFyc2UgdGhlIGtleS92YWx1ZSBwYWlycyBsaXN0 IGluIG9wdHMuIEZvciBlYWNoIGtleS92YWx1ZSBwYWlyCisrICogZm91bmQsIHN0b3JlcyB0aGUg dmFsdWUgaW4gdGhlIGZpZWxkIGluIGN0eCB0aGF0IGlzIG5hbWVkIGxpa2UgdGhlCisrICoga2V5 LiBjdHggbXVzdCBiZSBhbiBBVkNsYXNzIGNvbnRleHQsIHN0b3JpbmcgaXMgZG9uZSB1c2luZwor KyAqIEFWT3B0aW9ucy4KKysgKgorKyAqIEBwYXJhbSBvcHRzIG9wdGlvbnMgc3RyaW5nIHRvIHBh cnNlLCBtYXkgYmUgTlVMTAorKyAqIEBwYXJhbSBrZXlfdmFsX3NlcCBhIDAtdGVybWluYXRlZCBs aXN0IG9mIGNoYXJhY3RlcnMgdXNlZCB0bworKyAqIHNlcGFyYXRlIGtleSBmcm9tIHZhbHVlCisr ICogQHBhcmFtIHBhaXJzX3NlcCBhIDAtdGVybWluYXRlZCBsaXN0IG9mIGNoYXJhY3RlcnMgdXNl ZCB0byBzZXBhcmF0ZQorKyAqIHR3byBwYWlycyBmcm9tIGVhY2ggb3RoZXIKKysgKiBAcmV0dXJu IHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IHNldCBrZXkvdmFsdWUgcGFpcnMsIG9yIGEgbmVn YXRpdmUKKysgKiB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIEFWRVJST1IgY29kZSBpbiBjYXNl IG9mIGVycm9yOgorKyAqIEFWRVJST1IoRUlOVkFMKSBpZiBvcHRzIGNhbm5vdCBiZSBwYXJzZWQs CisrICogdGhlIGVycm9yIGNvZGUgaXNzdWVkIGJ5IGF2X29wdF9zZXQoKSBpZiBhIGtleS92YWx1 ZSBwYWlyCisrICogY2Fubm90IGJlIHNldAorKyAqLworK2ludCBhdl9zZXRfb3B0aW9uc19zdHJp bmcodm9pZCAqY3R4LCBjb25zdCBjaGFyICpvcHRzLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqa2V5X3ZhbF9zZXAsIGNvbnN0IGNoYXIgKnBhaXJzX3NlcCk7CisrCisr LyoqCisrICogUGFyc2UgdGhlIGtleS12YWx1ZSBwYWlycyBsaXN0IGluIG9wdHMuIEZvciBlYWNo IGtleT12YWx1ZSBwYWlyIGZvdW5kLAorKyAqIHNldCB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3Bv bmRpbmcgb3B0aW9uIGluIGN0eC4KKysgKgorKyAqIEBwYXJhbSBjdHggICAgICAgICAgdGhlIEFW Q2xhc3Mgb2JqZWN0IHRvIHNldCBvcHRpb25zIG9uCisrICogQHBhcmFtIG9wdHMgICAgICAgICB0 aGUgb3B0aW9ucyBzdHJpbmcsIGtleS12YWx1ZSBwYWlycyBzZXBhcmF0ZWQgYnkgYQorKyAqICAg ICAgICAgICAgICAgICAgICAgZGVsaW1pdGVyCisrICogQHBhcmFtIHNob3J0aGFuZCAgICBhIE5V TEwtdGVybWluYXRlZCBhcnJheSBvZiBvcHRpb25zIG5hbWVzIGZvciBzaG9ydGhhbmQKKysgKiAg ICAgICAgICAgICAgICAgICAgIG5vdGF0aW9uOiBpZiB0aGUgZmlyc3QgZmllbGQgaW4gb3B0cyBo YXMgbm8ga2V5IHBhcnQsCisrICogICAgICAgICAgICAgICAgICAgICB0aGUga2V5IGlzIHRha2Vu IGZyb20gdGhlIGZpcnN0IGVsZW1lbnQgb2Ygc2hvcnRoYW5kOworKyAqICAgICAgICAgICAgICAg ICAgICAgdGhlbiBhZ2FpbiBmb3IgdGhlIHNlY29uZCwgZXRjLiwgdW50aWwgZWl0aGVyIG9wdHMg aXMKKysgKiAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkLCBzaG9ydGhhbmQgaXMgZmluaXNo ZWQgb3IgYSBuYW1lZCBvcHRpb24gaXMKKysgKiAgICAgICAgICAgICAgICAgICAgIGZvdW5kOyBh ZnRlciB0aGF0LCBhbGwgb3B0aW9ucyBtdXN0IGJlIG5hbWVkCisrICogQHBhcmFtIGtleV92YWxf c2VwICBhIDAtdGVybWluYXRlZCBsaXN0IG9mIGNoYXJhY3RlcnMgdXNlZCB0byBzZXBhcmF0ZQor KyAqICAgICAgICAgICAgICAgICAgICAga2V5IGZyb20gdmFsdWUsIGZvciBleGFtcGxlICc9Jwor KyAqIEBwYXJhbSBwYWlyc19zZXAgICAgYSAwLXRlcm1pbmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXJz IHVzZWQgdG8gc2VwYXJhdGUKKysgKiAgICAgICAgICAgICAgICAgICAgIHR3byBwYWlycyBmcm9t IGVhY2ggb3RoZXIsIGZvciBleGFtcGxlICc6JyBvciAnLCcKKysgKiBAcmV0dXJuICB0aGUgbnVt YmVyIG9mIHN1Y2Nlc3NmdWxseSBzZXQga2V5PXZhbHVlIHBhaXJzLCBvciBhIG5lZ2F0aXZlCisr ICogICAgICAgICAgdmFsdWUgY29ycmVzcG9uZGluZyB0byBhbiBBVkVSUk9SIGNvZGUgaW4gY2Fz ZSBvZiBlcnJvcjoKKysgKiAgICAgICAgICBBVkVSUk9SKEVJTlZBTCkgaWYgb3B0cyBjYW5ub3Qg YmUgcGFyc2VkLAorKyAqICAgICAgICAgIHRoZSBlcnJvciBjb2RlIGlzc3VlZCBieSBhdl9zZXRf c3RyaW5nMygpIGlmIGEga2V5L3ZhbHVlIHBhaXIKKysgKiAgICAgICAgICBjYW5ub3QgYmUgc2V0 CisrICoKKysgKiBPcHRpb25zIG5hbWVzIG11c3QgdXNlIG9ubHkgdGhlIGZvbGxvd2luZyBjaGFy YWN0ZXJzOiBhLXogQS1aIDAtOSAtIC4gLyBfCisrICogU2VwYXJhdG9ycyBtdXN0IHVzZSBjaGFy YWN0ZXJzIGRpc3RpbmN0IGZyb20gb3B0aW9uIG5hbWVzIGFuZCBmcm9tIGVhY2gKKysgKiBvdGhl ci4KKysgKi8KKytpbnQgYXZfb3B0X3NldF9mcm9tX3N0cmluZyh2b2lkICpjdHgsIGNvbnN0IGNo YXIgKm9wdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29uc3Qg KnNob3J0aGFuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICprZXlf dmFsX3NlcCwgY29uc3QgY2hhciAqcGFpcnNfc2VwKTsKKysKKysvKioKKysgKiBTZXQgYWxsIHRo ZSBvcHRpb25zIGZyb20gYSBnaXZlbiBkaWN0aW9uYXJ5IG9uIGFuIG9iamVjdC4KKysgKgorKyAq IEBwYXJhbSBvYmogYSBzdHJ1Y3Qgd2hvc2UgZmlyc3QgZWxlbWVudCBpcyBhIHBvaW50ZXIgdG8g QVZDbGFzcworKyAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbnMgdG8gcHJvY2Vzcy4gVGhpcyBkaWN0 aW9uYXJ5IHdpbGwgYmUgZnJlZWQgYW5kIHJlcGxhY2VkCisrICogICAgICAgICAgICAgICAgYnkg YSBuZXcgb25lIGNvbnRhaW5pbmcgYWxsIG9wdGlvbnMgbm90IGZvdW5kIGluIG9iai4KKysgKiAg ICAgICAgICAgICAgICBPZiBjb3Vyc2UgdGhpcyBuZXcgZGljdGlvbmFyeSBuZWVkcyB0byBiZSBm cmVlZCBieSBjYWxsZXIKKysgKiAgICAgICAgICAgICAgICB3aXRoIGF2X2RpY3RfZnJlZSgpLgor KyAqCisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBpZiBzb21l IG9wdGlvbiB3YXMgZm91bmQgaW4gb2JqLAorKyAqICAgICAgICAgYnV0IGNvdWxkIG5vdCBiZSBz ZXQuCisrICoKKysgKiBAc2VlIGF2X2RpY3RfY29weSgpCisrICovCisraW50IGF2X29wdF9zZXRf ZGljdCh2b2lkICpvYmosIHN0cnVjdCBBVkRpY3Rpb25hcnkgKipvcHRpb25zKTsKKysKKysKKysv KioKKysgKiBTZXQgYWxsIHRoZSBvcHRpb25zIGZyb20gYSBnaXZlbiBkaWN0aW9uYXJ5IG9uIGFu IG9iamVjdC4KKysgKgorKyAqIEBwYXJhbSBvYmogYSBzdHJ1Y3Qgd2hvc2UgZmlyc3QgZWxlbWVu dCBpcyBhIHBvaW50ZXIgdG8gQVZDbGFzcworKyAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbnMgdG8g cHJvY2Vzcy4gVGhpcyBkaWN0aW9uYXJ5IHdpbGwgYmUgZnJlZWQgYW5kIHJlcGxhY2VkCisrICog ICAgICAgICAgICAgICAgYnkgYSBuZXcgb25lIGNvbnRhaW5pbmcgYWxsIG9wdGlvbnMgbm90IGZv dW5kIGluIG9iai4KKysgKiAgICAgICAgICAgICAgICBPZiBjb3Vyc2UgdGhpcyBuZXcgZGljdGlv bmFyeSBuZWVkcyB0byBiZSBmcmVlZCBieSBjYWxsZXIKKysgKiAgICAgICAgICAgICAgICB3aXRo IGF2X2RpY3RfZnJlZSgpLgorKyAqIEBwYXJhbSBzZWFyY2hfZmxhZ3MgQSBjb21iaW5hdGlvbiBv ZiBBVl9PUFRfU0VBUkNIXyouCisrICoKKysgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdh dGl2ZSBBVkVSUk9SIGlmIHNvbWUgb3B0aW9uIHdhcyBmb3VuZCBpbiBvYmosCisrICogICAgICAg ICBidXQgY291bGQgbm90IGJlIHNldC4KKysgKgorKyAqIEBzZWUgYXZfZGljdF9jb3B5KCkKKysg Ki8KKytpbnQgYXZfb3B0X3NldF9kaWN0Mih2b2lkICpvYmosIHN0cnVjdCBBVkRpY3Rpb25hcnkg KipvcHRpb25zLCBpbnQgc2VhcmNoX2ZsYWdzKTsKKysKKysvKioKKysgKiBDb3B5IG9wdGlvbnMg ZnJvbSBzcmMgb2JqZWN0IGludG8gZGVzdCBvYmplY3QuCisrICoKKysgKiBUaGUgdW5kZXJseWlu ZyBBVkNsYXNzIG9mIGJvdGggc3JjIGFuZCBkZXN0IG11c3QgY29pbmNpZGUuIFRoZSBndWFyYW50 ZWUKKysgKiBiZWxvdyBkb2VzIG5vdCBhcHBseSBpZiB0aGlzIGlzIG5vdCBmdWxmaWxsZWQuCisr ICoKKysgKiBPcHRpb25zIHRoYXQgcmVxdWlyZSBtZW1vcnkgYWxsb2NhdGlvbiAoZS5nLiBzdHJp bmcgb3IgYmluYXJ5KSBhcmUgbWFsbG9jJ2VkIGluIGRlc3Qgb2JqZWN0LgorKyAqIE9yaWdpbmFs IG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHN1Y2ggb3B0aW9ucyBpcyBmcmVlZCB1bmxlc3MgYm90aCBz cmMgYW5kIGRlc3Qgb3B0aW9ucyBwb2ludHMgdG8gdGhlIHNhbWUgbWVtb3J5LgorKyAqCisrICog RXZlbiBvbiBlcnJvciBpdCBpcyBndWFyYW50ZWVkIHRoYXQgYWxsb2NhdGVkIG9wdGlvbnMgZnJv bSBzcmMgYW5kIGRlc3QKKysgKiBubyBsb25nZXIgYWxpYXMgZWFjaCBvdGhlciBhZnRlcndhcmRz OyBpbiBwYXJ0aWN1bGFyIGNhbGxpbmcgYXZfb3B0X2ZyZWUoKQorKyAqIG9uIGJvdGggc3JjIGFu ZCBkZXN0IGlzIHNhZmUgYWZ0ZXJ3YXJkcyBpZiBkZXN0IGhhcyBiZWVuIG1lbWR1cCdlZCBmcm9t IHNyYy4KKysgKgorKyAqIEBwYXJhbSBkZXN0IE9iamVjdCB0byBjb3B5IGZyb20KKysgKiBAcGFy YW0gc3JjICBPYmplY3QgdG8gY29weSBpbnRvCisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5l Z2F0aXZlIG9uIGVycm9yCisrICovCisraW50IGF2X29wdF9jb3B5KHZvaWQgKmRlc3QsIGNvbnN0 IHZvaWQgKnNyYyk7CisrCisrLyoqCisrICogQGRlZmdyb3VwIG9wdF9zZXRfZnVuY3MgT3B0aW9u IHNldHRpbmcgZnVuY3Rpb25zCisrICogQHsKKysgKiBUaG9zZSBmdW5jdGlvbnMgc2V0IHRoZSBm aWVsZCBvZiBvYmogd2l0aCB0aGUgZ2l2ZW4gbmFtZSB0byB2YWx1ZS4KKysgKgorKyAqIEBwYXJh bVtpbl0gb2JqIEEgc3RydWN0IHdob3NlIGZpcnN0IGVsZW1lbnQgaXMgYSBwb2ludGVyIHRvIGFu IEFWQ2xhc3MuCisrICogQHBhcmFtW2luXSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBz ZXQKKysgKiBAcGFyYW1baW5dIHZhbCBUaGUgdmFsdWUgdG8gc2V0LiBJbiBjYXNlIG9mIGF2X29w dF9zZXQoKSBpZiB0aGUgZmllbGQgaXMgbm90CisrICogb2YgYSBzdHJpbmcgdHlwZSwgdGhlbiB0 aGUgZ2l2ZW4gc3RyaW5nIGlzIHBhcnNlZC4KKysgKiBTSSBwb3N0Zml4ZXMgYW5kIHNvbWUgbmFt ZWQgc2NhbGFycyBhcmUgc3VwcG9ydGVkLgorKyAqIElmIHRoZSBmaWVsZCBpcyBvZiBhIG51bWVy aWMgdHlwZSwgaXQgaGFzIHRvIGJlIGEgbnVtZXJpYyBvciBuYW1lZAorKyAqIHNjYWxhci4gQmVo YXZpb3Igd2l0aCBtb3JlIHRoYW4gb25lIHNjYWxhciBhbmQgKy0gaW5maXggb3BlcmF0b3JzCisr ICogaXMgdW5kZWZpbmVkLgorKyAqIElmIHRoZSBmaWVsZCBpcyBvZiBhIGZsYWdzIHR5cGUsIGl0 IGhhcyB0byBiZSBhIHNlcXVlbmNlIG9mIG51bWVyaWMKKysgKiBzY2FsYXJzIG9yIG5hbWVkIGZs YWdzIHNlcGFyYXRlZCBieSAnKycgb3IgJy0nLiBQcmVmaXhpbmcgYSBmbGFnCisrICogd2l0aCAn KycgY2F1c2VzIGl0IHRvIGJlIHNldCB3aXRob3V0IGFmZmVjdGluZyB0aGUgb3RoZXIgZmxhZ3M7 CisrICogc2ltaWxhcmx5LCAnLScgdW5zZXRzIGEgZmxhZy4KKysgKiBJZiB0aGUgZmllbGQgaXMg b2YgYSBkaWN0aW9uYXJ5IHR5cGUsIGl0IGhhcyB0byBiZSBhICc6JyBzZXBhcmF0ZWQgbGlzdCBv ZgorKyAqIGtleT12YWx1ZSBwYXJhbWV0ZXJzLiBWYWx1ZXMgY29udGFpbmluZyAnOicgc3BlY2lh bCBjaGFyYWN0ZXJzIG11c3QgYmUKKysgKiBlc2NhcGVkLgorKyAqIEBwYXJhbSBzZWFyY2hfZmxh Z3MgZmxhZ3MgcGFzc2VkIHRvIGF2X29wdF9maW5kMi4gSS5lLiBpZiBBVl9PUFRfU0VBUkNIX0NI SUxEUkVOCisrICogaXMgcGFzc2VkIGhlcmUsIHRoZW4gdGhlIG9wdGlvbiBtYXkgYmUgc2V0IG9u IGEgY2hpbGQgb2Ygb2JqLgorKyAqCisrICogQHJldHVybiAwIGlmIHRoZSB2YWx1ZSBoYXMgYmVl biBzZXQsIG9yIGFuIEFWRVJST1IgY29kZSBpbiBjYXNlIG9mCisrICogZXJyb3I6CisrICogQVZF UlJPUl9PUFRJT05fTk9UX0ZPVU5EIGlmIG5vIG1hdGNoaW5nIG9wdGlvbiBleGlzdHMKKysgKiBB VkVSUk9SKEVSQU5HRSkgaWYgdGhlIHZhbHVlIGlzIG91dCBvZiByYW5nZQorKyAqIEFWRVJST1Io RUlOVkFMKSBpZiB0aGUgdmFsdWUgaXMgbm90IHZhbGlkCisrICovCisraW50IGF2X29wdF9zZXQg ICAgICAgICAodm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWwsIGlu dCBzZWFyY2hfZmxhZ3MpOworK2ludCBhdl9vcHRfc2V0X2ludCAgICAgKHZvaWQgKm9iaiwgY29u c3QgY2hhciAqbmFtZSwgaW50NjRfdCAgICAgdmFsLCBpbnQgc2VhcmNoX2ZsYWdzKTsKKytpbnQg YXZfb3B0X3NldF9kb3VibGUgICh2b2lkICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGRvdWJsZSAg ICAgIHZhbCwgaW50IHNlYXJjaF9mbGFncyk7CisraW50IGF2X29wdF9zZXRfcSAgICAgICAodm9p ZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBBVlJhdGlvbmFsICB2YWwsIGludCBzZWFyY2hfZmxh Z3MpOworK2ludCBhdl9vcHRfc2V0X2JpbiAgICAgKHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFt ZSwgY29uc3QgdWludDhfdCAqdmFsLCBpbnQgc2l6ZSwgaW50IHNlYXJjaF9mbGFncyk7CisraW50 IGF2X29wdF9zZXRfaW1hZ2Vfc2l6ZSh2b2lkICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGludCB3 LCBpbnQgaCwgaW50IHNlYXJjaF9mbGFncyk7CisraW50IGF2X29wdF9zZXRfcGl4ZWxfZm10ICh2 b2lkICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gQVZQaXhlbEZvcm1hdCBmbXQsIGludCBz ZWFyY2hfZmxhZ3MpOworK2ludCBhdl9vcHRfc2V0X3NhbXBsZV9mbXQodm9pZCAqb2JqLCBjb25z dCBjaGFyICpuYW1lLCBlbnVtIEFWU2FtcGxlRm9ybWF0IGZtdCwgaW50IHNlYXJjaF9mbGFncyk7 CisraW50IGF2X29wdF9zZXRfdmlkZW9fcmF0ZSh2b2lkICpvYmosIGNvbnN0IGNoYXIgKm5hbWUs IEFWUmF0aW9uYWwgdmFsLCBpbnQgc2VhcmNoX2ZsYWdzKTsKKysvKioKKysgKiBAbm90ZSBBbnkg b2xkIGNobGF5b3V0IHByZXNlbnQgaXMgZGlzY2FyZGVkIGFuZCByZXBsYWNlZCB3aXRoIGEgY29w eSBvZiB0aGUgbmV3IG9uZS4gVGhlCisrICogY2FsbGVyIHN0aWxsIG93bnMgbGF5b3V0IGFuZCBp cyByZXNwb25zaWJsZSBmb3IgdW5pbml0aWFsaXppbmcgaXQuCisrICovCisraW50IGF2X29wdF9z ZXRfY2hsYXlvdXQodm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBBVkNoYW5uZWxM YXlvdXQgKmxheW91dCwgaW50IHNlYXJjaF9mbGFncyk7CisrLyoqCisrICogQG5vdGUgQW55IG9s ZCBkaWN0aW9uYXJ5IHByZXNlbnQgaXMgZGlzY2FyZGVkIGFuZCByZXBsYWNlZCB3aXRoIGEgY29w eSBvZiB0aGUgbmV3IG9uZS4gVGhlCisrICogY2FsbGVyIHN0aWxsIG93bnMgdmFsIGlzIGFuZCBy ZXNwb25zaWJsZSBmb3IgZnJlZWluZyBpdC4KKysgKi8KKytpbnQgYXZfb3B0X3NldF9kaWN0X3Zh bCh2b2lkICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IEFWRGljdGlvbmFyeSAqdmFsLCBp bnQgc2VhcmNoX2ZsYWdzKTsKKysKKysvKioKKysgKiBBZGQsIHJlcGxhY2UsIG9yIHJlbW92ZSBl bGVtZW50cyBmb3IgYW4gYXJyYXkgb3B0aW9uLiBXaGljaCBvZiB0aGVzZQorKyAqIG9wZXJhdGlv bnMgaXMgcGVyZm9ybWVkIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZiB2YWwgYW5kIHNlYXJjaF9m bGFncy4KKysgKgorKyAqIEBwYXJhbSBzdGFydF9lbGVtIEluZGV4IG9mIHRoZSBmaXJzdCBhcnJh eSBlbGVtZW50IHRvIG1vZGlmeTsgbXVzdCBub3QgYmUKKysgKiAgICAgICAgICAgICAgICAgICBs YXJnZXIgdGhhbiBhcnJheSBzaXplIGFzIHJldHVybmVkIGJ5CisrICogICAgICAgICAgICAgICAg ICAgYXZfb3B0X2dldF9hcnJheV9zaXplKCkuCisrICogQHBhcmFtIG5iX2VsZW1zIG51bWJlciBv ZiBhcnJheSBlbGVtZW50cyB0byBtb2RpZnk7IHdoZW4gdmFsIGlzIE5VTEwsCisrICogICAgICAg ICAgICAgICAgIHN0YXJ0X2VsZW0rbmJfZWxlbXMgbXVzdCBub3QgYmUgbGFyZ2VyIHRoYW4gYXJy YXkgc2l6ZSBhcworKyAqICAgICAgICAgICAgICAgICByZXR1cm5lZCBieSBhdl9vcHRfZ2V0X2Fy cmF5X3NpemUoKQorKyAqCisrICogQHBhcmFtIHZhbF90eXBlIE9wdGlvbiB0eXBlIGNvcnJlc3Bv bmRpbmcgdG8gdGhlIHR5cGUgb2YgdmFsLCBpZ25vcmVkIHdoZW4gdmFsIGlzCisrICogICAgICAg ICAgICAgICAgIE5VTEwuCisrICoKKysgKiAgICAgICAgICAgICAgICAgVGhlIGVmZmVjdCBvZiB0 aGlzIGZ1bmN0aW9uIHdpbGwgd2lsbCBiZSBhcyBpZiBhdl9vcHRfc2V0WCgpCisrICogICAgICAg ICAgICAgICAgIHdhcyBjYWxsZWQgZm9yIGVhY2ggZWxlbWVudCwgd2hlcmUgWCBpcyBzcGVjaWZp ZWQgYnkgdHlwZS4KKysgKiAgICAgICAgICAgICAgICAgRS5nLiBBVl9PUFRfVFlQRV9TVFJJTkcg Y29ycmVzcG9uZHMgdG8gYXZfb3B0X3NldCgpLgorKyAqCisrICogICAgICAgICAgICAgICAgIFR5 cGljYWxseSB0aGlzIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgc2NhbGFyaXplZCB0eXBlIG9m CisrICogICAgICAgICAgICAgICAgIHRoZSBBVk9wdGlvbiBiZWluZyBzZXQsIGJ1dCBjZXJ0YWlu IGNvbnZlcnNpb25zIGFyZSBhbHNvCisrICogICAgICAgICAgICAgICAgIHBvc3NpYmxlIC0gdGhl IHNhbWUgYXMgdGhvc2UgZG9uZSBieSB0aGUgY29ycmVzcG9uZGluZworKyAqICAgICAgICAgICAg ICAgICBhdl9vcHRfc2V0KigpIGZ1bmN0aW9uLiBFLmcuIGFueSBvcHRpb24gdHlwZSBjYW4gYmUg c2V0IGZyb20KKysgKiAgICAgICAgICAgICAgICAgYSBzdHJpbmcsIG51bWVyaWMgdHlwZXMgY2Fu IGJlIHNldCBmcm9tIGludDY0LCBkb3VibGUsIG9yCisrICogICAgICAgICAgICAgICAgIHJhdGlv bmFsLCBldGMuCisrICoKKysgKiBAcGFyYW0gdmFsIEFycmF5IHdpdGggbmJfZWxlbXMgZWxlbWVu dHMgb3IgTlVMTC4KKysgKgorKyAqICAgICAgICAgICAgV2hlbiBOVUxMLCBuYl9lbGVtcyBhcnJh eSBlbGVtZW50cyBzdGFydGluZyBhdCBzdGFydF9lbGVtIGFyZQorKyAqICAgICAgICAgICAgcmVt b3ZlZCBmcm9tIHRoZSBhcnJheS4gQW55IGFycmF5IGVsZW1lbnRzIHJlbWFpbmluZyBhdCB0aGUg ZW5kCisrICogICAgICAgICAgICBhcmUgc2hpZnRlZCBieSBuYl9lbGVtcyB0b3dhcmRzIHRoZSBm aXJzdCBlbGVtZW50IGluIG9yZGVyIHRvIGtlZXAKKysgKiAgICAgICAgICAgIHRoZSBhcnJheSBj b250aWd1b3VzLgorKyAqCisrICogICAgICAgICAgICBPdGhlcndpc2UgKHZhbCBpcyBub24tTlVM TCksIHRoZSB0eXBlIG9mIHZhbCBtdXN0IG1hdGNoIHRoZQorKyAqICAgICAgICAgICAgdW5kZXJs eWluZyBDIHR5cGUgYXMgZG9jdW1lbnRlZCBmb3IgdmFsX3R5cGUuCisrICoKKysgKiAgICAgICAg ICAgIFdoZW4gQVZfT1BUX0FSUkFZX1JFUExBQ0UgaXMgbm90IHNldCBpbiBzZWFyY2hfZmxhZ3Ms IHRoZSBhcnJheSBpcworKyAqICAgICAgICAgICAgZW5sYXJnZWQgYnkgbmJfZWxlbXMsIGFuZCB0 aGUgY29udGVudHMgb2YgdmFsIGFyZSBpbnNlcnRlZCBhdAorKyAqICAgICAgICAgICAgc3RhcnRf ZWxlbS4gUHJldmlvdXNseSBleGlzdGluZyBhcnJheSBlbGVtZW50cyBmcm9tIHN0YXJ0X2VsZW0K KysgKiAgICAgICAgICAgIG9ud2FyZHMgKGlmIHByZXNlbnQpIGFyZSBzaGlmdGVkIGJ5IG5iX2Vs ZW1zIGF3YXkgZnJvbSB0aGUgZmlyc3QKKysgKiAgICAgICAgICAgIGVsZW1lbnQgaW4gb3JkZXIg dG8gbWFrZSBzcGFjZSBmb3IgdGhlIG5ldyBlbGVtZW50cy4KKysgKgorKyAqICAgICAgICAgICAg V2hlbiBBVl9PUFRfQVJSQVlfUkVQTEFDRSBpcyBzZXQgaW4gc2VhcmNoX2ZsYWdzLCB0aGUgY29u dGVudHMKKysgKiAgICAgICAgICAgIG9mIHZhbCByZXBsYWNlIGV4aXN0aW5nIGFycmF5IGVsZW1l bnRzIGZyb20gc3RhcnRfZWxlbSB0bworKyAqICAgICAgICAgICAgc3RhcnRfZWxlbStuYl9lbGVt cyAoaWYgcHJlc2VudCkuIE5ldyBhcnJheSBzaXplIGlzCisrICogICAgICAgICAgICBtYXgoc3Rh cnRfZWxlbSArIG5iX2VsZW1zLCBvbGQgYXJyYXkgc2l6ZSkuCisrICovCisraW50IGF2X29wdF9z ZXRfYXJyYXkodm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgc2VhcmNoX2ZsYWdzLAor KyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGFydF9lbGVtLCB1bnNpZ25lZCBp bnQgbmJfZWxlbXMsCisrICAgICAgICAgICAgICAgICAgICAgZW51bSBBVk9wdGlvblR5cGUgdmFs X3R5cGUsIGNvbnN0IHZvaWQgKnZhbCk7CisrCisrLyoqCisrICogQH0KKysgKiBAfQorKyAqLwor KworKy8qKgorKyAqIEBkZWZncm91cCBvcHRfcmVhZCBSZWFkaW5nIG9wdGlvbiB2YWx1ZXMKKysg KiBAeworKyAqLworKworKy8qKgorKyAqIEBkZWZncm91cCBvcHRfZ2V0X2Z1bmNzIE9wdGlvbiBn ZXR0aW5nIGZ1bmN0aW9ucworKyAqIEB7CisrICogVGhvc2UgZnVuY3Rpb25zIGdldCBhIHZhbHVl IG9mIHRoZSBvcHRpb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBmcm9tIGFuIG9iamVjdC4KKysgKgor KyAqIEBwYXJhbVtpbl0gb2JqIGEgc3RydWN0IHdob3NlIGZpcnN0IGVsZW1lbnQgaXMgYSBwb2lu dGVyIHRvIGFuIEFWQ2xhc3MuCisrICogQHBhcmFtW2luXSBuYW1lIG5hbWUgb2YgdGhlIG9wdGlv biB0byBnZXQuCisrICogQHBhcmFtW2luXSBzZWFyY2hfZmxhZ3MgZmxhZ3MgcGFzc2VkIHRvIGF2 X29wdF9maW5kMi4gSS5lLiBpZiBBVl9PUFRfU0VBUkNIX0NISUxEUkVOCisrICogaXMgcGFzc2Vk IGhlcmUsIHRoZW4gdGhlIG9wdGlvbiBtYXkgYmUgZm91bmQgaW4gYSBjaGlsZCBvZiBvYmouCisr ICogQHBhcmFtW291dF0gb3V0X3ZhbCB2YWx1ZSBvZiB0aGUgb3B0aW9uIHdpbGwgYmUgd3JpdHRl biBoZXJlCisrICogQHJldHVybiA+PTAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2Rl IG90aGVyd2lzZQorKyAqLworKy8qKgorKyAqIEBub3RlIHRoZSByZXR1cm5lZCBzdHJpbmcgd2ls bCBiZSBhdl9tYWxsb2MoKWVkIGFuZCBtdXN0IGJlIGF2X2ZyZWUoKWVkIGJ5IHRoZSBjYWxsZXIK KysgKgorKyAqIEBub3RlIGlmIEFWX09QVF9BTExPV19OVUxMIGlzIHNldCBpbiBzZWFyY2hfZmxh Z3MgaW4gYXZfb3B0X2dldCwgYW5kIHRoZQorKyAqIG9wdGlvbiBpcyBvZiB0eXBlIEFWX09QVF9U WVBFX1NUUklORywgQVZfT1BUX1RZUEVfQklOQVJZIG9yIEFWX09QVF9UWVBFX0RJQ1QKKysgKiBh bmQgaXMgc2V0IHRvIE5VTEwsICpvdXRfdmFsIHdpbGwgYmUgc2V0IHRvIE5VTEwgaW5zdGVhZCBv ZiBhbiBhbGxvY2F0ZWQKKysgKiBlbXB0eSBzdHJpbmcuCisrICovCisraW50IGF2X29wdF9nZXQg ICAgICAgICAodm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgc2VhcmNoX2ZsYWdzLCB1 aW50OF90ICAgKipvdXRfdmFsKTsKKytpbnQgYXZfb3B0X2dldF9pbnQgICAgICh2b2lkICpvYmos IGNvbnN0IGNoYXIgKm5hbWUsIGludCBzZWFyY2hfZmxhZ3MsIGludDY0X3QgICAgKm91dF92YWwp OworK2ludCBhdl9vcHRfZ2V0X2RvdWJsZSAgKHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwg aW50IHNlYXJjaF9mbGFncywgZG91YmxlICAgICAqb3V0X3ZhbCk7CisraW50IGF2X29wdF9nZXRf cSAgICAgICAodm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgc2VhcmNoX2ZsYWdzLCBB VlJhdGlvbmFsICpvdXRfdmFsKTsKKytpbnQgYXZfb3B0X2dldF9pbWFnZV9zaXplKHZvaWQgKm9i aiwgY29uc3QgY2hhciAqbmFtZSwgaW50IHNlYXJjaF9mbGFncywgaW50ICp3X291dCwgaW50ICpo X291dCk7CisraW50IGF2X29wdF9nZXRfcGl4ZWxfZm10ICh2b2lkICpvYmosIGNvbnN0IGNoYXIg Km5hbWUsIGludCBzZWFyY2hfZmxhZ3MsIGVudW0gQVZQaXhlbEZvcm1hdCAqb3V0X2ZtdCk7Cisr aW50IGF2X29wdF9nZXRfc2FtcGxlX2ZtdCh2b2lkICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGlu dCBzZWFyY2hfZmxhZ3MsIGVudW0gQVZTYW1wbGVGb3JtYXQgKm91dF9mbXQpOworK2ludCBhdl9v cHRfZ2V0X3ZpZGVvX3JhdGUodm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgc2VhcmNo X2ZsYWdzLCBBVlJhdGlvbmFsICpvdXRfdmFsKTsKKysvKioKKysgKiBAcGFyYW1bb3V0XSBsYXlv dXQgVGhlIHJldHVybmVkIGxheW91dCBpcyBhIGNvcHkgb2YgdGhlIGFjdHVhbCB2YWx1ZSBhbmQg bXVzdAorKyAqIGJlIGZyZWVkIHdpdGggYXZfY2hhbm5lbF9sYXlvdXRfdW5pbml0KCkgYnkgdGhl IGNhbGxlcgorKyAqLworK2ludCBhdl9vcHRfZ2V0X2NobGF5b3V0KHZvaWQgKm9iaiwgY29uc3Qg Y2hhciAqbmFtZSwgaW50IHNlYXJjaF9mbGFncywgQVZDaGFubmVsTGF5b3V0ICpsYXlvdXQpOwor Ky8qKgorKyAqIEBwYXJhbVtvdXRdIG91dF92YWwgVGhlIHJldHVybmVkIGRpY3Rpb25hcnkgaXMg YSBjb3B5IG9mIHRoZSBhY3R1YWwgdmFsdWUgYW5kIG11c3QKKysgKiBiZSBmcmVlZCB3aXRoIGF2 X2RpY3RfZnJlZSgpIGJ5IHRoZSBjYWxsZXIKKysgKi8KKytpbnQgYXZfb3B0X2dldF9kaWN0X3Zh bCh2b2lkICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGludCBzZWFyY2hfZmxhZ3MsIEFWRGljdGlv bmFyeSAqKm91dF92YWwpOworKworKy8qKgorKyAqIEZvciBhbiBhcnJheS10eXBlIG9wdGlvbiwg Z2V0IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5LgorKyAqLworK2ludCBhdl9v cHRfZ2V0X2FycmF5X3NpemUodm9pZCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgc2VhcmNo X2ZsYWdzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRfdmFs KTsKKysKKysvKioKKysgKiBGb3IgYW4gYXJyYXktdHlwZSBvcHRpb24sIHJldHJpZXZlIHRoZSB2 YWx1ZXMgb2Ygb25lIG9yIG1vcmUgYXJyYXkgZWxlbWVudHMuCisrICoKKysgKiBAcGFyYW0gc3Rh cnRfZWxlbSBpbmRleCBvZiB0aGUgZmlyc3QgYXJyYXkgZWxlbWVudCB0byByZXRyaWV2ZQorKyAq IEBwYXJhbSBuYl9lbGVtcyBudW1iZXIgb2YgYXJyYXkgZWxlbWVudHMgdG8gcmV0cmlldmU7IHN0 YXJ0X2VsZW0rbmJfZWxlbXMKKysgKiAgICAgICAgICAgICAgICAgbXVzdCBub3QgYmUgbGFyZ2Vy IHRoYW4gYXJyYXkgc2l6ZSBhcyByZXR1cm5lZCBieQorKyAqICAgICAgICAgICAgICAgICBhdl9v cHRfZ2V0X2FycmF5X3NpemUoKQorKyAqCisrICogQHBhcmFtIG91dF90eXBlIE9wdGlvbiB0eXBl IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRlc2lyZWQgb3V0cHV0LgorKyAqCisrICogICAgICAgICAg ICAgICAgIFRoZSBhcnJheSBlbGVtZW50cyBwcm9kdWNlZCBieSB0aGlzIGZ1bmN0aW9uIHdpbGwK KysgKiAgICAgICAgICAgICAgICAgd2lsbCBiZSBhcyBpZiBhdl9vcHRfZ2V0WCgpIHdhcyBjYWxs ZWQgZm9yIGVhY2ggZWxlbWVudCwKKysgKiAgICAgICAgICAgICAgICAgd2hlcmUgWCBpcyBzcGVj aWZpZWQgYnkgb3V0X3R5cGUuIEUuZy4gQVZfT1BUX1RZUEVfU1RSSU5HCisrICogICAgICAgICAg ICAgICAgIGNvcnJlc3BvbmRzIHRvIGF2X29wdF9nZXQoKS4KKysgKgorKyAqICAgICAgICAgICAg ICAgICBUeXBpY2FsbHkgdGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHNjYWxhcml6ZWQg dHlwZSBvZgorKyAqICAgICAgICAgICAgICAgICB0aGUgQVZPcHRpb24gYmVpbmcgcmV0cmlldmVk LCBidXQgY2VydGFpbiBjb252ZXJzaW9ucyBhcmUKKysgKiAgICAgICAgICAgICAgICAgYWxzbyBw b3NzaWJsZSAtIHRoZSBzYW1lIGFzIHRob3NlIGRvbmUgYnkgdGhlIGNvcnJlc3BvbmRpbmcKKysg KiAgICAgICAgICAgICAgICAgYXZfb3B0X2dldCooKSBmdW5jdGlvbi4gRS5nLiBhbnkgb3B0aW9u IHR5cGUgY2FuIGJlIHJldHJpZXZlZAorKyAqICAgICAgICAgICAgICAgICBhcyBhIHN0cmluZywg bnVtZXJpYyB0eXBlcyBjYW4gYmUgcmV0cmlldmVkIGFzIGludDY0LCBkb3VibGUsCisrICogICAg ICAgICAgICAgICAgIG9yIHJhdGlvbmFsLCBldGMuCisrICoKKysgKiBAcGFyYW0gb3V0X3ZhbCAg QXJyYXkgd2l0aCBuYl9lbGVtcyBtZW1iZXJzIGludG8gd2hpY2ggdGhlIG91dHB1dCB3aWxsIGJl CisrICogICAgICAgICAgICAgICAgIHdyaXR0ZW4uIFRoZSBhcnJheSB0eXBlIG11c3QgbWF0Y2gg dGhlIHVuZGVybHlpbmcgQyB0eXBlIGFzCisrICogICAgICAgICAgICAgICAgIGRvY3VtZW50ZWQg Zm9yIG91dF90eXBlLCBhbmQgYmUgemVyb2VkIG9uIGVudHJ5IHRvIHRoaXMKKysgKiAgICAgICAg ICAgICAgICAgZnVuY3Rpb24uCisrICoKKysgKiAgICAgICAgICAgICAgICAgRm9yIGR5bmFtaWNh bGx5IGFsbG9jYXRlZCB0eXBlcyAoc3RyaW5ncywgYmluYXJ5LCBkaWN0cywKKysgKiAgICAgICAg ICAgICAgICAgZXRjLiksIHRoZSByZXN1bHQgaXMgb3duZWQgYW5kIGZyZWVkIGJ5IHRoZSBjYWxs ZXIuCisrICovCisraW50IGF2X29wdF9nZXRfYXJyYXkodm9pZCAqb2JqLCBjb25zdCBjaGFyICpu YW1lLCBpbnQgc2VhcmNoX2ZsYWdzLAorKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBzdGFydF9lbGVtLCB1bnNpZ25lZCBpbnQgbmJfZWxlbXMsCisrICAgICAgICAgICAgICAgICAg ICAgZW51bSBBVk9wdGlvblR5cGUgb3V0X3R5cGUsIHZvaWQgKm91dF92YWwpOworKy8qKgorKyAq IEB9CisrICovCisrCisrLyoqCisrICogQGRlZmdyb3VwIG9wdF9ldmFsX2Z1bmNzIEV2YWx1YXRp bmcgb3B0aW9uIHN0cmluZ3MKKysgKiBAeworKyAqIFRoaXMgZ3JvdXAgb2YgZnVuY3Rpb25zIGNh biBiZSB1c2VkIHRvIGV2YWx1YXRlIG9wdGlvbiBzdHJpbmdzCisrICogYW5kIGdldCBudW1iZXJz IG91dCBvZiB0aGVtLiBUaGV5IGRvIHRoZSBzYW1lIHRoaW5nIGFzIGF2X29wdF9zZXQoKSwKKysg KiBleGNlcHQgdGhlIHJlc3VsdCBpcyB3cml0dGVuIGludG8gdGhlIGNhbGxlci1zdXBwbGllZCBw b2ludGVyLgorKyAqCisrICogQHBhcmFtIG9iaiBhIHN0cnVjdCB3aG9zZSBmaXJzdCBlbGVtZW50 IGlzIGEgcG9pbnRlciB0byBBVkNsYXNzLgorKyAqIEBwYXJhbSBvIGFuIG9wdGlvbiBmb3Igd2hp Y2ggdGhlIHN0cmluZyBpcyB0byBiZSBldmFsdWF0ZWQuCisrICogQHBhcmFtIHZhbCBzdHJpbmcg dG8gYmUgZXZhbHVhdGVkLgorKyAqIEBwYXJhbSAqX291dCB2YWx1ZSBvZiB0aGUgc3RyaW5nIHdp bGwgYmUgd3JpdHRlbiBoZXJlLgorKyAqCisrICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVn YXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuCisrICovCisraW50IGF2X29wdF9ldmFsX2ZsYWdzICh2 b2lkICpvYmosIGNvbnN0IEFWT3B0aW9uICpvLCBjb25zdCBjaGFyICp2YWwsIGludCAgICAgICAg KmZsYWdzX291dCk7CisraW50IGF2X29wdF9ldmFsX2ludCAgICh2b2lkICpvYmosIGNvbnN0IEFW T3B0aW9uICpvLCBjb25zdCBjaGFyICp2YWwsIGludCAgICAgICAgKmludF9vdXQpOworK2ludCBh dl9vcHRfZXZhbF91aW50ICAodm9pZCAqb2JqLCBjb25zdCBBVk9wdGlvbiAqbywgY29uc3QgY2hh ciAqdmFsLCB1bnNpZ25lZCAgICp1aW50X291dCk7CisraW50IGF2X29wdF9ldmFsX2ludDY0ICh2 b2lkICpvYmosIGNvbnN0IEFWT3B0aW9uICpvLCBjb25zdCBjaGFyICp2YWwsIGludDY0X3QgICAg KmludDY0X291dCk7CisraW50IGF2X29wdF9ldmFsX2Zsb2F0ICh2b2lkICpvYmosIGNvbnN0IEFW T3B0aW9uICpvLCBjb25zdCBjaGFyICp2YWwsIGZsb2F0ICAgICAgKmZsb2F0X291dCk7CisraW50 IGF2X29wdF9ldmFsX2RvdWJsZSh2b2lkICpvYmosIGNvbnN0IEFWT3B0aW9uICpvLCBjb25zdCBj aGFyICp2YWwsIGRvdWJsZSAgICAgKmRvdWJsZV9vdXQpOworK2ludCBhdl9vcHRfZXZhbF9xICAg ICAodm9pZCAqb2JqLCBjb25zdCBBVk9wdGlvbiAqbywgY29uc3QgY2hhciAqdmFsLCBBVlJhdGlv bmFsICpxX291dCk7CisrLyoqCisrICogQH0KKysgKi8KKysKKysvKioKKysgKiBDaGVjayBpZiBn aXZlbiBvcHRpb24gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorKyAqCisrICogT3B0aW9u cyBvIG11c3QgYmVsb25nIHRvIHRoZSBvYmouIFRoaXMgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2Fs bGVkIHRvIGNoZWNrIGNoaWxkJ3Mgb3B0aW9ucyBzdGF0ZS4KKysgKiBAc2VlIGF2X29wdF9pc19z ZXRfdG9fZGVmYXVsdF9ieV9uYW1lKCkuCisrICoKKysgKiBAcGFyYW0gb2JqICBBVkNsYXNzIG9i amVjdCB0byBjaGVjayBvcHRpb24gb24KKysgKiBAcGFyYW0gbyAgICBvcHRpb24gdG8gYmUgY2hl Y2tlZAorKyAqIEByZXR1cm4gICAgID4wIHdoZW4gb3B0aW9uIGlzIHNldCB0byBpdHMgZGVmYXVs dCwKKysgKiAgICAgICAgICAgICAgMCB3aGVuIG9wdGlvbiBpcyBub3Qgc2V0IGl0cyBkZWZhdWx0 LAorKyAqICAgICAgICAgICAgIDwwIG9uIGVycm9yCisrICovCisraW50IGF2X29wdF9pc19zZXRf dG9fZGVmYXVsdCh2b2lkICpvYmosIGNvbnN0IEFWT3B0aW9uICpvKTsKKysKKysvKioKKysgKiBD aGVjayBpZiBnaXZlbiBvcHRpb24gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorKyAqCisr ICogQHBhcmFtIG9iaiAgICAgICAgICBBVkNsYXNzIG9iamVjdCB0byBjaGVjayBvcHRpb24gb24K KysgKiBAcGFyYW0gbmFtZSAgICAgICAgIG9wdGlvbiBuYW1lCisrICogQHBhcmFtIHNlYXJjaF9m bGFncyBjb21iaW5hdGlvbiBvZiBBVl9PUFRfU0VBUkNIXyoKKysgKiBAcmV0dXJuICAgICAgICAg ICAgID4wIHdoZW4gb3B0aW9uIGlzIHNldCB0byBpdHMgZGVmYXVsdCwKKysgKiAgICAgICAgICAg ICAgICAgICAgIDAgd2hlbiBvcHRpb24gaXMgbm90IHNldCBpdHMgZGVmYXVsdCwKKysgKiAgICAg ICAgICAgICAgICAgICAgIDwwIG9uIGVycm9yCisrICovCisraW50IGF2X29wdF9pc19zZXRfdG9f ZGVmYXVsdF9ieV9uYW1lKHZvaWQgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgaW50IHNlYXJjaF9m bGFncyk7CisrCisrLyoqCisrICogQ2hlY2sgd2hldGhlciBhIHBhcnRpY3VsYXIgZmxhZyBpcyBz ZXQgaW4gYSBmbGFncyBmaWVsZC4KKysgKgorKyAqIEBwYXJhbSBmaWVsZF9uYW1lIHRoZSBuYW1l IG9mIHRoZSBmbGFnIGZpZWxkIG9wdGlvbgorKyAqIEBwYXJhbSBmbGFnX25hbWUgdGhlIG5hbWUg b2YgdGhlIGZsYWcgdG8gY2hlY2sKKysgKiBAcmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBmbGFnIGlz IHNldCwgemVybyBpZiB0aGUgZmxhZyBpc24ndCBzZXQsCisrICogICAgICAgICBpc24ndCBvZiB0 aGUgcmlnaHQgdHlwZSwgb3IgdGhlIGZsYWdzIGZpZWxkIGRvZXNuJ3QgZXhpc3QuCisrICovCisr aW50IGF2X29wdF9mbGFnX2lzX3NldCh2b2lkICpvYmosIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUs IGNvbnN0IGNoYXIgKmZsYWdfbmFtZSk7CisrCisrI2RlZmluZSBBVl9PUFRfU0VSSUFMSVpFX1NL SVBfREVGQVVMVFMgICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8vLzwgU2VyaWFsaXplIG9wdGlv bnMgdGhhdCBhcmUgbm90IHNldCB0byBkZWZhdWx0IHZhbHVlcyBvbmx5LgorKyNkZWZpbmUgQVZf T1BUX1NFUklBTElaRV9PUFRfRkxBR1NfRVhBQ1QgICAgICAgICAgICAweDAwMDAwMDAyICAvLy88 IFNlcmlhbGl6ZSBvcHRpb25zIHRoYXQgZXhhY3RseSBtYXRjaCBvcHRfZmxhZ3Mgb25seS4KKysj ZGVmaW5lIEFWX09QVF9TRVJJQUxJWkVfU0VBUkNIX0NISUxEUkVOICAgICAgICAgICAgMHgwMDAw MDAwNCAgLy8vPCBTZXJpYWxpemUgb3B0aW9ucyBpbiBwb3NzaWJsZSBjaGlsZHJlbiBvZiB0aGUg Z2l2ZW4gb2JqZWN0LgorKworKy8qKgorKyAqIFNlcmlhbGl6ZSBvYmplY3QncyBvcHRpb25zLgor KyAqCisrICogQ3JlYXRlIGEgc3RyaW5nIGNvbnRhaW5pbmcgb2JqZWN0J3Mgc2VyaWFsaXplZCBv cHRpb25zLgorKyAqIFN1Y2ggc3RyaW5nIG1heSBiZSBwYXNzZWQgYmFjayB0byBhdl9vcHRfc2V0 X2Zyb21fc3RyaW5nKCkgaW4gb3JkZXIgdG8gcmVzdG9yZSBvcHRpb24gdmFsdWVzLgorKyAqIEEg a2V5L3ZhbHVlIG9yIHBhaXJzIHNlcGFyYXRvciBvY2N1cnJpbmcgaW4gdGhlIHNlcmlhbGl6ZWQg dmFsdWUgb3IKKysgKiBuYW1lIHN0cmluZyBhcmUgZXNjYXBlZCB0aHJvdWdoIHRoZSBhdl9lc2Nh cGUoKSBmdW5jdGlvbi4KKysgKgorKyAqIEBwYXJhbVtpbl0gIG9iaiAgICAgICAgICAgQVZDbGFz cyBvYmplY3QgdG8gc2VyaWFsaXplCisrICogQHBhcmFtW2luXSAgb3B0X2ZsYWdzICAgICBzZXJp YWxpemUgb3B0aW9ucyB3aXRoIGFsbCB0aGUgc3BlY2lmaWVkIGZsYWdzIHNldCAoQVZfT1BUX0ZM QUcpCisrICogQHBhcmFtW2luXSAgZmxhZ3MgICAgICAgICBjb21iaW5hdGlvbiBvZiBBVl9PUFRf U0VSSUFMSVpFXyogZmxhZ3MKKysgKiBAcGFyYW1bb3V0XSBidWZmZXIgICAgICAgIFBvaW50ZXIg dG8gYnVmZmVyIHRoYXQgd2lsbCBiZSBhbGxvY2F0ZWQgd2l0aCBzdHJpbmcgY29udGFpbmluZyBz ZXJpYWxpemVkIG9wdGlvbnMuCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIg bXVzdCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyIHdoZW4gaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKysg KiBAcGFyYW1baW5dICBrZXlfdmFsX3NlcCAgIGNoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIGtl eSBmcm9tIHZhbHVlCisrICogQHBhcmFtW2luXSAgcGFpcnNfc2VwICAgICBjaGFyYWN0ZXIgdXNl ZCB0byBzZXBhcmF0ZSB0d28gcGFpcnMgZnJvbSBlYWNoIG90aGVyCisrICogQHJldHVybiAgICAg ICAgICAgICAgICAgICA+PSAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGVycm9yCisrICogQHdh cm5pbmcgU2VwYXJhdG9ycyBjYW5ub3QgYmUgbmVpdGhlciAnXFwnIG5vciAnXDAnLiBUaGV5IGFs c28gY2Fubm90IGJlIHRoZSBzYW1lLgorKyAqLworK2ludCBhdl9vcHRfc2VyaWFsaXplKHZvaWQg Km9iaiwgaW50IG9wdF9mbGFncywgaW50IGZsYWdzLCBjaGFyICoqYnVmZmVyLAorKyAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIga2V5X3ZhbF9zZXAsIGNvbnN0IGNoYXIgcGFpcnNfc2Vw KTsKKysKKysvKioKKysgKiBAfQorKyAqLworKworKy8qKgorKyAqIEZyZWUgYW4gQVZPcHRpb25S YW5nZXMgc3RydWN0IGFuZCBzZXQgaXQgdG8gTlVMTC4KKysgKi8KKyt2b2lkIGF2X29wdF9mcmVl cF9yYW5nZXMoQVZPcHRpb25SYW5nZXMgKipyYW5nZXMpOworKworKy8qKgorKyAqIEdldCBhIGxp c3Qgb2YgYWxsb3dlZCByYW5nZXMgZm9yIHRoZSBnaXZlbiBvcHRpb24uCisrICoKKysgKiBUaGUg cmV0dXJuZWQgbGlzdCBtYXkgZGVwZW5kIG9uIG90aGVyIGZpZWxkcyBpbiBvYmogbGlrZSBmb3Ig ZXhhbXBsZSBwcm9maWxlLgorKyAqCisrICogQHBhcmFtIGZsYWdzIGlzIGEgYml0bWFzayBvZiBm bGFncywgdW5kZWZpbmVkIGZsYWdzIHNob3VsZCBub3QgYmUgc2V0IGFuZCBzaG91bGQgYmUgaWdu b3JlZAorKyAqICAgICAgICAgICAgICBBVl9PUFRfU0VBUkNIX0ZBS0VfT0JKIGluZGljYXRlcyB0 aGF0IHRoZSBvYmogaXMgYSBkb3VibGUgcG9pbnRlciB0byBhIEFWQ2xhc3MgaW5zdGVhZCBvZiBh IGZ1bGwgaW5zdGFuY2UKKysgKiAgICAgICAgICAgICAgQVZfT1BUX01VTFRJX0NPTVBPTkVOVF9S QU5HRSBpbmRpY2F0ZXMgdGhhdCBmdW5jdGlvbiBtYXkgcmV0dXJuIG1vcmUgdGhhbiBvbmUgY29t cG9uZW50LCBAc2VlIEFWT3B0aW9uUmFuZ2VzCisrICoKKysgKiBUaGUgcmVzdWx0IG11c3QgYmUg ZnJlZWQgd2l0aCBhdl9vcHRfZnJlZXBfcmFuZ2VzLgorKyAqCisrICogQHJldHVybiBudW1iZXIg b2YgY29tcG9uZW50cyByZXR1cm5lZCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUg b3RoZXJ3aXNlCisrICovCisraW50IGF2X29wdF9xdWVyeV9yYW5nZXMoQVZPcHRpb25SYW5nZXMg KiosIHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBpbnQgZmxhZ3MpOworKworKy8qKgorKyAq IEdldCBhIGRlZmF1bHQgbGlzdCBvZiBhbGxvd2VkIHJhbmdlcyBmb3IgdGhlIGdpdmVuIG9wdGlv bi4KKysgKgorKyAqIFRoaXMgbGlzdCBpcyBjb25zdHJ1Y3RlZCB3aXRob3V0IHVzaW5nIHRoZSBB VkNsYXNzLnF1ZXJ5X3JhbmdlcygpIGNhbGxiYWNrCisrICogYW5kIGNhbiBiZSB1c2VkIGFzIGZh bGxiYWNrIGZyb20gd2l0aGluIHRoZSBjYWxsYmFjay4KKysgKgorKyAqIEBwYXJhbSBmbGFncyBp cyBhIGJpdG1hc2sgb2YgZmxhZ3MsIHVuZGVmaW5lZCBmbGFncyBzaG91bGQgbm90IGJlIHNldCBh bmQgc2hvdWxkIGJlIGlnbm9yZWQKKysgKiAgICAgICAgICAgICAgQVZfT1BUX1NFQVJDSF9GQUtF X09CSiBpbmRpY2F0ZXMgdGhhdCB0aGUgb2JqIGlzIGEgZG91YmxlIHBvaW50ZXIgdG8gYSBBVkNs YXNzIGluc3RlYWQgb2YgYSBmdWxsIGluc3RhbmNlCisrICogICAgICAgICAgICAgIEFWX09QVF9N VUxUSV9DT01QT05FTlRfUkFOR0UgaW5kaWNhdGVzIHRoYXQgZnVuY3Rpb24gbWF5IHJldHVybiBt b3JlIHRoYW4gb25lIGNvbXBvbmVudCwgQHNlZSBBVk9wdGlvblJhbmdlcworKyAqCisrICogVGhl IHJlc3VsdCBtdXN0IGJlIGZyZWVkIHdpdGggYXZfb3B0X2ZyZWVfcmFuZ2VzLgorKyAqCisrICog QHJldHVybiBudW1iZXIgb2YgY29tcG9uZW50cyByZXR1cm5lZCBvbiBzdWNjZXNzLCBhIG5lZ2F0 aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisrICovCisraW50IGF2X29wdF9xdWVyeV9yYW5nZXNf ZGVmYXVsdChBVk9wdGlvblJhbmdlcyAqKiwgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIGlu dCBmbGFncyk7CisrCisrLyoqCisrICogQH0KKysgKi8KKysKKysjZW5kaWYgLyogQVZVVElMX09Q VF9IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGly ZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvcGl4ZGVzYy5oLmZmbXBlZzkgTXVzZVNjb3JlLTQu Ny40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL3Bp eGRlc2MuaAorLS0tIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFy dHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9waXhkZXNjLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIz OjQ3LjY3ODQ5Njg5MCArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21l ZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9waXhkZXNjLmgJMjAyNi0wOS0wNyAx MjoyMzo0Ny42NzgzNzMwNDQgKzAyMDAKK0BAIC0wLDAgKzEsNDUwIEBACisrLyoKKysgKiBwaXhl bCBmb3JtYXQgZGVzY3JpcHRvcgorKyAqIENvcHlyaWdodCAoYykgMjAwOSBNaWNoYWVsIE5pZWRl cm1heWVyIDxtaWNoYWVsbmlAZ214LmF0PgorKyAqCisrICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAq IEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxv bmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgKiBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrI2lmbmRlZiBBVlVUSUxfUElYREVTQ19ICisr I2RlZmluZSBBVlVUSUxfUElYREVTQ19ICisrCisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrCisr I2luY2x1ZGUgImF0dHJpYnV0ZXMuaCIKKysjaW5jbHVkZSAicGl4Zm10LmgiCisrCisrdHlwZWRl ZiBzdHJ1Y3QgQVZDb21wb25lbnREZXNjcmlwdG9yIHsKKysgICAgLyoqCisrICAgICAqIFdoaWNo IG9mIHRoZSA0IHBsYW5lcyBjb250YWlucyB0aGUgY29tcG9uZW50LgorKyAgICAgKi8KKysgICAg aW50IHBsYW5lOworKworKyAgICAvKioKKysgICAgICogTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdl ZW4gMiBob3Jpem9udGFsbHkgY29uc2VjdXRpdmUgcGl4ZWxzLgorKyAgICAgKiBFbGVtZW50cyBh cmUgYml0cyBmb3IgYml0c3RyZWFtIGZvcm1hdHMsIGJ5dGVzIG90aGVyd2lzZS4KKysgICAgICov CisrICAgIGludCBzdGVwOworKworKyAgICAvKioKKysgICAgICogTnVtYmVyIG9mIGVsZW1lbnRz IGJlZm9yZSB0aGUgY29tcG9uZW50IG9mIHRoZSBmaXJzdCBwaXhlbC4KKysgICAgICogRWxlbWVu dHMgYXJlIGJpdHMgZm9yIGJpdHN0cmVhbSBmb3JtYXRzLCBieXRlcyBvdGhlcndpc2UuCisrICAg ICAqLworKyAgICBpbnQgb2Zmc2V0OworKworKyAgICAvKioKKysgICAgICogTnVtYmVyIG9mIGxl YXN0IHNpZ25pZmljYW50IGJpdHMgdGhhdCBtdXN0IGJlIHNoaWZ0ZWQgYXdheQorKyAgICAgKiB0 byBnZXQgdGhlIHZhbHVlLgorKyAgICAgKi8KKysgICAgaW50IHNoaWZ0OworKworKyAgICAvKioK KysgICAgICogTnVtYmVyIG9mIGJpdHMgaW4gdGhlIGNvbXBvbmVudC4KKysgICAgICovCisrICAg IGludCBkZXB0aDsKKyt9IEFWQ29tcG9uZW50RGVzY3JpcHRvcjsKKysKKysvKioKKysgKiBEZXNj cmlwdG9yIHRoYXQgdW5hbWJpZ3VvdXNseSBkZXNjcmliZXMgaG93IHRoZSBiaXRzIG9mIGEgcGl4 ZWwgYXJlCisrICogc3RvcmVkIGluIHRoZSB1cCB0byA0IGRhdGEgcGxhbmVzIG9mIGFuIGltYWdl LiBJdCBhbHNvIHN0b3JlcyB0aGUKKysgKiBzdWJzYW1wbGluZyBmYWN0b3JzIGFuZCBudW1iZXIg b2YgY29tcG9uZW50cy4KKysgKgorKyAqIEBub3RlIFRoaXMgaXMgc2VwYXJhdGUgb2YgdGhlIGNv bG9yc3BhY2UgKFJHQiwgWUNiQ3IsIFlQYlByLCBKUEVHLXN0eWxlIFlVVgorKyAqICAgICAgIGFu ZCBhbGwgdGhlIFlVViB2YXJpYW50cykgQVZQaXhGbXREZXNjcmlwdG9yIGp1c3Qgc3RvcmVzIGhv dyB2YWx1ZXMKKysgKiAgICAgICBhcmUgc3RvcmVkIG5vdCB3aGF0IHRoZXNlIHZhbHVlcyByZXBy ZXNlbnQuCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgQVZQaXhGbXREZXNjcmlwdG9yIHsKKysgICAg Y29uc3QgY2hhciAqbmFtZTsKKysgICAgdWludDhfdCBuYl9jb21wb25lbnRzOyAgLy8vPCBUaGUg bnVtYmVyIG9mIGNvbXBvbmVudHMgZWFjaCBwaXhlbCBoYXMsICgxLTQpCisrCisrICAgIC8qKgor KyAgICAgKiBBbW91bnQgdG8gc2hpZnQgdGhlIGx1bWEgd2lkdGggcmlnaHQgdG8gZmluZCB0aGUg Y2hyb21hIHdpZHRoLgorKyAgICAgKiBGb3IgWVYxMiB0aGlzIGlzIDEgZm9yIGV4YW1wbGUuCisr ICAgICAqIGNocm9tYV93aWR0aCA9IEFWX0NFSUxfUlNISUZUKGx1bWFfd2lkdGgsIGxvZzJfY2hy b21hX3cpCisrICAgICAqIFRoZSBub3RlIGFib3ZlIGlzIG5lZWRlZCB0byBlbnN1cmUgcm91bmRp bmcgdXAuCisrICAgICAqIFRoaXMgdmFsdWUgb25seSByZWZlcnMgdG8gdGhlIGNocm9tYSBjb21w b25lbnRzLgorKyAgICAgKi8KKysgICAgdWludDhfdCBsb2cyX2Nocm9tYV93OworKworKyAgICAv KioKKysgICAgICogQW1vdW50IHRvIHNoaWZ0IHRoZSBsdW1hIGhlaWdodCByaWdodCB0byBmaW5k IHRoZSBjaHJvbWEgaGVpZ2h0LgorKyAgICAgKiBGb3IgWVYxMiB0aGlzIGlzIDEgZm9yIGV4YW1w bGUuCisrICAgICAqIGNocm9tYV9oZWlnaHQ9IEFWX0NFSUxfUlNISUZUKGx1bWFfaGVpZ2h0LCBs b2cyX2Nocm9tYV9oKQorKyAgICAgKiBUaGUgbm90ZSBhYm92ZSBpcyBuZWVkZWQgdG8gZW5zdXJl IHJvdW5kaW5nIHVwLgorKyAgICAgKiBUaGlzIHZhbHVlIG9ubHkgcmVmZXJzIHRvIHRoZSBjaHJv bWEgY29tcG9uZW50cy4KKysgICAgICovCisrICAgIHVpbnQ4X3QgbG9nMl9jaHJvbWFfaDsKKysK KysgICAgLyoqCisrICAgICAqIENvbWJpbmF0aW9uIG9mIEFWX1BJWF9GTVRfRkxBR18uLi4gZmxh Z3MuCisrICAgICAqLworKyAgICB1aW50NjRfdCBmbGFnczsKKysKKysgICAgLyoqCisrICAgICAq IFBhcmFtZXRlcnMgdGhhdCBkZXNjcmliZSBob3cgcGl4ZWxzIGFyZSBwYWNrZWQuCisrICAgICAq IElmIHRoZSBmb3JtYXQgaGFzIDEgb3IgMiBjb21wb25lbnRzLCB0aGVuIGx1bWEgaXMgMC4KKysg ICAgICogSWYgdGhlIGZvcm1hdCBoYXMgMyBvciA0IGNvbXBvbmVudHM6CisrICAgICAqICAgaWYg dGhlIFJHQiBmbGFnIGlzIHNldCB0aGVuIDAgaXMgcmVkLCAxIGlzIGdyZWVuIGFuZCAyIGlzIGJs dWU7CisrICAgICAqICAgb3RoZXJ3aXNlIDAgaXMgbHVtYSwgMSBpcyBjaHJvbWEtVSBhbmQgMiBp cyBjaHJvbWEtVi4KKysgICAgICoKKysgICAgICogSWYgcHJlc2VudCwgdGhlIEFscGhhIGNoYW5u ZWwgaXMgYWx3YXlzIHRoZSBsYXN0IGNvbXBvbmVudC4KKysgICAgICovCisrICAgIEFWQ29tcG9u ZW50RGVzY3JpcHRvciBjb21wWzRdOworKworKyAgICAvKioKKysgICAgICogQWx0ZXJuYXRpdmUg Y29tbWEtc2VwYXJhdGVkIG5hbWVzLgorKyAgICAgKi8KKysgICAgY29uc3QgY2hhciAqYWxpYXM7 CisrfSBBVlBpeEZtdERlc2NyaXB0b3I7CisrCisrLyoqCisrICogUGl4ZWwgZm9ybWF0IGlzIGJp Zy1lbmRpYW4uCisrICovCisrI2RlZmluZSBBVl9QSVhfRk1UX0ZMQUdfQkUgICAgICAgICAgICgx IDw8IDApCisrLyoqCisrICogUGl4ZWwgZm9ybWF0IGhhcyBhIHBhbGV0dGUgaW4gZGF0YVsxXSwg dmFsdWVzIGFyZSBpbmRleGVzIGluIHRoaXMgcGFsZXR0ZS4KKysgKi8KKysjZGVmaW5lIEFWX1BJ WF9GTVRfRkxBR19QQUwgICAgICAgICAgKDEgPDwgMSkKKysvKioKKysgKiBBbGwgdmFsdWVzIG9m IGEgY29tcG9uZW50IGFyZSBiaXQtd2lzZSBwYWNrZWQgZW5kIHRvIGVuZC4KKysgKi8KKysjZGVm aW5lIEFWX1BJWF9GTVRfRkxBR19CSVRTVFJFQU0gICAgKDEgPDwgMikKKysvKioKKysgKiBQaXhl bCBmb3JtYXQgaXMgYW4gSFcgYWNjZWxlcmF0ZWQgZm9ybWF0LgorKyAqLworKyNkZWZpbmUgQVZf UElYX0ZNVF9GTEFHX0hXQUNDRUwgICAgICAoMSA8PCAzKQorKy8qKgorKyAqIEF0IGxlYXN0IG9u ZSBwaXhlbCBjb21wb25lbnQgaXMgbm90IGluIHRoZSBmaXJzdCBkYXRhIHBsYW5lLgorKyAqLwor KyNkZWZpbmUgQVZfUElYX0ZNVF9GTEFHX1BMQU5BUiAgICAgICAoMSA8PCA0KQorKy8qKgorKyAq IFRoZSBwaXhlbCBmb3JtYXQgY29udGFpbnMgUkdCLWxpa2UgZGF0YSAoYXMgb3Bwb3NlZCB0byBZ VVYvZ3JheXNjYWxlKS4KKysgKi8KKysjZGVmaW5lIEFWX1BJWF9GTVRfRkxBR19SR0IgICAgICAg ICAgKDEgPDwgNSkKKysKKysvKioKKysgKiBUaGUgcGl4ZWwgZm9ybWF0IGhhcyBhbiBhbHBoYSBj aGFubmVsLiBUaGlzIGlzIHNldCBvbiBhbGwgZm9ybWF0cyB0aGF0CisrICogc3VwcG9ydCBhbHBo YSBpbiBzb21lIHdheSwgaW5jbHVkaW5nIEFWX1BJWF9GTVRfUEFMOC4gVGhlIGFscGhhIGlzIGFs d2F5cworKyAqIHN0cmFpZ2h0LCBuZXZlciBwcmUtbXVsdGlwbGllZC4KKysgKgorKyAqIElmIGEg Y29kZWMgb3IgYSBmaWx0ZXIgZG9lcyBub3Qgc3VwcG9ydCBhbHBoYSwgaXQgc2hvdWxkIHNldCBh bGwgYWxwaGEgdG8KKysgKiBvcGFxdWUsIG9yIHVzZSB0aGUgZXF1aXZhbGVudCBwaXhlbCBmb3Jt YXRzIHdpdGhvdXQgYWxwaGEgY29tcG9uZW50LCBlLmcuCisrICogQVZfUElYX0ZNVF9SR0IwIChv ciBBVl9QSVhfRk1UX1JHQjI0IGV0Yy4pIGluc3RlYWQgb2YgQVZfUElYX0ZNVF9SR0JBLgorKyAq LworKyNkZWZpbmUgQVZfUElYX0ZNVF9GTEFHX0FMUEhBICAgICAgICAoMSA8PCA3KQorKworKy8q KgorKyAqIFRoZSBwaXhlbCBmb3JtYXQgaXMgZm9sbG93aW5nIGEgQmF5ZXIgcGF0dGVybgorKyAq LworKyNkZWZpbmUgQVZfUElYX0ZNVF9GTEFHX0JBWUVSICAgICAgICAoMSA8PCA4KQorKworKy8q KgorKyAqIFRoZSBwaXhlbCBmb3JtYXQgY29udGFpbnMgSUVFRS03NTQgZmxvYXRpbmcgcG9pbnQg dmFsdWVzLiBQcmVjaXNpb24gKGRvdWJsZSwKKysgKiBzaW5nbGUsIG9yIGhhbGYpIHNob3VsZCBi ZSBkZXRlcm1pbmVkIGJ5IHRoZSBwaXhlbCBzaXplICg2NCwgMzIsIG9yIDE2IGJpdHMpLgorKyAq LworKyNkZWZpbmUgQVZfUElYX0ZNVF9GTEFHX0ZMT0FUICAgICAgICAoMSA8PCA5KQorKworKy8q KgorKyAqIFRoZSBwaXhlbCBmb3JtYXQgY29udGFpbnMgWFlaLWxpa2UgZGF0YSAoYXMgb3Bwb3Nl ZCB0byBZVVYvUkdCL2dyYXlzY2FsZSkuCisrICovCisrI2RlZmluZSBBVl9QSVhfRk1UX0ZMQUdf WFlaICAgICAgICAgICgxIDw8IDEwKQorKworKy8qKgorKyAqIFJldHVybiB0aGUgbnVtYmVyIG9m IGJpdHMgcGVyIHBpeGVsIHVzZWQgYnkgdGhlIHBpeGVsIGZvcm1hdAorKyAqIGRlc2NyaWJlZCBi eSBwaXhkZXNjLiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIG51bWJlcgor KyAqIG9mIGJpdHMgcGVyIHNhbXBsZS4KKysgKgorKyAqIFRoZSByZXR1cm5lZCBudW1iZXIgb2Yg Yml0cyByZWZlcnMgdG8gdGhlIG51bWJlciBvZiBiaXRzIGFjdHVhbGx5CisrICogdXNlZCBmb3Ig c3RvcmluZyB0aGUgcGl4ZWwgaW5mb3JtYXRpb24sIHRoYXQgaXMgcGFkZGluZyBiaXRzIGFyZQor KyAqIG5vdCBjb3VudGVkLgorKyAqLworK2ludCBhdl9nZXRfYml0c19wZXJfcGl4ZWwoY29uc3Qg QVZQaXhGbXREZXNjcmlwdG9yICpwaXhkZXNjKTsKKysKKysvKioKKysgKiBSZXR1cm4gdGhlIG51 bWJlciBvZiBiaXRzIHBlciBwaXhlbCBmb3IgdGhlIHBpeGVsIGZvcm1hdAorKyAqIGRlc2NyaWJl ZCBieSBwaXhkZXNjLCBpbmNsdWRpbmcgYW55IHBhZGRpbmcgb3IgdW51c2VkIGJpdHMuCisrICov CisraW50IGF2X2dldF9wYWRkZWRfYml0c19wZXJfcGl4ZWwoY29uc3QgQVZQaXhGbXREZXNjcmlw dG9yICpwaXhkZXNjKTsKKysKKysvKioKKysgKiBAcmV0dXJuIGEgcGl4ZWwgZm9ybWF0IGRlc2Ny aXB0b3IgZm9yIHByb3ZpZGVkIHBpeGVsIGZvcm1hdCBvciBOVUxMIGlmCisrICogdGhpcyBwaXhl bCBmb3JtYXQgaXMgdW5rbm93bi4KKysgKi8KKytjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmF2 X3BpeF9mbXRfZGVzY19nZXQoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQpOworKworKy8qKgor KyAqIEl0ZXJhdGUgb3ZlciBhbGwgcGl4ZWwgZm9ybWF0IGRlc2NyaXB0b3JzIGtub3duIHRvIGxp YmF2dXRpbC4KKysgKgorKyAqIEBwYXJhbSBwcmV2IHByZXZpb3VzIGRlc2NyaXB0b3IuIE5VTEwg dG8gZ2V0IHRoZSBmaXJzdCBkZXNjcmlwdG9yLgorKyAqCisrICogQHJldHVybiBuZXh0IGRlc2Ny aXB0b3Igb3IgTlVMTCBhZnRlciB0aGUgbGFzdCBkZXNjcmlwdG9yCisrICovCisrY29uc3QgQVZQ aXhGbXREZXNjcmlwdG9yICphdl9waXhfZm10X2Rlc2NfbmV4dChjb25zdCBBVlBpeEZtdERlc2Ny aXB0b3IgKnByZXYpOworKworKy8qKgorKyAqIEByZXR1cm4gYW4gQVZQaXhlbEZvcm1hdCBpZCBk ZXNjcmliZWQgYnkgZGVzYywgb3IgQVZfUElYX0ZNVF9OT05FIGlmIGRlc2MKKysgKiBpcyBub3Qg YSB2YWxpZCBwb2ludGVyIHRvIGEgcGl4ZWwgZm9ybWF0IGRlc2NyaXB0b3IuCisrICovCisrZW51 bSBBVlBpeGVsRm9ybWF0IGF2X3BpeF9mbXRfZGVzY19nZXRfaWQoY29uc3QgQVZQaXhGbXREZXNj cmlwdG9yICpkZXNjKTsKKysKKysvKioKKysgKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGFjY2VzcyBs b2cyX2Nocm9tYV93IGxvZzJfY2hyb21hX2ggZnJvbQorKyAqIHRoZSBwaXhlbCBmb3JtYXQgQVZQ aXhGbXREZXNjcmlwdG9yLgorKyAqCisrICogQHBhcmFtW2luXSAgcGl4X2ZtdCB0aGUgcGl4ZWwg Zm9ybWF0CisrICogQHBhcmFtW291dF0gaF9zaGlmdCBzdG9yZSBsb2cyX2Nocm9tYV93IChob3Jp em9udGFsL3dpZHRoIHNoaWZ0KQorKyAqIEBwYXJhbVtvdXRdIHZfc2hpZnQgc3RvcmUgbG9nMl9j aHJvbWFfaCAodmVydGljYWwvaGVpZ2h0IHNoaWZ0KQorKyAqCisrICogQHJldHVybiAwIG9uIHN1 Y2Nlc3MsIEFWRVJST1IoRU5PU1lTKSBvbiBpbnZhbGlkIG9yIHVua25vd24gcGl4ZWwgZm9ybWF0 CisrICovCisraW50IGF2X3BpeF9mbXRfZ2V0X2Nocm9tYV9zdWJfc2FtcGxlKGVudW0gQVZQaXhl bEZvcm1hdCBwaXhfZm10LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgKmhfc2hpZnQsIGludCAqdl9zaGlmdCk7CisrCisrLyoqCisrICogQHJldHVybiBudW1iZXIg b2YgcGxhbmVzIGluIHBpeF9mbXQsIGEgbmVnYXRpdmUgQVZFUlJPUiBpZiBwaXhfZm10IGlzIG5v dCBhCisrICogdmFsaWQgcGl4ZWwgZm9ybWF0LgorKyAqLworK2ludCBhdl9waXhfZm10X2NvdW50 X3BsYW5lcyhlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCk7CisrCisrLyoqCisrICogQHJldHVy biB0aGUgbmFtZSBmb3IgcHJvdmlkZWQgY29sb3IgcmFuZ2Ugb3IgTlVMTCBpZiB1bmtub3duLgor KyAqLworK2NvbnN0IGNoYXIgKmF2X2NvbG9yX3JhbmdlX25hbWUoZW51bSBBVkNvbG9yUmFuZ2Ug cmFuZ2UpOworKworKy8qKgorKyAqIEByZXR1cm4gdGhlIEFWQ29sb3JSYW5nZSB2YWx1ZSBmb3Ig bmFtZSBvciBhbiBBVkVycm9yIGlmIG5vdCBmb3VuZC4KKysgKi8KKytpbnQgYXZfY29sb3JfcmFu Z2VfZnJvbV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworKworKy8qKgorKyAqIEByZXR1cm4gdGhl IG5hbWUgZm9yIHByb3ZpZGVkIGNvbG9yIHByaW1hcmllcyBvciBOVUxMIGlmIHVua25vd24uCisr ICovCisrY29uc3QgY2hhciAqYXZfY29sb3JfcHJpbWFyaWVzX25hbWUoZW51bSBBVkNvbG9yUHJp bWFyaWVzIHByaW1hcmllcyk7CisrCisrLyoqCisrICogQHJldHVybiB0aGUgQVZDb2xvclByaW1h cmllcyB2YWx1ZSBmb3IgbmFtZSBvciBhbiBBVkVycm9yIGlmIG5vdCBmb3VuZC4KKysgKi8KKytp bnQgYXZfY29sb3JfcHJpbWFyaWVzX2Zyb21fbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKysKKysv KioKKysgKiBAcmV0dXJuIHRoZSBuYW1lIGZvciBwcm92aWRlZCBjb2xvciB0cmFuc2ZlciBvciBO VUxMIGlmIHVua25vd24uCisrICovCisrY29uc3QgY2hhciAqYXZfY29sb3JfdHJhbnNmZXJfbmFt ZShlbnVtIEFWQ29sb3JUcmFuc2ZlckNoYXJhY3RlcmlzdGljIHRyYW5zZmVyKTsKKysKKysvKioK KysgKiBAcmV0dXJuIHRoZSBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyB2YWx1ZSBmb3Ig bmFtZSBvciBhbiBBVkVycm9yIGlmIG5vdCBmb3VuZC4KKysgKi8KKytpbnQgYXZfY29sb3JfdHJh bnNmZXJfZnJvbV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworKworKy8qKgorKyAqIEByZXR1cm4g dGhlIG5hbWUgZm9yIHByb3ZpZGVkIGNvbG9yIHNwYWNlIG9yIE5VTEwgaWYgdW5rbm93bi4KKysg Ki8KKytjb25zdCBjaGFyICphdl9jb2xvcl9zcGFjZV9uYW1lKGVudW0gQVZDb2xvclNwYWNlIHNw YWNlKTsKKysKKysvKioKKysgKiBAcmV0dXJuIHRoZSBBVkNvbG9yU3BhY2UgdmFsdWUgZm9yIG5h bWUgb3IgYW4gQVZFcnJvciBpZiBub3QgZm91bmQuCisrICovCisraW50IGF2X2NvbG9yX3NwYWNl X2Zyb21fbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKysKKysvKioKKysgKiBAcmV0dXJuIHRoZSBu YW1lIGZvciBwcm92aWRlZCBjaHJvbWEgbG9jYXRpb24gb3IgTlVMTCBpZiB1bmtub3duLgorKyAq LworK2NvbnN0IGNoYXIgKmF2X2Nocm9tYV9sb2NhdGlvbl9uYW1lKGVudW0gQVZDaHJvbWFMb2Nh dGlvbiBsb2NhdGlvbik7CisrCisrLyoqCisrICogQHJldHVybiB0aGUgQVZDaHJvbWFMb2NhdGlv biB2YWx1ZSBmb3IgbmFtZSBvciBhbiBBVkVycm9yIGlmIG5vdCBmb3VuZC4KKysgKi8KKytpbnQg YXZfY2hyb21hX2xvY2F0aW9uX2Zyb21fbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKysKKysvKioK KysgKiBDb252ZXJ0cyBBVkNocm9tYUxvY2F0aW9uIHRvIHN3c2NhbGUgeC95IGNocm9tYSBwb3Np dGlvbi4KKysgKgorKyAqIFRoZSBwb3NpdGlvbnMgcmVwcmVzZW50IHRoZSBjaHJvbWEgKDAsMCkg cG9zaXRpb24gaW4gYSBjb29yZGluYXRlcyBzeXN0ZW0KKysgKiB3aXRoIGx1bWEgKDAsMCkgcmVw cmVzZW50aW5nIHRoZSBvcmlnaW4gYW5kIGx1bWEoMSwxKSByZXByZXNlbnRpbmcgMjU2LDI1Ngor KyAqCisrICogQHBhcmFtIHhwb3MgIGhvcml6b250YWwgY2hyb21hIHNhbXBsZSBwb3NpdGlvbgor KyAqIEBwYXJhbSB5cG9zICB2ZXJ0aWNhbCAgIGNocm9tYSBzYW1wbGUgcG9zaXRpb24KKysgKi8K KytpbnQgYXZfY2hyb21hX2xvY2F0aW9uX2VudW1fdG9fcG9zKGludCAqeHBvcywgaW50ICp5cG9z LCBlbnVtIEFWQ2hyb21hTG9jYXRpb24gcG9zKTsKKysKKysvKioKKysgKiBDb252ZXJ0cyBzd3Nj YWxlIHgveSBjaHJvbWEgcG9zaXRpb24gdG8gQVZDaHJvbWFMb2NhdGlvbi4KKysgKgorKyAqIFRo ZSBwb3NpdGlvbnMgcmVwcmVzZW50IHRoZSBjaHJvbWEgKDAsMCkgcG9zaXRpb24gaW4gYSBjb29y ZGluYXRlcyBzeXN0ZW0KKysgKiB3aXRoIGx1bWEgKDAsMCkgcmVwcmVzZW50aW5nIHRoZSBvcmln aW4gYW5kIGx1bWEoMSwxKSByZXByZXNlbnRpbmcgMjU2LDI1NgorKyAqCisrICogQHBhcmFtIHhw b3MgIGhvcml6b250YWwgY2hyb21hIHNhbXBsZSBwb3NpdGlvbgorKyAqIEBwYXJhbSB5cG9zICB2 ZXJ0aWNhbCAgIGNocm9tYSBzYW1wbGUgcG9zaXRpb24KKysgKi8KKytlbnVtIEFWQ2hyb21hTG9j YXRpb24gYXZfY2hyb21hX2xvY2F0aW9uX3Bvc190b19lbnVtKGludCB4cG9zLCBpbnQgeXBvcyk7 CisrCisrLyoqCisrICogQHJldHVybiB0aGUgbmFtZSBmb3IgcHJvdmlkZWQgYWxwaGEgbW9kZSBv ciBOVUxMIGlmIHVua25vd24uCisrICovCisrY29uc3QgY2hhciAqYXZfYWxwaGFfbW9kZV9uYW1l KGVudW0gQVZBbHBoYU1vZGUgbW9kZSk7CisrCisrLyoqCisrICogQHJldHVybiB0aGUgQVZBbHBo YU1vZGUgdmFsdWUgZm9yIG5hbWUgb3IgYW4gQVZFcnJvciBpZiBub3QgZm91bmQuCisrICovCisr ZW51bSBBVkFscGhhTW9kZSBhdl9hbHBoYV9tb2RlX2Zyb21fbmFtZShjb25zdCBjaGFyICpuYW1l KTsKKysKKysvKioKKysgKiBSZXR1cm4gdGhlIHBpeGVsIGZvcm1hdCBjb3JyZXNwb25kaW5nIHRv IG5hbWUuCisrICoKKysgKiBJZiB0aGVyZSBpcyBubyBwaXhlbCBmb3JtYXQgd2l0aCBuYW1lIG5h bWUsIHRoZW4gbG9va3MgZm9yIGEKKysgKiBwaXhlbCBmb3JtYXQgd2l0aCB0aGUgbmFtZSBjb3Jy ZXNwb25kaW5nIHRvIHRoZSBuYXRpdmUgZW5kaWFuCisrICogZm9ybWF0IG9mIG5hbWUuCisrICog Rm9yIGV4YW1wbGUgaW4gYSBsaXR0bGUtZW5kaWFuIHN5c3RlbSwgZmlyc3QgbG9va3MgZm9yICJn cmF5MTYiLAorKyAqIHRoZW4gZm9yICJncmF5MTZsZSIuCisrICoKKysgKiBGaW5hbGx5IGlmIG5v IHBpeGVsIGZvcm1hdCBoYXMgYmVlbiBmb3VuZCwgcmV0dXJucyBBVl9QSVhfRk1UX05PTkUuCisr ICovCisrZW51bSBBVlBpeGVsRm9ybWF0IGF2X2dldF9waXhfZm10KGNvbnN0IGNoYXIgKm5hbWUp OworKworKy8qKgorKyAqIFJldHVybiB0aGUgc2hvcnQgbmFtZSBmb3IgYSBwaXhlbCBmb3JtYXQs IE5VTEwgaW4gY2FzZSBwaXhfZm10IGlzCisrICogdW5rbm93bi4KKysgKgorKyAqIEBzZWUgYXZf Z2V0X3BpeF9mbXQoKSwgYXZfZ2V0X3BpeF9mbXRfc3RyaW5nKCkKKysgKi8KKytjb25zdCBjaGFy ICphdl9nZXRfcGl4X2ZtdF9uYW1lKGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10KTsKKysKKysv KioKKysgKiBQcmludCBpbiBidWYgdGhlIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwaXhl bCBmb3JtYXQgd2l0aAorKyAqIG51bWJlciBwaXhfZm10LCBvciBhIGhlYWRlciBpZiBwaXhfZm10 IGlzIG5lZ2F0aXZlLgorKyAqCisrICogQHBhcmFtIGJ1ZiB0aGUgYnVmZmVyIHdoZXJlIHRvIHdy aXRlIHRoZSBzdHJpbmcKKysgKiBAcGFyYW0gYnVmX3NpemUgdGhlIHNpemUgb2YgYnVmCisrICog QHBhcmFtIHBpeF9mbXQgdGhlIG51bWJlciBvZiB0aGUgcGl4ZWwgZm9ybWF0IHRvIHByaW50IHRo ZQorKyAqIGNvcnJlc3BvbmRpbmcgaW5mbyBzdHJpbmcsIG9yIGEgbmVnYXRpdmUgdmFsdWUgdG8g cHJpbnQgdGhlCisrICogY29ycmVzcG9uZGluZyBoZWFkZXIuCisrICovCisrY2hhciAqYXZfZ2V0 X3BpeF9mbXRfc3RyaW5nKGNoYXIgKmJ1ZiwgaW50IGJ1Zl9zaXplLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCk7CisrCisrLyoqCisrICog UmVhZCBhIGxpbmUgZnJvbSBhbiBpbWFnZSwgYW5kIHdyaXRlIHRoZSB2YWx1ZXMgb2YgdGhlCisr ICogcGl4ZWwgZm9ybWF0IGNvbXBvbmVudCBjIHRvIGRzdC4KKysgKgorKyAqIEBwYXJhbSBkYXRh IHRoZSBhcnJheSBjb250YWluaW5nIHRoZSBwb2ludGVycyB0byB0aGUgcGxhbmVzIG9mIHRoZSBp bWFnZQorKyAqIEBwYXJhbSBsaW5lc2l6ZSB0aGUgYXJyYXkgY29udGFpbmluZyB0aGUgbGluZXNp emVzIG9mIHRoZSBpbWFnZQorKyAqIEBwYXJhbSBkZXNjIHRoZSBwaXhlbCBmb3JtYXQgZGVzY3Jp cHRvciBmb3IgdGhlIGltYWdlCisrICogQHBhcmFtIHggdGhlIGhvcml6b250YWwgY29vcmRpbmF0 ZSBvZiB0aGUgZmlyc3QgcGl4ZWwgdG8gcmVhZAorKyAqIEBwYXJhbSB5IHRoZSB2ZXJ0aWNhbCBj b29yZGluYXRlIG9mIHRoZSBmaXJzdCBwaXhlbCB0byByZWFkCisrICogQHBhcmFtIHcgdGhlIHdp ZHRoIG9mIHRoZSBsaW5lIHRvIHJlYWQsIHRoYXQgaXMgdGhlIG51bWJlciBvZgorKyAqIHZhbHVl cyB0byB3cml0ZSB0byBkc3QKKysgKiBAcGFyYW0gcmVhZF9wYWxfY29tcG9uZW50IGlmIG5vdCB6 ZXJvIGFuZCB0aGUgZm9ybWF0IGlzIGEgcGFsZXR0ZWQKKysgKiBmb3JtYXQgd3JpdGVzIHRoZSB2 YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcGFsZXR0ZQorKyAqIGNvbXBvbmVudCBjIGluIGRh dGFbMV0gdG8gZHN0LCByYXRoZXIgdGhhbiB0aGUgcGFsZXR0ZSBpbmRleGVzIGluCisrICogZGF0 YVswXS4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiB0aGUgZm9ybWF0IGlzIG5vdCBwYWxl dHRlZC4KKysgKiBAcGFyYW0gZHN0X2VsZW1lbnRfc2l6ZSBzaXplIG9mIGVsZW1lbnRzIGluIGRz dCBhcnJheSAoMiBvciA0IGJ5dGUpCisrICovCisrdm9pZCBhdl9yZWFkX2ltYWdlX2xpbmUyKHZv aWQgKmRzdCwgY29uc3QgdWludDhfdCAqZGF0YVs0XSwKKysgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBpbnQgbGluZXNpemVbNF0sIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYywK KysgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCBjLCBpbnQgdywgaW50 IHJlYWRfcGFsX2NvbXBvbmVudCwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0X2Vs ZW1lbnRfc2l6ZSk7CisrCisrdm9pZCBhdl9yZWFkX2ltYWdlX2xpbmUodWludDE2X3QgKmRzdCwg Y29uc3QgdWludDhfdCAqZGF0YVs0XSwKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBp bnQgbGluZXNpemVbNF0sIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYywKKysgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCBjLCBpbnQgdywgaW50IHJlYWRfcGFs X2NvbXBvbmVudCk7CisrCisrLyoqCisrICogV3JpdGUgdGhlIHZhbHVlcyBmcm9tIHNyYyB0byB0 aGUgcGl4ZWwgZm9ybWF0IGNvbXBvbmVudCBjIG9mIGFuCisrICogaW1hZ2UgbGluZS4KKysgKgor KyAqIEBwYXJhbSBzcmMgYXJyYXkgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIHdyaXRlCisrICog QHBhcmFtIGRhdGEgdGhlIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBvaW50ZXJzIHRvIHRoZSBwbGFu ZXMgb2YgdGhlCisrICogaW1hZ2UgdG8gd3JpdGUgaW50by4gSXQgaXMgc3VwcG9zZWQgdG8gYmUg emVyb2VkLgorKyAqIEBwYXJhbSBsaW5lc2l6ZSB0aGUgYXJyYXkgY29udGFpbmluZyB0aGUgbGlu ZXNpemVzIG9mIHRoZSBpbWFnZQorKyAqIEBwYXJhbSBkZXNjIHRoZSBwaXhlbCBmb3JtYXQgZGVz Y3JpcHRvciBmb3IgdGhlIGltYWdlCisrICogQHBhcmFtIHggdGhlIGhvcml6b250YWwgY29vcmRp bmF0ZSBvZiB0aGUgZmlyc3QgcGl4ZWwgdG8gd3JpdGUKKysgKiBAcGFyYW0geSB0aGUgdmVydGlj YWwgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgcGl4ZWwgdG8gd3JpdGUKKysgKiBAcGFyYW0gdyB0 aGUgd2lkdGggb2YgdGhlIGxpbmUgdG8gd3JpdGUsIHRoYXQgaXMgdGhlIG51bWJlciBvZgorKyAq IHZhbHVlcyB0byB3cml0ZSB0byB0aGUgaW1hZ2UgbGluZQorKyAqIEBwYXJhbSBzcmNfZWxlbWVu dF9zaXplIHNpemUgb2YgZWxlbWVudHMgaW4gc3JjIGFycmF5ICgyIG9yIDQgYnl0ZSkKKysgKi8K Kyt2b2lkIGF2X3dyaXRlX2ltYWdlX2xpbmUyKGNvbnN0IHZvaWQgKnNyYywgdWludDhfdCAqZGF0 YVs0XSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxpbmVzaXplWzRdLCBj b25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRlc2MsCisrICAgICAgICAgICAgICAgICAgICAgICAg IGludCB4LCBpbnQgeSwgaW50IGMsIGludCB3LCBpbnQgc3JjX2VsZW1lbnRfc2l6ZSk7CisrCisr dm9pZCBhdl93cml0ZV9pbWFnZV9saW5lKGNvbnN0IHVpbnQxNl90ICpzcmMsIHVpbnQ4X3QgKmRh dGFbNF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsaW5lc2l6ZVs0XSwg Y29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpkZXNjLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgeCwgaW50IHksIGludCBjLCBpbnQgdyk7CisrCisrLyoqCisrICogVXRpbGl0eSBmdW5j dGlvbiB0byBzd2FwIHRoZSBlbmRpYW5uZXNzIG9mIGEgcGl4ZWwgZm9ybWF0LgorKyAqCisrICog QHBhcmFtW2luXSAgcGl4X2ZtdCB0aGUgcGl4ZWwgZm9ybWF0CisrICoKKysgKiBAcmV0dXJuIHBp eGVsIGZvcm1hdCB3aXRoIHN3YXBwZWQgZW5kaWFubmVzcyBpZiBpdCBleGlzdHMsCisrICogb3Ro ZXJ3aXNlIEFWX1BJWF9GTVRfTk9ORQorKyAqLworK2VudW0gQVZQaXhlbEZvcm1hdCBhdl9waXhf Zm10X3N3YXBfZW5kaWFubmVzcyhlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCk7CisrCisrI2Rl ZmluZSBGRl9MT1NTX1JFU09MVVRJT04gICAgICAgIDB4MDAwMSAvKio8IGxvc3MgZHVlIHRvIHJl c29sdXRpb24gY2hhbmdlICovCisrI2RlZmluZSBGRl9MT1NTX0RFUFRIICAgICAgICAgICAgIDB4 MDAwMiAvKio8IGxvc3MgZHVlIHRvIGNvbG9yIGRlcHRoIGNoYW5nZSAqLworKyNkZWZpbmUgRkZf TE9TU19DT0xPUlNQQUNFICAgICAgICAweDAwMDQgLyoqPCBsb3NzIGR1ZSB0byBjb2xvciBzcGFj ZSBjb252ZXJzaW9uICovCisrI2RlZmluZSBGRl9MT1NTX0FMUEhBICAgICAgICAgICAgIDB4MDAw OCAvKio8IGxvc3Mgb2YgYWxwaGEgYml0cyAqLworKyNkZWZpbmUgRkZfTE9TU19DT0xPUlFVQU5U ICAgICAgICAweDAwMTAgLyoqPCBsb3NzIGR1ZSB0byBjb2xvciBxdWFudGl6YXRpb24gKi8KKysj ZGVmaW5lIEZGX0xPU1NfQ0hST01BICAgICAgICAgICAgMHgwMDIwIC8qKjwgbG9zcyBvZiBjaHJv bWEgKGUuZy4gUkdCIHRvIGdyYXkgY29udmVyc2lvbikgKi8KKysjZGVmaW5lIEZGX0xPU1NfRVhD RVNTX1JFU09MVVRJT04gMHgwMDQwIC8qKjwgbG9zcyBkdWUgdG8gdW5uZWVkZWQgZXh0cmEgcmVz b2x1dGlvbiAqLworKyNkZWZpbmUgRkZfTE9TU19FWENFU1NfREVQVEggICAgICAweDAwODAgLyoq PCBsb3NzIGR1ZSB0byB1bm5lZWRlZCBleHRyYSBjb2xvciBkZXB0aCAqLworKworKworKy8qKgor KyAqIENvbXB1dGUgd2hhdCBraW5kIG9mIGxvc3NlcyB3aWxsIG9jY3VyIHdoZW4gY29udmVydGlu ZyBmcm9tIG9uZSBzcGVjaWZpYworKyAqIHBpeGVsIGZvcm1hdCB0byBhbm90aGVyLgorKyAqIFdo ZW4gY29udmVydGluZyBmcm9tIG9uZSBwaXhlbCBmb3JtYXQgdG8gYW5vdGhlciwgaW5mb3JtYXRp b24gbG9zcyBtYXkgb2NjdXIuCisrICogRm9yIGV4YW1wbGUsIHdoZW4gY29udmVydGluZyBmcm9t IFJHQjI0IHRvIEdSQVksIHRoZSBjb2xvciBpbmZvcm1hdGlvbiB3aWxsCisrICogYmUgbG9zdC4g U2ltaWxhcmx5LCBvdGhlciBsb3NzZXMgb2NjdXIgd2hlbiBjb252ZXJ0aW5nIGZyb20gc29tZSBm b3JtYXRzIHRvCisrICogb3RoZXIgZm9ybWF0cy4gVGhlc2UgbG9zc2VzIGNhbiBpbnZvbHZlIGxv c3Mgb2YgY2hyb21hLCBidXQgYWxzbyBsb3NzIG9mCisrICogcmVzb2x1dGlvbiwgbG9zcyBvZiBj b2xvciBkZXB0aCwgbG9zcyBkdWUgdG8gdGhlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24sIGxvc3MK KysgKiBvZiB0aGUgYWxwaGEgYml0cyBvciBsb3NzIGR1ZSB0byBjb2xvciBxdWFudGl6YXRpb24u CisrICogYXZfZ2V0X2ZpeF9mbXRfbG9zcygpIGluZm9ybXMgeW91IGFib3V0IHRoZSB2YXJpb3Vz IHR5cGVzIG9mIGxvc3NlcworKyAqIHdoaWNoIHdpbGwgb2NjdXIgd2hlbiBjb252ZXJ0aW5nIGZy b20gb25lIHBpeGVsIGZvcm1hdCB0byBhbm90aGVyLgorKyAqCisrICogQHBhcmFtW2luXSBkc3Rf cGl4X2ZtdCBkZXN0aW5hdGlvbiBwaXhlbCBmb3JtYXQKKysgKiBAcGFyYW1baW5dIHNyY19waXhf Zm10IHNvdXJjZSBwaXhlbCBmb3JtYXQKKysgKiBAcGFyYW1baW5dIGhhc19hbHBoYSBXaGV0aGVy IHRoZSBzb3VyY2UgcGl4ZWwgZm9ybWF0IGFscGhhIGNoYW5uZWwgaXMgdXNlZC4KKysgKiBAcmV0 dXJuIENvbWJpbmF0aW9uIG9mIGZsYWdzIGluZm9ybWluZyB5b3Ugd2hhdCBraW5kIG9mIGxvc3Nl cyB3aWxsIG9jY3VyCisrICogKG1heGltdW0gbG9zcyBmb3IgYW4gaW52YWxpZCBkc3RfcGl4X2Zt dCkuCisrICovCisraW50IGF2X2dldF9waXhfZm10X2xvc3MoZW51bSBBVlBpeGVsRm9ybWF0IGRz dF9waXhfZm10LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZQaXhlbEZvcm1hdCBz cmNfcGl4X2ZtdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGFzX2FscGhhKTsKKysK KysvKioKKysgKiBDb21wdXRlIHdoYXQga2luZCBvZiBsb3NzZXMgd2lsbCBvY2N1ciB3aGVuIGNv bnZlcnRpbmcgZnJvbSBvbmUgc3BlY2lmaWMKKysgKiBwaXhlbCBmb3JtYXQgdG8gYW5vdGhlci4K KysgKiBXaGVuIGNvbnZlcnRpbmcgZnJvbSBvbmUgcGl4ZWwgZm9ybWF0IHRvIGFub3RoZXIsIGlu Zm9ybWF0aW9uIGxvc3MgbWF5IG9jY3VyLgorKyAqIEZvciBleGFtcGxlLCB3aGVuIGNvbnZlcnRp bmcgZnJvbSBSR0IyNCB0byBHUkFZLCB0aGUgY29sb3IgaW5mb3JtYXRpb24gd2lsbAorKyAqIGJl IGxvc3QuIFNpbWlsYXJseSwgb3RoZXIgbG9zc2VzIG9jY3VyIHdoZW4gY29udmVydGluZyBmcm9t IHNvbWUgZm9ybWF0cyB0bworKyAqIG90aGVyIGZvcm1hdHMuIFRoZXNlIGxvc3NlcyBjYW4gaW52 b2x2ZSBsb3NzIG9mIGNocm9tYSwgYnV0IGFsc28gbG9zcyBvZgorKyAqIHJlc29sdXRpb24sIGxv c3Mgb2YgY29sb3IgZGVwdGgsIGxvc3MgZHVlIHRvIHRoZSBjb2xvciBzcGFjZSBjb252ZXJzaW9u LCBsb3NzCisrICogb2YgdGhlIGFscGhhIGJpdHMgb3IgbG9zcyBkdWUgdG8gY29sb3IgcXVhbnRp emF0aW9uLgorKyAqIGF2X2dldF9maXhfZm10X2xvc3MoKSBpbmZvcm1zIHlvdSBhYm91dCB0aGUg dmFyaW91cyB0eXBlcyBvZiBsb3NzZXMKKysgKiB3aGljaCB3aWxsIG9jY3VyIHdoZW4gY29udmVy dGluZyBmcm9tIG9uZSBwaXhlbCBmb3JtYXQgdG8gYW5vdGhlci4KKysgKgorKyAqIEBwYXJhbVtp bl0gZHN0X3BpeF9mbXQgZGVzdGluYXRpb24gcGl4ZWwgZm9ybWF0CisrICogQHBhcmFtW2luXSBz cmNfcGl4X2ZtdCBzb3VyY2UgcGl4ZWwgZm9ybWF0CisrICogQHBhcmFtW2luXSBoYXNfYWxwaGEg V2hldGhlciB0aGUgc291cmNlIHBpeGVsIGZvcm1hdCBhbHBoYSBjaGFubmVsIGlzIHVzZWQuCisr ICogQHJldHVybiBDb21iaW5hdGlvbiBvZiBmbGFncyBpbmZvcm1pbmcgeW91IHdoYXQga2luZCBv ZiBsb3NzZXMgd2lsbCBvY2N1cgorKyAqIChtYXhpbXVtIGxvc3MgZm9yIGFuIGludmFsaWQgZHN0 X3BpeF9mbXQpLgorKyAqLworK2VudW0gQVZQaXhlbEZvcm1hdCBhdl9maW5kX2Jlc3RfcGl4X2Zt dF9vZl8yKGVudW0gQVZQaXhlbEZvcm1hdCBkc3RfcGl4X2ZtdDEsIGVudW0gQVZQaXhlbEZvcm1h dCBkc3RfcGl4X2ZtdDIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW51bSBBVlBpeGVsRm9ybWF0IHNyY19waXhfZm10LCBpbnQgaGFzX2FscGhhLCBpbnQg Kmxvc3NfcHRyKTsKKysKKysjZW5kaWYgLyogQVZVVElMX1BJWERFU0NfSCAqLworZGlmZiAtdXAg TXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkv bGliYXZ1dGlsL3BpeGZtdC5oLmZmbXBlZzkgTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsv bWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL3BpeGZtdC5oCistLS0gTXVzZVNj b3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1 dGlsL3BpeGZtdC5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42Nzg4NTgzMzEgKzAyMDAK KysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBl Zy92OS9saWJhdnV0aWwvcGl4Zm10LmgJMjAyNi0wOS0wNyAxMjoyMzo0Ny42Nzg1NzA2MjMgKzAy MDAKK0BAIC0wLDAgKzEsODE3IEBACisrLyoKKysgKiBjb3B5cmlnaHQgKGMpIDIwMDYgTWljaGFl bCBOaWVkZXJtYXllciA8bWljaGFlbG5pQGdteC5hdD4KKysgKgorKyAqIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEZGbXBlZy4KKysgKgorKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICogdmVyc2lvbiAyLjEg b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisr ICoKKysgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisrICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyAqLworKworKyNpZm5kZWYgQVZVVElMX1BJWEZN VF9ICisrI2RlZmluZSBBVlVUSUxfUElYRk1UX0gKKysKKysvKioKKysgKiBAZmlsZQorKyAqIHBp eGVsIGZvcm1hdCBkZWZpbml0aW9ucworKyAqLworKworKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZj b25maWcuaCIKKysjaW5jbHVkZSAidmVyc2lvbi5oIgorKworKyNkZWZpbmUgQVZQQUxFVFRFX1NJ WkUgMTAyNAorKyNkZWZpbmUgQVZQQUxFVFRFX0NPVU5UIDI1NgorKworKy8qKgorKyAqIE1heGlt dW0gbnVtYmVyIG9mIHBsYW5lcyBpbiBhbnkgcGl4ZWwgZm9ybWF0LgorKyAqIFRoaXMgc2hvdWxk IGJlIHVzZWQgd2hlbiBhIG1heGltdW0gaXMgbmVlZGVkLCBidXQgY29kZSBzaG91bGQgbm90Cisr ICogYmUgd3JpdHRlbiB0byByZXF1aXJlIGEgbWF4aW11bSBmb3Igbm8gZ29vZCByZWFzb24uCisr ICovCisrI2RlZmluZSBBVl9WSURFT19NQVhfUExBTkVTIDQKKysKKysvKioKKysgKiBQaXhlbCBm b3JtYXQuCisrICoKKysgKiBAbm90ZQorKyAqIEFWX1BJWF9GTVRfUkdCMzIgaXMgaGFuZGxlZCBp biBhbiBlbmRpYW4tc3BlY2lmaWMgbWFubmVyLiBBbiBSR0JBCisrICogY29sb3IgaXMgcHV0IHRv Z2V0aGVyIGFzOgorKyAqICAoQSA8PCAyNCkgfCAoUiA8PCAxNikgfCAoRyA8PCA4KSB8IEIKKysg KiBUaGlzIGlzIHN0b3JlZCBhcyBCR1JBIG9uIGxpdHRsZS1lbmRpYW4gQ1BVIGFyY2hpdGVjdHVy ZXMgYW5kIEFSR0Igb24KKysgKiBiaWctZW5kaWFuIENQVXMuCisrICoKKysgKiBAbm90ZQorKyAq IElmIHRoZSByZXNvbHV0aW9uIGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBjaHJvbWEgc3Vic2Ft cGxpbmcgZmFjdG9yCisrICogdGhlbiB0aGUgY2hyb21hIHBsYW5lIHJlc29sdXRpb24gbXVzdCBi ZSByb3VuZGVkIHVwLgorKyAqCisrICogQHBhcgorKyAqIFdoZW4gdGhlIHBpeGVsIGZvcm1hdCBp cyBwYWxldHRpemVkIFJHQjMyIChBVl9QSVhfRk1UX1BBTDgpLCB0aGUgcGFsZXR0aXplZAorKyAq IGltYWdlIGRhdGEgaXMgc3RvcmVkIGluIEFWRnJhbWUuZGF0YVswXS4gVGhlIHBhbGV0dGUgaXMg dHJhbnNwb3J0ZWQgaW4KKysgKiBBVkZyYW1lLmRhdGFbMV0sIGlzIDEwMjQgYnl0ZXMgbG9uZyAo MjU2IDQtYnl0ZSBlbnRyaWVzKSBhbmQgaXMKKysgKiBmb3JtYXR0ZWQgdGhlIHNhbWUgYXMgaW4g QVZfUElYX0ZNVF9SR0IzMiBkZXNjcmliZWQgYWJvdmUgKGkuZS4sIGl0IGlzCisrICogYWxzbyBl bmRpYW4tc3BlY2lmaWMpLiBOb3RlIGFsc28gdGhhdCB0aGUgaW5kaXZpZHVhbCBSR0IzMiBwYWxl dHRlCisrICogY29tcG9uZW50cyBzdG9yZWQgaW4gQVZGcmFtZS5kYXRhWzFdIHNob3VsZCBiZSBp biB0aGUgcmFuZ2UgMC4uMjU1LgorKyAqIFRoaXMgaXMgaW1wb3J0YW50IGFzIG1hbnkgY3VzdG9t IFBBTDggdmlkZW8gY29kZWNzIHRoYXQgd2VyZSBkZXNpZ25lZAorKyAqIHRvIHJ1biBvbiB0aGUg SUJNIFZHQSBncmFwaGljcyBhZGFwdGVyIHVzZSA2LWJpdCBwYWxldHRlIGNvbXBvbmVudHMuCisr ICoKKysgKiBAcGFyCisrICogRm9yIGFsbCB0aGUgOCBiaXRzIHBlciBwaXhlbCBmb3JtYXRzLCBh biBSR0IzMiBwYWxldHRlIGlzIGluIGRhdGFbMV0gbGlrZQorKyAqIGZvciBwYWw4LiBUaGlzIHBh bGV0dGUgaXMgZmlsbGVkIGluIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGZ1bmN0aW9uCisrICogYWxs b2NhdGluZyB0aGUgcGljdHVyZS4KKysgKi8KKytlbnVtIEFWUGl4ZWxGb3JtYXQgeworKyAgICBB Vl9QSVhfRk1UX05PTkUgPSAtMSwKKysgICAgQVZfUElYX0ZNVF9ZVVY0MjBQLCAgIC8vLzwgcGxh bmFyIFlVViA0OjI6MCwgMTJicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDIgWSBzYW1wbGVz KQorKyAgICBBVl9QSVhfRk1UX1lVWVY0MjIsICAgLy8vPCBwYWNrZWQgWVVWIDQ6MjoyLCAxNmJw cCwgWTAgQ2IgWTEgQ3IKKysgICAgQVZfUElYX0ZNVF9SR0IyNCwgICAgIC8vLzwgcGFja2VkIFJH QiA4Ojg6OCwgMjRicHAsIFJHQlJHQi4uLgorKyAgICBBVl9QSVhfRk1UX0JHUjI0LCAgICAgLy8v PCBwYWNrZWQgUkdCIDg6ODo4LCAyNGJwcCwgQkdSQkdSLi4uCisrICAgIEFWX1BJWF9GTVRfWVVW NDIyUCwgICAvLy88IHBsYW5hciBZVVYgNDoyOjIsIDE2YnBwLCAoMSBDciAmIENiIHNhbXBsZSBw ZXIgMngxIFkgc2FtcGxlcykKKysgICAgQVZfUElYX0ZNVF9ZVVY0NDRQLCAgIC8vLzwgcGxhbmFy IFlVViA0OjQ6NCwgMjRicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAxeDEgWSBzYW1wbGVzKQor KyAgICBBVl9QSVhfRk1UX1lVVjQxMFAsICAgLy8vPCBwbGFuYXIgWVVWIDQ6MTowLCAgOWJwcCwg KDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDR4NCBZIHNhbXBsZXMpCisrICAgIEFWX1BJWF9GTVRfWVVW NDExUCwgICAvLy88IHBsYW5hciBZVVYgNDoxOjEsIDEyYnBwLCAoMSBDciAmIENiIHNhbXBsZSBw ZXIgNHgxIFkgc2FtcGxlcykKKysgICAgQVZfUElYX0ZNVF9HUkFZOCwgICAgIC8vLzwgICAgICAg IFkgICAgICAgICwgIDhicHAKKysgICAgQVZfUElYX0ZNVF9NT05PV0hJVEUsIC8vLzwgICAgICAg IFkgICAgICAgICwgIDFicHAsIDAgaXMgd2hpdGUsIDEgaXMgYmxhY2ssIGluIGVhY2ggYnl0ZSBw aXhlbHMgYXJlIG9yZGVyZWQgZnJvbSB0aGUgbXNiIHRvIHRoZSBsc2IKKysgICAgQVZfUElYX0ZN VF9NT05PQkxBQ0ssIC8vLzwgICAgICAgIFkgICAgICAgICwgIDFicHAsIDAgaXMgYmxhY2ssIDEg aXMgd2hpdGUsIGluIGVhY2ggYnl0ZSBwaXhlbHMgYXJlIG9yZGVyZWQgZnJvbSB0aGUgbXNiIHRv IHRoZSBsc2IKKysgICAgQVZfUElYX0ZNVF9QQUw4LCAgICAgIC8vLzwgOCBiaXRzIHdpdGggQVZf UElYX0ZNVF9SR0IzMiBwYWxldHRlCisrICAgIEFWX1BJWF9GTVRfWVVWSjQyMFAsICAvLy88IHBs YW5hciBZVVYgNDoyOjAsIDEyYnBwLCBmdWxsIHNjYWxlIChKUEVHKSwgZGVwcmVjYXRlZCBpbiBm YXZvciBvZiBBVl9QSVhfRk1UX1lVVjQyMFAgYW5kIHNldHRpbmcgY29sb3JfcmFuZ2UKKysgICAg QVZfUElYX0ZNVF9ZVVZKNDIyUCwgIC8vLzwgcGxhbmFyIFlVViA0OjI6MiwgMTZicHAsIGZ1bGwg c2NhbGUgKEpQRUcpLCBkZXByZWNhdGVkIGluIGZhdm9yIG9mIEFWX1BJWF9GTVRfWVVWNDIyUCBh bmQgc2V0dGluZyBjb2xvcl9yYW5nZQorKyAgICBBVl9QSVhfRk1UX1lVVko0NDRQLCAgLy8vPCBw bGFuYXIgWVVWIDQ6NDo0LCAyNGJwcCwgZnVsbCBzY2FsZSAoSlBFRyksIGRlcHJlY2F0ZWQgaW4g ZmF2b3Igb2YgQVZfUElYX0ZNVF9ZVVY0NDRQIGFuZCBzZXR0aW5nIGNvbG9yX3JhbmdlCisrICAg IEFWX1BJWF9GTVRfVVlWWTQyMiwgICAvLy88IHBhY2tlZCBZVVYgNDoyOjIsIDE2YnBwLCBDYiBZ MCBDciBZMQorKyAgICBBVl9QSVhfRk1UX1VZWVZZWTQxMSwgLy8vPCBwYWNrZWQgWVVWIDQ6MTox LCAxMmJwcCwgQ2IgWTAgWTEgQ3IgWTIgWTMKKysgICAgQVZfUElYX0ZNVF9CR1I4LCAgICAgIC8v LzwgcGFja2VkIFJHQiAzOjM6MiwgIDhicHAsIChtc2IpMkIgM0cgM1IobHNiKQorKyAgICBBVl9Q SVhfRk1UX0JHUjQsICAgICAgLy8vPCBwYWNrZWQgUkdCIDE6MjoxIGJpdHN0cmVhbSwgIDRicHAs IChtc2IpMUIgMkcgMVIobHNiKSwgYSBieXRlIGNvbnRhaW5zIHR3byBwaXhlbHMsIHRoZSBmaXJz dCBwaXhlbCBpbiB0aGUgYnl0ZSBpcyB0aGUgb25lIGNvbXBvc2VkIGJ5IHRoZSA0IG1zYiBiaXRz CisrICAgIEFWX1BJWF9GTVRfQkdSNF9CWVRFLCAvLy88IHBhY2tlZCBSR0IgMToyOjEsICA4YnBw LCAobXNiKTFCIDJHIDFSKGxzYikKKysgICAgQVZfUElYX0ZNVF9SR0I4LCAgICAgIC8vLzwgcGFj a2VkIFJHQiAzOjM6MiwgIDhicHAsIChtc2IpM1IgM0cgMkIobHNiKQorKyAgICBBVl9QSVhfRk1U X1JHQjQsICAgICAgLy8vPCBwYWNrZWQgUkdCIDE6MjoxIGJpdHN0cmVhbSwgIDRicHAsIChtc2Ip MVIgMkcgMUIobHNiKSwgYSBieXRlIGNvbnRhaW5zIHR3byBwaXhlbHMsIHRoZSBmaXJzdCBwaXhl bCBpbiB0aGUgYnl0ZSBpcyB0aGUgb25lIGNvbXBvc2VkIGJ5IHRoZSA0IG1zYiBiaXRzCisrICAg IEFWX1BJWF9GTVRfUkdCNF9CWVRFLCAvLy88IHBhY2tlZCBSR0IgMToyOjEsICA4YnBwLCAobXNi KTFSIDJHIDFCKGxzYikKKysgICAgQVZfUElYX0ZNVF9OVjEyLCAgICAgIC8vLzwgcGxhbmFyIFlV ViA0OjI6MCwgMTJicHAsIDEgcGxhbmUgZm9yIFkgYW5kIDEgcGxhbmUgZm9yIHRoZSBVViBjb21w b25lbnRzLCB3aGljaCBhcmUgaW50ZXJsZWF2ZWQgKGZpcnN0IGJ5dGUgVSBhbmQgdGhlIGZvbGxv d2luZyBieXRlIFYpCisrICAgIEFWX1BJWF9GTVRfTlYyMSwgICAgICAvLy88IGFzIGFib3ZlLCBi dXQgVSBhbmQgViBieXRlcyBhcmUgc3dhcHBlZAorKworKyAgICBBVl9QSVhfRk1UX0FSR0IsICAg ICAgLy8vPCBwYWNrZWQgQVJHQiA4Ojg6ODo4LCAzMmJwcCwgQVJHQkFSR0IuLi4KKysgICAgQVZf UElYX0ZNVF9SR0JBLCAgICAgIC8vLzwgcGFja2VkIFJHQkEgODo4Ojg6OCwgMzJicHAsIFJHQkFS R0JBLi4uCisrICAgIEFWX1BJWF9GTVRfQUJHUiwgICAgICAvLy88IHBhY2tlZCBBQkdSIDg6ODo4 OjgsIDMyYnBwLCBBQkdSQUJHUi4uLgorKyAgICBBVl9QSVhfRk1UX0JHUkEsICAgICAgLy8vPCBw YWNrZWQgQkdSQSA4Ojg6ODo4LCAzMmJwcCwgQkdSQUJHUkEuLi4KKysKKysgICAgQVZfUElYX0ZN VF9HUkFZMTZCRSwgIC8vLzwgICAgICAgIFkgICAgICAgICwgMTZicHAsIGJpZy1lbmRpYW4KKysg ICAgQVZfUElYX0ZNVF9HUkFZMTZMRSwgIC8vLzwgICAgICAgIFkgICAgICAgICwgMTZicHAsIGxp dHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVY0NDBQLCAgIC8vLzwgcGxhbmFyIFlVViA0 OjQ6MCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMXgyIFkgc2FtcGxlcykKKysgICAgQVZfUElYX0ZN VF9ZVVZKNDQwUCwgIC8vLzwgcGxhbmFyIFlVViA0OjQ6MCBmdWxsIHNjYWxlIChKUEVHKSwgZGVw cmVjYXRlZCBpbiBmYXZvciBvZiBBVl9QSVhfRk1UX1lVVjQ0MFAgYW5kIHNldHRpbmcgY29sb3Jf cmFuZ2UKKysgICAgQVZfUElYX0ZNVF9ZVVZBNDIwUCwgIC8vLzwgcGxhbmFyIFlVViA0OjI6MCwg MjBicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDIgWSAmIEEgc2FtcGxlcykKKysgICAgQVZf UElYX0ZNVF9SR0I0OEJFLCAgIC8vLzwgcGFja2VkIFJHQiAxNjoxNjoxNiwgNDhicHAsIDE2Uiwg MTZHLCAxNkIsIHRoZSAyLWJ5dGUgdmFsdWUgZm9yIGVhY2ggUi9HL0IgY29tcG9uZW50IGlzIHN0 b3JlZCBhcyBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfUkdCNDhMRSwgICAvLy88IHBhY2tl ZCBSR0IgMTY6MTY6MTYsIDQ4YnBwLCAxNlIsIDE2RywgMTZCLCB0aGUgMi1ieXRlIHZhbHVlIGZv ciBlYWNoIFIvRy9CIGNvbXBvbmVudCBpcyBzdG9yZWQgYXMgbGl0dGxlLWVuZGlhbgorKworKyAg ICBBVl9QSVhfRk1UX1JHQjU2NUJFLCAgLy8vPCBwYWNrZWQgUkdCIDU6Njo1LCAxNmJwcCwgKG1z YikgICA1UiA2RyA1Qihsc2IpLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfUkdCNTY1TEUs ICAvLy88IHBhY2tlZCBSR0IgNTo2OjUsIDE2YnBwLCAobXNiKSAgIDVSIDZHIDVCKGxzYiksIGxp dHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9SR0I1NTVCRSwgIC8vLzwgcGFja2VkIFJHQiA1 OjU6NSwgMTZicHAsIChtc2IpMVggNVIgNUcgNUIobHNiKSwgYmlnLWVuZGlhbiAgICwgWD11bnVz ZWQvdW5kZWZpbmVkCisrICAgIEFWX1BJWF9GTVRfUkdCNTU1TEUsICAvLy88IHBhY2tlZCBSR0Ig NTo1OjUsIDE2YnBwLCAobXNiKTFYIDVSIDVHIDVCKGxzYiksIGxpdHRsZS1lbmRpYW4sIFg9dW51 c2VkL3VuZGVmaW5lZAorKworKyAgICBBVl9QSVhfRk1UX0JHUjU2NUJFLCAgLy8vPCBwYWNrZWQg QkdSIDU6Njo1LCAxNmJwcCwgKG1zYikgICA1QiA2RyA1Uihsc2IpLCBiaWctZW5kaWFuCisrICAg IEFWX1BJWF9GTVRfQkdSNTY1TEUsICAvLy88IHBhY2tlZCBCR1IgNTo2OjUsIDE2YnBwLCAobXNi KSAgIDVCIDZHIDVSKGxzYiksIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9CR1I1NTVC RSwgIC8vLzwgcGFja2VkIEJHUiA1OjU6NSwgMTZicHAsIChtc2IpMVggNUIgNUcgNVIobHNiKSwg YmlnLWVuZGlhbiAgICwgWD11bnVzZWQvdW5kZWZpbmVkCisrICAgIEFWX1BJWF9GTVRfQkdSNTU1 TEUsICAvLy88IHBhY2tlZCBCR1IgNTo1OjUsIDE2YnBwLCAobXNiKTFYIDVCIDVHIDVSKGxzYiks IGxpdHRsZS1lbmRpYW4sIFg9dW51c2VkL3VuZGVmaW5lZAorKworKyAgICAvKioKKysgICAgICog IEhhcmR3YXJlIGFjY2VsZXJhdGlvbiB0aHJvdWdoIFZBLUFQSSwgZGF0YVszXSBjb250YWlucyBh CisrICAgICAqICBWQVN1cmZhY2VJRC4KKysgICAgICovCisrICAgIEFWX1BJWF9GTVRfVkFBUEks CisrCisrICAgIEFWX1BJWF9GTVRfWVVWNDIwUDE2TEUsICAvLy88IHBsYW5hciBZVVYgNDoyOjAs IDI0YnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMngyIFkgc2FtcGxlcyksIGxpdHRsZS1lbmRp YW4KKysgICAgQVZfUElYX0ZNVF9ZVVY0MjBQMTZCRSwgIC8vLzwgcGxhbmFyIFlVViA0OjI6MCwg MjRicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDIgWSBzYW1wbGVzKSwgYmlnLWVuZGlhbgor KyAgICBBVl9QSVhfRk1UX1lVVjQyMlAxNkxFLCAgLy8vPCBwbGFuYXIgWVVWIDQ6MjoyLCAzMmJw cCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MSBZIHNhbXBsZXMpLCBsaXR0bGUtZW5kaWFuCisr ICAgIEFWX1BJWF9GTVRfWVVWNDIyUDE2QkUsICAvLy88IHBsYW5hciBZVVYgNDoyOjIsIDMyYnBw LCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMngxIFkgc2FtcGxlcyksIGJpZy1lbmRpYW4KKysgICAg QVZfUElYX0ZNVF9ZVVY0NDRQMTZMRSwgIC8vLzwgcGxhbmFyIFlVViA0OjQ6NCwgNDhicHAsICgx IENyICYgQ2Igc2FtcGxlIHBlciAxeDEgWSBzYW1wbGVzKSwgbGl0dGxlLWVuZGlhbgorKyAgICBB Vl9QSVhfRk1UX1lVVjQ0NFAxNkJFLCAgLy8vPCBwbGFuYXIgWVVWIDQ6NDo0LCA0OGJwcCwgKDEg Q3IgJiBDYiBzYW1wbGUgcGVyIDF4MSBZIHNhbXBsZXMpLCBiaWctZW5kaWFuCisrICAgIEFWX1BJ WF9GTVRfRFhWQTJfVkxELCAgICAvLy88IEhXIGRlY29kaW5nIHRocm91Z2ggRFhWQTIsIFBpY3R1 cmUuZGF0YVszXSBjb250YWlucyBhIExQRElSRUNUM0RTVVJGQUNFOSBwb2ludGVyCisrCisrICAg IEFWX1BJWF9GTVRfUkdCNDQ0TEUsICAvLy88IHBhY2tlZCBSR0IgNDo0OjQsIDE2YnBwLCAobXNi KTRYIDRSIDRHIDRCKGxzYiksIGxpdHRsZS1lbmRpYW4sIFg9dW51c2VkL3VuZGVmaW5lZAorKyAg ICBBVl9QSVhfRk1UX1JHQjQ0NEJFLCAgLy8vPCBwYWNrZWQgUkdCIDQ6NDo0LCAxNmJwcCwgKG1z Yik0WCA0UiA0RyA0Qihsc2IpLCBiaWctZW5kaWFuLCAgICBYPXVudXNlZC91bmRlZmluZWQKKysg ICAgQVZfUElYX0ZNVF9CR1I0NDRMRSwgIC8vLzwgcGFja2VkIEJHUiA0OjQ6NCwgMTZicHAsICht c2IpNFggNEIgNEcgNFIobHNiKSwgbGl0dGxlLWVuZGlhbiwgWD11bnVzZWQvdW5kZWZpbmVkCisr ICAgIEFWX1BJWF9GTVRfQkdSNDQ0QkUsICAvLy88IHBhY2tlZCBCR1IgNDo0OjQsIDE2YnBwLCAo bXNiKTRYIDRCIDRHIDRSKGxzYiksIGJpZy1lbmRpYW4sICAgIFg9dW51c2VkL3VuZGVmaW5lZAor KyAgICBBVl9QSVhfRk1UX1lBOCwgICAgICAgLy8vPCA4IGJpdHMgZ3JheSwgOCBiaXRzIGFscGhh CisrCisrICAgIEFWX1BJWF9GTVRfWTQwMEEgPSBBVl9QSVhfRk1UX1lBOCwgLy8vPCBhbGlhcyBm b3IgQVZfUElYX0ZNVF9ZQTgKKysgICAgQVZfUElYX0ZNVF9HUkFZOEE9IEFWX1BJWF9GTVRfWUE4 LCAvLy88IGFsaWFzIGZvciBBVl9QSVhfRk1UX1lBOAorKworKyAgICBBVl9QSVhfRk1UX0JHUjQ4 QkUsICAgLy8vPCBwYWNrZWQgUkdCIDE2OjE2OjE2LCA0OGJwcCwgMTZCLCAxNkcsIDE2UiwgdGhl IDItYnl0ZSB2YWx1ZSBmb3IgZWFjaCBSL0cvQiBjb21wb25lbnQgaXMgc3RvcmVkIGFzIGJpZy1l bmRpYW4KKysgICAgQVZfUElYX0ZNVF9CR1I0OExFLCAgIC8vLzwgcGFja2VkIFJHQiAxNjoxNjox NiwgNDhicHAsIDE2QiwgMTZHLCAxNlIsIHRoZSAyLWJ5dGUgdmFsdWUgZm9yIGVhY2ggUi9HL0Ig Y29tcG9uZW50IGlzIHN0b3JlZCBhcyBsaXR0bGUtZW5kaWFuCisrCisrICAgIC8qKgorKyAgICAg KiBUaGUgZm9sbG93aW5nIDEyIGZvcm1hdHMgaGF2ZSB0aGUgZGlzYWR2YW50YWdlIG9mIG5lZWRp bmcgMSBmb3JtYXQgZm9yIGVhY2ggYml0IGRlcHRoLgorKyAgICAgKiBOb3RpY2UgdGhhdCBlYWNo IDkvMTAgYml0cyBzYW1wbGUgaXMgc3RvcmVkIGluIDE2IGJpdHMgd2l0aCBleHRyYSBwYWRkaW5n LgorKyAgICAgKiBJZiB5b3Ugd2FudCB0byBzdXBwb3J0IG11bHRpcGxlIGJpdCBkZXB0aHMsIHRo ZW4gdXNpbmcgQVZfUElYX0ZNVF9ZVVY0MjBQMTYqIHdpdGggdGhlIGJwcCBzdG9yZWQgc2VwYXJh dGVseSBpcyBiZXR0ZXIuCisrICAgICAqLworKyAgICBBVl9QSVhfRk1UX1lVVjQyMFA5QkUsIC8v LzwgcGxhbmFyIFlVViA0OjI6MCwgMTMuNWJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MiBZ IHNhbXBsZXMpLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDIwUDlMRSwgLy8vPCBw bGFuYXIgWVVWIDQ6MjowLCAxMy41YnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMngyIFkgc2Ft cGxlcyksIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVY0MjBQMTBCRSwvLy88IHBs YW5hciBZVVYgNDoyOjAsIDE1YnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMngyIFkgc2FtcGxl cyksIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVY0MjBQMTBMRSwvLy88IHBsYW5hciBZ VVYgNDoyOjAsIDE1YnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMngyIFkgc2FtcGxlcyksIGxp dHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVY0MjJQMTBCRSwvLy88IHBsYW5hciBZVVYg NDoyOjIsIDIwYnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMngxIFkgc2FtcGxlcyksIGJpZy1l bmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVY0MjJQMTBMRSwvLy88IHBsYW5hciBZVVYgNDoyOjIs IDIwYnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMngxIFkgc2FtcGxlcyksIGxpdHRsZS1lbmRp YW4KKysgICAgQVZfUElYX0ZNVF9ZVVY0NDRQOUJFLCAvLy88IHBsYW5hciBZVVYgNDo0OjQsIDI3 YnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMXgxIFkgc2FtcGxlcyksIGJpZy1lbmRpYW4KKysg ICAgQVZfUElYX0ZNVF9ZVVY0NDRQOUxFLCAvLy88IHBsYW5hciBZVVYgNDo0OjQsIDI3YnBwLCAo MSBDciAmIENiIHNhbXBsZSBwZXIgMXgxIFkgc2FtcGxlcyksIGxpdHRsZS1lbmRpYW4KKysgICAg QVZfUElYX0ZNVF9ZVVY0NDRQMTBCRSwvLy88IHBsYW5hciBZVVYgNDo0OjQsIDMwYnBwLCAoMSBD ciAmIENiIHNhbXBsZSBwZXIgMXgxIFkgc2FtcGxlcyksIGJpZy1lbmRpYW4KKysgICAgQVZfUElY X0ZNVF9ZVVY0NDRQMTBMRSwvLy88IHBsYW5hciBZVVYgNDo0OjQsIDMwYnBwLCAoMSBDciAmIENi IHNhbXBsZSBwZXIgMXgxIFkgc2FtcGxlcyksIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZN VF9ZVVY0MjJQOUJFLCAvLy88IHBsYW5hciBZVVYgNDoyOjIsIDE4YnBwLCAoMSBDciAmIENiIHNh bXBsZSBwZXIgMngxIFkgc2FtcGxlcyksIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVY0 MjJQOUxFLCAvLy88IHBsYW5hciBZVVYgNDoyOjIsIDE4YnBwLCAoMSBDciAmIENiIHNhbXBsZSBw ZXIgMngxIFkgc2FtcGxlcyksIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HQlJQLCAg ICAgIC8vLzwgcGxhbmFyIEdCUiA0OjQ6NCAyNGJwcAorKyAgICBBVl9QSVhfRk1UX0dCUjI0UCA9 IEFWX1BJWF9GTVRfR0JSUCwgLy8gYWxpYXMgZm9yICNBVl9QSVhfRk1UX0dCUlAKKysgICAgQVZf UElYX0ZNVF9HQlJQOUJFLCAgIC8vLzwgcGxhbmFyIEdCUiA0OjQ6NCAyN2JwcCwgYmlnLWVuZGlh bgorKyAgICBBVl9QSVhfRk1UX0dCUlA5TEUsICAgLy8vPCBwbGFuYXIgR0JSIDQ6NDo0IDI3YnBw LCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfR0JSUDEwQkUsICAvLy88IHBsYW5hciBH QlIgNDo0OjQgMzBicHAsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HQlJQMTBMRSwgIC8v LzwgcGxhbmFyIEdCUiA0OjQ6NCAzMGJwcCwgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9QSVhfRk1U X0dCUlAxNkJFLCAgLy8vPCBwbGFuYXIgR0JSIDQ6NDo0IDQ4YnBwLCBiaWctZW5kaWFuCisrICAg IEFWX1BJWF9GTVRfR0JSUDE2TEUsICAvLy88IHBsYW5hciBHQlIgNDo0OjQgNDhicHAsIGxpdHRs ZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVZBNDIyUCwgIC8vLzwgcGxhbmFyIFlVViA0OjI6 MiAyNGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MSBZICYgQSBzYW1wbGVzKQorKyAgICBB Vl9QSVhfRk1UX1lVVkE0NDRQLCAgLy8vPCBwbGFuYXIgWVVWIDQ6NDo0IDMyYnBwLCAoMSBDciAm IENiIHNhbXBsZSBwZXIgMXgxIFkgJiBBIHNhbXBsZXMpCisrICAgIEFWX1BJWF9GTVRfWVVWQTQy MFA5QkUsICAvLy88IHBsYW5hciBZVVYgNDoyOjAgMjIuNWJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUg cGVyIDJ4MiBZICYgQSBzYW1wbGVzKSwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1lVVkE0 MjBQOUxFLCAgLy8vPCBwbGFuYXIgWVVWIDQ6MjowIDIyLjVicHAsICgxIENyICYgQ2Igc2FtcGxl IHBlciAyeDIgWSAmIEEgc2FtcGxlcyksIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9Z VVZBNDIyUDlCRSwgIC8vLzwgcGxhbmFyIFlVViA0OjI6MiAyN2JwcCwgKDEgQ3IgJiBDYiBzYW1w bGUgcGVyIDJ4MSBZICYgQSBzYW1wbGVzKSwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1lV VkE0MjJQOUxFLCAgLy8vPCBwbGFuYXIgWVVWIDQ6MjoyIDI3YnBwLCAoMSBDciAmIENiIHNhbXBs ZSBwZXIgMngxIFkgJiBBIHNhbXBsZXMpLCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRf WVVWQTQ0NFA5QkUsICAvLy88IHBsYW5hciBZVVYgNDo0OjQgMzZicHAsICgxIENyICYgQ2Igc2Ft cGxlIHBlciAxeDEgWSAmIEEgc2FtcGxlcyksIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9Z VVZBNDQ0UDlMRSwgIC8vLzwgcGxhbmFyIFlVViA0OjQ6NCAzNmJwcCwgKDEgQ3IgJiBDYiBzYW1w bGUgcGVyIDF4MSBZICYgQSBzYW1wbGVzKSwgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9QSVhfRk1U X1lVVkE0MjBQMTBCRSwgLy8vPCBwbGFuYXIgWVVWIDQ6MjowIDI1YnBwLCAoMSBDciAmIENiIHNh bXBsZSBwZXIgMngyIFkgJiBBIHNhbXBsZXMsIGJpZy1lbmRpYW4pCisrICAgIEFWX1BJWF9GTVRf WVVWQTQyMFAxMExFLCAvLy88IHBsYW5hciBZVVYgNDoyOjAgMjVicHAsICgxIENyICYgQ2Igc2Ft cGxlIHBlciAyeDIgWSAmIEEgc2FtcGxlcywgbGl0dGxlLWVuZGlhbikKKysgICAgQVZfUElYX0ZN VF9ZVVZBNDIyUDEwQkUsIC8vLzwgcGxhbmFyIFlVViA0OjI6MiAzMGJwcCwgKDEgQ3IgJiBDYiBz YW1wbGUgcGVyIDJ4MSBZICYgQSBzYW1wbGVzLCBiaWctZW5kaWFuKQorKyAgICBBVl9QSVhfRk1U X1lVVkE0MjJQMTBMRSwgLy8vPCBwbGFuYXIgWVVWIDQ6MjoyIDMwYnBwLCAoMSBDciAmIENiIHNh bXBsZSBwZXIgMngxIFkgJiBBIHNhbXBsZXMsIGxpdHRsZS1lbmRpYW4pCisrICAgIEFWX1BJWF9G TVRfWVVWQTQ0NFAxMEJFLCAvLy88IHBsYW5hciBZVVYgNDo0OjQgNDBicHAsICgxIENyICYgQ2Ig c2FtcGxlIHBlciAxeDEgWSAmIEEgc2FtcGxlcywgYmlnLWVuZGlhbikKKysgICAgQVZfUElYX0ZN VF9ZVVZBNDQ0UDEwTEUsIC8vLzwgcGxhbmFyIFlVViA0OjQ6NCA0MGJwcCwgKDEgQ3IgJiBDYiBz YW1wbGUgcGVyIDF4MSBZICYgQSBzYW1wbGVzLCBsaXR0bGUtZW5kaWFuKQorKyAgICBBVl9QSVhf Rk1UX1lVVkE0MjBQMTZCRSwgLy8vPCBwbGFuYXIgWVVWIDQ6MjowIDQwYnBwLCAoMSBDciAmIENi IHNhbXBsZSBwZXIgMngyIFkgJiBBIHNhbXBsZXMsIGJpZy1lbmRpYW4pCisrICAgIEFWX1BJWF9G TVRfWVVWQTQyMFAxNkxFLCAvLy88IHBsYW5hciBZVVYgNDoyOjAgNDBicHAsICgxIENyICYgQ2Ig c2FtcGxlIHBlciAyeDIgWSAmIEEgc2FtcGxlcywgbGl0dGxlLWVuZGlhbikKKysgICAgQVZfUElY X0ZNVF9ZVVZBNDIyUDE2QkUsIC8vLzwgcGxhbmFyIFlVViA0OjI6MiA0OGJwcCwgKDEgQ3IgJiBD YiBzYW1wbGUgcGVyIDJ4MSBZICYgQSBzYW1wbGVzLCBiaWctZW5kaWFuKQorKyAgICBBVl9QSVhf Rk1UX1lVVkE0MjJQMTZMRSwgLy8vPCBwbGFuYXIgWVVWIDQ6MjoyIDQ4YnBwLCAoMSBDciAmIENi IHNhbXBsZSBwZXIgMngxIFkgJiBBIHNhbXBsZXMsIGxpdHRsZS1lbmRpYW4pCisrICAgIEFWX1BJ WF9GTVRfWVVWQTQ0NFAxNkJFLCAvLy88IHBsYW5hciBZVVYgNDo0OjQgNjRicHAsICgxIENyICYg Q2Igc2FtcGxlIHBlciAxeDEgWSAmIEEgc2FtcGxlcywgYmlnLWVuZGlhbikKKysgICAgQVZfUElY X0ZNVF9ZVVZBNDQ0UDE2TEUsIC8vLzwgcGxhbmFyIFlVViA0OjQ6NCA2NGJwcCwgKDEgQ3IgJiBD YiBzYW1wbGUgcGVyIDF4MSBZICYgQSBzYW1wbGVzLCBsaXR0bGUtZW5kaWFuKQorKworKyAgICBB Vl9QSVhfRk1UX1ZEUEFVLCAgICAgLy8vPCBIVyBhY2NlbGVyYXRpb24gdGhyb3VnaCBWRFBBVSwg UGljdHVyZS5kYXRhWzNdIGNvbnRhaW5zIGEgVmRwVmlkZW9TdXJmYWNlCisrCisrICAgIEFWX1BJ WF9GTVRfWFlaMTJMRSwgICAgICAvLy88IHBhY2tlZCBYWVogNDo0OjQsIDM2IGJwcCwgKG1zYikg MTJYLCAxMlksIDEyWiAobHNiKSwgdGhlIDItYnl0ZSB2YWx1ZSBmb3IgZWFjaCBYL1kvWiBpcyBz dG9yZWQgYXMgbGl0dGxlLWVuZGlhbiwgdGhlIDQgbG93ZXIgYml0cyBhcmUgc2V0IHRvIDAKKysg ICAgQVZfUElYX0ZNVF9YWVoxMkJFLCAgICAgIC8vLzwgcGFja2VkIFhZWiA0OjQ6NCwgMzYgYnBw LCAobXNiKSAxMlgsIDEyWSwgMTJaIChsc2IpLCB0aGUgMi1ieXRlIHZhbHVlIGZvciBlYWNoIFgv WS9aIGlzIHN0b3JlZCBhcyBiaWctZW5kaWFuLCB0aGUgNCBsb3dlciBiaXRzIGFyZSBzZXQgdG8g MAorKyAgICBBVl9QSVhfRk1UX05WMTYsICAgICAgICAgLy8vPCBpbnRlcmxlYXZlZCBjaHJvbWEg WVVWIDQ6MjoyLCAxNmJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MSBZIHNhbXBsZXMpCisr ICAgIEFWX1BJWF9GTVRfTlYyMExFLCAgICAgICAvLy88IGludGVybGVhdmVkIGNocm9tYSBZVVYg NDoyOjIsIDIwYnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMngxIFkgc2FtcGxlcyksIGxpdHRs ZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9OVjIwQkUsICAgICAgIC8vLzwgaW50ZXJsZWF2ZWQg Y2hyb21hIFlVViA0OjI6MiwgMjBicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDEgWSBzYW1w bGVzKSwgYmlnLWVuZGlhbgorKworKyAgICBBVl9QSVhfRk1UX1JHQkE2NEJFLCAgICAgLy8vPCBw YWNrZWQgUkdCQSAxNjoxNjoxNjoxNiwgNjRicHAsIDE2UiwgMTZHLCAxNkIsIDE2QSwgdGhlIDIt Ynl0ZSB2YWx1ZSBmb3IgZWFjaCBSL0cvQi9BIGNvbXBvbmVudCBpcyBzdG9yZWQgYXMgYmlnLWVu ZGlhbgorKyAgICBBVl9QSVhfRk1UX1JHQkE2NExFLCAgICAgLy8vPCBwYWNrZWQgUkdCQSAxNjox NjoxNjoxNiwgNjRicHAsIDE2UiwgMTZHLCAxNkIsIDE2QSwgdGhlIDItYnl0ZSB2YWx1ZSBmb3Ig ZWFjaCBSL0cvQi9BIGNvbXBvbmVudCBpcyBzdG9yZWQgYXMgbGl0dGxlLWVuZGlhbgorKyAgICBB Vl9QSVhfRk1UX0JHUkE2NEJFLCAgICAgLy8vPCBwYWNrZWQgUkdCQSAxNjoxNjoxNjoxNiwgNjRi cHAsIDE2QiwgMTZHLCAxNlIsIDE2QSwgdGhlIDItYnl0ZSB2YWx1ZSBmb3IgZWFjaCBSL0cvQi9B IGNvbXBvbmVudCBpcyBzdG9yZWQgYXMgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0JHUkE2 NExFLCAgICAgLy8vPCBwYWNrZWQgUkdCQSAxNjoxNjoxNjoxNiwgNjRicHAsIDE2QiwgMTZHLCAx NlIsIDE2QSwgdGhlIDItYnl0ZSB2YWx1ZSBmb3IgZWFjaCBSL0cvQi9BIGNvbXBvbmVudCBpcyBz dG9yZWQgYXMgbGl0dGxlLWVuZGlhbgorKworKyAgICBBVl9QSVhfRk1UX1lWWVU0MjIsICAgLy8v PCBwYWNrZWQgWVVWIDQ6MjoyLCAxNmJwcCwgWTAgQ3IgWTEgQ2IKKysKKysgICAgQVZfUElYX0ZN VF9ZQTE2QkUsICAgICAgIC8vLzwgMTYgYml0cyBncmF5LCAxNiBiaXRzIGFscGhhIChiaWctZW5k aWFuKQorKyAgICBBVl9QSVhfRk1UX1lBMTZMRSwgICAgICAgLy8vPCAxNiBiaXRzIGdyYXksIDE2 IGJpdHMgYWxwaGEgKGxpdHRsZS1lbmRpYW4pCisrCisrICAgIEFWX1BJWF9GTVRfR0JSQVAsICAg ICAgICAvLy88IHBsYW5hciBHQlJBIDQ6NDo0OjQgMzJicHAKKysgICAgQVZfUElYX0ZNVF9HQlJB UDE2QkUsICAgIC8vLzwgcGxhbmFyIEdCUkEgNDo0OjQ6NCA2NGJwcCwgYmlnLWVuZGlhbgorKyAg ICBBVl9QSVhfRk1UX0dCUkFQMTZMRSwgICAgLy8vPCBwbGFuYXIgR0JSQSA0OjQ6NDo0IDY0YnBw LCBsaXR0bGUtZW5kaWFuCisrICAgIC8qKgorKyAgICAgKiBIVyBhY2NlbGVyYXRpb24gdGhyb3Vn aCBRU1YsIGRhdGFbM10gY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZQorKyAgICAgKiBtZnhGcmFt ZVN1cmZhY2UxIHN0cnVjdHVyZS4KKysgICAgICoKKysgICAgICogQmVmb3JlIEZGbXBlZyA1LjA6 CisrICAgICAqIG1meEZyYW1lU3VyZmFjZTEuRGF0YS5NZW1JZCBjb250YWlucyBhIHBvaW50ZXIg d2hlbiBpbXBvcnRpbmcKKysgICAgICogdGhlIGZvbGxvd2luZyBmcmFtZXMgYXMgUVNWIGZyYW1l czoKKysgICAgICoKKysgICAgICogVkFBUEk6CisrICAgICAqIG1meEZyYW1lU3VyZmFjZTEuRGF0 YS5NZW1JZCBjb250YWlucyBhIHBvaW50ZXIgdG8gVkFTdXJmYWNlSUQKKysgICAgICoKKysgICAg ICogRFhWQTI6CisrICAgICAqIG1meEZyYW1lU3VyZmFjZTEuRGF0YS5NZW1JZCBjb250YWlucyBh IHBvaW50ZXIgdG8gSURpcmVjdDNEU3VyZmFjZTkKKysgICAgICoKKysgICAgICogRkZtcGVnIDUu MCBhbmQgYWJvdmU6CisrICAgICAqIG1meEZyYW1lU3VyZmFjZTEuRGF0YS5NZW1JZCBjb250YWlu cyBhIHBvaW50ZXIgdG8gdGhlIG1meEhETFBhaXIKKysgICAgICogc3RydWN0dXJlIHdoZW4gaW1w b3J0aW5nIHRoZSBmb2xsb3dpbmcgZnJhbWVzIGFzIFFTViBmcmFtZXM6CisrICAgICAqCisrICAg ICAqIFZBQVBJOgorKyAgICAgKiBtZnhIRExQYWlyLmZpcnN0IGNvbnRhaW5zIGEgVkFTdXJmYWNl SUQgcG9pbnRlci4KKysgICAgICogbWZ4SERMUGFpci5zZWNvbmQgaXMgYWx3YXlzIE1GWF9JTkZJ TklURS4KKysgICAgICoKKysgICAgICogRFhWQTI6CisrICAgICAqIG1meEhETFBhaXIuZmlyc3Qg Y29udGFpbnMgSURpcmVjdDNEU3VyZmFjZTkgcG9pbnRlci4KKysgICAgICogbWZ4SERMUGFpci5z ZWNvbmQgaXMgYWx3YXlzIE1GWF9JTkZJTklURS4KKysgICAgICoKKysgICAgICogRDNEMTE6Cisr ICAgICAqIG1meEhETFBhaXIuZmlyc3QgY29udGFpbnMgYSBJRDNEMTFUZXh0dXJlMkQgcG9pbnRl ci4KKysgICAgICogbWZ4SERMUGFpci5zZWNvbmQgY29udGFpbnMgdGhlIHRleHR1cmUgYXJyYXkg aW5kZXggb2YgdGhlIGZyYW1lIGlmIHRoZQorKyAgICAgKiBJRDNEMTFUZXh0dXJlMkQgaXMgYW4g YXJyYXkgdGV4dHVyZSwgb3IgYWx3YXlzIE1GWF9JTkZJTklURSBpZiBpdCBpcyBhCisrICAgICAq IG5vcm1hbCB0ZXh0dXJlLgorKyAgICAgKi8KKysgICAgQVZfUElYX0ZNVF9RU1YsCisrICAgIC8q KgorKyAgICAgKiBIVyBhY2NlbGVyYXRpb24gdGhvdWdoIE1NQUwsIGRhdGFbM10gY29udGFpbnMg YSBwb2ludGVyIHRvIHRoZQorKyAgICAgKiBNTUFMX0JVRkZFUl9IRUFERVJfVCBzdHJ1Y3R1cmUu CisrICAgICAqLworKyAgICBBVl9QSVhfRk1UX01NQUwsCisrCisrICAgIEFWX1BJWF9GTVRfRDNE MTFWQV9WTEQsICAvLy88IEhXIGRlY29kaW5nIHRocm91Z2ggRGlyZWN0M0QxMSB2aWEgb2xkIEFQ SSwgUGljdHVyZS5kYXRhWzNdIGNvbnRhaW5zIGEgSUQzRDExVmlkZW9EZWNvZGVyT3V0cHV0Vmll dyBwb2ludGVyCisrCisrICAgIC8qKgorKyAgICAgKiBIVyBhY2NlbGVyYXRpb24gdGhyb3VnaCBD VURBLiBkYXRhW2ldIGNvbnRhaW4gQ1VkZXZpY2VwdHIgcG9pbnRlcnMKKysgICAgICogZXhhY3Rs eSBhcyBmb3Igc3lzdGVtIG1lbW9yeSBmcmFtZXMuCisrICAgICAqLworKyAgICBBVl9QSVhfRk1U X0NVREEsCisrCisrICAgIEFWX1BJWF9GTVRfMFJHQiwgICAgICAgIC8vLzwgcGFja2VkIFJHQiA4 Ojg6OCwgMzJicHAsIFhSR0JYUkdCLi4uICAgWD11bnVzZWQvdW5kZWZpbmVkCisrICAgIEFWX1BJ WF9GTVRfUkdCMCwgICAgICAgIC8vLzwgcGFja2VkIFJHQiA4Ojg6OCwgMzJicHAsIFJHQlhSR0JY Li4uICAgWD11bnVzZWQvdW5kZWZpbmVkCisrICAgIEFWX1BJWF9GTVRfMEJHUiwgICAgICAgIC8v LzwgcGFja2VkIEJHUiA4Ojg6OCwgMzJicHAsIFhCR1JYQkdSLi4uICAgWD11bnVzZWQvdW5kZWZp bmVkCisrICAgIEFWX1BJWF9GTVRfQkdSMCwgICAgICAgIC8vLzwgcGFja2VkIEJHUiA4Ojg6OCwg MzJicHAsIEJHUlhCR1JYLi4uICAgWD11bnVzZWQvdW5kZWZpbmVkCisrCisrICAgIEFWX1BJWF9G TVRfWVVWNDIwUDEyQkUsIC8vLzwgcGxhbmFyIFlVViA0OjI6MCwxOGJwcCwgKDEgQ3IgJiBDYiBz YW1wbGUgcGVyIDJ4MiBZIHNhbXBsZXMpLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVW NDIwUDEyTEUsIC8vLzwgcGxhbmFyIFlVViA0OjI6MCwxOGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUg cGVyIDJ4MiBZIHNhbXBsZXMpLCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDIw UDE0QkUsIC8vLzwgcGxhbmFyIFlVViA0OjI6MCwyMWJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVy IDJ4MiBZIHNhbXBsZXMpLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDIwUDE0TEUs IC8vLzwgcGxhbmFyIFlVViA0OjI6MCwyMWJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MiBZ IHNhbXBsZXMpLCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDIyUDEyQkUsIC8v LzwgcGxhbmFyIFlVViA0OjI6MiwyNGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MSBZIHNh bXBsZXMpLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDIyUDEyTEUsIC8vLzwgcGxh bmFyIFlVViA0OjI6MiwyNGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MSBZIHNhbXBsZXMp LCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDIyUDE0QkUsIC8vLzwgcGxhbmFy IFlVViA0OjI6MiwyOGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MSBZIHNhbXBsZXMpLCBi aWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDIyUDE0TEUsIC8vLzwgcGxhbmFyIFlVViA0 OjI6MiwyOGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDJ4MSBZIHNhbXBsZXMpLCBsaXR0bGUt ZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDQ0UDEyQkUsIC8vLzwgcGxhbmFyIFlVViA0OjQ6 NCwzNmJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDF4MSBZIHNhbXBsZXMpLCBiaWctZW5kaWFu CisrICAgIEFWX1BJWF9GTVRfWVVWNDQ0UDEyTEUsIC8vLzwgcGxhbmFyIFlVViA0OjQ6NCwzNmJw cCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDF4MSBZIHNhbXBsZXMpLCBsaXR0bGUtZW5kaWFuCisr ICAgIEFWX1BJWF9GTVRfWVVWNDQ0UDE0QkUsIC8vLzwgcGxhbmFyIFlVViA0OjQ6NCw0MmJwcCwg KDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDF4MSBZIHNhbXBsZXMpLCBiaWctZW5kaWFuCisrICAgIEFW X1BJWF9GTVRfWVVWNDQ0UDE0TEUsIC8vLzwgcGxhbmFyIFlVViA0OjQ6NCw0MmJwcCwgKDEgQ3Ig JiBDYiBzYW1wbGUgcGVyIDF4MSBZIHNhbXBsZXMpLCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJ WF9GTVRfR0JSUDEyQkUsICAgIC8vLzwgcGxhbmFyIEdCUiA0OjQ6NCAzNmJwcCwgYmlnLWVuZGlh bgorKyAgICBBVl9QSVhfRk1UX0dCUlAxMkxFLCAgICAvLy88IHBsYW5hciBHQlIgNDo0OjQgMzZi cHAsIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HQlJQMTRCRSwgICAgLy8vPCBwbGFu YXIgR0JSIDQ6NDo0IDQyYnBwLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfR0JSUDE0TEUs ICAgIC8vLzwgcGxhbmFyIEdCUiA0OjQ6NCA0MmJwcCwgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9Q SVhfRk1UX1lVVko0MTFQLCAgICAvLy88IHBsYW5hciBZVVYgNDoxOjEsIDEyYnBwLCAoMSBDciAm IENiIHNhbXBsZSBwZXIgNHgxIFkgc2FtcGxlcykgZnVsbCBzY2FsZSAoSlBFRyksIGRlcHJlY2F0 ZWQgaW4gZmF2b3Igb2YgQVZfUElYX0ZNVF9ZVVY0MTFQIGFuZCBzZXR0aW5nIGNvbG9yX3Jhbmdl CisrCisrICAgIEFWX1BJWF9GTVRfQkFZRVJfQkdHUjgsICAgIC8vLzwgYmF5ZXIsIEJHQkcuLihv ZGQgbGluZSksIEdSR1IuLihldmVuIGxpbmUpLCA4LWJpdCBzYW1wbGVzCisrICAgIEFWX1BJWF9G TVRfQkFZRVJfUkdHQjgsICAgIC8vLzwgYmF5ZXIsIFJHUkcuLihvZGQgbGluZSksIEdCR0IuLihl dmVuIGxpbmUpLCA4LWJpdCBzYW1wbGVzCisrICAgIEFWX1BJWF9GTVRfQkFZRVJfR0JSRzgsICAg IC8vLzwgYmF5ZXIsIEdCR0IuLihvZGQgbGluZSksIFJHUkcuLihldmVuIGxpbmUpLCA4LWJpdCBz YW1wbGVzCisrICAgIEFWX1BJWF9GTVRfQkFZRVJfR1JCRzgsICAgIC8vLzwgYmF5ZXIsIEdSR1Iu LihvZGQgbGluZSksIEJHQkcuLihldmVuIGxpbmUpLCA4LWJpdCBzYW1wbGVzCisrICAgIEFWX1BJ WF9GTVRfQkFZRVJfQkdHUjE2TEUsIC8vLzwgYmF5ZXIsIEJHQkcuLihvZGQgbGluZSksIEdSR1Iu LihldmVuIGxpbmUpLCAxNi1iaXQgc2FtcGxlcywgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9QSVhf Rk1UX0JBWUVSX0JHR1IxNkJFLCAvLy88IGJheWVyLCBCR0JHLi4ob2RkIGxpbmUpLCBHUkdSLi4o ZXZlbiBsaW5lKSwgMTYtYml0IHNhbXBsZXMsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9C QVlFUl9SR0dCMTZMRSwgLy8vPCBiYXllciwgUkdSRy4uKG9kZCBsaW5lKSwgR0JHQi4uKGV2ZW4g bGluZSksIDE2LWJpdCBzYW1wbGVzLCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfQkFZ RVJfUkdHQjE2QkUsIC8vLzwgYmF5ZXIsIFJHUkcuLihvZGQgbGluZSksIEdCR0IuLihldmVuIGxp bmUpLCAxNi1iaXQgc2FtcGxlcywgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0JBWUVSX0dC UkcxNkxFLCAvLy88IGJheWVyLCBHQkdCLi4ob2RkIGxpbmUpLCBSR1JHLi4oZXZlbiBsaW5lKSwg MTYtYml0IHNhbXBsZXMsIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9CQVlFUl9HQlJH MTZCRSwgLy8vPCBiYXllciwgR0JHQi4uKG9kZCBsaW5lKSwgUkdSRy4uKGV2ZW4gbGluZSksIDE2 LWJpdCBzYW1wbGVzLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfQkFZRVJfR1JCRzE2TEUs IC8vLzwgYmF5ZXIsIEdSR1IuLihvZGQgbGluZSksIEJHQkcuLihldmVuIGxpbmUpLCAxNi1iaXQg c2FtcGxlcywgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0JBWUVSX0dSQkcxNkJFLCAv Ly88IGJheWVyLCBHUkdSLi4ob2RkIGxpbmUpLCBCR0JHLi4oZXZlbiBsaW5lKSwgMTYtYml0IHNh bXBsZXMsIGJpZy1lbmRpYW4KKysKKysgICAgQVZfUElYX0ZNVF9ZVVY0NDBQMTBMRSwgLy8vPCBw bGFuYXIgWVVWIDQ6NDowLDIwYnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMXgyIFkgc2FtcGxl cyksIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVY0NDBQMTBCRSwgLy8vPCBwbGFu YXIgWVVWIDQ6NDowLDIwYnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMXgyIFkgc2FtcGxlcyks IGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVY0NDBQMTJMRSwgLy8vPCBwbGFuYXIgWVVW IDQ6NDowLDI0YnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMXgyIFkgc2FtcGxlcyksIGxpdHRs ZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVY0NDBQMTJCRSwgLy8vPCBwbGFuYXIgWVVWIDQ6 NDowLDI0YnBwLCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMXgyIFkgc2FtcGxlcyksIGJpZy1lbmRp YW4KKysgICAgQVZfUElYX0ZNVF9BWVVWNjRMRSwgICAgLy8vPCBwYWNrZWQgQVlVViA0OjQ6NCw2 NGJwcCAoMSBDciAmIENiIHNhbXBsZSBwZXIgMXgxIFkgJiBBIHNhbXBsZXMpLCBsaXR0bGUtZW5k aWFuCisrICAgIEFWX1BJWF9GTVRfQVlVVjY0QkUsICAgIC8vLzwgcGFja2VkIEFZVVYgNDo0OjQs NjRicHAgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDF4MSBZICYgQSBzYW1wbGVzKSwgYmlnLWVuZGlh bgorKworKyAgICBBVl9QSVhfRk1UX1ZJREVPVE9PTEJPWCwgLy8vPCBoYXJkd2FyZSBkZWNvZGlu ZyB0aHJvdWdoIFZpZGVvdG9vbGJveAorKworKyAgICBBVl9QSVhfRk1UX1AwMTBMRSwgLy8vPCBs aWtlIE5WMTIsIHdpdGggMTBicHAgcGVyIGNvbXBvbmVudCwgZGF0YSBpbiB0aGUgaGlnaCBiaXRz LCB6ZXJvcyBpbiB0aGUgbG93IGJpdHMsIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9Q MDEwQkUsIC8vLzwgbGlrZSBOVjEyLCB3aXRoIDEwYnBwIHBlciBjb21wb25lbnQsIGRhdGEgaW4g dGhlIGhpZ2ggYml0cywgemVyb3MgaW4gdGhlIGxvdyBiaXRzLCBiaWctZW5kaWFuCisrCisrICAg IEFWX1BJWF9GTVRfR0JSQVAxMkJFLCAgLy8vPCBwbGFuYXIgR0JSIDQ6NDo0OjQgNDhicHAsIGJp Zy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HQlJBUDEyTEUsICAvLy88IHBsYW5hciBHQlIgNDo0 OjQ6NCA0OGJwcCwgbGl0dGxlLWVuZGlhbgorKworKyAgICBBVl9QSVhfRk1UX0dCUkFQMTBCRSwg IC8vLzwgcGxhbmFyIEdCUiA0OjQ6NDo0IDQwYnBwLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9G TVRfR0JSQVAxMExFLCAgLy8vPCBwbGFuYXIgR0JSIDQ6NDo0OjQgNDBicHAsIGxpdHRsZS1lbmRp YW4KKysKKysgICAgQVZfUElYX0ZNVF9NRURJQUNPREVDLCAvLy88IGhhcmR3YXJlIGRlY29kaW5n IHRocm91Z2ggTWVkaWFDb2RlYworKworKyAgICBBVl9QSVhfRk1UX0dSQVkxMkJFLCAgIC8vLzwg ICAgICAgIFkgICAgICAgICwgMTJicHAsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HUkFZ MTJMRSwgICAvLy88ICAgICAgICBZICAgICAgICAsIDEyYnBwLCBsaXR0bGUtZW5kaWFuCisrICAg IEFWX1BJWF9GTVRfR1JBWTEwQkUsICAgLy8vPCAgICAgICAgWSAgICAgICAgLCAxMGJwcCwgYmln LWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0dSQVkxMExFLCAgIC8vLzwgICAgICAgIFkgICAgICAg ICwgMTBicHAsIGxpdHRsZS1lbmRpYW4KKysKKysgICAgQVZfUElYX0ZNVF9QMDE2TEUsIC8vLzwg bGlrZSBOVjEyLCB3aXRoIDE2YnBwIHBlciBjb21wb25lbnQsIGxpdHRsZS1lbmRpYW4KKysgICAg QVZfUElYX0ZNVF9QMDE2QkUsIC8vLzwgbGlrZSBOVjEyLCB3aXRoIDE2YnBwIHBlciBjb21wb25l bnQsIGJpZy1lbmRpYW4KKysKKysgICAgLyoqCisrICAgICAqIEhhcmR3YXJlIHN1cmZhY2VzIGZv ciBEaXJlY3QzRDExLgorKyAgICAgKgorKyAgICAgKiBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIHRo ZSBsZWdhY3kgQVZfUElYX0ZNVF9EM0QxMVZBX1ZMRC4gVGhlIG5ldyBEM0QxMQorKyAgICAgKiBo d2FjY2VsIEFQSSBhbmQgZmlsdGVyaW5nIHN1cHBvcnQgQVZfUElYX0ZNVF9EM0QxMSBvbmx5Lgor KyAgICAgKgorKyAgICAgKiBkYXRhWzBdIGNvbnRhaW5zIGEgSUQzRDExVGV4dHVyZTJEIHBvaW50 ZXIsIGFuZCBkYXRhWzFdIGNvbnRhaW5zIHRoZQorKyAgICAgKiB0ZXh0dXJlIGFycmF5IGluZGV4 IG9mIHRoZSBmcmFtZSBhcyBpbnRwdHJfdCBpZiB0aGUgSUQzRDExVGV4dHVyZTJEIGlzCisrICAg ICAqIGFuIGFycmF5IHRleHR1cmUgKG9yIGFsd2F5cyAwIGlmIGl0J3MgYSBub3JtYWwgdGV4dHVy ZSkuCisrICAgICAqLworKyAgICBBVl9QSVhfRk1UX0QzRDExLAorKworKyAgICBBVl9QSVhfRk1U X0dSQVk5QkUsICAgLy8vPCAgICAgICAgWSAgICAgICAgLCA5YnBwLCBiaWctZW5kaWFuCisrICAg IEFWX1BJWF9GTVRfR1JBWTlMRSwgICAvLy88ICAgICAgICBZICAgICAgICAsIDlicHAsIGxpdHRs ZS1lbmRpYW4KKysKKysgICAgQVZfUElYX0ZNVF9HQlJQRjMyQkUsICAvLy88IElFRUUtNzU0IHNp bmdsZSBwcmVjaXNpb24gcGxhbmFyIEdCUiA0OjQ6NCwgICAgIDk2YnBwLCBiaWctZW5kaWFuCisr ICAgIEFWX1BJWF9GTVRfR0JSUEYzMkxFLCAgLy8vPCBJRUVFLTc1NCBzaW5nbGUgcHJlY2lzaW9u IHBsYW5hciBHQlIgNDo0OjQsICAgICA5NmJwcCwgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9QSVhf Rk1UX0dCUkFQRjMyQkUsIC8vLzwgSUVFRS03NTQgc2luZ2xlIHByZWNpc2lvbiBwbGFuYXIgR0JS QSA0OjQ6NDo0LCAxMjhicHAsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HQlJBUEYzMkxF LCAvLy88IElFRUUtNzU0IHNpbmdsZSBwcmVjaXNpb24gcGxhbmFyIEdCUkEgNDo0OjQ6NCwgMTI4 YnBwLCBsaXR0bGUtZW5kaWFuCisrCisrICAgIC8qKgorKyAgICAgKiBEUk0tbWFuYWdlZCBidWZm ZXJzIGV4cG9zZWQgdGhyb3VnaCBQUklNRSBidWZmZXIgc2hhcmluZy4KKysgICAgICoKKysgICAg ICogZGF0YVswXSBwb2ludHMgdG8gYW4gQVZEUk1GcmFtZURlc2NyaXB0b3IuCisrICAgICAqLwor KyAgICBBVl9QSVhfRk1UX0RSTV9QUklNRSwKKysgICAgLyoqCisrICAgICAqIEhhcmR3YXJlIHN1 cmZhY2VzIGZvciBPcGVuQ0wuCisrICAgICAqCisrICAgICAqIGRhdGFbaV0gY29udGFpbiAyRCBp bWFnZSBvYmplY3RzICh0eXBlZCBpbiBDIGFzIGNsX21lbSwgdXNlZAorKyAgICAgKiBpbiBPcGVu Q0wgYXMgaW1hZ2UyZF90KSBmb3IgZWFjaCBwbGFuZSBvZiB0aGUgc3VyZmFjZS4KKysgICAgICov CisrICAgIEFWX1BJWF9GTVRfT1BFTkNMLAorKworKyAgICBBVl9QSVhfRk1UX0dSQVkxNEJFLCAg IC8vLzwgICAgICAgIFkgICAgICAgICwgMTRicHAsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZN VF9HUkFZMTRMRSwgICAvLy88ICAgICAgICBZICAgICAgICAsIDE0YnBwLCBsaXR0bGUtZW5kaWFu CisrCisrICAgIEFWX1BJWF9GTVRfR1JBWUYzMkJFLCAgLy8vPCBJRUVFLTc1NCBzaW5nbGUgcHJl Y2lzaW9uIFksIDMyYnBwLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfR1JBWUYzMkxFLCAg Ly8vPCBJRUVFLTc1NCBzaW5nbGUgcHJlY2lzaW9uIFksIDMyYnBwLCBsaXR0bGUtZW5kaWFuCisr CisrICAgIEFWX1BJWF9GTVRfWVVWQTQyMlAxMkJFLCAvLy88IHBsYW5hciBZVVYgNDoyOjIsMjRi cHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDEgWSBzYW1wbGVzKSwgMTJiIGFscGhhLCBiaWct ZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWQTQyMlAxMkxFLCAvLy88IHBsYW5hciBZVVYgNDoy OjIsMjRicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAyeDEgWSBzYW1wbGVzKSwgMTJiIGFscGhh LCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWQTQ0NFAxMkJFLCAvLy88IHBsYW5h ciBZVVYgNDo0OjQsMzZicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAxeDEgWSBzYW1wbGVzKSwg MTJiIGFscGhhLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWQTQ0NFAxMkxFLCAvLy88 IHBsYW5hciBZVVYgNDo0OjQsMzZicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAxeDEgWSBzYW1w bGVzKSwgMTJiIGFscGhhLCBsaXR0bGUtZW5kaWFuCisrCisrICAgIEFWX1BJWF9GTVRfTlYyNCwg ICAgICAvLy88IHBsYW5hciBZVVYgNDo0OjQsIDI0YnBwLCAxIHBsYW5lIGZvciBZIGFuZCAxIHBs YW5lIGZvciB0aGUgVVYgY29tcG9uZW50cywgd2hpY2ggYXJlIGludGVybGVhdmVkIChmaXJzdCBi eXRlIFUgYW5kIHRoZSBmb2xsb3dpbmcgYnl0ZSBWKQorKyAgICBBVl9QSVhfRk1UX05WNDIsICAg ICAgLy8vPCBhcyBhYm92ZSwgYnV0IFUgYW5kIFYgYnl0ZXMgYXJlIHN3YXBwZWQKKysKKysgICAg LyoqCisrICAgICAqIFZ1bGthbiBoYXJkd2FyZSBpbWFnZXMuCisrICAgICAqCisrICAgICAqIGRh dGFbMF0gcG9pbnRzIHRvIGFuIEFWVmtGcmFtZQorKyAgICAgKi8KKysgICAgQVZfUElYX0ZNVF9W VUxLQU4sCisrCisrICAgIEFWX1BJWF9GTVRfWTIxMEJFLCAgICAvLy88IHBhY2tlZCBZVVYgNDoy OjIgbGlrZSBZVVlWNDIyLCAyMGJwcCwgZGF0YSBpbiB0aGUgaGlnaCBiaXRzLCBiaWctZW5kaWFu CisrICAgIEFWX1BJWF9GTVRfWTIxMExFLCAgICAvLy88IHBhY2tlZCBZVVYgNDoyOjIgbGlrZSBZ VVlWNDIyLCAyMGJwcCwgZGF0YSBpbiB0aGUgaGlnaCBiaXRzLCBsaXR0bGUtZW5kaWFuCisrCisr ICAgIEFWX1BJWF9GTVRfWDJSR0IxMExFLCAvLy88IHBhY2tlZCBSR0IgMTA6MTA6MTAsIDMwYnBw LCAobXNiKTJYIDEwUiAxMEcgMTBCKGxzYiksIGxpdHRsZS1lbmRpYW4sIFg9dW51c2VkL3VuZGVm aW5lZAorKyAgICBBVl9QSVhfRk1UX1gyUkdCMTBCRSwgLy8vPCBwYWNrZWQgUkdCIDEwOjEwOjEw LCAzMGJwcCwgKG1zYikyWCAxMFIgMTBHIDEwQihsc2IpLCBiaWctZW5kaWFuLCBYPXVudXNlZC91 bmRlZmluZWQKKysgICAgQVZfUElYX0ZNVF9YMkJHUjEwTEUsIC8vLzwgcGFja2VkIEJHUiAxMDox MDoxMCwgMzBicHAsIChtc2IpMlggMTBCIDEwRyAxMFIobHNiKSwgbGl0dGxlLWVuZGlhbiwgWD11 bnVzZWQvdW5kZWZpbmVkCisrICAgIEFWX1BJWF9GTVRfWDJCR1IxMEJFLCAvLy88IHBhY2tlZCBC R1IgMTA6MTA6MTAsIDMwYnBwLCAobXNiKTJYIDEwQiAxMEcgMTBSKGxzYiksIGJpZy1lbmRpYW4s IFg9dW51c2VkL3VuZGVmaW5lZAorKworKyAgICBBVl9QSVhfRk1UX1AyMTBCRSwgICAgICAvLy88 IGludGVybGVhdmVkIGNocm9tYSBZVVYgNDoyOjIsIDIwYnBwLCBkYXRhIGluIHRoZSBoaWdoIGJp dHMsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9QMjEwTEUsICAgICAgLy8vPCBpbnRlcmxl YXZlZCBjaHJvbWEgWVVWIDQ6MjoyLCAyMGJwcCwgZGF0YSBpbiB0aGUgaGlnaCBiaXRzLCBsaXR0 bGUtZW5kaWFuCisrCisrICAgIEFWX1BJWF9GTVRfUDQxMEJFLCAgICAgIC8vLzwgaW50ZXJsZWF2 ZWQgY2hyb21hIFlVViA0OjQ6NCwgMzBicHAsIGRhdGEgaW4gdGhlIGhpZ2ggYml0cywgYmlnLWVu ZGlhbgorKyAgICBBVl9QSVhfRk1UX1A0MTBMRSwgICAgICAvLy88IGludGVybGVhdmVkIGNocm9t YSBZVVYgNDo0OjQsIDMwYnBwLCBkYXRhIGluIHRoZSBoaWdoIGJpdHMsIGxpdHRsZS1lbmRpYW4K KysKKysgICAgQVZfUElYX0ZNVF9QMjE2QkUsICAgICAgLy8vPCBpbnRlcmxlYXZlZCBjaHJvbWEg WVVWIDQ6MjoyLCAzMmJwcCwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1AyMTZMRSwgICAg ICAvLy88IGludGVybGVhdmVkIGNocm9tYSBZVVYgNDoyOjIsIDMyYnBwLCBsaXR0bGUtZW5kaWFu CisrCisrICAgIEFWX1BJWF9GTVRfUDQxNkJFLCAgICAgIC8vLzwgaW50ZXJsZWF2ZWQgY2hyb21h IFlVViA0OjQ6NCwgNDhicHAsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9QNDE2TEUsICAg ICAgLy8vPCBpbnRlcmxlYXZlZCBjaHJvbWEgWVVWIDQ6NDo0LCA0OGJwcCwgbGl0dGxlLWVuZGlh bgorKworKyAgICBBVl9QSVhfRk1UX1ZVWUEsICAgICAgICAvLy88IHBhY2tlZCBWVVlBIDQ6NDo0 OjQsIDMyYnBwICgxIENyICYgQ2Igc2FtcGxlIHBlciAxeDEgWSAmIEEgc2FtcGxlcyksIFZVWUFW VVlBLi4uCisrCisrICAgIEFWX1BJWF9GTVRfUkdCQUYxNkJFLCAgIC8vLzwgSUVFRS03NTQgaGFs ZiBwcmVjaXNpb24gcGFja2VkIFJHQkEgMTY6MTY6MTY6MTYsIDY0YnBwLCBSR0JBUkdCQS4uLiwg YmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1JHQkFGMTZMRSwgICAvLy88IElFRUUtNzU0IGhh bGYgcHJlY2lzaW9uIHBhY2tlZCBSR0JBIDE2OjE2OjE2OjE2LCA2NGJwcCwgUkdCQVJHQkEuLi4s IGxpdHRsZS1lbmRpYW4KKysKKysgICAgQVZfUElYX0ZNVF9WVVlYLCAgICAgICAgLy8vPCBwYWNr ZWQgVlVZWCA0OjQ6NDo0LCAzMmJwcCwgVmFyaWFudCBvZiBWVVlBIHdoZXJlIGFscGhhIGNoYW5u ZWwgaXMgbGVmdCB1bmRlZmluZWQKKysKKysgICAgQVZfUElYX0ZNVF9QMDEyTEUsICAgICAgLy8v PCBsaWtlIE5WMTIsIHdpdGggMTJicHAgcGVyIGNvbXBvbmVudCwgZGF0YSBpbiB0aGUgaGlnaCBi aXRzLCB6ZXJvcyBpbiB0aGUgbG93IGJpdHMsIGxpdHRsZS1lbmRpYW4KKysgICAgQVZfUElYX0ZN VF9QMDEyQkUsICAgICAgLy8vPCBsaWtlIE5WMTIsIHdpdGggMTJicHAgcGVyIGNvbXBvbmVudCwg ZGF0YSBpbiB0aGUgaGlnaCBiaXRzLCB6ZXJvcyBpbiB0aGUgbG93IGJpdHMsIGJpZy1lbmRpYW4K KysKKysgICAgQVZfUElYX0ZNVF9ZMjEyQkUsICAgICAgLy8vPCBwYWNrZWQgWVVWIDQ6MjoyIGxp a2UgWVVZVjQyMiwgMjRicHAsIGRhdGEgaW4gdGhlIGhpZ2ggYml0cywgemVyb3MgaW4gdGhlIGxv dyBiaXRzLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWTIxMkxFLCAgICAgIC8vLzwgcGFj a2VkIFlVViA0OjI6MiBsaWtlIFlVWVY0MjIsIDI0YnBwLCBkYXRhIGluIHRoZSBoaWdoIGJpdHMs IHplcm9zIGluIHRoZSBsb3cgYml0cywgbGl0dGxlLWVuZGlhbgorKworKyAgICBBVl9QSVhfRk1U X1hWMzBCRSwgICAgICAvLy88IHBhY2tlZCBYVllVIDQ6NDo0LCAzMmJwcCwgKG1zYikyWCAxMFYg MTBZIDEwVShsc2IpLCBiaWctZW5kaWFuLCB2YXJpYW50IG9mIFk0MTAgd2hlcmUgYWxwaGEgY2hh bm5lbCBpcyBsZWZ0IHVuZGVmaW5lZAorKyAgICBBVl9QSVhfRk1UX1hWMzBMRSwgICAgICAvLy88 IHBhY2tlZCBYVllVIDQ6NDo0LCAzMmJwcCwgKG1zYikyWCAxMFYgMTBZIDEwVShsc2IpLCBsaXR0 bGUtZW5kaWFuLCB2YXJpYW50IG9mIFk0MTAgd2hlcmUgYWxwaGEgY2hhbm5lbCBpcyBsZWZ0IHVu ZGVmaW5lZAorKworKyAgICBBVl9QSVhfRk1UX1hWMzZCRSwgICAgICAvLy88IHBhY2tlZCBYVllV IDQ6NDo0LCA0OGJwcCwgZGF0YSBpbiB0aGUgaGlnaCBiaXRzLCB6ZXJvcyBpbiB0aGUgbG93IGJp dHMsIGJpZy1lbmRpYW4sIHZhcmlhbnQgb2YgWTQxMiB3aGVyZSBhbHBoYSBjaGFubmVsIGlzIGxl ZnQgdW5kZWZpbmVkCisrICAgIEFWX1BJWF9GTVRfWFYzNkxFLCAgICAgIC8vLzwgcGFja2VkIFhW WVUgNDo0OjQsIDQ4YnBwLCBkYXRhIGluIHRoZSBoaWdoIGJpdHMsIHplcm9zIGluIHRoZSBsb3cg Yml0cywgbGl0dGxlLWVuZGlhbiwgdmFyaWFudCBvZiBZNDEyIHdoZXJlIGFscGhhIGNoYW5uZWwg aXMgbGVmdCB1bmRlZmluZWQKKysKKysgICAgQVZfUElYX0ZNVF9SR0JGMzJCRSwgICAgLy8vPCBJ RUVFLTc1NCBzaW5nbGUgcHJlY2lzaW9uIHBhY2tlZCBSR0IgMzI6MzI6MzIsIDk2YnBwLCBSR0JS R0IuLi4sIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9SR0JGMzJMRSwgICAgLy8vPCBJRUVF LTc1NCBzaW5nbGUgcHJlY2lzaW9uIHBhY2tlZCBSR0IgMzI6MzI6MzIsIDk2YnBwLCBSR0JSR0Iu Li4sIGxpdHRsZS1lbmRpYW4KKysKKysgICAgQVZfUElYX0ZNVF9SR0JBRjMyQkUsICAgLy8vPCBJ RUVFLTc1NCBzaW5nbGUgcHJlY2lzaW9uIHBhY2tlZCBSR0JBIDMyOjMyOjMyOjMyLCAxMjhicHAs IFJHQkFSR0JBLi4uLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfUkdCQUYzMkxFLCAgIC8v LzwgSUVFRS03NTQgc2luZ2xlIHByZWNpc2lvbiBwYWNrZWQgUkdCQSAzMjozMjozMjozMiwgMTI4 YnBwLCBSR0JBUkdCQS4uLiwgbGl0dGxlLWVuZGlhbgorKworKyAgICBBVl9QSVhfRk1UX1AyMTJC RSwgICAgICAvLy88IGludGVybGVhdmVkIGNocm9tYSBZVVYgNDoyOjIsIDI0YnBwLCBkYXRhIGlu IHRoZSBoaWdoIGJpdHMsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9QMjEyTEUsICAgICAg Ly8vPCBpbnRlcmxlYXZlZCBjaHJvbWEgWVVWIDQ6MjoyLCAyNGJwcCwgZGF0YSBpbiB0aGUgaGln aCBiaXRzLCBsaXR0bGUtZW5kaWFuCisrCisrICAgIEFWX1BJWF9GTVRfUDQxMkJFLCAgICAgIC8v LzwgaW50ZXJsZWF2ZWQgY2hyb21hIFlVViA0OjQ6NCwgMzZicHAsIGRhdGEgaW4gdGhlIGhpZ2gg Yml0cywgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX1A0MTJMRSwgICAgICAvLy88IGludGVy bGVhdmVkIGNocm9tYSBZVVYgNDo0OjQsIDM2YnBwLCBkYXRhIGluIHRoZSBoaWdoIGJpdHMsIGxp dHRsZS1lbmRpYW4KKysKKysgICAgQVZfUElYX0ZNVF9HQlJBUDE0QkUsICAvLy88IHBsYW5hciBH QlIgNDo0OjQ6NCA1NmJwcCwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0dCUkFQMTRMRSwg IC8vLzwgcGxhbmFyIEdCUiA0OjQ6NDo0IDU2YnBwLCBsaXR0bGUtZW5kaWFuCisrCisrICAgIC8q KgorKyAgICAgKiBIYXJkd2FyZSBzdXJmYWNlcyBmb3IgRGlyZWN0M0QgMTIuCisrICAgICAqCisr ICAgICAqIGRhdGFbMF0gcG9pbnRzIHRvIGFuIEFWRDNEMTJWQUZyYW1lCisrICAgICAqLworKyAg ICBBVl9QSVhfRk1UX0QzRDEyLAorKworKyAgICBBVl9QSVhfRk1UX0FZVVYsICAgICAgICAvLy88 IHBhY2tlZCBBWVVWIDQ6NDo0OjQsIDMyYnBwICgxIENyICYgQ2Igc2FtcGxlIHBlciAxeDEgWSAm IEEgc2FtcGxlcyksIEFZVVZBWVVWLi4uCisrCisrICAgIEFWX1BJWF9GTVRfVVlWQSwgICAgICAg IC8vLzwgcGFja2VkIFVZVkEgNDo0OjQ6NCwgMzJicHAgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDF4 MSBZICYgQSBzYW1wbGVzKSwgVVlWQVVZVkEuLi4KKysKKysgICAgQVZfUElYX0ZNVF9WWVU0NDQs ICAgICAgLy8vPCBwYWNrZWQgVllVIDQ6NDo0LCAyNGJwcCAoMSBDciAmIENiIHNhbXBsZSBwZXIg MXgxIFkpLCBWWVVWWVUuLi4KKysKKysgICAgQVZfUElYX0ZNVF9WMzBYQkUsICAgICAgLy8vPCBw YWNrZWQgVllVWCA0OjQ6NCBsaWtlIFhWMzAsIDMyYnBwLCAobXNiKTEwViAxMFkgMTBVIDJYKGxz YiksIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9WMzBYTEUsICAgICAgLy8vPCBwYWNrZWQg VllVWCA0OjQ6NCBsaWtlIFhWMzAsIDMyYnBwLCAobXNiKTEwViAxMFkgMTBVIDJYKGxzYiksIGxp dHRsZS1lbmRpYW4KKysKKysgICAgQVZfUElYX0ZNVF9SR0JGMTZCRSwgICAgLy8vPCBJRUVFLTc1 NCBoYWxmIHByZWNpc2lvbiBwYWNrZWQgUkdCIDE2OjE2OjE2LCA0OGJwcCwgUkdCUkdCLi4uLCBi aWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfUkdCRjE2TEUsICAgIC8vLzwgSUVFRS03NTQgaGFs ZiBwcmVjaXNpb24gcGFja2VkIFJHQiAxNjoxNjoxNiwgNDhicHAsIFJHQlJHQi4uLiwgbGl0dGxl LWVuZGlhbgorKworKyAgICBBVl9QSVhfRk1UX1JHQkExMjhCRSwgICAvLy88IHBhY2tlZCBSR0JB IDMyOjMyOjMyOjMyLCAxMjhicHAsIFJHQkFSR0JBLi4uLCBiaWctZW5kaWFuCisrICAgIEFWX1BJ WF9GTVRfUkdCQTEyOExFLCAgIC8vLzwgcGFja2VkIFJHQkEgMzI6MzI6MzI6MzIsIDEyOGJwcCwg UkdCQVJHQkEuLi4sIGxpdHRsZS1lbmRpYW4KKysKKysgICAgQVZfUElYX0ZNVF9SR0I5NkJFLCAg ICAgLy8vPCBwYWNrZWQgUkdCQSAzMjozMjozMiwgOTZicHAsIFJHQlJHQi4uLiwgYmlnLWVuZGlh bgorKyAgICBBVl9QSVhfRk1UX1JHQjk2TEUsICAgICAvLy88IHBhY2tlZCBSR0JBIDMyOjMyOjMy LCA5NmJwcCwgUkdCUkdCLi4uLCBsaXR0bGUtZW5kaWFuCisrCisrICAgIEFWX1BJWF9GTVRfWTIx NkJFLCAgICAgIC8vLzwgcGFja2VkIFlVViA0OjI6MiBsaWtlIFlVWVY0MjIsIDMyYnBwLCBiaWct ZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWTIxNkxFLCAgICAgIC8vLzwgcGFja2VkIFlVViA0OjI6 MiBsaWtlIFlVWVY0MjIsIDMyYnBwLCBsaXR0bGUtZW5kaWFuCisrCisrICAgIEFWX1BJWF9GTVRf WFY0OEJFLCAgICAgIC8vLzwgcGFja2VkIFhWWVUgNDo0OjQsIDY0YnBwLCBiaWctZW5kaWFuLCB2 YXJpYW50IG9mIFk0MTYgd2hlcmUgYWxwaGEgY2hhbm5lbCBpcyBsZWZ0IHVuZGVmaW5lZAorKyAg ICBBVl9QSVhfRk1UX1hWNDhMRSwgICAgICAvLy88IHBhY2tlZCBYVllVIDQ6NDo0LCA2NGJwcCwg bGl0dGxlLWVuZGlhbiwgdmFyaWFudCBvZiBZNDE2IHdoZXJlIGFscGhhIGNoYW5uZWwgaXMgbGVm dCB1bmRlZmluZWQKKysKKysgICAgQVZfUElYX0ZNVF9HQlJQRjE2QkUsICAvLy88IElFRUUtNzU0 IGhhbGYgcHJlY2lzaW9uIHBsYW5lciBHQlIgNDo0OjQsIDQ4YnBwLCBiaWctZW5kaWFuCisrICAg IEFWX1BJWF9GTVRfR0JSUEYxNkxFLCAgLy8vPCBJRUVFLTc1NCBoYWxmIHByZWNpc2lvbiBwbGFu ZXIgR0JSIDQ6NDo0LCA0OGJwcCwgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0dCUkFQ RjE2QkUsIC8vLzwgSUVFRS03NTQgaGFsZiBwcmVjaXNpb24gcGxhbmFyIEdCUkEgNDo0OjQ6NCwg NjRicHAsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HQlJBUEYxNkxFLCAvLy88IElFRUUt NzU0IGhhbGYgcHJlY2lzaW9uIHBsYW5hciBHQlJBIDQ6NDo0OjQsIDY0YnBwLCBsaXR0bGUtZW5k aWFuCisrCisrICAgIEFWX1BJWF9GTVRfR1JBWUYxNkJFLCAgLy8vPCBJRUVFLTc1NCBoYWxmIHBy ZWNpc2lvbiBZLCAxNmJwcCwgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0dSQVlGMTZMRSwg IC8vLzwgSUVFRS03NTQgaGFsZiBwcmVjaXNpb24gWSwgMTZicHAsIGxpdHRsZS1lbmRpYW4KKysK KysgICAgLyoqCisrICAgICAqIEhXIGFjY2VsZXJhdGlvbiB0aHJvdWdoIEFNRi4gZGF0YVswXSBj b250YWluIEFNRlN1cmZhY2UgcG9pbnRlcgorKyAgICAgKi8KKysgICAgQVZfUElYX0ZNVF9BTUZf U1VSRkFDRSwKKysKKysgICAgQVZfUElYX0ZNVF9HUkFZMzJCRSwgICAgLy8vPCAgICAgICAgIFkg ICAgICAgICwgMzJicHAsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HUkFZMzJMRSwgICAg Ly8vPCAgICAgICAgIFkgICAgICAgICwgMzJicHAsIGxpdHRsZS1lbmRpYW4KKysKKysgICAgQVZf UElYX0ZNVF9ZQUYzMkJFLCAgLy8vPCBJRUVFLTc1NCBzaW5nbGUgcHJlY2lzaW9uIHBhY2tlZCBZ QSwgMzIgYml0cyBncmF5LCAzMiBiaXRzIGFscGhhLCA2NGJwcCwgYmlnLWVuZGlhbgorKyAgICBB Vl9QSVhfRk1UX1lBRjMyTEUsICAvLy88IElFRUUtNzU0IHNpbmdsZSBwcmVjaXNpb24gcGFja2Vk IFlBLCAzMiBiaXRzIGdyYXksIDMyIGJpdHMgYWxwaGEsIDY0YnBwLCBsaXR0bGUtZW5kaWFuCisr CisrICAgIEFWX1BJWF9GTVRfWUFGMTZCRSwgIC8vLzwgSUVFRS03NTQgaGFsZiBwcmVjaXNpb24g cGFja2VkIFlBLCAxNiBiaXRzIGdyYXksIDE2IGJpdHMgYWxwaGEsIDMyYnBwLCBiaWctZW5kaWFu CisrICAgIEFWX1BJWF9GTVRfWUFGMTZMRSwgIC8vLzwgSUVFRS03NTQgaGFsZiBwcmVjaXNpb24g cGFja2VkIFlBLCAxNiBiaXRzIGdyYXksIDE2IGJpdHMgYWxwaGEsIDMyYnBwLCBsaXR0bGUtZW5k aWFuCisrCisrICAgIEFWX1BJWF9GTVRfR0JSQVAzMkJFLCAgIC8vLzwgcGxhbmFyIEdCUkEgNDo0 OjQ6NCAxMjhicHAsIGJpZy1lbmRpYW4KKysgICAgQVZfUElYX0ZNVF9HQlJBUDMyTEUsICAgLy8v PCBwbGFuYXIgR0JSQSA0OjQ6NDo0IDEyOGJwcCwgbGl0dGxlLWVuZGlhbgorKworKyAgICBBVl9Q SVhfRk1UX1lVVjQ0NFAxME1TQkJFLCAvLy88IHBsYW5hciBZVVYgNDo0OjQsIDMwYnBwLCAoMSBD ciAmIENiIHNhbXBsZSBwZXIgMXgxIFkgc2FtcGxlcyksIGxvd2VzdCBiaXRzIHplcm8sIGJpZy1l bmRpYW4KKysgICAgQVZfUElYX0ZNVF9ZVVY0NDRQMTBNU0JMRSwgLy8vPCBwbGFuYXIgWVVWIDQ6 NDo0LCAzMGJwcCwgKDEgQ3IgJiBDYiBzYW1wbGUgcGVyIDF4MSBZIHNhbXBsZXMpLCBsb3dlc3Qg Yml0cyB6ZXJvLCBsaXR0bGUtZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfWVVWNDQ0UDEyTVNCQkUs IC8vLzwgcGxhbmFyIFlVViA0OjQ6NCwgMzBicHAsICgxIENyICYgQ2Igc2FtcGxlIHBlciAxeDEg WSBzYW1wbGVzKSwgbG93ZXN0IGJpdHMgemVybywgYmlnLWVuZGlhbgorKyAgICBBVl9QSVhfRk1U X1lVVjQ0NFAxMk1TQkxFLCAvLy88IHBsYW5hciBZVVYgNDo0OjQsIDMwYnBwLCAoMSBDciAmIENi IHNhbXBsZSBwZXIgMXgxIFkgc2FtcGxlcyksIGxvd2VzdCBiaXRzIHplcm8sIGxpdHRsZS1lbmRp YW4KKysgICAgQVZfUElYX0ZNVF9HQlJQMTBNU0JCRSwgICAgLy8vPCBwbGFuYXIgR0JSIDQ6NDo0 IDMwYnBwLCBsb3dlc3QgYml0cyB6ZXJvLCBiaWctZW5kaWFuCisrICAgIEFWX1BJWF9GTVRfR0JS UDEwTVNCTEUsICAgIC8vLzwgcGxhbmFyIEdCUiA0OjQ6NCAzMGJwcCwgbG93ZXN0IGJpdHMgemVy bywgbGl0dGxlLWVuZGlhbgorKyAgICBBVl9QSVhfRk1UX0dCUlAxMk1TQkJFLCAgICAvLy88IHBs YW5hciBHQlIgNDo0OjQgMzZicHAsIGxvd2VzdCBiaXRzIHplcm8sIGJpZy1lbmRpYW4KKysgICAg QVZfUElYX0ZNVF9HQlJQMTJNU0JMRSwgICAgLy8vPCBwbGFuYXIgR0JSIDQ6NDo0IDM2YnBwLCBs b3dlc3QgYml0cyB6ZXJvLCBsaXR0bGUtZW5kaWFuCisrCisrICAgIEFWX1BJWF9GTVRfT0hDT0RF QywgLy8vIGhhcmR3YXJlIGRlY29kaW5nIHRocm91Z2ggb3Blbmhhcm1vbnkKKysKKysgICAgQVZf UElYX0ZNVF9OQiAgICAgICAgIC8vLzwgbnVtYmVyIG9mIHBpeGVsIGZvcm1hdHMsIERPIE5PVCBV U0UgVEhJUyBpZiB5b3Ugd2FudCB0byBsaW5rIHdpdGggc2hhcmVkIGxpYmF2KiBiZWNhdXNlIHRo ZSBudW1iZXIgb2YgZm9ybWF0cyBtaWdodCBkaWZmZXIgYmV0d2VlbiB2ZXJzaW9ucworK307Cisr CisrI2lmIEFWX0hBVkVfQklHRU5ESUFOCisrIyAgIGRlZmluZSBBVl9QSVhfRk1UX05FKGJlLCBs ZSkgQVZfUElYX0ZNVF8jI2JlCisrI2Vsc2UKKysjICAgZGVmaW5lIEFWX1BJWF9GTVRfTkUoYmUs IGxlKSBBVl9QSVhfRk1UXyMjbGUKKysjZW5kaWYKKysKKysjZGVmaW5lIEFWX1BJWF9GTVRfUkdC MzIgICBBVl9QSVhfRk1UX05FKEFSR0IsIEJHUkEpCisrI2RlZmluZSBBVl9QSVhfRk1UX1JHQjMy XzEgQVZfUElYX0ZNVF9ORShSR0JBLCBBQkdSKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9CR1IzMiAg IEFWX1BJWF9GTVRfTkUoQUJHUiwgUkdCQSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfQkdSMzJfMSBB Vl9QSVhfRk1UX05FKEJHUkEsIEFSR0IpCisrI2RlZmluZSBBVl9QSVhfRk1UXzBSR0IzMiAgQVZf UElYX0ZNVF9ORSgwUkdCLCBCR1IwKQorKyNkZWZpbmUgQVZfUElYX0ZNVF8wQkdSMzIgIEFWX1BJ WF9GTVRfTkUoMEJHUiwgUkdCMCkKKysKKysjZGVmaW5lIEFWX1BJWF9GTVRfR1JBWTkgIEFWX1BJ WF9GTVRfTkUoR1JBWTlCRSwgIEdSQVk5TEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX0dSQVkxMCBB Vl9QSVhfRk1UX05FKEdSQVkxMEJFLCBHUkFZMTBMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfR1JB WTEyIEFWX1BJWF9GTVRfTkUoR1JBWTEyQkUsIEdSQVkxMkxFKQorKyNkZWZpbmUgQVZfUElYX0ZN VF9HUkFZMTQgQVZfUElYX0ZNVF9ORShHUkFZMTRCRSwgR1JBWTE0TEUpCisrI2RlZmluZSBBVl9Q SVhfRk1UX0dSQVkxNiBBVl9QSVhfRk1UX05FKEdSQVkxNkJFLCBHUkFZMTZMRSkKKysjZGVmaW5l IEFWX1BJWF9GTVRfR1JBWTMyIEFWX1BJWF9GTVRfTkUoR1JBWTMyQkUsIEdSQVkzMkxFKQorKyNk ZWZpbmUgQVZfUElYX0ZNVF9ZQTE2ICAgQVZfUElYX0ZNVF9ORShZQTE2QkUsICAgWUExNkxFKQor KyNkZWZpbmUgQVZfUElYX0ZNVF9SR0I0OCAgQVZfUElYX0ZNVF9ORShSR0I0OEJFLCAgUkdCNDhM RSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfUkdCNTY1IEFWX1BJWF9GTVRfTkUoUkdCNTY1QkUsIFJH QjU2NUxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9SR0I1NTUgQVZfUElYX0ZNVF9ORShSR0I1NTVC RSwgUkdCNTU1TEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX1JHQjQ0NCBBVl9QSVhfRk1UX05FKFJH QjQ0NEJFLCBSR0I0NDRMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfUkdCQTY0IEFWX1BJWF9GTVRf TkUoUkdCQTY0QkUsIFJHQkE2NExFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9CR1I0OCAgQVZfUElY X0ZNVF9ORShCR1I0OEJFLCAgQkdSNDhMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfQkdSNTY1IEFW X1BJWF9GTVRfTkUoQkdSNTY1QkUsIEJHUjU2NUxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9CR1I1 NTUgQVZfUElYX0ZNVF9ORShCR1I1NTVCRSwgQkdSNTU1TEUpCisrI2RlZmluZSBBVl9QSVhfRk1U X0JHUjQ0NCBBVl9QSVhfRk1UX05FKEJHUjQ0NEJFLCBCR1I0NDRMRSkKKysjZGVmaW5lIEFWX1BJ WF9GTVRfQkdSQTY0IEFWX1BJWF9GTVRfTkUoQkdSQTY0QkUsIEJHUkE2NExFKQorKworKyNkZWZp bmUgQVZfUElYX0ZNVF9ZVVY0MjBQOSAgQVZfUElYX0ZNVF9ORShZVVY0MjBQOUJFICwgWVVWNDIw UDlMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWVVWNDIyUDkgIEFWX1BJWF9GTVRfTkUoWVVWNDIy UDlCRSAsIFlVVjQyMlA5TEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX1lVVjQ0NFA5ICBBVl9QSVhf Rk1UX05FKFlVVjQ0NFA5QkUgLCBZVVY0NDRQOUxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZVVY0 MjBQMTAgQVZfUElYX0ZNVF9ORShZVVY0MjBQMTBCRSwgWVVWNDIwUDEwTEUpCisrI2RlZmluZSBB Vl9QSVhfRk1UX1lVVjQyMlAxMCBBVl9QSVhfRk1UX05FKFlVVjQyMlAxMEJFLCBZVVY0MjJQMTBM RSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWVVWNDQwUDEwIEFWX1BJWF9GTVRfTkUoWVVWNDQwUDEw QkUsIFlVVjQ0MFAxMExFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZVVY0NDRQMTAgQVZfUElYX0ZN VF9ORShZVVY0NDRQMTBCRSwgWVVWNDQ0UDEwTEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX1lVVjQy MFAxMiBBVl9QSVhfRk1UX05FKFlVVjQyMFAxMkJFLCBZVVY0MjBQMTJMRSkKKysjZGVmaW5lIEFW X1BJWF9GTVRfWVVWNDIyUDEyIEFWX1BJWF9GTVRfTkUoWVVWNDIyUDEyQkUsIFlVVjQyMlAxMkxF KQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZVVY0NDBQMTIgQVZfUElYX0ZNVF9ORShZVVY0NDBQMTJC RSwgWVVWNDQwUDEyTEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX1lVVjQ0NFAxMiBBVl9QSVhfRk1U X05FKFlVVjQ0NFAxMkJFLCBZVVY0NDRQMTJMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWVVWNDIw UDE0IEFWX1BJWF9GTVRfTkUoWVVWNDIwUDE0QkUsIFlVVjQyMFAxNExFKQorKyNkZWZpbmUgQVZf UElYX0ZNVF9ZVVY0MjJQMTQgQVZfUElYX0ZNVF9ORShZVVY0MjJQMTRCRSwgWVVWNDIyUDE0TEUp CisrI2RlZmluZSBBVl9QSVhfRk1UX1lVVjQ0NFAxNCBBVl9QSVhfRk1UX05FKFlVVjQ0NFAxNEJF LCBZVVY0NDRQMTRMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfWVVWNDIwUDE2IEFWX1BJWF9GTVRf TkUoWVVWNDIwUDE2QkUsIFlVVjQyMFAxNkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZVVY0MjJQ MTYgQVZfUElYX0ZNVF9ORShZVVY0MjJQMTZCRSwgWVVWNDIyUDE2TEUpCisrI2RlZmluZSBBVl9Q SVhfRk1UX1lVVjQ0NFAxNiBBVl9QSVhfRk1UX05FKFlVVjQ0NFAxNkJFLCBZVVY0NDRQMTZMRSkK KysKKysjZGVmaW5lIEFWX1BJWF9GTVRfWVVWNDQ0UDEwTVNCIEFWX1BJWF9GTVRfTkUoWVVWNDQ0 UDEwTVNCQkUsIFlVVjQ0NFAxME1TQkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZVVY0NDRQMTJN U0IgQVZfUElYX0ZNVF9ORShZVVY0NDRQMTJNU0JCRSwgWVVWNDQ0UDEyTVNCTEUpCisrCisrI2Rl ZmluZSBBVl9QSVhfRk1UX0dCUlA5ICAgICBBVl9QSVhfRk1UX05FKEdCUlA5QkUgLCAgICBHQlJQ OUxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9HQlJQMTAgICAgQVZfUElYX0ZNVF9ORShHQlJQMTBC RSwgICAgR0JSUDEwTEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX0dCUlAxMiAgICBBVl9QSVhfRk1U X05FKEdCUlAxMkJFLCAgICBHQlJQMTJMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfR0JSUDE0ICAg IEFWX1BJWF9GTVRfTkUoR0JSUDE0QkUsICAgIEdCUlAxNExFKQorKyNkZWZpbmUgQVZfUElYX0ZN VF9HQlJQMTYgICAgQVZfUElYX0ZNVF9ORShHQlJQMTZCRSwgICAgR0JSUDE2TEUpCisrI2RlZmlu ZSBBVl9QSVhfRk1UX0dCUkFQMTAgICBBVl9QSVhfRk1UX05FKEdCUkFQMTBCRSwgICBHQlJBUDEw TEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX0dCUkFQMTIgICBBVl9QSVhfRk1UX05FKEdCUkFQMTJC RSwgICBHQlJBUDEyTEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX0dCUkFQMTQgICBBVl9QSVhfRk1U X05FKEdCUkFQMTRCRSwgICBHQlJBUDE0TEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX0dCUkFQMTYg ICBBVl9QSVhfRk1UX05FKEdCUkFQMTZCRSwgICBHQlJBUDE2TEUpCisrI2RlZmluZSBBVl9QSVhf Rk1UX0dCUkFQMzIgICBBVl9QSVhfRk1UX05FKEdCUkFQMzJCRSwgICBHQlJBUDMyTEUpCisrCisr I2RlZmluZSBBVl9QSVhfRk1UX0dCUlAxME1TQiBBVl9QSVhfRk1UX05FKEdCUlAxME1TQkJFLCBH QlJQMTBNU0JMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfR0JSUDEyTVNCIEFWX1BJWF9GTVRfTkUo R0JSUDEyTVNCQkUsIEdCUlAxMk1TQkxFKQorKworKyNkZWZpbmUgQVZfUElYX0ZNVF9CQVlFUl9C R0dSMTYgQVZfUElYX0ZNVF9ORShCQVlFUl9CR0dSMTZCRSwgICAgQkFZRVJfQkdHUjE2TEUpCisr I2RlZmluZSBBVl9QSVhfRk1UX0JBWUVSX1JHR0IxNiBBVl9QSVhfRk1UX05FKEJBWUVSX1JHR0Ix NkJFLCAgICBCQVlFUl9SR0dCMTZMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfQkFZRVJfR0JSRzE2 IEFWX1BJWF9GTVRfTkUoQkFZRVJfR0JSRzE2QkUsICAgIEJBWUVSX0dCUkcxNkxFKQorKyNkZWZp bmUgQVZfUElYX0ZNVF9CQVlFUl9HUkJHMTYgQVZfUElYX0ZNVF9ORShCQVlFUl9HUkJHMTZCRSwg ICAgQkFZRVJfR1JCRzE2TEUpCisrCisrI2RlZmluZSBBVl9QSVhfRk1UX0dCUlBGMTYgICAgQVZf UElYX0ZNVF9ORShHQlJQRjE2QkUsICBHQlJQRjE2TEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX0dC UkFQRjE2ICAgQVZfUElYX0ZNVF9ORShHQlJBUEYxNkJFLCBHQlJBUEYxNkxFKQorKyNkZWZpbmUg QVZfUElYX0ZNVF9HQlJQRjMyICAgIEFWX1BJWF9GTVRfTkUoR0JSUEYzMkJFLCAgR0JSUEYzMkxF KQorKyNkZWZpbmUgQVZfUElYX0ZNVF9HQlJBUEYzMiAgIEFWX1BJWF9GTVRfTkUoR0JSQVBGMzJC RSwgR0JSQVBGMzJMRSkKKysKKysjZGVmaW5lIEFWX1BJWF9GTVRfR1JBWUYxNiAgICBBVl9QSVhf Rk1UX05FKEdSQVlGMTZCRSwgR1JBWUYxNkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9HUkFZRjMy ICAgIEFWX1BJWF9GTVRfTkUoR1JBWUYzMkJFLCBHUkFZRjMyTEUpCisrCisrI2RlZmluZSBBVl9Q SVhfRk1UX1lBRjE2ICAgICAgQVZfUElYX0ZNVF9ORShZQUYxNkJFLCBZQUYxNkxFKQorKyNkZWZp bmUgQVZfUElYX0ZNVF9ZQUYzMiAgICAgIEFWX1BJWF9GTVRfTkUoWUFGMzJCRSwgWUFGMzJMRSkK KysKKysjZGVmaW5lIEFWX1BJWF9GTVRfWVVWQTQyMFA5ICBBVl9QSVhfRk1UX05FKFlVVkE0MjBQ OUJFICwgWVVWQTQyMFA5TEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX1lVVkE0MjJQOSAgQVZfUElY X0ZNVF9ORShZVVZBNDIyUDlCRSAsIFlVVkE0MjJQOUxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9Z VVZBNDQ0UDkgIEFWX1BJWF9GTVRfTkUoWVVWQTQ0NFA5QkUgLCBZVVZBNDQ0UDlMRSkKKysjZGVm aW5lIEFWX1BJWF9GTVRfWVVWQTQyMFAxMCBBVl9QSVhfRk1UX05FKFlVVkE0MjBQMTBCRSwgWVVW QTQyMFAxMExFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZVVZBNDIyUDEwIEFWX1BJWF9GTVRfTkUo WVVWQTQyMlAxMEJFLCBZVVZBNDIyUDEwTEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX1lVVkE0NDRQ MTAgQVZfUElYX0ZNVF9ORShZVVZBNDQ0UDEwQkUsIFlVVkE0NDRQMTBMRSkKKysjZGVmaW5lIEFW X1BJWF9GTVRfWVVWQTQyMlAxMiBBVl9QSVhfRk1UX05FKFlVVkE0MjJQMTJCRSwgWVVWQTQyMlAx MkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZVVZBNDQ0UDEyIEFWX1BJWF9GTVRfTkUoWVVWQTQ0 NFAxMkJFLCBZVVZBNDQ0UDEyTEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX1lVVkE0MjBQMTYgQVZf UElYX0ZNVF9ORShZVVZBNDIwUDE2QkUsIFlVVkE0MjBQMTZMRSkKKysjZGVmaW5lIEFWX1BJWF9G TVRfWVVWQTQyMlAxNiBBVl9QSVhfRk1UX05FKFlVVkE0MjJQMTZCRSwgWVVWQTQyMlAxNkxFKQor KyNkZWZpbmUgQVZfUElYX0ZNVF9ZVVZBNDQ0UDE2IEFWX1BJWF9GTVRfTkUoWVVWQTQ0NFAxNkJF LCBZVVZBNDQ0UDE2TEUpCisrCisrI2RlZmluZSBBVl9QSVhfRk1UX1hZWjEyICAgICAgQVZfUElY X0ZNVF9ORShYWVoxMkJFLCBYWVoxMkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9OVjIwICAgICAg IEFWX1BJWF9GTVRfTkUoTlYyMEJFLCAgTlYyMExFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9BWVVW NjQgICAgIEFWX1BJWF9GTVRfTkUoQVlVVjY0QkUsIEFZVVY2NExFKQorKyNkZWZpbmUgQVZfUElY X0ZNVF9QMDEwICAgICAgIEFWX1BJWF9GTVRfTkUoUDAxMEJFLCAgUDAxMExFKQorKyNkZWZpbmUg QVZfUElYX0ZNVF9QMDEyICAgICAgIEFWX1BJWF9GTVRfTkUoUDAxMkJFLCAgUDAxMkxFKQorKyNk ZWZpbmUgQVZfUElYX0ZNVF9QMDE2ICAgICAgIEFWX1BJWF9GTVRfTkUoUDAxNkJFLCAgUDAxNkxF KQorKworKyNkZWZpbmUgQVZfUElYX0ZNVF9ZMjEwICAgICAgIEFWX1BJWF9GTVRfTkUoWTIxMEJF LCAgWTIxMExFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZMjEyICAgICAgIEFWX1BJWF9GTVRfTkUo WTIxMkJFLCAgWTIxMkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9ZMjE2ICAgICAgIEFWX1BJWF9G TVRfTkUoWTIxNkJFLCAgWTIxNkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9YVjMwICAgICAgIEFW X1BJWF9GTVRfTkUoWFYzMEJFLCAgWFYzMExFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9YVjM2ICAg ICAgIEFWX1BJWF9GTVRfTkUoWFYzNkJFLCAgWFYzNkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9Y VjQ4ICAgICAgIEFWX1BJWF9GTVRfTkUoWFY0OEJFLCAgWFY0OExFKQorKyNkZWZpbmUgQVZfUElY X0ZNVF9WMzBYICAgICAgIEFWX1BJWF9GTVRfTkUoVjMwWEJFLCAgVjMwWExFKQorKyNkZWZpbmUg QVZfUElYX0ZNVF9YMlJHQjEwICAgIEFWX1BJWF9GTVRfTkUoWDJSR0IxMEJFLCBYMlJHQjEwTEUp CisrI2RlZmluZSBBVl9QSVhfRk1UX1gyQkdSMTAgICAgQVZfUElYX0ZNVF9ORShYMkJHUjEwQkUs IFgyQkdSMTBMRSkKKysKKysjZGVmaW5lIEFWX1BJWF9GTVRfUDIxMCAgICAgICBBVl9QSVhfRk1U X05FKFAyMTBCRSwgUDIxMExFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9QNDEwICAgICAgIEFWX1BJ WF9GTVRfTkUoUDQxMEJFLCBQNDEwTEUpCisrI2RlZmluZSBBVl9QSVhfRk1UX1AyMTIgICAgICAg QVZfUElYX0ZNVF9ORShQMjEyQkUsIFAyMTJMRSkKKysjZGVmaW5lIEFWX1BJWF9GTVRfUDQxMiAg ICAgICBBVl9QSVhfRk1UX05FKFA0MTJCRSwgUDQxMkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9Q MjE2ICAgICAgIEFWX1BJWF9GTVRfTkUoUDIxNkJFLCBQMjE2TEUpCisrI2RlZmluZSBBVl9QSVhf Rk1UX1A0MTYgICAgICAgQVZfUElYX0ZNVF9ORShQNDE2QkUsIFA0MTZMRSkKKysKKysjZGVmaW5l IEFWX1BJWF9GTVRfUkdCRjE2ICAgICBBVl9QSVhfRk1UX05FKFJHQkYxNkJFLCBSR0JGMTZMRSkK KysjZGVmaW5lIEFWX1BJWF9GTVRfUkdCQUYxNiAgICBBVl9QSVhfRk1UX05FKFJHQkFGMTZCRSwg UkdCQUYxNkxFKQorKworKyNkZWZpbmUgQVZfUElYX0ZNVF9SR0JGMzIgICAgIEFWX1BJWF9GTVRf TkUoUkdCRjMyQkUsIFJHQkYzMkxFKQorKyNkZWZpbmUgQVZfUElYX0ZNVF9SR0JBRjMyICAgIEFW X1BJWF9GTVRfTkUoUkdCQUYzMkJFLCBSR0JBRjMyTEUpCisrCisrI2RlZmluZSBBVl9QSVhfRk1U X1JHQjk2ICAgICAgQVZfUElYX0ZNVF9ORShSR0I5NkJFLCBSR0I5NkxFKQorKyNkZWZpbmUgQVZf UElYX0ZNVF9SR0JBMTI4ICAgIEFWX1BJWF9GTVRfTkUoUkdCQTEyOEJFLCBSR0JBMTI4TEUpCisr CisrLyoqCisrICAqIENocm9tYXRpY2l0eSBjb29yZGluYXRlcyBvZiB0aGUgc291cmNlIHByaW1h cmllcy4KKysgICogVGhlc2UgdmFsdWVzIG1hdGNoIHRoZSBvbmVzIGRlZmluZWQgYnkgSVNPL0lF QyAyMzA5MS0yXzIwMTkgc3ViY2xhdXNlIDguMSBhbmQgSVRVLVQgSC4yNzMuCisrICAqLworK2Vu dW0gQVZDb2xvclByaW1hcmllcyB7CisrICAgIEFWQ09MX1BSSV9SRVNFUlZFRDAgICA9IDAsCisr ICAgIEFWQ09MX1BSSV9CVDcwOSAgICAgICA9IDEsICAvLy88IGFsc28gSVRVLVIgQlQxMzYxIC8g SUVDIDYxOTY2LTItNCAvIFNNUFRFIFJQIDE3NyBBbm5leCBCCisrICAgIEFWQ09MX1BSSV9VTlNQ RUNJRklFRCA9IDIsCisrICAgIEFWQ09MX1BSSV9SRVNFUlZFRCAgICA9IDMsCisrICAgIEFWQ09M X1BSSV9CVDQ3ME0gICAgICA9IDQsICAvLy88IGFsc28gRkNDIFRpdGxlIDQ3IENvZGUgb2YgRmVk ZXJhbCBSZWd1bGF0aW9ucyA3My42ODIgKGEpKDIwKQorKworKyAgICBBVkNPTF9QUklfQlQ0NzBC RyAgICAgPSA1LCAgLy8vPCBhbHNvIElUVS1SIEJUNjAxLTYgNjI1IC8gSVRVLVIgQlQxMzU4IDYy NSAvIElUVS1SIEJUMTcwMCA2MjUgUEFMICYgU0VDQU0KKysgICAgQVZDT0xfUFJJX1NNUFRFMTcw TSAgID0gNiwgIC8vLzwgYWxzbyBJVFUtUiBCVDYwMS02IDUyNSAvIElUVS1SIEJUMTM1OCA1MjUg LyBJVFUtUiBCVDE3MDAgTlRTQworKyAgICBBVkNPTF9QUklfU01QVEUyNDBNICAgPSA3LCAgLy8v PCBpZGVudGljYWwgdG8gYWJvdmUsIGFsc28gY2FsbGVkICJTTVBURSBDIiBldmVuIHRob3VnaCBp dCB1c2VzIEQ2NQorKyAgICBBVkNPTF9QUklfRklMTSAgICAgICAgPSA4LCAgLy8vPCBjb2xvdXIg ZmlsdGVycyB1c2luZyBJbGx1bWluYW50IEMKKysgICAgQVZDT0xfUFJJX0JUMjAyMCAgICAgID0g OSwgIC8vLzwgSVRVLVIgQlQyMDIwCisrICAgIEFWQ09MX1BSSV9TTVBURTQyOCAgICA9IDEwLCAv Ly88IFNNUFRFIFNUIDQyOC0xIChDSUUgMTkzMSBYWVopCisrICAgIEFWQ09MX1BSSV9TTVBURVNU NDI4XzEgPSBBVkNPTF9QUklfU01QVEU0MjgsCisrICAgIEFWQ09MX1BSSV9TTVBURTQzMSAgICA9 IDExLCAvLy88IFNNUFRFIFNUIDQzMS0yICgyMDExKSAvIERDSSBQMworKyAgICBBVkNPTF9QUklf U01QVEU0MzIgICAgPSAxMiwgLy8vPCBTTVBURSBTVCA0MzItMSAoMjAxMCkgLyBQMyBENjUgLyBE aXNwbGF5IFAzCisrICAgIEFWQ09MX1BSSV9FQlUzMjEzICAgICA9IDIyLCAvLy88IEVCVSBUZWNo LiAzMjEzLUUgKG5vdGhpbmcgdGhlcmUpIC8gb25lIG9mIEpFREVDIFAyMiBncm91cCBwaG9zcGhv cnMKKysgICAgQVZDT0xfUFJJX0pFREVDX1AyMiAgID0gQVZDT0xfUFJJX0VCVTMyMTMsCisrICAg IEFWQ09MX1BSSV9OQiwgICAgICAgICAgICAgICAvLy88IE5vdCBwYXJ0IG9mIEFCSQorKworKyAg ICAvKiBUaGUgZm9sbG93aW5nIGVudHJpZXMgYXJlIG5vdCBwYXJ0IG9mIEguMjczLCBidXQgY3Vz dG9tIGV4dGVuc2lvbnMgKi8KKysgICAgQVZDT0xfUFJJX0VYVF9CQVNFICAgICA9IDI1NiwKKysg ICAgQVZDT0xfUFJJX1ZfR0FNVVQgICAgICA9IEFWQ09MX1BSSV9FWFRfQkFTRSwKKysgICAgQVZD T0xfUFJJX0VYVF9OQiAgICAgICAgICAgIC8vLzwgTm90IHBhcnQgb2YgQUJJCisrfTsKKysKKysv KioKKysgKiBDb2xvciBUcmFuc2ZlciBDaGFyYWN0ZXJpc3RpYy4KKysgKiBUaGVzZSB2YWx1ZXMg bWF0Y2ggdGhlIG9uZXMgZGVmaW5lZCBieSBJU08vSUVDIDIzMDkxLTJfMjAxOSBzdWJjbGF1c2Ug OC4yLgorKyAqLworK2VudW0gQVZDb2xvclRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMgeworKyAgICBB VkNPTF9UUkNfUkVTRVJWRUQwICAgID0gMCwKKysgICAgQVZDT0xfVFJDX0JUNzA5ICAgICAgICA9 IDEsICAvLy88IGFsc28gSVRVLVIgQlQxMzYxCisrICAgIEFWQ09MX1RSQ19VTlNQRUNJRklFRCAg PSAyLAorKyAgICBBVkNPTF9UUkNfUkVTRVJWRUQgICAgID0gMywKKysgICAgQVZDT0xfVFJDX0dB TU1BMjIgICAgICA9IDQsICAvLy88IGFsc28gSVRVLVIgQlQ0NzBNIC8gSVRVLVIgQlQxNzAwIDYy NSBQQUwgJiBTRUNBTQorKyAgICBBVkNPTF9UUkNfR0FNTUEyOCAgICAgID0gNSwgIC8vLzwgYWxz byBJVFUtUiBCVDQ3MEJHCisrICAgIEFWQ09MX1RSQ19TTVBURTE3ME0gICAgPSA2LCAgLy8vPCBh bHNvIElUVS1SIEJUNjAxLTYgNTI1IG9yIDYyNSAvIElUVS1SIEJUMTM1OCA1MjUgb3IgNjI1IC8g SVRVLVIgQlQxNzAwIE5UU0MKKysgICAgQVZDT0xfVFJDX1NNUFRFMjQwTSAgICA9IDcsCisrICAg IEFWQ09MX1RSQ19MSU5FQVIgICAgICAgPSA4LCAgLy8vPCAiTGluZWFyIHRyYW5zZmVyIGNoYXJh Y3RlcmlzdGljcyIKKysgICAgQVZDT0xfVFJDX0xPRyAgICAgICAgICA9IDksICAvLy88ICJMb2dh cml0aG1pYyB0cmFuc2ZlciBjaGFyYWN0ZXJpc3RpYyAoMTAwOjEgcmFuZ2UpIgorKyAgICBBVkNP TF9UUkNfTE9HX1NRUlQgICAgID0gMTAsIC8vLzwgIkxvZ2FyaXRobWljIHRyYW5zZmVyIGNoYXJh Y3RlcmlzdGljICgxMDAgKiBTcXJ0KDEwKSA6IDEgcmFuZ2UpIgorKyAgICBBVkNPTF9UUkNfSUVD NjE5NjZfMl80ID0gMTEsIC8vLzwgSUVDIDYxOTY2LTItNAorKyAgICBBVkNPTF9UUkNfQlQxMzYx X0VDRyAgID0gMTIsIC8vLzwgSVRVLVIgQlQxMzYxIEV4dGVuZGVkIENvbG91ciBHYW11dAorKyAg ICBBVkNPTF9UUkNfSUVDNjE5NjZfMl8xID0gMTMsIC8vLzwgSUVDIDYxOTY2LTItMSAoc1JHQiBv ciBzWUNDKQorKyAgICBBVkNPTF9UUkNfQlQyMDIwXzEwICAgID0gMTQsIC8vLzwgSVRVLVIgQlQy MDIwIGZvciAxMC1iaXQgc3lzdGVtCisrICAgIEFWQ09MX1RSQ19CVDIwMjBfMTIgICAgPSAxNSwg Ly8vPCBJVFUtUiBCVDIwMjAgZm9yIDEyLWJpdCBzeXN0ZW0KKysgICAgQVZDT0xfVFJDX1NNUFRF MjA4NCAgICA9IDE2LCAvLy88IFNNUFRFIFNUIDIwODQgZm9yIDEwLSwgMTItLCAxNC0gYW5kIDE2 LWJpdCBzeXN0ZW1zCisrICAgIEFWQ09MX1RSQ19TTVBURVNUMjA4NCAgPSBBVkNPTF9UUkNfU01Q VEUyMDg0LAorKyAgICBBVkNPTF9UUkNfU01QVEU0MjggICAgID0gMTcsIC8vLzwgU01QVEUgU1Qg NDI4LTEKKysgICAgQVZDT0xfVFJDX1NNUFRFU1Q0MjhfMSA9IEFWQ09MX1RSQ19TTVBURTQyOCwK KysgICAgQVZDT0xfVFJDX0FSSUJfU1REX0I2NyA9IDE4LCAvLy88IEFSSUIgU1RELUI2Nywga25v d24gYXMgIkh5YnJpZCBsb2ctZ2FtbWEiCisrICAgIEFWQ09MX1RSQ19OQiwgICAgICAgICAgICAg ICAgLy8vPCBOb3QgcGFydCBvZiBBQkkKKysKKysgICAgLyogVGhlIGZvbGxvd2luZyBlbnRyaWVz IGFyZSBub3QgcGFydCBvZiBILjI3MywgYnV0IGN1c3RvbSBleHRlbnNpb25zICovCisrICAgIEFW Q09MX1RSQ19FWFRfQkFTRSAgICAgPSAyNTYsCisrICAgIEFWQ09MX1RSQ19WX0xPRyAgICAgICAg PSBBVkNPTF9UUkNfRVhUX0JBU0UsCisrICAgIEFWQ09MX1RSQ19FWFRfTkIgICAgICAgICAgICAg Ly8vPCBOb3QgcGFydCBvZiBBQkkKKyt9OworKworKy8qKgorKyAqIFlVViBjb2xvcnNwYWNlIHR5 cGUuCisrICogVGhlc2UgdmFsdWVzIG1hdGNoIHRoZSBvbmVzIGRlZmluZWQgYnkgSVNPL0lFQyAy MzA5MS0yXzIwMTkgc3ViY2xhdXNlIDguMy4KKysgKi8KKytlbnVtIEFWQ29sb3JTcGFjZSB7Cisr ICAgIEFWQ09MX1NQQ19SR0IgICAgICAgICA9IDAsICAvLy88IG9yZGVyIG9mIGNvZWZmaWNpZW50 cyBpcyBhY3R1YWxseSBHQlIsIGFsc28gSUVDIDYxOTY2LTItMSAoc1JHQiksIFlaWCBhbmQgU1Qg NDI4LTEKKysgICAgQVZDT0xfU1BDX0JUNzA5ICAgICAgID0gMSwgIC8vLzwgYWxzbyBJVFUtUiBC VDEzNjEgLyBJRUMgNjE5NjYtMi00IHh2WUNDNzA5IC8gZGVyaXZlZCBpbiBTTVBURSBSUCAxNzcg QW5uZXggQgorKyAgICBBVkNPTF9TUENfVU5TUEVDSUZJRUQgPSAyLAorKyAgICBBVkNPTF9TUENf UkVTRVJWRUQgICAgPSAzLCAgLy8vPCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBieSBJVFUtVCBh bmQgSVNPL0lFQyBqdXN0IGxpa2UgMTUtMjU1IGFyZQorKyAgICBBVkNPTF9TUENfRkNDICAgICAg ICAgPSA0LCAgLy8vPCBGQ0MgVGl0bGUgNDcgQ29kZSBvZiBGZWRlcmFsIFJlZ3VsYXRpb25zIDcz LjY4MiAoYSkoMjApCisrICAgIEFWQ09MX1NQQ19CVDQ3MEJHICAgICA9IDUsICAvLy88IGFsc28g SVRVLVIgQlQ2MDEtNiA2MjUgLyBJVFUtUiBCVDEzNTggNjI1IC8gSVRVLVIgQlQxNzAwIDYyNSBQ QUwgJiBTRUNBTSAvIElFQyA2MTk2Ni0yLTQgeHZZQ0M2MDEKKysgICAgQVZDT0xfU1BDX1NNUFRF MTcwTSAgID0gNiwgIC8vLzwgYWxzbyBJVFUtUiBCVDYwMS02IDUyNSAvIElUVS1SIEJUMTM1OCA1 MjUgLyBJVFUtUiBCVDE3MDAgTlRTQyAvIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gYWJvdmUK KysgICAgQVZDT0xfU1BDX1NNUFRFMjQwTSAgID0gNywgIC8vLzwgZGVyaXZlZCBmcm9tIDE3ME0g cHJpbWFyaWVzIGFuZCBENjUgd2hpdGUgcG9pbnQsIDE3ME0gaXMgZGVyaXZlZCBmcm9tIEJUNDcw IFN5c3RlbSBNJ3MgcHJpbWFyaWVzCisrICAgIEFWQ09MX1NQQ19ZQ0dDTyAgICAgICA9IDgsICAv Ly88IHVzZWQgYnkgRGlyYWMgLyBWQy0yIGFuZCBILjI2NCBGUmV4dCwgc2VlIElUVS1UIFNHMTYK KysgICAgQVZDT0xfU1BDX1lDT0NHICAgICAgID0gQVZDT0xfU1BDX1lDR0NPLAorKyAgICBBVkNP TF9TUENfQlQyMDIwX05DTCAgPSA5LCAgLy8vPCBJVFUtUiBCVDIwMjAgbm9uLWNvbnN0YW50IGx1 bWluYW5jZSBzeXN0ZW0KKysgICAgQVZDT0xfU1BDX0JUMjAyMF9DTCAgID0gMTAsIC8vLzwgSVRV LVIgQlQyMDIwIGNvbnN0YW50IGx1bWluYW5jZSBzeXN0ZW0KKysgICAgQVZDT0xfU1BDX1NNUFRF MjA4NSAgID0gMTEsIC8vLzwgU01QVEUgMjA4NSwgWSdEJ3pEJ3gKKysgICAgQVZDT0xfU1BDX0NI Uk9NQV9ERVJJVkVEX05DTCA9IDEyLCAvLy88IENocm9tYXRpY2l0eS1kZXJpdmVkIG5vbi1jb25z dGFudCBsdW1pbmFuY2Ugc3lzdGVtCisrICAgIEFWQ09MX1NQQ19DSFJPTUFfREVSSVZFRF9DTCA9 IDEzLCAvLy88IENocm9tYXRpY2l0eS1kZXJpdmVkIGNvbnN0YW50IGx1bWluYW5jZSBzeXN0ZW0K KysgICAgQVZDT0xfU1BDX0lDVENQICAgICAgID0gMTQsIC8vLzwgSVRVLVIgQlQuMjEwMC0wLCBJ Q3RDcAorKyAgICBBVkNPTF9TUENfSVBUX0MyICAgICAgPSAxNSwgLy8vPCBTTVBURSBTVCAyMTI4 LCBJUFQtQzIKKysgICAgQVZDT0xfU1BDX1lDR0NPX1JFICAgID0gMTYsIC8vLzwgWUNnQ28tUiwg ZXZlbiBhZGRpdGlvbiBvZiBiaXRzCisrICAgIEFWQ09MX1NQQ19ZQ0dDT19STyAgICA9IDE3LCAv Ly88IFlDZ0NvLVIsIG9kZCBhZGRpdGlvbiBvZiBiaXRzCisrICAgIEFWQ09MX1NQQ19OQiAgICAg ICAgICAgICAgICAvLy88IE5vdCBwYXJ0IG9mIEFCSQorK307CisrCisrLyoqCisrICogVmlzdWFs IGNvbnRlbnQgdmFsdWUgcmFuZ2UuCisrICoKKysgKiBUaGVzZSB2YWx1ZXMgYXJlIGJhc2VkIG9u IGRlZmluaXRpb25zIHRoYXQgY2FuIGJlIGZvdW5kIGluIG11bHRpcGxlCisrICogc3BlY2lmaWNh dGlvbnMsIHN1Y2ggYXMgSVRVLVQgQlQuNzA5ICgzLjQgLSBRdWFudGl6YXRpb24gb2YgUkdCLCBs dW1pbmFuY2UKKysgKiBhbmQgY29sb3VyLWRpZmZlcmVuY2Ugc2lnbmFscyksIElUVS1UIEJULjIw MjAgKFRhYmxlIDUgLSBEaWdpdGFsCisrICogUmVwcmVzZW50YXRpb24pIGFzIHdlbGwgYXMgSVRV LVQgQlQuMjEwMCAoVGFibGUgOSAtIERpZ2l0YWwgMTAtIGFuZCAxMi1iaXQKKysgKiBpbnRlZ2Vy IHJlcHJlc2VudGF0aW9uKS4gQXQgdGhlIHRpbWUgb2Ygd3JpdGluZywgdGhlIEJULjIxMDAgb25l IGlzCisrICogcmVjb21tZW5kZWQsIGFzIGl0IGFsc28gZGVmaW5lcyB0aGUgZnVsbCByYW5nZSBy ZXByZXNlbnRhdGlvbi4KKysgKgorKyAqIENvbW1vbiBkZWZpbml0aW9uczoKKysgKiAgIC0gRm9y IFJHQiBhbmQgbHVtYSBwbGFuZXMgc3VjaCBhcyBZIGluIFlDYkNyIGFuZCBJIGluIElDdENwLAor KyAqICAgICAnRScgaXMgdGhlIG9yaWdpbmFsIHZhbHVlIGluIHJhbmdlIG9mIDAuMCB0byAxLjAu CisrICogICAtIEZvciBjaHJvbWEgcGxhbmVzIHN1Y2ggYXMgQ2IsQ3IgYW5kIEN0LENwLCAnRScg aXMgdGhlIG9yaWdpbmFsCisrICogICAgIHZhbHVlIGluIHJhbmdlIG9mIC0wLjUgdG8gMC41Lgor KyAqICAgLSAnbicgaXMgdGhlIG91dHB1dCBiaXQgZGVwdGguCisrICogICAtIEZvciBhZGRpdGlv bmFsIGRlZmluaXRpb25zIHN1Y2ggYXMgcm91bmRpbmcgYW5kIGNsaXBwaW5nIHRvIHZhbGlkIG4K KysgKiAgICAgYml0IHVuc2lnbmVkIGludGVnZXIgcmFuZ2UsIHBsZWFzZSByZWZlciB0byBCVC4y MTAwIChUYWJsZSA5KS4KKysgKi8KKytlbnVtIEFWQ29sb3JSYW5nZSB7CisrICAgIEFWQ09MX1JB TkdFX1VOU1BFQ0lGSUVEID0gMCwKKysKKysgICAgLyoqCisrICAgICAqIE5hcnJvdyBvciBsaW1p dGVkIHJhbmdlIGNvbnRlbnQuCisrICAgICAqCisrICAgICAqIC0gRm9yIGx1bWEgcGxhbmVzOgor KyAgICAgKgorKyAgICAgKiAgICAgICAoMjE5ICogRSArIDE2KSAqIDJeKG4tOCkKKysgICAgICoK KysgICAgICogICBGLmV4LiB0aGUgcmFuZ2Ugb2YgMTYtMjM1IGZvciA4IGJpdHMKKysgICAgICoK KysgICAgICogLSBGb3IgY2hyb21hIHBsYW5lczoKKysgICAgICoKKysgICAgICogICAgICAgKDIy NCAqIEUgKyAxMjgpICogMl4obi04KQorKyAgICAgKgorKyAgICAgKiAgIEYuZXguIHRoZSByYW5n ZSBvZiAxNi0yNDAgZm9yIDggYml0cworKyAgICAgKi8KKysgICAgQVZDT0xfUkFOR0VfTVBFRyAg ICAgICAgPSAxLAorKworKyAgICAvKioKKysgICAgICogRnVsbCByYW5nZSBjb250ZW50LgorKyAg ICAgKgorKyAgICAgKiAtIEZvciBSR0IgYW5kIGx1bWEgcGxhbmVzOgorKyAgICAgKgorKyAgICAg KiAgICAgICAoMl5uIC0gMSkgKiBFCisrICAgICAqCisrICAgICAqICAgRi5leC4gdGhlIHJhbmdl IG9mIDAtMjU1IGZvciA4IGJpdHMKKysgICAgICoKKysgICAgICogLSBGb3IgY2hyb21hIHBsYW5l czoKKysgICAgICoKKysgICAgICogICAgICAgKDJebiAtIDEpICogRSArIDJeKG4gLSAxKQorKyAg ICAgKgorKyAgICAgKiAgIEYuZXguIHRoZSByYW5nZSBvZiAxLTI1NSBmb3IgOCBiaXRzCisrICAg ICAqLworKyAgICBBVkNPTF9SQU5HRV9KUEVHICAgICAgICA9IDIsCisrICAgIEFWQ09MX1JBTkdF X05CICAgICAgICAgICAgICAgLy8vPCBOb3QgcGFydCBvZiBBQkkKKyt9OworKworKy8qKgorKyAq IExvY2F0aW9uIG9mIGNocm9tYSBzYW1wbGVzLgorKyAqCisrICogSWxsdXN0cmF0aW9uIHNob3dp bmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCAodG9wIGxlZnQpIGNocm9tYSBzYW1wbGUgb2Yg dGhlCisrICogaW1hZ2UsIHRoZSBsZWZ0IHNob3dzIG9ubHkgbHVtYSwgdGhlIHJpZ2h0CisrICog c2hvd3MgdGhlIGxvY2F0aW9uIG9mIHRoZSBjaHJvbWEgc2FtcGxlLCB0aGUgMiBjb3VsZCBiZSBp bWFnaW5lZCB0byBvdmVybGF5CisrICogZWFjaCBvdGhlciBidXQgYXJlIGRyYXduIHNlcGFyYXRl bHkgZHVlIHRvIGxpbWl0YXRpb25zIG9mIEFTQ0lJCisrICoKKysgKiAgICAgICAgICAgICAgICAx c3QgMm5kICAgICAgIDFzdCAybmQgaG9yaXpvbnRhbCBsdW1hIHNhbXBsZSBwb3NpdGlvbnMKKysg KiAgICAgICAgICAgICAgICAgdiAgIHYgICAgICAgICB2ICAgdgorKyAqICAgICAgICAgICAgICAg ICBfX19fX18gICAgICAgIF9fX19fXworKyAqMXN0IGx1bWEgbGluZSA+IHxYICAgWCAuLi4gICAg fDMgNCBYIC4uLiAgICAgWCBhcmUgbHVtYSBzYW1wbGVzLAorKyAqICAgICAgICAgICAgICAgIHwg ICAgICAgICAgICAgfDEgMiAgICAgICAgICAgMS02IGFyZSBwb3NzaWJsZSBjaHJvbWEgcG9zaXRp b25zCisrICoybmQgbHVtYSBsaW5lID4gfFggICBYIC4uLiAgICB8NSA2IFggLi4uICAgICAwIGlz IHVuZGVmaW5lZC91bmtub3duIHBvc2l0aW9uCisrICovCisrZW51bSBBVkNocm9tYUxvY2F0aW9u IHsKKysgICAgQVZDSFJPTUFfTE9DX1VOU1BFQ0lGSUVEID0gMCwKKysgICAgQVZDSFJPTUFfTE9D X0xFRlQgICAgICAgID0gMSwgLy8vPCBNUEVHLTIvNCA0OjI6MCwgSC4yNjQgZGVmYXVsdCBmb3Ig NDoyOjAKKysgICAgQVZDSFJPTUFfTE9DX0NFTlRFUiAgICAgID0gMiwgLy8vPCBNUEVHLTEgNDoy OjAsIEpQRUcgNDoyOjAsIEguMjYzIDQ6MjowCisrICAgIEFWQ0hST01BX0xPQ19UT1BMRUZUICAg ICA9IDMsIC8vLzwgSVRVLVIgNjAxLCBTTVBURSAyNzRNIDI5Nk0gUzMxNE0oRFYgNDoxOjEpLCBt cGVnMiA0OjI6MgorKyAgICBBVkNIUk9NQV9MT0NfVE9QICAgICAgICAgPSA0LAorKyAgICBBVkNI Uk9NQV9MT0NfQk9UVE9NTEVGVCAgPSA1LAorKyAgICBBVkNIUk9NQV9MT0NfQk9UVE9NICAgICAg PSA2LAorKyAgICBBVkNIUk9NQV9MT0NfTkIgICAgICAgICAgICAgICAvLy88IE5vdCBwYXJ0IG9m IEFCSQorK307CisrCisrLyoqCisrICogQ29ycmVsYXRpb24gYmV0d2VlbiB0aGUgYWxwaGEgY2hh bm5lbCBhbmQgY29sb3IgdmFsdWVzLgorKyAqLworK2VudW0gQVZBbHBoYU1vZGUgeworKyAgICBB VkFMUEhBX01PREVfVU5TUEVDSUZJRUQgICA9IDAsIC8vLzwgVW5rbm93biBhbHBoYSBoYW5kbGlu Zywgb3Igbm8gYWxwaGEgY2hhbm5lbAorKyAgICBBVkFMUEhBX01PREVfUFJFTVVMVElQTElFRCA9 IDEsIC8vLzwgQWxwaGEgY2hhbm5lbCBpcyBtdWx0aXBsaWVkIGludG8gY29sb3IgdmFsdWVzCisr ICAgIEFWQUxQSEFfTU9ERV9TVFJBSUdIVCAgICAgID0gMiwgLy8vPCBBbHBoYSBjaGFubmVsIGlz IGluZGVwZW5kZW50IG9mIGNvbG9yIHZhbHVlcworKyAgICBBVkFMUEhBX01PREVfTkIgICAgICAg ICAgICAgICAgIC8vLzwgTm90IHBhcnQgb2YgQUJJCisrfTsKKysKKysjZW5kaWYgLyogQVZVVElM X1BJWEZNVF9IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRp YS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvcmF0aW9uYWwuaC5mZm1wZWc5IE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2 dXRpbC9yYXRpb25hbC5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEv dGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL3JhdGlvbmFsLmguZmZtcGVnOQkyMDI2LTA5 LTA3IDEyOjIzOjQ3LjY3ODk3MDIyMyArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJh bWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9yYXRpb25hbC5oCTIw MjYtMDktMDcgMTI6MjM6NDcuNjc4OTIwODk5ICswMjAwCitAQCAtMCwwICsxLDIyNSBAQAorKy8q CisrICogcmF0aW9uYWwgbnVtYmVycworKyAqIENvcHlyaWdodCAoYykgMjAwMyBNaWNoYWVsIE5p ZWRlcm1heWVyIDxtaWNoYWVsbmlAZ214LmF0PgorKyAqCisrICogVGhpcyBmaWxlIGlzIHBhcnQg b2YgRkZtcGVnLgorKyAqCisrICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgor KyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2Ug YWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysg KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrICovCisrCisrLyoqCisrICogQGZpbGUKKysgKiBAaW5n cm91cCBsYXZ1X21hdGhfcmF0aW9uYWwKKysgKiBVdGlsaXRpZXMgZm9yIHJhdGlvbmFsIG51bWJl ciBjYWxjdWxhdGlvbi4KKysgKiBAYXV0aG9yIE1pY2hhZWwgTmllZGVybWF5ZXIgPG1pY2hhZWxu aUBnbXguYXQ+CisrICovCisrCisrI2lmbmRlZiBBVlVUSUxfUkFUSU9OQUxfSAorKyNkZWZpbmUg QVZVVElMX1JBVElPTkFMX0gKKysKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2luY2x1ZGUgPGxp bWl0cy5oPgorKyNpbmNsdWRlICJhdHRyaWJ1dGVzLmgiCisrCisrLyoqCisrICogQGRlZmdyb3Vw IGxhdnVfbWF0aF9yYXRpb25hbCBBVlJhdGlvbmFsCisrICogQGluZ3JvdXAgbGF2dV9tYXRoCisr ICogUmF0aW9uYWwgbnVtYmVyIGNhbGN1bGF0aW9uLgorKyAqCisrICogV2hpbGUgcmF0aW9uYWwg bnVtYmVycyBjYW4gYmUgZXhwcmVzc2VkIGFzIGZsb2F0aW5nLXBvaW50IG51bWJlcnMsIHRoZQor KyAqIGNvbnZlcnNpb24gcHJvY2VzcyBpcyBhIGxvc3N5IG9uZSwgc28gYXJlIGZsb2F0aW5nLXBv aW50IG9wZXJhdGlvbnMuIE9uIHRoZQorKyAqIG90aGVyIGhhbmQsIHRoZSBuYXR1cmUgb2YgRkZt cGVnIGRlbWFuZHMgaGlnaGx5IGFjY3VyYXRlIGNhbGN1bGF0aW9uIG9mCisrICogdGltZXN0YW1w cy4gVGhpcyBzZXQgb2YgcmF0aW9uYWwgbnVtYmVyIHV0aWxpdGllcyBzZXJ2ZXMgYXMgYSBnZW5l cmljCisrICogaW50ZXJmYWNlIGZvciBtYW5pcHVsYXRpbmcgcmF0aW9uYWwgbnVtYmVycyBhcyBw YWlycyBvZiBudW1lcmF0b3JzIGFuZAorKyAqIGRlbm9taW5hdG9ycy4KKysgKgorKyAqIE1hbnkg b2YgdGhlIGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgb24gQVZSYXRpb25hbCdzIGhhdmUgdGhlIHN1 ZmZpeCBgX3FgLCBpbgorKyAqIHJlZmVyZW5jZSB0byB0aGUgbWF0aGVtYXRpY2FsIHN5bWJvbCAi 4oSaIiAoUSkgd2hpY2ggZGVub3RlcyB0aGUgc2V0IG9mIGFsbAorKyAqIHJhdGlvbmFsIG51bWJl cnMuCisrICoKKysgKiBAeworKyAqLworKworKy8qKgorKyAqIFJhdGlvbmFsIG51bWJlciAocGFp ciBvZiBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yKS4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBB VlJhdGlvbmFseworKyAgICBpbnQgbnVtOyAvLy88IE51bWVyYXRvcgorKyAgICBpbnQgZGVuOyAv Ly88IERlbm9taW5hdG9yCisrfSBBVlJhdGlvbmFsOworKworKy8qKgorKyAqIENyZWF0ZSBhbiBB VlJhdGlvbmFsLgorKyAqCisrICogVXNlZnVsIGZvciBjb21waWxlcnMgdGhhdCBkbyBub3Qgc3Vw cG9ydCBjb21wb3VuZCBsaXRlcmFscy4KKysgKgorKyAqIEBub3RlIFRoZSByZXR1cm4gdmFsdWUg aXMgbm90IHJlZHVjZWQuCisrICogQHNlZSBhdl9yZWR1Y2UoKQorKyAqLworK3N0YXRpYyBpbmxp bmUgQVZSYXRpb25hbCBhdl9tYWtlX3EoaW50IG51bSwgaW50IGRlbikKKyt7CisrICAgIEFWUmF0 aW9uYWwgciA9IHsgbnVtLCBkZW4gfTsKKysgICAgcmV0dXJuIHI7CisrfQorKworKy8qKgorKyAq IENvbXBhcmUgdHdvIHJhdGlvbmFscy4KKysgKgorKyAqIEBwYXJhbSBhIEZpcnN0IHJhdGlvbmFs CisrICogQHBhcmFtIGIgU2Vjb25kIHJhdGlvbmFsCisrICoKKysgKiBAcmV0dXJuIE9uZSBvZiB0 aGUgZm9sbG93aW5nIHZhbHVlczoKKysgKiAgICAgICAgIC0gMCBpZiBgYSA9PSBiYAorKyAqICAg ICAgICAgLSAxIGlmIGBhID4gYmAKKysgKiAgICAgICAgIC0gLTEgaWYgYGEgPCBiYAorKyAqICAg ICAgICAgLSBgSU5UX01JTmAgaWYgb25lIG9mIHRoZSB2YWx1ZXMgaXMgb2YgdGhlIGZvcm0gYDAg LyAwYAorKyAqLworK3N0YXRpYyBpbmxpbmUgaW50IGF2X2NtcF9xKEFWUmF0aW9uYWwgYSwgQVZS YXRpb25hbCBiKXsKKysgICAgY29uc3QgaW50NjRfdCB0bXA9IGEubnVtICogKGludDY0X3QpYi5k ZW4gLSBiLm51bSAqIChpbnQ2NF90KWEuZGVuOworKworKyAgICBpZih0bXApIHJldHVybiAoaW50 KSgodG1wIF4gYS5kZW4gXiBiLmRlbik+PjYzKXwxOworKyAgICBlbHNlIGlmKGIuZGVuICYmIGEu ZGVuKSByZXR1cm4gMDsKKysgICAgZWxzZSBpZihhLm51bSAmJiBiLm51bSkgcmV0dXJuIChhLm51 bT4+MzEpIC0gKGIubnVtPj4zMSk7CisrICAgIGVsc2UgICAgICAgICAgICAgICAgICAgIHJldHVy biBJTlRfTUlOOworK30KKysKKysvKioKKysgKiBDb252ZXJ0IGFuIEFWUmF0aW9uYWwgdG8gYSBg ZG91YmxlYC4KKysgKiBAcGFyYW0gYSBBVlJhdGlvbmFsIHRvIGNvbnZlcnQKKysgKiBAcmV0dXJu IGBhYCBpbiBmbG9hdGluZy1wb2ludCBmb3JtCisrICogQHNlZSBhdl9kMnEoKQorKyAqLworK3N0 YXRpYyBpbmxpbmUgZG91YmxlIGF2X3EyZChBVlJhdGlvbmFsIGEpeworKyAgICByZXR1cm4gYS5u dW0gLyAoZG91YmxlKSBhLmRlbjsKKyt9CisrCisrLyoqCisrICogUmVkdWNlIGEgZnJhY3Rpb24u CisrICoKKysgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZnJhbWVyYXRlIGNhbGN1bGF0aW9ucy4KKysg KgorKyAqIEBwYXJhbVtvdXRdIGRzdF9udW0gRGVzdGluYXRpb24gbnVtZXJhdG9yCisrICogQHBh cmFtW291dF0gZHN0X2RlbiBEZXN0aW5hdGlvbiBkZW5vbWluYXRvcgorKyAqIEBwYXJhbVtpbl0g ICAgICBudW0gU291cmNlIG51bWVyYXRvcgorKyAqIEBwYXJhbVtpbl0gICAgICBkZW4gU291cmNl IGRlbm9taW5hdG9yCisrICogQHBhcmFtW2luXSAgICAgIG1heCBNYXhpbXVtIGFsbG93ZWQgdmFs dWVzIGZvciBgZHN0X251bWAgJiBgZHN0X2RlbmAKKysgKiBAcmV0dXJuIDEgaWYgdGhlIG9wZXJh dGlvbiBpcyBleGFjdCwgMCBvdGhlcndpc2UKKysgKi8KKytpbnQgYXZfcmVkdWNlKGludCAqZHN0 X251bSwgaW50ICpkc3RfZGVuLCBpbnQ2NF90IG51bSwgaW50NjRfdCBkZW4sIGludDY0X3QgbWF4 KTsKKysKKysvKioKKysgKiBNdWx0aXBseSB0d28gcmF0aW9uYWxzLgorKyAqIEBwYXJhbSBiIEZp cnN0IHJhdGlvbmFsCisrICogQHBhcmFtIGMgU2Vjb25kIHJhdGlvbmFsCisrICogQHJldHVybiBi KmMKKysgKi8KKytBVlJhdGlvbmFsIGF2X211bF9xKEFWUmF0aW9uYWwgYiwgQVZSYXRpb25hbCBj KSBhdl9jb25zdDsKKysKKysvKioKKysgKiBEaXZpZGUgb25lIHJhdGlvbmFsIGJ5IGFub3RoZXIu CisrICogQHBhcmFtIGIgRmlyc3QgcmF0aW9uYWwKKysgKiBAcGFyYW0gYyBTZWNvbmQgcmF0aW9u YWwKKysgKiBAcmV0dXJuIGIvYworKyAqLworK0FWUmF0aW9uYWwgYXZfZGl2X3EoQVZSYXRpb25h bCBiLCBBVlJhdGlvbmFsIGMpIGF2X2NvbnN0OworKworKy8qKgorKyAqIEFkZCB0d28gcmF0aW9u YWxzLgorKyAqIEBwYXJhbSBiIEZpcnN0IHJhdGlvbmFsCisrICogQHBhcmFtIGMgU2Vjb25kIHJh dGlvbmFsCisrICogQHJldHVybiBiK2MKKysgKi8KKytBVlJhdGlvbmFsIGF2X2FkZF9xKEFWUmF0 aW9uYWwgYiwgQVZSYXRpb25hbCBjKSBhdl9jb25zdDsKKysKKysvKioKKysgKiBTdWJ0cmFjdCBv bmUgcmF0aW9uYWwgZnJvbSBhbm90aGVyLgorKyAqIEBwYXJhbSBiIEZpcnN0IHJhdGlvbmFsCisr ICogQHBhcmFtIGMgU2Vjb25kIHJhdGlvbmFsCisrICogQHJldHVybiBiLWMKKysgKi8KKytBVlJh dGlvbmFsIGF2X3N1Yl9xKEFWUmF0aW9uYWwgYiwgQVZSYXRpb25hbCBjKSBhdl9jb25zdDsKKysK KysvKioKKysgKiBJbnZlcnQgYSByYXRpb25hbC4KKysgKiBAcGFyYW0gcSB2YWx1ZQorKyAqIEBy ZXR1cm4gMSAvIHEKKysgKi8KKytzdGF0aWMgYXZfYWx3YXlzX2lubGluZSBBVlJhdGlvbmFsIGF2 X2ludl9xKEFWUmF0aW9uYWwgcSkKKyt7CisrICAgIEFWUmF0aW9uYWwgciA9IHsgcS5kZW4sIHEu bnVtIH07CisrICAgIHJldHVybiByOworK30KKysKKysvKioKKysgKiBDb252ZXJ0IGEgZG91Ymxl IHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXIgdG8gYSByYXRpb25hbC4KKysgKgorKyAq IEluIGNhc2Ugb2YgaW5maW5pdHksIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBleHByZXNzZWQgYXMg YHsxLCAwfWAgb3IKKysgKiBgey0xLCAwfWAgZGVwZW5kaW5nIG9uIHRoZSBzaWduLgorKyAqCisr ICogSW4gZ2VuZXJhbCByYXRpb25hbCBudW1iZXJzIHdpdGggfG51bXwgPD0gMTw8MjYgJiYgfGRl bnwgPD0gMTw8MjYKKysgKiBjYW4gYmUgcmVjb3ZlcmVkIGV4YWN0bHkgZnJvbSB0aGVpciBkb3Vi bGUgcmVwcmVzZW50YXRpb24uCisrICogKG5vIGV4Y2VwdGlvbnMgd2VyZSBmb3VuZCB3aXRoaW4g MUIgcmFuZG9tIG9uZXMpCisrICoKKysgKiBAcGFyYW0gZCAgIGBkb3VibGVgIHRvIGNvbnZlcnQK KysgKiBAcGFyYW0gbWF4IE1heGltdW0gYWxsb3dlZCBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9y CisrICogQHJldHVybiBgZGAgaW4gQVZSYXRpb25hbCBmb3JtCisrICogQHNlZSBhdl9xMmQoKQor KyAqLworK0FWUmF0aW9uYWwgYXZfZDJxKGRvdWJsZSBkLCBpbnQgbWF4KSBhdl9jb25zdDsKKysK KysvKioKKysgKiBGaW5kIHdoaWNoIG9mIHRoZSB0d28gcmF0aW9uYWxzIGlzIGNsb3NlciB0byBh bm90aGVyIHJhdGlvbmFsLgorKyAqCisrICogQHBhcmFtIHEgICAgIFJhdGlvbmFsIHRvIGJlIGNv bXBhcmVkIGFnYWluc3QKKysgKiBAcGFyYW0gcTEgICAgUmF0aW9uYWwgdG8gYmUgdGVzdGVkCisr ICogQHBhcmFtIHEyICAgIFJhdGlvbmFsIHRvIGJlIHRlc3RlZAorKyAqIEByZXR1cm4gT25lIG9m IHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorKyAqICAgICAgICAgLSAxIGlmIGBxMWAgaXMgbmVhcmVy IHRvIGBxYCB0aGFuIGBxMmAKKysgKiAgICAgICAgIC0gLTEgaWYgYHEyYCBpcyBuZWFyZXIgdG8g YHFgIHRoYW4gYHExYAorKyAqICAgICAgICAgLSAwIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBkaXN0 YW5jZQorKyAqLworK2ludCBhdl9uZWFyZXJfcShBVlJhdGlvbmFsIHEsIEFWUmF0aW9uYWwgcTEs IEFWUmF0aW9uYWwgcTIpOworKworKy8qKgorKyAqIEZpbmQgdGhlIHZhbHVlIGluIGEgbGlzdCBv ZiByYXRpb25hbHMgbmVhcmVzdCBhIGdpdmVuIHJlZmVyZW5jZSByYXRpb25hbC4KKysgKgorKyAq IEBwYXJhbSBxICAgICAgUmVmZXJlbmNlIHJhdGlvbmFsCisrICogQHBhcmFtIHFfbGlzdCBBcnJh eSBvZiByYXRpb25hbHMgdGVybWluYXRlZCBieSBgezAsIDB9YAorKyAqIEByZXR1cm4gSW5kZXgg b2YgdGhlIG5lYXJlc3QgdmFsdWUgZm91bmQgaW4gdGhlIGFycmF5CisrICovCisraW50IGF2X2Zp bmRfbmVhcmVzdF9xX2lkeChBVlJhdGlvbmFsIHEsIGNvbnN0IEFWUmF0aW9uYWwqIHFfbGlzdCk7 CisrCisrLyoqCisrICogQ29udmVydCBhbiBBVlJhdGlvbmFsIHRvIGEgSUVFRSAzMi1iaXQgYGZs b2F0YCBleHByZXNzZWQgaW4gZml4ZWQtcG9pbnQKKysgKiBmb3JtYXQuCisrICoKKysgKiBAcGFy YW0gcSBSYXRpb25hbCB0byBiZSBjb252ZXJ0ZWQKKysgKiBAcmV0dXJuIEVxdWl2YWxlbnQgZmxv YXRpbmctcG9pbnQgdmFsdWUsIGV4cHJlc3NlZCBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKKysgKiAg ICAgICAgIGludGVnZXIuCisrICogQG5vdGUgVGhlIHJldHVybmVkIHZhbHVlIGlzIHBsYXRmb3Jt LWluZGVwZWRhbnQuCisrICovCisrdWludDMyX3QgYXZfcTJpbnRmbG9hdChBVlJhdGlvbmFsIHEp OworKworKy8qKgorKyAqIFJldHVybiB0aGUgYmVzdCByYXRpb25hbCBzbyB0aGF0IGEgYW5kIGIg YXJlIG11bHRpcGxlIG9mIGl0LgorKyAqIElmIHRoZSByZXN1bHRpbmcgZGVub21pbmF0b3IgaXMg bGFyZ2VyIHRoYW4gbWF4X2RlbiwgcmV0dXJuIGRlZi4KKysgKi8KKytBVlJhdGlvbmFsIGF2X2dj ZF9xKEFWUmF0aW9uYWwgYSwgQVZSYXRpb25hbCBiLCBpbnQgbWF4X2RlbiwgQVZSYXRpb25hbCBk ZWYpOworKworKy8qKgorKyAqIEB9CisrICovCisrCisrI2VuZGlmIC8qIEFWVVRJTF9SQVRJT05B TF9IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGly ZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvc2FtcGxlZm10LmguZmZtcGVnOSBNdXNlU2NvcmUt NC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwv c2FtcGxlZm10LmgKKy0tLSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGly ZHBhcnR5L2ZmbXBlZy92OS9saWJhdnV0aWwvc2FtcGxlZm10LmguZmZtcGVnOQkyMDI2LTA5LTA3 IDEyOjIzOjQ3LjY3OTA3OTUzMiArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3 b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC9zYW1wbGVmbXQuaAkyMDI2 LTA5LTA3IDEyOjIzOjQ3LjY3OTAxODY0NCArMDIwMAorQEAgLTAsMCArMSwyNjggQEAKKysvKgor KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKysgKgorKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy CisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyAqLworKworKyNp Zm5kZWYgQVZVVElMX1NBTVBMRUZNVF9ICisrI2RlZmluZSBBVlVUSUxfU0FNUExFRk1UX0gKKysK KysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrLyoqCisrICogQGFkZHRvZ3JvdXAgbGF2dV9hdWRp bworKyAqIEB7CisrICoKKysgKiBAZGVmZ3JvdXAgbGF2dV9zYW1wZm10cyBBdWRpbyBzYW1wbGUg Zm9ybWF0cworKyAqCisrICogQXVkaW8gc2FtcGxlIGZvcm1hdCBlbnVtZXJhdGlvbiBhbmQgcmVs YXRlZCBjb252ZW5pZW5jZSBmdW5jdGlvbnMuCisrICogQHsKKysgKi8KKysKKysvKioKKysgKiBB dWRpbyBzYW1wbGUgZm9ybWF0cworKyAqCisrICogLSBUaGUgZGF0YSBkZXNjcmliZWQgYnkgdGhl IHNhbXBsZSBmb3JtYXQgaXMgYWx3YXlzIGluIG5hdGl2ZS1lbmRpYW4gb3JkZXIuCisrICogICBT YW1wbGUgdmFsdWVzIGNhbiBiZSBleHByZXNzZWQgYnkgbmF0aXZlIEMgdHlwZXMsIGhlbmNlIHRo ZSBsYWNrIG9mIGEgc2lnbmVkCisrICogICAyNC1iaXQgc2FtcGxlIGZvcm1hdCBldmVuIHRob3Vn aCBpdCBpcyBhIGNvbW1vbiByYXcgYXVkaW8gZGF0YSBmb3JtYXQuCisrICoKKysgKiAtIFRoZSBm bG9hdGluZy1wb2ludCBmb3JtYXRzIGFyZSBiYXNlZCBvbiBmdWxsIHZvbHVtZSBiZWluZyBpbiB0 aGUgcmFuZ2UKKysgKiAgIFstMS4wLCAxLjBdLiBBbnkgdmFsdWVzIG91dHNpZGUgdGhpcyByYW5n ZSBhcmUgYmV5b25kIGZ1bGwgdm9sdW1lIGxldmVsLgorKyAqCisrICogLSBUaGUgZGF0YSBsYXlv dXQgYXMgdXNlZCBpbiBhdl9zYW1wbGVzX2ZpbGxfYXJyYXlzKCkgYW5kIGVsc2V3aGVyZSBpbiBG Rm1wZWcKKysgKiAgIChzdWNoIGFzIEFWRnJhbWUgaW4gbGliYXZjb2RlYykgaXMgYXMgZm9sbG93 czoKKysgKgorKyAqIEBwYXIKKysgKiBGb3IgcGxhbmFyIHNhbXBsZSBmb3JtYXRzLCBlYWNoIGF1 ZGlvIGNoYW5uZWwgaXMgaW4gYSBzZXBhcmF0ZSBkYXRhIHBsYW5lLAorKyAqIGFuZCBsaW5lc2l6 ZSBpcyB0aGUgYnVmZmVyIHNpemUsIGluIGJ5dGVzLCBmb3IgYSBzaW5nbGUgcGxhbmUuIEFsbCBk YXRhCisrICogcGxhbmVzIG11c3QgYmUgdGhlIHNhbWUgc2l6ZS4gRm9yIHBhY2tlZCBzYW1wbGUg Zm9ybWF0cywgb25seSB0aGUgZmlyc3QgZGF0YQorKyAqIHBsYW5lIGlzIHVzZWQsIGFuZCBzYW1w bGVzIGZvciBlYWNoIGNoYW5uZWwgYXJlIGludGVybGVhdmVkLiBJbiB0aGlzIGNhc2UsCisrICog bGluZXNpemUgaXMgdGhlIGJ1ZmZlciBzaXplLCBpbiBieXRlcywgZm9yIHRoZSAxIHBsYW5lLgor KyAqCisrICovCisrZW51bSBBVlNhbXBsZUZvcm1hdCB7CisrICAgIEFWX1NBTVBMRV9GTVRfTk9O RSA9IC0xLAorKyAgICBBVl9TQU1QTEVfRk1UX1U4LCAgICAgICAgICAvLy88IHVuc2lnbmVkIDgg Yml0cworKyAgICBBVl9TQU1QTEVfRk1UX1MxNiwgICAgICAgICAvLy88IHNpZ25lZCAxNiBiaXRz CisrICAgIEFWX1NBTVBMRV9GTVRfUzMyLCAgICAgICAgIC8vLzwgc2lnbmVkIDMyIGJpdHMKKysg ICAgQVZfU0FNUExFX0ZNVF9GTFQsICAgICAgICAgLy8vPCBmbG9hdAorKyAgICBBVl9TQU1QTEVf Rk1UX0RCTCwgICAgICAgICAvLy88IGRvdWJsZQorKworKyAgICBBVl9TQU1QTEVfRk1UX1U4UCwg ICAgICAgICAvLy88IHVuc2lnbmVkIDggYml0cywgcGxhbmFyCisrICAgIEFWX1NBTVBMRV9GTVRf UzE2UCwgICAgICAgIC8vLzwgc2lnbmVkIDE2IGJpdHMsIHBsYW5hcgorKyAgICBBVl9TQU1QTEVf Rk1UX1MzMlAsICAgICAgICAvLy88IHNpZ25lZCAzMiBiaXRzLCBwbGFuYXIKKysgICAgQVZfU0FN UExFX0ZNVF9GTFRQLCAgICAgICAgLy8vPCBmbG9hdCwgcGxhbmFyCisrICAgIEFWX1NBTVBMRV9G TVRfREJMUCwgICAgICAgIC8vLzwgZG91YmxlLCBwbGFuYXIKKysgICAgQVZfU0FNUExFX0ZNVF9T NjQsICAgICAgICAgLy8vPCBzaWduZWQgNjQgYml0cworKyAgICBBVl9TQU1QTEVfRk1UX1M2NFAs ICAgICAgICAvLy88IHNpZ25lZCA2NCBiaXRzLCBwbGFuYXIKKysKKysgICAgQVZfU0FNUExFX0ZN VF9OQiAgICAgICAgICAgLy8vPCBOdW1iZXIgb2Ygc2FtcGxlIGZvcm1hdHMuIERPIE5PVCBVU0Ug aWYgbGlua2luZyBkeW5hbWljYWxseQorK307CisrCisrLyoqCisrICogUmV0dXJuIHRoZSBuYW1l IG9mIHNhbXBsZV9mbXQsIG9yIE5VTEwgaWYgc2FtcGxlX2ZtdCBpcyBub3QKKysgKiByZWNvZ25p emVkLgorKyAqLworK2NvbnN0IGNoYXIgKmF2X2dldF9zYW1wbGVfZm10X25hbWUoZW51bSBBVlNh bXBsZUZvcm1hdCBzYW1wbGVfZm10KTsKKysKKysvKioKKysgKiBSZXR1cm4gYSBzYW1wbGUgZm9y bWF0IGNvcnJlc3BvbmRpbmcgdG8gbmFtZSwgb3IgQVZfU0FNUExFX0ZNVF9OT05FCisrICogb24g ZXJyb3IuCisrICovCisrZW51bSBBVlNhbXBsZUZvcm1hdCBhdl9nZXRfc2FtcGxlX2ZtdChjb25z dCBjaGFyICpuYW1lKTsKKysKKysvKioKKysgKiBSZXR1cm4gdGhlIHBsYW5hcjwtPnBhY2tlZCBh bHRlcm5hdGl2ZSBmb3JtIG9mIHRoZSBnaXZlbiBzYW1wbGUgZm9ybWF0LCBvcgorKyAqIEFWX1NB TVBMRV9GTVRfTk9ORSBvbiBlcnJvci4gSWYgdGhlIHBhc3NlZCBzYW1wbGVfZm10IGlzIGFscmVh ZHkgaW4gdGhlCisrICogcmVxdWVzdGVkIHBsYW5hci9wYWNrZWQgZm9ybWF0LCB0aGUgZm9ybWF0 IHJldHVybmVkIGlzIHRoZSBzYW1lIGFzIHRoZQorKyAqIGlucHV0LgorKyAqLworK2VudW0gQVZT YW1wbGVGb3JtYXQgYXZfZ2V0X2FsdF9zYW1wbGVfZm10KGVudW0gQVZTYW1wbGVGb3JtYXQgc2Ft cGxlX2ZtdCwgaW50IHBsYW5hcik7CisrCisrLyoqCisrICogR2V0IHRoZSBwYWNrZWQgYWx0ZXJu YXRpdmUgZm9ybSBvZiB0aGUgZ2l2ZW4gc2FtcGxlIGZvcm1hdC4KKysgKgorKyAqIElmIHRoZSBw YXNzZWQgc2FtcGxlX2ZtdCBpcyBhbHJlYWR5IGluIHBhY2tlZCBmb3JtYXQsIHRoZSBmb3JtYXQg cmV0dXJuZWQgaXMKKysgKiB0aGUgc2FtZSBhcyB0aGUgaW5wdXQuCisrICoKKysgKiBAcmV0dXJu ICB0aGUgcGFja2VkIGFsdGVybmF0aXZlIGZvcm0gb2YgdGhlIGdpdmVuIHNhbXBsZSBmb3JtYXQg b3IKKysgICAgICAgICAgICBBVl9TQU1QTEVfRk1UX05PTkUgb24gZXJyb3IuCisrICovCisrZW51 bSBBVlNhbXBsZUZvcm1hdCBhdl9nZXRfcGFja2VkX3NhbXBsZV9mbXQoZW51bSBBVlNhbXBsZUZv cm1hdCBzYW1wbGVfZm10KTsKKysKKysvKioKKysgKiBHZXQgdGhlIHBsYW5hciBhbHRlcm5hdGl2 ZSBmb3JtIG9mIHRoZSBnaXZlbiBzYW1wbGUgZm9ybWF0LgorKyAqCisrICogSWYgdGhlIHBhc3Nl ZCBzYW1wbGVfZm10IGlzIGFscmVhZHkgaW4gcGxhbmFyIGZvcm1hdCwgdGhlIGZvcm1hdCByZXR1 cm5lZCBpcworKyAqIHRoZSBzYW1lIGFzIHRoZSBpbnB1dC4KKysgKgorKyAqIEByZXR1cm4gIHRo ZSBwbGFuYXIgYWx0ZXJuYXRpdmUgZm9ybSBvZiB0aGUgZ2l2ZW4gc2FtcGxlIGZvcm1hdCBvcgor KyAgICAgICAgICAgIEFWX1NBTVBMRV9GTVRfTk9ORSBvbiBlcnJvci4KKysgKi8KKytlbnVtIEFW U2FtcGxlRm9ybWF0IGF2X2dldF9wbGFuYXJfc2FtcGxlX2ZtdChlbnVtIEFWU2FtcGxlRm9ybWF0 IHNhbXBsZV9mbXQpOworKworKy8qKgorKyAqIEdlbmVyYXRlIGEgc3RyaW5nIGNvcnJlc3BvbmRp bmcgdG8gdGhlIHNhbXBsZSBmb3JtYXQgd2l0aAorKyAqIHNhbXBsZV9mbXQsIG9yIGEgaGVhZGVy IGlmIHNhbXBsZV9mbXQgaXMgbmVnYXRpdmUuCisrICoKKysgKiBAcGFyYW0gYnVmIHRoZSBidWZm ZXIgd2hlcmUgdG8gd3JpdGUgdGhlIHN0cmluZworKyAqIEBwYXJhbSBidWZfc2l6ZSB0aGUgc2l6 ZSBvZiBidWYKKysgKiBAcGFyYW0gc2FtcGxlX2ZtdCB0aGUgbnVtYmVyIG9mIHRoZSBzYW1wbGUg Zm9ybWF0IHRvIHByaW50IHRoZQorKyAqIGNvcnJlc3BvbmRpbmcgaW5mbyBzdHJpbmcsIG9yIGEg bmVnYXRpdmUgdmFsdWUgdG8gcHJpbnQgdGhlCisrICogY29ycmVzcG9uZGluZyBoZWFkZXIuCisr ICogQHJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgZmlsbGVkIGJ1ZmZlciBvciBOVUxMIGluIGNh c2Ugb2Ygb3RoZXIgZXJyb3JzCisrICovCisrY2hhciAqYXZfZ2V0X3NhbXBsZV9mbXRfc3RyaW5n KGNoYXIgKmJ1ZiwgaW50IGJ1Zl9zaXplLCBlbnVtIEFWU2FtcGxlRm9ybWF0IHNhbXBsZV9mbXQp OworKworKy8qKgorKyAqIFJldHVybiBudW1iZXIgb2YgYnl0ZXMgcGVyIHNhbXBsZS4KKysgKgor KyAqIEBwYXJhbSBzYW1wbGVfZm10IHRoZSBzYW1wbGUgZm9ybWF0CisrICogQHJldHVybiBudW1i ZXIgb2YgYnl0ZXMgcGVyIHNhbXBsZSBvciB6ZXJvIGlmIHVua25vd24gZm9yIHRoZSBnaXZlbgor KyAqIHNhbXBsZSBmb3JtYXQKKysgKi8KKytpbnQgYXZfZ2V0X2J5dGVzX3Blcl9zYW1wbGUoZW51 bSBBVlNhbXBsZUZvcm1hdCBzYW1wbGVfZm10KTsKKysKKysvKioKKysgKiBDaGVjayBpZiB0aGUg c2FtcGxlIGZvcm1hdCBpcyBwbGFuYXIuCisrICoKKysgKiBAcGFyYW0gc2FtcGxlX2ZtdCB0aGUg c2FtcGxlIGZvcm1hdCB0byBpbnNwZWN0CisrICogQHJldHVybiAxIGlmIHRoZSBzYW1wbGUgZm9y bWF0IGlzIHBsYW5hciwgMCBpZiBpdCBpcyBpbnRlcmxlYXZlZAorKyAqLworK2ludCBhdl9zYW1w bGVfZm10X2lzX3BsYW5hcihlbnVtIEFWU2FtcGxlRm9ybWF0IHNhbXBsZV9mbXQpOworKworKy8q KgorKyAqIEdldCB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUgZm9yIHRoZSBnaXZlbiBhdWRpbyBw YXJhbWV0ZXJzLgorKyAqCisrICogQHBhcmFtW291dF0gbGluZXNpemUgY2FsY3VsYXRlZCBsaW5l c2l6ZSwgbWF5IGJlIE5VTEwKKysgKiBAcGFyYW0gbmJfY2hhbm5lbHMgICB0aGUgbnVtYmVyIG9m IGNoYW5uZWxzCisrICogQHBhcmFtIG5iX3NhbXBsZXMgICAgdGhlIG51bWJlciBvZiBzYW1wbGVz IGluIGEgc2luZ2xlIGNoYW5uZWwKKysgKiBAcGFyYW0gc2FtcGxlX2ZtdCAgICB0aGUgc2FtcGxl IGZvcm1hdAorKyAqIEBwYXJhbSBhbGlnbiAgICAgICAgIGJ1ZmZlciBzaXplIGFsaWdubWVudCAo MCA9IGRlZmF1bHQsIDEgPSBubyBhbGlnbm1lbnQpCisrICogQHJldHVybiAgICAgICAgICAgICAg cmVxdWlyZWQgYnVmZmVyIHNpemUsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQor KyAqLworK2ludCBhdl9zYW1wbGVzX2dldF9idWZmZXJfc2l6ZShpbnQgKmxpbmVzaXplLCBpbnQg bmJfY2hhbm5lbHMsIGludCBuYl9zYW1wbGVzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbnVtIEFWU2FtcGxlRm9ybWF0IHNhbXBsZV9mbXQsIGludCBhbGlnbik7CisrCisrLyoq CisrICogQH0KKysgKgorKyAqIEBkZWZncm91cCBsYXZ1X3NhbXBtYW5pcCBTYW1wbGVzIG1hbmlw dWxhdGlvbgorKyAqCisrICogRnVuY3Rpb25zIHRoYXQgbWFuaXB1bGF0ZSBhdWRpbyBzYW1wbGVz CisrICogQHsKKysgKi8KKysKKysvKioKKysgKiBGaWxsIHBsYW5lIGRhdGEgcG9pbnRlcnMgYW5k IGxpbmVzaXplIGZvciBzYW1wbGVzIHdpdGggc2FtcGxlCisrICogZm9ybWF0IHNhbXBsZV9mbXQu CisrICoKKysgKiBUaGUgYXVkaW9fZGF0YSBhcnJheSBpcyBmaWxsZWQgd2l0aCB0aGUgcG9pbnRl cnMgdG8gdGhlIHNhbXBsZXMgZGF0YSBwbGFuZXM6CisrICogZm9yIHBsYW5hciwgc2V0IHRoZSBz dGFydCBwb2ludCBvZiBlYWNoIGNoYW5uZWwncyBkYXRhIHdpdGhpbiB0aGUgYnVmZmVyLAorKyAq IGZvciBwYWNrZWQsIHNldCB0aGUgc3RhcnQgcG9pbnQgb2YgdGhlIGVudGlyZSBidWZmZXIgb25s eS4KKysgKgorKyAqIFRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IGxpbmVzaXplIGlzIHNldCB0byB0 aGUgYWxpZ25lZCBzaXplIG9mIGVhY2gKKysgKiBjaGFubmVsJ3MgZGF0YSBidWZmZXIgZm9yIHBs YW5hciBsYXlvdXQsIG9yIHRvIHRoZSBhbGlnbmVkIHNpemUgb2YgdGhlCisrICogYnVmZmVyIGZv ciBhbGwgY2hhbm5lbHMgZm9yIHBhY2tlZCBsYXlvdXQuCisrICoKKysgKiBUaGUgYnVmZmVyIGlu IGJ1ZiBtdXN0IGJlIGJpZyBlbm91Z2ggdG8gY29udGFpbiBhbGwgdGhlIHNhbXBsZXMKKysgKiAo dXNlIGF2X3NhbXBsZXNfZ2V0X2J1ZmZlcl9zaXplKCkgdG8gY29tcHV0ZSBpdHMgbWluaW11bSBz aXplKSwKKysgKiBvdGhlcndpc2UgdGhlIGF1ZGlvX2RhdGEgcG9pbnRlcnMgd2lsbCBwb2ludCB0 byBpbnZhbGlkIGRhdGEuCisrICoKKysgKiBAc2VlIGVudW0gQVZTYW1wbGVGb3JtYXQKKysgKiBU aGUgZG9jdW1lbnRhdGlvbiBmb3IgQVZTYW1wbGVGb3JtYXQgZGVzY3JpYmVzIHRoZSBkYXRhIGxh eW91dC4KKysgKgorKyAqIEBwYXJhbVtvdXRdIGF1ZGlvX2RhdGEgIGFycmF5IHRvIGJlIGZpbGxl ZCB3aXRoIHRoZSBwb2ludGVyIGZvciBlYWNoIGNoYW5uZWwKKysgKiBAcGFyYW1bb3V0XSBsaW5l c2l6ZSAgICBjYWxjdWxhdGVkIGxpbmVzaXplLCBtYXkgYmUgTlVMTAorKyAqIEBwYXJhbSBidWYg ICAgICAgICAgICAgIHRoZSBwb2ludGVyIHRvIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHNhbXBs ZXMKKysgKiBAcGFyYW0gbmJfY2hhbm5lbHMgICAgICB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCisr ICogQHBhcmFtIG5iX3NhbXBsZXMgICAgICAgdGhlIG51bWJlciBvZiBzYW1wbGVzIGluIGEgc2lu Z2xlIGNoYW5uZWwKKysgKiBAcGFyYW0gc2FtcGxlX2ZtdCAgICAgICB0aGUgc2FtcGxlIGZvcm1h dAorKyAqIEBwYXJhbSBhbGlnbiAgICAgICAgICAgIGJ1ZmZlciBzaXplIGFsaWdubWVudCAoMCA9 IGRlZmF1bHQsIDEgPSBubyBhbGlnbm1lbnQpCisrICogQHJldHVybiAgICAgICAgICAgICAgICAg bWluaW11bSBzaXplIGluIGJ5dGVzIHJlcXVpcmVkIGZvciB0aGUgYnVmZmVyIG9uIHN1Y2Nlc3Ms CisrICogICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9u IGZhaWx1cmUKKysgKi8KKytpbnQgYXZfc2FtcGxlc19maWxsX2FycmF5cyh1aW50OF90ICoqYXVk aW9fZGF0YSwgaW50ICpsaW5lc2l6ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1aW50OF90ICpidWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5iX2NoYW5u ZWxzLCBpbnQgbmJfc2FtcGxlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFW U2FtcGxlRm9ybWF0IHNhbXBsZV9mbXQsIGludCBhbGlnbik7CisrCisrLyoqCisrICogQWxsb2Nh dGUgYSBzYW1wbGVzIGJ1ZmZlciBmb3IgbmJfc2FtcGxlcyBzYW1wbGVzLCBhbmQgZmlsbCBkYXRh IHBvaW50ZXJzIGFuZAorKyAqIGxpbmVzaXplIGFjY29yZGluZ2x5LgorKyAqIFRoZSBhbGxvY2F0 ZWQgc2FtcGxlcyBidWZmZXIgY2FuIGJlIGZyZWVkIGJ5IHVzaW5nIGF2X2ZyZWVwKCZhdWRpb19k YXRhWzBdKQorKyAqIEFsbG9jYXRlZCBkYXRhIHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gc2lsZW5j ZS4KKysgKgorKyAqIEBzZWUgZW51bSBBVlNhbXBsZUZvcm1hdAorKyAqIFRoZSBkb2N1bWVudGF0 aW9uIGZvciBBVlNhbXBsZUZvcm1hdCBkZXNjcmliZXMgdGhlIGRhdGEgbGF5b3V0LgorKyAqCisr ICogQHBhcmFtW291dF0gYXVkaW9fZGF0YSAgYXJyYXkgdG8gYmUgZmlsbGVkIHdpdGggdGhlIHBv aW50ZXIgZm9yIGVhY2ggY2hhbm5lbAorKyAqIEBwYXJhbVtvdXRdIGxpbmVzaXplICAgIGFsaWdu ZWQgc2l6ZSBmb3IgYXVkaW8gYnVmZmVyKHMpLCBtYXkgYmUgTlVMTAorKyAqIEBwYXJhbSBuYl9j aGFubmVscyAgICAgIG51bWJlciBvZiBhdWRpbyBjaGFubmVscworKyAqIEBwYXJhbSBuYl9zYW1w bGVzICAgICAgIG51bWJlciBvZiBzYW1wbGVzIHBlciBjaGFubmVsCisrICogQHBhcmFtIHNhbXBs ZV9mbXQgICAgICAgdGhlIHNhbXBsZSBmb3JtYXQKKysgKiBAcGFyYW0gYWxpZ24gICAgICAgICAg ICBidWZmZXIgc2l6ZSBhbGlnbm1lbnQgKDAgPSBkZWZhdWx0LCAxID0gbm8gYWxpZ25tZW50KQor KyAqIEByZXR1cm4gICAgICAgICAgICAgICAgID49MCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUg ZXJyb3IgY29kZSBvbiBmYWlsdXJlCisrICogQHRvZG8gcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBh bGxvY2F0ZWQgYnVmZmVyIGluIGNhc2Ugb2Ygc3VjY2VzcyBhdCB0aGUgbmV4dCBidW1wCisrICog QHNlZSBhdl9zYW1wbGVzX2ZpbGxfYXJyYXlzKCkKKysgKiBAc2VlIGF2X3NhbXBsZXNfYWxsb2Nf YXJyYXlfYW5kX3NhbXBsZXMoKQorKyAqLworK2ludCBhdl9zYW1wbGVzX2FsbG9jKHVpbnQ4X3Qg KiphdWRpb19kYXRhLCBpbnQgKmxpbmVzaXplLCBpbnQgbmJfY2hhbm5lbHMsCisrICAgICAgICAg ICAgICAgICAgICAgaW50IG5iX3NhbXBsZXMsIGVudW0gQVZTYW1wbGVGb3JtYXQgc2FtcGxlX2Zt dCwgaW50IGFsaWduKTsKKysKKysvKioKKysgKiBBbGxvY2F0ZSBhIGRhdGEgcG9pbnRlcnMgYXJy YXksIHNhbXBsZXMgYnVmZmVyIGZvciBuYl9zYW1wbGVzCisrICogc2FtcGxlcywgYW5kIGZpbGwg ZGF0YSBwb2ludGVycyBhbmQgbGluZXNpemUgYWNjb3JkaW5nbHkuCisrICoKKysgKiBUaGlzIGlz IHRoZSBzYW1lIGFzIGF2X3NhbXBsZXNfYWxsb2MoKSwgYnV0IGFsc28gYWxsb2NhdGVzIHRoZSBk YXRhCisrICogcG9pbnRlcnMgYXJyYXkuCisrICoKKysgKiBAc2VlIGF2X3NhbXBsZXNfYWxsb2Mo KQorKyAqLworK2ludCBhdl9zYW1wbGVzX2FsbG9jX2FycmF5X2FuZF9zYW1wbGVzKHVpbnQ4X3Qg KioqYXVkaW9fZGF0YSwgaW50ICpsaW5lc2l6ZSwgaW50IG5iX2NoYW5uZWxzLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuYl9zYW1wbGVzLCBlbnVtIEFWU2Ft cGxlRm9ybWF0IHNhbXBsZV9mbXQsIGludCBhbGlnbik7CisrCisrLyoqCisrICogQ29weSBzYW1w bGVzIGZyb20gc3JjIHRvIGRzdC4KKysgKgorKyAqIEBwYXJhbSBkc3QgZGVzdGluYXRpb24gYXJy YXkgb2YgcG9pbnRlcnMgdG8gZGF0YSBwbGFuZXMKKysgKiBAcGFyYW0gc3JjIHNvdXJjZSBhcnJh eSBvZiBwb2ludGVycyB0byBkYXRhIHBsYW5lcworKyAqIEBwYXJhbSBkc3Rfb2Zmc2V0IG9mZnNl dCBpbiBzYW1wbGVzIGF0IHdoaWNoIHRoZSBkYXRhIHdpbGwgYmUgd3JpdHRlbiB0byBkc3QKKysg KiBAcGFyYW0gc3JjX29mZnNldCBvZmZzZXQgaW4gc2FtcGxlcyBhdCB3aGljaCB0aGUgZGF0YSB3 aWxsIGJlIHJlYWQgZnJvbSBzcmMKKysgKiBAcGFyYW0gbmJfc2FtcGxlcyBudW1iZXIgb2Ygc2Ft cGxlcyB0byBiZSBjb3BpZWQKKysgKiBAcGFyYW0gbmJfY2hhbm5lbHMgbnVtYmVyIG9mIGF1ZGlv IGNoYW5uZWxzCisrICogQHBhcmFtIHNhbXBsZV9mbXQgYXVkaW8gc2FtcGxlIGZvcm1hdAorKyAq LworK2ludCBhdl9zYW1wbGVzX2NvcHkodWludDhfdCAqIGNvbnN0ICpkc3QsIHVpbnQ4X3QgKiBj b25zdCAqc3JjLCBpbnQgZHN0X29mZnNldCwKKysgICAgICAgICAgICAgICAgICAgIGludCBzcmNf b2Zmc2V0LCBpbnQgbmJfc2FtcGxlcywgaW50IG5iX2NoYW5uZWxzLAorKyAgICAgICAgICAgICAg ICAgICAgZW51bSBBVlNhbXBsZUZvcm1hdCBzYW1wbGVfZm10KTsKKysKKysvKioKKysgKiBGaWxs IGFuIGF1ZGlvIGJ1ZmZlciB3aXRoIHNpbGVuY2UuCisrICoKKysgKiBAcGFyYW0gYXVkaW9fZGF0 YSAgYXJyYXkgb2YgcG9pbnRlcnMgdG8gZGF0YSBwbGFuZXMKKysgKiBAcGFyYW0gb2Zmc2V0ICAg ICAgb2Zmc2V0IGluIHNhbXBsZXMgYXQgd2hpY2ggdG8gc3RhcnQgZmlsbGluZworKyAqIEBwYXJh bSBuYl9zYW1wbGVzICBudW1iZXIgb2Ygc2FtcGxlcyB0byBmaWxsCisrICogQHBhcmFtIG5iX2No YW5uZWxzIG51bWJlciBvZiBhdWRpbyBjaGFubmVscworKyAqIEBwYXJhbSBzYW1wbGVfZm10ICBh dWRpbyBzYW1wbGUgZm9ybWF0CisrICovCisraW50IGF2X3NhbXBsZXNfc2V0X3NpbGVuY2UodWlu dDhfdCAqIGNvbnN0ICphdWRpb19kYXRhLCBpbnQgb2Zmc2V0LCBpbnQgbmJfc2FtcGxlcywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJfY2hhbm5lbHMsIGVudW0gQVZTYW1wbGVG b3JtYXQgc2FtcGxlX2ZtdCk7CisrCisrLyoqCisrICogQH0KKysgKiBAfQorKyAqLworKyNlbmRp ZiAvKiBBVlVUSUxfU0FNUExFRk1UX0ggKi8KK2RpZmYgLXVwIE11c2VTY29yZS00LjcuNC9zcmMv ZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYmF2dXRpbC92ZXJzaW9uLmgu ZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2Zm bXBlZy92OS9saWJhdnV0aWwvdmVyc2lvbi5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFt ZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL3ZlcnNpb24uaC5mZm1w ZWc5CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc5MTcwNTY5ICswMjAwCisrKysgTXVzZVNjb3JlLTQu Ny40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGliYXZ1dGlsL3Zl cnNpb24uaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3OTEyNjc0MiArMDIwMAorQEAgLTAsMCArMSwx MTggQEAKKysvKgorKyAqIGNvcHlyaWdodCAoYykgMjAwMyBGYWJyaWNlIEJlbGxhcmQKKysgKgor KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKysgKgorKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy CisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyAqLworKworKy8q KgorKyAqIEBmaWxlCisrICogQGluZ3JvdXAgbGF2dQorKyAqIExpYmF2dXRpbCB2ZXJzaW9uIG1h Y3JvcworKyAqLworKworKyNpZm5kZWYgQVZVVElMX1ZFUlNJT05fSAorKyNkZWZpbmUgQVZVVElM X1ZFUlNJT05fSAorKworKyNpbmNsdWRlICJtYWNyb3MuaCIKKysKKysvKioKKysgKiBAYWRkdG9n cm91cCB2ZXJzaW9uX3V0aWxzCisrICoKKysgKiBVc2VmdWwgdG8gY2hlY2sgYW5kIG1hdGNoIGxp YnJhcnkgdmVyc2lvbiBpbiBvcmRlciB0byBtYWludGFpbgorKyAqIGJhY2t3YXJkIGNvbXBhdGli aWxpdHkuCisrICoKKysgKiBUaGUgRkZtcGVnIGxpYnJhcmllcyBmb2xsb3cgYSB2ZXJzaW9uaW5n IHNjaGVtZSB2ZXJ5IHNpbWlsYXIgdG8KKysgKiBTZW1hbnRpYyBWZXJzaW9uaW5nIChodHRwOi8v c2VtdmVyLm9yZy8pCisrICogVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgY29tcG9uZW50IGNh bGxlZCBQQVRDSCBpcyBjYWxsZWQgTUlDUk8gaW4gRkZtcGVnCisrICogYW5kIGl0cyB2YWx1ZSBp cyByZXNldCB0byAxMDAgaW5zdGVhZCBvZiAwIHRvIGtlZXAgaXQgYWJvdmUgb3IgZXF1YWwgdG8g MTAwLgorKyAqIEFsc28gd2UgZG8gbm90IGluY3JlYXNlIE1JQ1JPIGZvciBldmVyeSBidWdmaXgg b3IgY2hhbmdlIGluIGdpdCBtYXN0ZXIuCisrICoKKysgKiBQcmlvciB0byBGRm1wZWcgMy4yIHBv aW50IHJlbGVhc2VzIGRpZCBub3QgY2hhbmdlIGFueSBsaWIgdmVyc2lvbiBudW1iZXIgdG8KKysg KiBhdm9pZCBhbGlhc3NpbmcgZGlmZmVyZW50IGdpdCBtYXN0ZXIgY2hlY2tvdXRzLgorKyAqIFN0 YXJ0aW5nIHdpdGggRkZtcGVnIDMuMiwgdGhlIHJlbGVhc2VkIGxpYnJhcnkgdmVyc2lvbnMgd2ls bCBvY2N1cHkKKysgKiBhIHNlcGFyYXRlIE1BSk9SLk1JTk9SIHRoYXQgaXMgbm90IHVzZWQgb24g dGhlIG1hc3RlciBkZXZlbG9wbWVudCBicmFuY2guCisrICogVGhhdCBpcyBpZiB3ZSBicmFuY2gg YSByZWxlYXNlIG9mIG1hc3RlciA1NS4xMC4xMjMgd2Ugd2lsbCBidW1wIHRvIDU1LjExLjEwMAor KyAqIGZvciB0aGUgcmVsZWFzZSBhbmQgbWFzdGVyIHdpbGwgY29udGludWUgYXQgNTUuMTIuMTAw IGFmdGVyIGl0LiBFYWNoIG5ldworKyAqIHBvaW50IHJlbGVhc2Ugd2lsbCB0aGVuIGJ1bXAgdGhl IE1JQ1JPIGltcHJvdmluZyB0aGUgdXNlZnVsbmVzcyBvZiB0aGUgbGliCisrICogdmVyc2lvbnMu CisrICoKKysgKiBAeworKyAqLworKworKyNkZWZpbmUgQVZfVkVSU0lPTl9JTlQoYSwgYiwgYykg KChhKTw8MTYgfCAoYik8PDggfCAoYykpCisrI2RlZmluZSBBVl9WRVJTSU9OX0RPVChhLCBiLCBj KSBhICMjLiMjIGIgIyMuIyMgYworKyNkZWZpbmUgQVZfVkVSU0lPTihhLCBiLCBjKSBBVl9WRVJT SU9OX0RPVChhLCBiLCBjKQorKworKy8qKgorKyAqIEV4dHJhY3QgdmVyc2lvbiBjb21wb25lbnRz IGZyb20gdGhlIGZ1bGwgOjpBVl9WRVJTSU9OX0lOVCBpbnQgYXMgcmV0dXJuZWQKKysgKiBieSBm dW5jdGlvbnMgbGlrZSA6OmF2Zm9ybWF0X3ZlcnNpb24oKSBhbmQgOjphdmNvZGVjX3ZlcnNpb24o KQorKyAqLworKyNkZWZpbmUgQVZfVkVSU0lPTl9NQUpPUihhKSAoKGEpID4+IDE2KQorKyNkZWZp bmUgQVZfVkVSU0lPTl9NSU5PUihhKSAoKChhKSAmIDB4MDBGRjAwKSA+PiA4KQorKyNkZWZpbmUg QVZfVkVSU0lPTl9NSUNSTyhhKSAoKGEpICYgMHhGRikKKysKKysvKioKKysgKiBAfQorKyAqLwor KworKy8qKgorKyAqIEBkZWZncm91cCBsYXZ1X3ZlciBWZXJzaW9uIGFuZCBCdWlsZCBkaWFnbm9z dGljcworKyAqCisrICogTWFjcm9zIGFuZCBmdW5jdGlvbiB1c2VmdWwgdG8gY2hlY2sgYXQgY29t cGlsZSB0aW1lIGFuZCBhdCBydW50aW1lCisrICogd2hpY2ggdmVyc2lvbiBvZiBsaWJhdnV0aWwg aXMgaW4gdXNlLgorKyAqCisrICogQHsKKysgKi8KKysKKysjZGVmaW5lIExJQkFWVVRJTF9WRVJT SU9OX01BSk9SICA2MQorKyNkZWZpbmUgTElCQVZVVElMX1ZFUlNJT05fTUlOT1IgICAxCisrI2Rl ZmluZSBMSUJBVlVUSUxfVkVSU0lPTl9NSUNSTyAxMDAKKysKKysjZGVmaW5lIExJQkFWVVRJTF9W RVJTSU9OX0lOVCAgIEFWX1ZFUlNJT05fSU5UKExJQkFWVVRJTF9WRVJTSU9OX01BSk9SLCBcCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJBVlVUSUxf VkVSU0lPTl9NSU5PUiwgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTElCQVZVVElMX1ZFUlNJT05fTUlDUk8pCisrI2RlZmluZSBMSUJBVlVUSUxfVkVS U0lPTiAgICAgICBBVl9WRVJTSU9OKExJQkFWVVRJTF9WRVJTSU9OX01BSk9SLCAgICAgXAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJBVlVUSUxfVkVSU0lP Tl9NSU5PUiwgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTElCQVZVVElMX1ZFUlNJT05fTUlDUk8pCisrI2RlZmluZSBMSUJBVlVUSUxfQlVJTEQgICAg ICAgICBMSUJBVlVUSUxfVkVSU0lPTl9JTlQKKysKKysjZGVmaW5lIExJQkFWVVRJTF9JREVOVCAg ICAgICAgICJMYXZ1IiBBVl9TVFJJTkdJRlkoTElCQVZVVElMX1ZFUlNJT04pCisrCisrLyoqCisr ICogQGRlZmdyb3VwIGxhdnVfZGVwcl9ndWFyZHMgRGVwcmVjYXRpb24gR3VhcmRzCisrICogRkZf QVBJXyogZGVmaW5lcyBtYXkgYmUgcGxhY2VkIGJlbG93IHRvIGluZGljYXRlIHB1YmxpYyBBUEkg dGhhdCB3aWxsIGJlCisrICogZHJvcHBlZCBhdCBhIGZ1dHVyZSB2ZXJzaW9uIGJ1bXAuIFRoZSBk ZWZpbmVzIHRoZW1zZWx2ZXMgYXJlIG5vdCBwYXJ0IG9mCisrICogdGhlIHB1YmxpYyBBUEkgYW5k IG1heSBjaGFuZ2UsIGJyZWFrIG9yIGRpc2FwcGVhciBhdCBhbnkgdGltZS4KKysgKgorKyAqIEBu b3RlLCB3aGVuIGJ1bXBpbmcgdGhlIG1ham9yIHZlcnNpb24gaXQgaXMgcmVjb21tZW5kZWQgdG8g bWFudWFsbHkKKysgKiBkaXNhYmxlIGVhY2ggRkZfQVBJXyogaW4gaXRzIG93biBjb21taXQgaW5z dGVhZCBvZiBkaXNhYmxpbmcgdGhlbSBhbGwKKysgKiBhdCBvbmNlIHRocm91Z2ggdGhlIGJ1bXAu IFRoaXMgaW1wcm92ZXMgdGhlIGdpdCBiaXNlY3QtYWJpbGl0eSBvZiB0aGUgY2hhbmdlLgorKyAq CisrICogQHsKKysgKi8KKysKKysjZGVmaW5lIEZGX0FQSV9DUFVfRkxBR19GT1JDRSAgICAgICAg ICAgKExJQkFWVVRJTF9WRVJTSU9OX01BSk9SIDwgNjIpCisrI2RlZmluZSBGRl9BUElfRE9WSV9M MTFfSU5WQUxJRF9QUk9QUyAgIChMSUJBVlVUSUxfVkVSU0lPTl9NQUpPUiA8IDYyKQorKyNkZWZp bmUgRkZfQVBJX0FTU0VSVF9GUFUgICAgICAgICAgICAgICAoTElCQVZVVElMX1ZFUlNJT05fTUFK T1IgPCA2MikKKysjZGVmaW5lIEZGX0FQSV9WVUxLQU5fU1lOQ19RVUVVRVMgICAgICAgKExJQkFW VVRJTF9WRVJTSU9OX01BSk9SIDwgNjIpCisrCisrLyoqCisrICogQH0KKysgKiBAfQorKyAqLwor KworKyNlbmRpZiAvKiBBVlVUSUxfVkVSU0lPTl9IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43 LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJzd3Jlc2FtcGxl L3N3cmVzYW1wbGUuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlh L3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYnN3cmVzYW1wbGUvc3dyZXNhbXBsZS5oCistLS0gTXVz ZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGli c3dyZXNhbXBsZS9zd3Jlc2FtcGxlLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3OTM5 NzcxNiArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJk cGFydHkvZmZtcGVnL3Y5L2xpYnN3cmVzYW1wbGUvc3dyZXNhbXBsZS5oCTIwMjYtMDktMDcgMTI6 MjM6NDcuNjc5MzY3MDA4ICswMjAwCitAQCAtMCwwICsxLDU4NyBAQAorKy8qCisrICogQ29weXJp Z2h0IChDKSAyMDExLTIwMTMgTWljaGFlbCBOaWVkZXJtYXllciAobWljaGFlbG5pQGdteC5hdCkK KysgKgorKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnN3cmVzYW1wbGUKKysgKgorKyAqIGxp YnN3cmVzYW1wbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogbGlic3dyZXNhbXBs ZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0 aCBsaWJzd3Jlc2FtcGxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICog Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u LCBNQSAwMjExMC0xMzAxIFVTQQorKyAqLworKworKyNpZm5kZWYgU1dSRVNBTVBMRV9TV1JFU0FN UExFX0gKKysjZGVmaW5lIFNXUkVTQU1QTEVfU1dSRVNBTVBMRV9ICisrCisrLyoqCisrICogQGZp bGUKKysgKiBAaW5ncm91cCBsc3dyCisrICogbGlic3dyZXNhbXBsZSBwdWJsaWMgaGVhZGVyCisr ICovCisrCisrLyoqCisrICogQGRlZmdyb3VwIGxzd3IgbGlic3dyZXNhbXBsZQorKyAqIEB7Cisr ICoKKysgKiBBdWRpbyByZXNhbXBsaW5nLCBzYW1wbGUgZm9ybWF0IGNvbnZlcnNpb24gYW5kIG1p eGluZyBsaWJyYXJ5LgorKyAqCisrICogSW50ZXJhY3Rpb24gd2l0aCBsc3dyIGlzIGRvbmUgdGhy b3VnaCBTd3JDb250ZXh0LCB3aGljaCBpcworKyAqIGFsbG9jYXRlZCB3aXRoIHN3cl9hbGxvYygp IG9yIHN3cl9hbGxvY19zZXRfb3B0czIoKS4gSXQgaXMgb3BhcXVlLCBzbyBhbGwgcGFyYW1ldGVy cworKyAqIG11c3QgYmUgc2V0IHdpdGggdGhlIEByZWYgYXZvcHRpb25zIEFQSS4KKysgKgorKyAq IFRoZSBmaXJzdCB0aGluZyB5b3Ugd2lsbCBuZWVkIHRvIGRvIGluIG9yZGVyIHRvIHVzZSBsc3dy IGlzIHRvIGFsbG9jYXRlCisrICogU3dyQ29udGV4dC4gVGhpcyBjYW4gYmUgZG9uZSB3aXRoIHN3 cl9hbGxvYygpIG9yIHN3cl9hbGxvY19zZXRfb3B0czIoKS4gSWYgeW91CisrICogYXJlIHVzaW5n IHRoZSBmb3JtZXIsIHlvdSBtdXN0IHNldCBvcHRpb25zIHRocm91Z2ggdGhlIEByZWYgYXZvcHRp b25zIEFQSS4KKysgKiBUaGUgbGF0dGVyIGZ1bmN0aW9uIHByb3ZpZGVzIHRoZSBzYW1lIGZlYXR1 cmUsIGJ1dCBpdCBhbGxvd3MgeW91IHRvIHNldCBzb21lCisrICogY29tbW9uIG9wdGlvbnMgaW4g dGhlIHNhbWUgc3RhdGVtZW50LgorKyAqCisrICogRm9yIGV4YW1wbGUgdGhlIGZvbGxvd2luZyBj b2RlIHdpbGwgc2V0dXAgY29udmVyc2lvbiBmcm9tIHBsYW5hciBmbG9hdCBzYW1wbGUKKysgKiBm b3JtYXQgdG8gaW50ZXJsZWF2ZWQgc2lnbmVkIDE2LWJpdCBpbnRlZ2VyLCBkb3duc2FtcGxpbmcg ZnJvbSA0OGtIeiB0bworKyAqIDQ0LjFrSHogYW5kIGRvd25taXhpbmcgZnJvbSA1LjEgY2hhbm5l bHMgdG8gc3RlcmVvICh1c2luZyB0aGUgZGVmYXVsdCBtaXhpbmcKKysgKiBtYXRyaXgpLiBUaGlz IGlzIHVzaW5nIHRoZSBzd3JfYWxsb2MoKSBmdW5jdGlvbi4KKysgKiBAY29kZQorKyAqIFN3ckNv bnRleHQgKnN3ciA9IHN3cl9hbGxvYygpOworKyAqIGF2X29wdF9zZXRfY2hsYXlvdXQoc3dyLCAi aW5fY2hsYXlvdXQiLCAmKEFWQ2hhbm5lbExheW91dClBVl9DSEFOTkVMX0xBWU9VVF81UE9JTlQx LCAwKTsKKysgKiBhdl9vcHRfc2V0X2NobGF5b3V0KHN3ciwgIm91dF9jaGxheW91dCIsICYoQVZD aGFubmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTywgMCk7CisrICogYXZfb3B0X3Nl dF9pbnQoc3dyLCAiaW5fc2FtcGxlX3JhdGUiLCAgICAgNDgwMDAsICAgICAgICAgICAgICAgIDAp OworKyAqIGF2X29wdF9zZXRfaW50KHN3ciwgIm91dF9zYW1wbGVfcmF0ZSIsICAgIDQ0MTAwLCAg ICAgICAgICAgICAgICAwKTsKKysgKiBhdl9vcHRfc2V0X3NhbXBsZV9mbXQoc3dyLCAiaW5fc2Ft cGxlX2ZtdCIsICBBVl9TQU1QTEVfRk1UX0ZMVFAsIDApOworKyAqIGF2X29wdF9zZXRfc2FtcGxl X2ZtdChzd3IsICJvdXRfc2FtcGxlX2ZtdCIsIEFWX1NBTVBMRV9GTVRfUzE2LCAgMCk7CisrICog QGVuZGNvZGUKKysgKgorKyAqIFRoZSBzYW1lIGpvYiBjYW4gYmUgZG9uZSB1c2luZyBzd3JfYWxs b2Nfc2V0X29wdHMyKCkgYXMgd2VsbDoKKysgKiBAY29kZQorKyAqIFN3ckNvbnRleHQgKnN3ciA9 IE5VTEw7CisrICogaW50IHJldCA9IHN3cl9hbGxvY19zZXRfb3B0czIoJnN3ciwgICAgICAgICAv LyB3ZSdyZSBhbGxvY2F0aW5nIGEgbmV3IGNvbnRleHQKKysgKiAgICAgICAgICAgICAgICAgICAg ICAgJihBVkNoYW5uZWxMYXlvdXQpQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLCAvLyBvdXRfY2hf bGF5b3V0CisrICogICAgICAgICAgICAgICAgICAgICAgIEFWX1NBTVBMRV9GTVRfUzE2LCAgICAv LyBvdXRfc2FtcGxlX2ZtdAorKyAqICAgICAgICAgICAgICAgICAgICAgICA0NDEwMCwgICAgICAg ICAgICAgICAgLy8gb3V0X3NhbXBsZV9yYXRlCisrICogICAgICAgICAgICAgICAgICAgICAgICYo QVZDaGFubmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUXzVQT0lOVDEsIC8vIGluX2NoX2xheW91 dAorKyAqICAgICAgICAgICAgICAgICAgICAgICBBVl9TQU1QTEVfRk1UX0ZMVFAsICAgLy8gaW5f c2FtcGxlX2ZtdAorKyAqICAgICAgICAgICAgICAgICAgICAgICA0ODAwMCwgICAgICAgICAgICAg ICAgLy8gaW5fc2FtcGxlX3JhdGUKKysgKiAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAg ICAgICAgICAgICAgIC8vIGxvZ19vZmZzZXQKKysgKiAgICAgICAgICAgICAgICAgICAgICAgTlVM TCk7ICAgICAgICAgICAgICAgIC8vIGxvZ19jdHgKKysgKiBAZW5kY29kZQorKyAqCisrICogT25j ZSBhbGwgdmFsdWVzIGhhdmUgYmVlbiBzZXQsIGl0IG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBz d3JfaW5pdCgpLiBJZgorKyAqIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgY29udmVyc2lvbiBwYXJh bWV0ZXJzLCB5b3UgY2FuIGNoYW5nZSB0aGUgcGFyYW1ldGVycworKyAqIHVzaW5nIEByZWYgYXZv cHRpb25zLCBhcyBkZXNjcmliZWQgYWJvdmUgaW4gdGhlIGZpcnN0IGV4YW1wbGU7IG9yIGJ5IHVz aW5nCisrICogc3dyX2FsbG9jX3NldF9vcHRzMigpLCBidXQgd2l0aCB0aGUgZmlyc3QgYXJndW1l bnQgdGhlIGFsbG9jYXRlZCBjb250ZXh0LgorKyAqIFlvdSBtdXN0IHRoZW4gY2FsbCBzd3JfaW5p dCgpIGFnYWluLgorKyAqCisrICogVGhlIGNvbnZlcnNpb24gaXRzZWxmIGlzIGRvbmUgYnkgcmVw ZWF0ZWRseSBjYWxsaW5nIHN3cl9jb252ZXJ0KCkuCisrICogTm90ZSB0aGF0IHRoZSBzYW1wbGVz IG1heSBnZXQgYnVmZmVyZWQgaW4gc3dyIGlmIHlvdSBwcm92aWRlIGluc3VmZmljaWVudAorKyAq IG91dHB1dCBzcGFjZSBvciBpZiBzYW1wbGUgcmF0ZSBjb252ZXJzaW9uIGlzIGRvbmUsIHdoaWNo IHJlcXVpcmVzICJmdXR1cmUiCisrICogc2FtcGxlcy4gU2FtcGxlcyB0aGF0IGRvIG5vdCByZXF1 aXJlIGZ1dHVyZSBpbnB1dCBjYW4gYmUgcmV0cmlldmVkIGF0IGFueQorKyAqIHRpbWUgYnkgdXNp bmcgc3dyX2NvbnZlcnQoKSAoaW5fY291bnQgY2FuIGJlIHNldCB0byAwKS4KKysgKiBBdCB0aGUg ZW5kIG9mIGNvbnZlcnNpb24gdGhlIHJlc2FtcGxpbmcgYnVmZmVyIGNhbiBiZSBmbHVzaGVkIGJ5 IGNhbGxpbmcKKysgKiBzd3JfY29udmVydCgpIHdpdGggTlVMTCBpbiBhbmQgMCBpbl9jb3VudC4K KysgKgorKyAqIFRoZSBzYW1wbGVzIHVzZWQgaW4gdGhlIGNvbnZlcnNpb24gcHJvY2VzcyBjYW4g YmUgbWFuYWdlZCB3aXRoIHRoZSBsaWJhdnV0aWwKKysgKiBAcmVmIGxhdnVfc2FtcG1hbmlwICJz YW1wbGVzIG1hbmlwdWxhdGlvbiIgQVBJLCBpbmNsdWRpbmcgYXZfc2FtcGxlc19hbGxvYygpCisr ICogZnVuY3Rpb24gdXNlZCBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUuCisrICoKKysgKiBUaGUg ZGVsYXkgYmV0d2VlbiBpbnB1dCBhbmQgb3V0cHV0LCBjYW4gYXQgYW55IHRpbWUgYmUgZm91bmQg YnkgdXNpbmcKKysgKiBzd3JfZ2V0X2RlbGF5KCkuCisrICoKKysgKiBUaGUgZm9sbG93aW5nIGNv ZGUgZGVtb25zdHJhdGVzIHRoZSBjb252ZXJzaW9uIGxvb3AgYXNzdW1pbmcgdGhlIHBhcmFtZXRl cnMKKysgKiBmcm9tIGFib3ZlIGFuZCBjYWxsZXItZGVmaW5lZCBmdW5jdGlvbnMgZ2V0X2lucHV0 KCkgYW5kIGhhbmRsZV9vdXRwdXQoKToKKysgKiBAY29kZQorKyAqIHVpbnQ4X3QgKippbnB1dDsK KysgKiBpbnQgaW5fc2FtcGxlczsKKysgKgorKyAqIHdoaWxlIChnZXRfaW5wdXQoJmlucHV0LCAm aW5fc2FtcGxlcykpIHsKKysgKiAgICAgdWludDhfdCAqb3V0cHV0OworKyAqICAgICBpbnQgb3V0 X3NhbXBsZXMgPSBhdl9yZXNjYWxlX3JuZChzd3JfZ2V0X2RlbGF5KHN3ciwgNDgwMDApICsKKysg KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fc2FtcGxlcywgNDQxMDAs IDQ4MDAwLCBBVl9ST1VORF9VUCk7CisrICogICAgIGF2X3NhbXBsZXNfYWxsb2MoJm91dHB1dCwg TlVMTCwgMiwgb3V0X3NhbXBsZXMsCisrICogICAgICAgICAgICAgICAgICAgICAgQVZfU0FNUExF X0ZNVF9TMTYsIDApOworKyAqICAgICBvdXRfc2FtcGxlcyA9IHN3cl9jb252ZXJ0KHN3ciwgJm91 dHB1dCwgb3V0X3NhbXBsZXMsCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlucHV0LCBpbl9zYW1wbGVzKTsKKysgKiAgICAgaGFuZGxlX291dHB1dChvdXRwdXQsIG91 dF9zYW1wbGVzKTsKKysgKiAgICAgYXZfZnJlZXAoJm91dHB1dCk7CisrICogfQorKyAqIEBlbmRj b2RlCisrICoKKysgKiBXaGVuIHRoZSBjb252ZXJzaW9uIGlzIGZpbmlzaGVkLCB0aGUgY29udmVy c2lvbgorKyAqIGNvbnRleHQgYW5kIGV2ZXJ5dGhpbmcgYXNzb2NpYXRlZCB3aXRoIGl0IG11c3Qg YmUgZnJlZWQgd2l0aCBzd3JfZnJlZSgpLgorKyAqIEEgc3dyX2Nsb3NlKCkgZnVuY3Rpb24gaXMg YWxzbyBhdmFpbGFibGUsIGJ1dCBpdCBleGlzdHMgbWFpbmx5IGZvcgorKyAqIGNvbXBhdGliaWxp dHkgd2l0aCBsaWJhdnJlc2FtcGxlLCBhbmQgaXMgbm90IHJlcXVpcmVkIHRvIGJlIGNhbGxlZC4K KysgKgorKyAqIFRoZXJlIHdpbGwgYmUgbm8gbWVtb3J5IGxlYWsgaWYgdGhlIGRhdGEgaXMgbm90 IGNvbXBsZXRlbHkgZmx1c2hlZCBiZWZvcmUKKysgKiBzd3JfZnJlZSgpLgorKyAqLworKworKyNp bmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSAibGliYXZ1dGlsL2NoYW5uZWxfbGF5b3V0Lmgi CisrI2luY2x1ZGUgImxpYmF2dXRpbC9mcmFtZS5oIgorKyNpbmNsdWRlICJsaWJhdnV0aWwvc2Ft cGxlZm10LmgiCisrCisrI2luY2x1ZGUgImxpYnN3cmVzYW1wbGUvdmVyc2lvbl9tYWpvci5oIgor KyNpZm5kZWYgSEFWRV9BVl9DT05GSUdfSAorKy8qIFdoZW4gaW5jbHVkZWQgYXMgcGFydCBvZiB0 aGUgZmZtcGVnIGJ1aWxkLCBvbmx5IGluY2x1ZGUgdGhlIG1ham9yIHZlcnNpb24KKysgKiB0byBh dm9pZCB1bm5lY2Vzc2FyeSByZWJ1aWxkcy4gV2hlbiBpbmNsdWRlZCBleHRlcm5hbGx5LCBrZWVw IGluY2x1ZGluZworKyAqIHRoZSBmdWxsIHZlcnNpb24gaW5mb3JtYXRpb24uICovCisrI2luY2x1 ZGUgImxpYnN3cmVzYW1wbGUvdmVyc2lvbi5oIgorKyNlbmRpZgorKworKy8qKgorKyAqIEBuYW1l IE9wdGlvbiBjb25zdGFudHMKKysgKiBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgZm9yIHRoZSBA cmVmIGF2b3B0aW9ucyBpbnRlcmZhY2UgZm9yIGxzd3IuCisrICogQHsKKysgKgorKyAqLworKwor KyNkZWZpbmUgU1dSX0ZMQUdfUkVTQU1QTEUgMSAvLy88IEZvcmNlIHJlc2FtcGxpbmcgZXZlbiBp ZiBlcXVhbCBzYW1wbGUgcmF0ZQorKy8vVE9ETyB1c2UgaW50IHJlc2FtcGxlID8KKysvL2xvbmcg dGVybSBUT0RPIGNhbiB3ZSBlbmFibGUgdGhpcyBkeW5hbWljYWxseT8KKysKKysvKiogRGl0aGVy aW5nIGFsZ29yaXRobXMgKi8KKytlbnVtIFN3ckRpdGhlclR5cGUgeworKyAgICBTV1JfRElUSEVS X05PTkUgPSAwLAorKyAgICBTV1JfRElUSEVSX1JFQ1RBTkdVTEFSLAorKyAgICBTV1JfRElUSEVS X1RSSUFOR1VMQVIsCisrICAgIFNXUl9ESVRIRVJfVFJJQU5HVUxBUl9ISUdIUEFTUywKKysKKysg ICAgU1dSX0RJVEhFUl9OUyA9IDY0LCAgICAgICAgIC8vLzwgbm90IHBhcnQgb2YgQVBJL0FCSQor KyAgICBTV1JfRElUSEVSX05TX0xJUFNISVRaLAorKyAgICBTV1JfRElUSEVSX05TX0ZfV0VJR0hU RUQsCisrICAgIFNXUl9ESVRIRVJfTlNfTU9ESUZJRURfRV9XRUlHSFRFRCwKKysgICAgU1dSX0RJ VEhFUl9OU19JTVBST1ZFRF9FX1dFSUdIVEVELAorKyAgICBTV1JfRElUSEVSX05TX1NISUJBVEEs CisrICAgIFNXUl9ESVRIRVJfTlNfTE9XX1NISUJBVEEsCisrICAgIFNXUl9ESVRIRVJfTlNfSElH SF9TSElCQVRBLAorKyAgICBTV1JfRElUSEVSX05CLCAgICAgICAgICAgICAgLy8vPCBub3QgcGFy dCBvZiBBUEkvQUJJCisrfTsKKysKKysvKiogUmVzYW1wbGluZyBFbmdpbmVzICovCisrZW51bSBT d3JFbmdpbmUgeworKyAgICBTV1JfRU5HSU5FX1NXUiwgICAgICAgICAgICAgLyoqPCBTVyBSZXNh bXBsZXIgKi8KKysgICAgU1dSX0VOR0lORV9TT1hSLCAgICAgICAgICAgIC8qKjwgU29YIFJlc2Ft cGxlciAqLworKyAgICBTV1JfRU5HSU5FX05CLCAgICAgICAgICAgICAgLy8vPCBub3QgcGFydCBv ZiBBUEkvQUJJCisrfTsKKysKKysvKiogUmVzYW1wbGluZyBGaWx0ZXIgVHlwZXMgKi8KKytlbnVt IFN3ckZpbHRlclR5cGUgeworKyAgICBTV1JfRklMVEVSX1RZUEVfQ1VCSUMsICAgICAgICAgICAg ICAvKio8IEN1YmljICovCisrICAgIFNXUl9GSUxURVJfVFlQRV9CTEFDS01BTl9OVVRUQUxMLCAg IC8qKjwgQmxhY2ttYW4gTnV0dGFsbCB3aW5kb3dlZCBzaW5jICovCisrICAgIFNXUl9GSUxURVJf VFlQRV9LQUlTRVIsICAgICAgICAgICAgIC8qKjwgS2Fpc2VyIHdpbmRvd2VkIHNpbmMgKi8KKyt9 OworKworKy8qKgorKyAqIEB9CisrICovCisrCisrLyoqCisrICogVGhlIGxpYnN3cmVzYW1wbGUg Y29udGV4dC4gVW5saWtlIGxpYmF2Y29kZWMgYW5kIGxpYmF2Zm9ybWF0LCB0aGlzIHN0cnVjdHVy ZQorKyAqIGlzIG9wYXF1ZS4gVGhpcyBtZWFucyB0aGF0IGlmIHlvdSB3b3VsZCBsaWtlIHRvIHNl dCBvcHRpb25zLCB5b3UgbXVzdCB1c2UKKysgKiB0aGUgQHJlZiBhdm9wdGlvbnMgQVBJIGFuZCBj YW5ub3QgZGlyZWN0bHkgc2V0IHZhbHVlcyB0byBtZW1iZXJzIG9mIHRoZQorKyAqIHN0cnVjdHVy ZS4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBTd3JDb250ZXh0IFN3ckNvbnRleHQ7CisrCisrLyoq CisrICogR2V0IHRoZSBBVkNsYXNzIGZvciBTd3JDb250ZXh0LiBJdCBjYW4gYmUgdXNlZCBpbiBj b21iaW5hdGlvbiB3aXRoCisrICogQVZfT1BUX1NFQVJDSF9GQUtFX09CSiBmb3IgZXhhbWluaW5n IG9wdGlvbnMuCisrICoKKysgKiBAc2VlIGF2X29wdF9maW5kKCkuCisrICogQHJldHVybiB0aGUg QVZDbGFzcyBvZiBTd3JDb250ZXh0CisrICovCisrY29uc3QgQVZDbGFzcyAqc3dyX2dldF9jbGFz cyh2b2lkKTsKKysKKysvKioKKysgKiBAbmFtZSBTd3JDb250ZXh0IGNvbnN0cnVjdG9yIGZ1bmN0 aW9ucworKyAqIEB7CisrICovCisrCisrLyoqCisrICogQWxsb2NhdGUgU3dyQ29udGV4dC4KKysg KgorKyAqIElmIHlvdSB1c2UgdGhpcyBmdW5jdGlvbiB5b3Ugd2lsbCBuZWVkIHRvIHNldCB0aGUg cGFyYW1ldGVycyAobWFudWFsbHkgb3IKKysgKiB3aXRoIHN3cl9hbGxvY19zZXRfb3B0czIoKSkg YmVmb3JlIGNhbGxpbmcgc3dyX2luaXQoKS4KKysgKgorKyAqIEBzZWUgc3dyX2FsbG9jX3NldF9v cHRzMigpLCBzd3JfaW5pdCgpLCBzd3JfZnJlZSgpCisrICogQHJldHVybiBOVUxMIG9uIGVycm9y LCBhbGxvY2F0ZWQgY29udGV4dCBvdGhlcndpc2UKKysgKi8KKytzdHJ1Y3QgU3dyQ29udGV4dCAq c3dyX2FsbG9jKHZvaWQpOworKworKy8qKgorKyAqIEluaXRpYWxpemUgY29udGV4dCBhZnRlciB1 c2VyIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHNldC4KKysgKiBAbm90ZSBUaGUgY29udGV4dCBtdXN0 IGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIEFWT3B0aW9uIEFQSS4KKysgKgorKyAqIEBzZWUgYXZf b3B0X3NldF9pbnQoKQorKyAqIEBzZWUgYXZfb3B0X3NldF9kaWN0KCkKKysgKgorKyAqIEBwYXJh bVtpbixvdXRdICAgcyBTd3IgY29udGV4dCB0byBpbml0aWFsaXplCisrICogQHJldHVybiBBVkVS Uk9SIGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlLgorKyAqLworK2ludCBzd3JfaW5pdChz dHJ1Y3QgU3dyQ29udGV4dCAqcyk7CisrCisrLyoqCisrICogQ2hlY2sgd2hldGhlciBhbiBzd3Ig Y29udGV4dCBoYXMgYmVlbiBpbml0aWFsaXplZCBvciBub3QuCisrICoKKysgKiBAcGFyYW1baW5d ICAgICAgIHMgU3dyIGNvbnRleHQgdG8gY2hlY2sKKysgKiBAc2VlIHN3cl9pbml0KCkKKysgKiBA cmV0dXJuIHBvc2l0aXZlIGlmIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkLCAwIGlmIG5vdCBpbml0 aWFsaXplZAorKyAqLworK2ludCBzd3JfaXNfaW5pdGlhbGl6ZWQoc3RydWN0IFN3ckNvbnRleHQg KnMpOworKworKy8qKgorKyAqIEFsbG9jYXRlIFN3ckNvbnRleHQgaWYgbmVlZGVkIGFuZCBzZXQv cmVzZXQgY29tbW9uIHBhcmFtZXRlcnMuCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90 IHJlcXVpcmUgKnBzIHRvIGJlIGFsbG9jYXRlZCB3aXRoIHN3cl9hbGxvYygpLiBPbiB0aGUKKysg KiBvdGhlciBoYW5kLCBzd3JfYWxsb2MoKSBjYW4gdXNlIHN3cl9hbGxvY19zZXRfb3B0czIoKSB0 byBzZXQgdGhlIHBhcmFtZXRlcnMKKysgKiBvbiB0aGUgYWxsb2NhdGVkIGNvbnRleHQuCisrICoK KysgKiBAcGFyYW0gcHMgICAgICAgICAgICAgIFBvaW50ZXIgdG8gYW4gZXhpc3RpbmcgU3dyIGNv bnRleHQgaWYgYXZhaWxhYmxlLCBvciB0byBOVUxMIGlmIG5vdC4KKysgKiAgICAgICAgICAgICAg ICAgICAgICAgIE9uIHN1Y2Nlc3MsICpwcyB3aWxsIGJlIHNldCB0byB0aGUgYWxsb2NhdGVkIGNv bnRleHQuCisrICogQHBhcmFtIG91dF9jaF9sYXlvdXQgICBvdXRwdXQgY2hhbm5lbCBsYXlvdXQg KGUuZy4gQVZfQ0hBTk5FTF9MQVlPVVRfKikKKysgKiBAcGFyYW0gb3V0X3NhbXBsZV9mbXQgIG91 dHB1dCBzYW1wbGUgZm9ybWF0IChBVl9TQU1QTEVfRk1UXyopLgorKyAqIEBwYXJhbSBvdXRfc2Ft cGxlX3JhdGUgb3V0cHV0IHNhbXBsZSByYXRlIChmcmVxdWVuY3kgaW4gSHopCisrICogQHBhcmFt IGluX2NoX2xheW91dCAgICBpbnB1dCBjaGFubmVsIGxheW91dCAoZS5nLiBBVl9DSEFOTkVMX0xB WU9VVF8qKQorKyAqIEBwYXJhbSBpbl9zYW1wbGVfZm10ICAgaW5wdXQgc2FtcGxlIGZvcm1hdCAo QVZfU0FNUExFX0ZNVF8qKS4KKysgKiBAcGFyYW0gaW5fc2FtcGxlX3JhdGUgIGlucHV0IHNhbXBs ZSByYXRlIChmcmVxdWVuY3kgaW4gSHopCisrICogQHBhcmFtIGxvZ19vZmZzZXQgICAgICBsb2dn aW5nIGxldmVsIG9mZnNldAorKyAqIEBwYXJhbSBsb2dfY3R4ICAgICAgICAgcGFyZW50IGxvZ2dp bmcgY29udGV4dCwgY2FuIGJlIE5VTEwKKysgKgorKyAqIEBzZWUgc3dyX2luaXQoKSwgc3dyX2Zy ZWUoKQorKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBv biBlcnJvci4KKysgKiAgICAgICAgIE9uIGVycm9yLCB0aGUgU3dyIGNvbnRleHQgaXMgZnJlZWQg YW5kICpwcyBzZXQgdG8gTlVMTC4KKysgKi8KKytpbnQgc3dyX2FsbG9jX3NldF9vcHRzMihzdHJ1 Y3QgU3dyQ29udGV4dCAqKnBzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWQ2hh bm5lbExheW91dCAqb3V0X2NoX2xheW91dCwgZW51bSBBVlNhbXBsZUZvcm1hdCBvdXRfc2FtcGxl X2ZtdCwgaW50IG91dF9zYW1wbGVfcmF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBBVkNoYW5uZWxMYXlvdXQgKmluX2NoX2xheW91dCwgZW51bSBBVlNhbXBsZUZvcm1hdCAgaW5f c2FtcGxlX2ZtdCwgaW50ICBpbl9zYW1wbGVfcmF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgbG9nX29mZnNldCwgdm9pZCAqbG9nX2N0eCk7CisrLyoqCisrICogQH0KKysgKgorKyAq IEBuYW1lIFN3ckNvbnRleHQgZGVzdHJ1Y3RvciBmdW5jdGlvbnMKKysgKiBAeworKyAqLworKwor Ky8qKgorKyAqIEZyZWUgdGhlIGdpdmVuIFN3ckNvbnRleHQgYW5kIHNldCB0aGUgcG9pbnRlciB0 byBOVUxMLgorKyAqCisrICogQHBhcmFtW2luXSBzIGEgcG9pbnRlciB0byBhIHBvaW50ZXIgdG8g U3dyIGNvbnRleHQKKysgKi8KKyt2b2lkIHN3cl9mcmVlKHN0cnVjdCBTd3JDb250ZXh0ICoqcyk7 CisrCisrLyoqCisrICogQ2xvc2VzIHRoZSBjb250ZXh0IHNvIHRoYXQgc3dyX2lzX2luaXRpYWxp emVkKCkgcmV0dXJucyAwLgorKyAqCisrICogVGhlIGNvbnRleHQgY2FuIGJlIGJyb3VnaHQgYmFj ayB0byBsaWZlIGJ5IHJ1bm5pbmcgc3dyX2luaXQoKSwKKysgKiBzd3JfaW5pdCgpIGNhbiBhbHNv IGJlIHVzZWQgd2l0aG91dCBzd3JfY2xvc2UoKS4KKysgKiBUaGlzIGZ1bmN0aW9uIGlzIG1haW5s eSBwcm92aWRlZCBmb3Igc2ltcGxpZnlpbmcgdGhlIHVzZWNhc2UKKysgKiB3aGVyZSBvbmUgdHJp ZXMgdG8gc3VwcG9ydCBsaWJhdnJlc2FtcGxlIGFuZCBsaWJzd3Jlc2FtcGxlLgorKyAqCisrICog QHBhcmFtW2luLG91dF0gcyBTd3IgY29udGV4dCB0byBiZSBjbG9zZWQKKysgKi8KKyt2b2lkIHN3 cl9jbG9zZShzdHJ1Y3QgU3dyQ29udGV4dCAqcyk7CisrCisrLyoqCisrICogQH0KKysgKgorKyAq IEBuYW1lIENvcmUgY29udmVyc2lvbiBmdW5jdGlvbnMKKysgKiBAeworKyAqLworKworKy8qKiBD b252ZXJ0IGF1ZGlvLgorKyAqCisrICogaW4gYW5kIGluX2NvdW50IGNhbiBiZSBzZXQgdG8gMCB0 byBmbHVzaCB0aGUgbGFzdCBmZXcgc2FtcGxlcyBvdXQgYXQgdGhlCisrICogZW5kLgorKyAqCisr ICogSWYgbW9yZSBpbnB1dCBpcyBwcm92aWRlZCB0aGFuIG91dHB1dCBzcGFjZSwgdGhlbiB0aGUg aW5wdXQgd2lsbCBiZSBidWZmZXJlZC4KKysgKiBZb3UgY2FuIGF2b2lkIHRoaXMgYnVmZmVyaW5n IGJ5IHVzaW5nIHN3cl9nZXRfb3V0X3NhbXBsZXMoKSB0byByZXRyaWV2ZSBhbgorKyAqIHVwcGVy IGJvdW5kIG9uIHRoZSByZXF1aXJlZCBudW1iZXIgb2Ygb3V0cHV0IHNhbXBsZXMgZm9yIHRoZSBn aXZlbiBudW1iZXIgb2YKKysgKiBpbnB1dCBzYW1wbGVzLiBDb252ZXJzaW9uIHdpbGwgcnVuIGRp cmVjdGx5IHdpdGhvdXQgY29weWluZyB3aGVuZXZlciBwb3NzaWJsZS4KKysgKgorKyAqIEBwYXJh bSBzICAgICAgICAgYWxsb2NhdGVkIFN3ciBjb250ZXh0LCB3aXRoIHBhcmFtZXRlcnMgc2V0Cisr ICogQHBhcmFtIG91dCAgICAgICBvdXRwdXQgYnVmZmVycywgb25seSB0aGUgZmlyc3Qgb25lIG5l ZWQgYmUgc2V0IGluIGNhc2Ugb2YgcGFja2VkIGF1ZGlvCisrICogQHBhcmFtIG91dF9jb3VudCBh bW91bnQgb2Ygc3BhY2UgYXZhaWxhYmxlIGZvciBvdXRwdXQgaW4gc2FtcGxlcyBwZXIgY2hhbm5l bAorKyAqIEBwYXJhbSBpbiAgICAgICAgaW5wdXQgYnVmZmVycywgb25seSB0aGUgZmlyc3Qgb25l IG5lZWQgdG8gYmUgc2V0IGluIGNhc2Ugb2YgcGFja2VkIGF1ZGlvCisrICogQHBhcmFtIGluX2Nv dW50ICBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyBhdmFpbGFibGUgaW4gb25lIGNoYW5uZWwKKysg KgorKyAqIEByZXR1cm4gbnVtYmVyIG9mIHNhbXBsZXMgb3V0cHV0IHBlciBjaGFubmVsLCBuZWdh dGl2ZSB2YWx1ZSBvbiBlcnJvcgorKyAqLworK2ludCBzd3JfY29udmVydChzdHJ1Y3QgU3dyQ29u dGV4dCAqcywgdWludDhfdCAqIGNvbnN0ICpvdXQsIGludCBvdXRfY291bnQsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICogY29uc3QgKmluICwgaW50IGlu X2NvdW50KTsKKysKKysvKioKKysgKiBDb252ZXJ0IHRoZSBuZXh0IHRpbWVzdGFtcCBmcm9tIGlu cHV0IHRvIG91dHB1dAorKyAqIHRpbWVzdGFtcHMgYXJlIGluIDEvKGluX3NhbXBsZV9yYXRlICog b3V0X3NhbXBsZV9yYXRlKSB1bml0cy4KKysgKgorKyAqIEBub3RlIFRoZXJlIGFyZSAyIHNsaWdo dGx5IGRpZmZlcmVudGx5IGJlaGF2aW5nIG1vZGVzLgorKyAqICAgICAgIEBsaSBXaGVuIGF1dG9t YXRpYyB0aW1lc3RhbXAgY29tcGVuc2F0aW9uIGlzIG5vdCB1c2VkLCAobWluX2NvbXBlbnNhdGlv biA+PSBGTFRfTUFYKQorKyAqICAgICAgICAgICAgICBpbiB0aGlzIGNhc2UgdGltZXN0YW1wcyB3 aWxsIGJlIHBhc3NlZCB0aHJvdWdoIHdpdGggZGVsYXlzIGNvbXBlbnNhdGVkCisrICogICAgICAg QGxpIFdoZW4gYXV0b21hdGljIHRpbWVzdGFtcCBjb21wZW5zYXRpb24gaXMgdXNlZCwgKG1pbl9j b21wZW5zYXRpb24gPCBGTFRfTUFYKQorKyAqICAgICAgICAgICAgICBpbiB0aGlzIGNhc2UgdGhl IG91dHB1dCB0aW1lc3RhbXBzIHdpbGwgbWF0Y2ggb3V0cHV0IHNhbXBsZSBudW1iZXJzLgorKyAq ICAgICAgICAgICAgICBTZWUgZmZtcGVnLXJlc2FtcGxlcigxKSBmb3IgdGhlIHR3byBtb2RlcyBv ZiBjb21wZW5zYXRpb24uCisrICoKKysgKiBAcGFyYW1baW5dIHMgICAgIGluaXRpYWxpemVkIFN3 ciBjb250ZXh0CisrICogQHBhcmFtW2luXSBwdHMgICB0aW1lc3RhbXAgZm9yIHRoZSBuZXh0IGlu cHV0IHNhbXBsZSwgSU5UNjRfTUlOIGlmIHVua25vd24KKysgKiBAc2VlIHN3cl9zZXRfY29tcGVu c2F0aW9uKCksIHN3cl9kcm9wX291dHB1dCgpLCBhbmQgc3dyX2luamVjdF9zaWxlbmNlKCkgYXJl CisrICogICAgICBmdW5jdGlvbiB1c2VkIGludGVybmFsbHkgZm9yIHRpbWVzdGFtcCBjb21wZW5z YXRpb24uCisrICogQHJldHVybiB0aGUgb3V0cHV0IHRpbWVzdGFtcCBmb3IgdGhlIG5leHQgb3V0 cHV0IHNhbXBsZQorKyAqLworK2ludDY0X3Qgc3dyX25leHRfcHRzKHN0cnVjdCBTd3JDb250ZXh0 ICpzLCBpbnQ2NF90IHB0cyk7CisrCisrLyoqCisrICogQH0KKysgKgorKyAqIEBuYW1lIExvdy1s ZXZlbCBvcHRpb24gc2V0dGluZyBmdW5jdGlvbnMKKysgKiBUaGVzZSBmdW5jdGlvbnMgcHJvdmlk ZSBhIG1lYW5zIHRvIHNldCBsb3ctbGV2ZWwgb3B0aW9ucyB0aGF0IGlzIG5vdCBwb3NzaWJsZQor KyAqIHdpdGggdGhlIEFWT3B0aW9uIEFQSS4KKysgKiBAeworKyAqLworKworKy8qKgorKyAqIEFj dGl2YXRlIHJlc2FtcGxpbmcgY29tcGVuc2F0aW9uICgic29mdCIgY29tcGVuc2F0aW9uKS4gVGhp cyBmdW5jdGlvbiBpcworKyAqIGludGVybmFsbHkgY2FsbGVkIHdoZW4gbmVlZGVkIGluIHN3cl9u ZXh0X3B0cygpLgorKyAqCisrICogQHBhcmFtW2luLG91dF0gcyAgICAgICAgICAgICBhbGxvY2F0 ZWQgU3dyIGNvbnRleHQuIElmIGl0IGlzIG5vdCBpbml0aWFsaXplZCwKKysgKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9yIFNXUl9GTEFHX1JFU0FNUExFIGlzIG5vdCBzZXQsIHN3cl9p bml0KCkgaXMKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZCB3aXRoIHRo ZSBmbGFnIHNldC4KKysgKiBAcGFyYW1baW5dICAgICBzYW1wbGVfZGVsdGEgIGRlbHRhIGluIFBU UyBwZXIgc2FtcGxlCisrICogQHBhcmFtW2luXSAgICAgY29tcGVuc2F0aW9uX2Rpc3RhbmNlIG51 bWJlciBvZiBzYW1wbGVzIHRvIGNvbXBlbnNhdGUgZm9yCisrICogQHJldHVybiAgICA+PSAwIG9u IHN1Y2Nlc3MsIEFWRVJST1IgZXJyb3IgY29kZXMgaWY6CisrICogICAgICAgICAgICBAbGkgQGMg cyBpcyBOVUxMLAorKyAqICAgICAgICAgICAgQGxpIEBjIGNvbXBlbnNhdGlvbl9kaXN0YW5jZSBp cyBsZXNzIHRoYW4gMCwKKysgKiAgICAgICAgICAgIEBsaSBAYyBjb21wZW5zYXRpb25fZGlzdGFu Y2UgaXMgMCBidXQgc2FtcGxlX2RlbHRhIGlzIG5vdCwKKysgKiAgICAgICAgICAgIEBsaSBjb21w ZW5zYXRpb24gdW5zdXBwb3J0ZWQgYnkgcmVzYW1wbGVyLCBvcgorKyAqICAgICAgICAgICAgQGxp IHN3cl9pbml0KCkgZmFpbHMgd2hlbiBjYWxsZWQuCisrICovCisraW50IHN3cl9zZXRfY29tcGVu c2F0aW9uKHN0cnVjdCBTd3JDb250ZXh0ICpzLCBpbnQgc2FtcGxlX2RlbHRhLCBpbnQgY29tcGVu c2F0aW9uX2Rpc3RhbmNlKTsKKysKKysvKioKKysgKiBTZXQgYSBjdXN0b21pemVkIGlucHV0IGNo YW5uZWwgbWFwcGluZy4KKysgKgorKyAqIEBwYXJhbVtpbixvdXRdIHMgICAgICAgICAgIGFsbG9j YXRlZCBTd3IgY29udGV4dCwgbm90IHlldCBpbml0aWFsaXplZAorKyAqIEBwYXJhbVtpbl0gICAg IGNoYW5uZWxfbWFwIGN1c3RvbWl6ZWQgaW5wdXQgY2hhbm5lbCBtYXBwaW5nIChhcnJheSBvZiBj aGFubmVsCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhlcywgLTEgZm9yIGEg bXV0ZWQgY2hhbm5lbCkKKysgKiBAcmV0dXJuID49IDAgb24gc3VjY2Vzcywgb3IgQVZFUlJPUiBl cnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZS4KKysgKi8KKytpbnQgc3dyX3NldF9jaGFubmVs X21hcHBpbmcoc3RydWN0IFN3ckNvbnRleHQgKnMsIGNvbnN0IGludCAqY2hhbm5lbF9tYXApOwor KworKy8qKgorKyAqIEdlbmVyYXRlIGEgY2hhbm5lbCBtaXhpbmcgbWF0cml4LgorKyAqCisrICog VGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIHVzZWQgaW50ZXJuYWxseSBieSBsaWJzd3Jlc2FtcGxl IGZvciBidWlsZGluZyB0aGUKKysgKiBkZWZhdWx0IG1peGluZyBtYXRyaXguIEl0IGlzIG1hZGUg cHVibGljIGp1c3QgYXMgYSB1dGlsaXR5IGZ1bmN0aW9uIGZvcgorKyAqIGJ1aWxkaW5nIGN1c3Rv bSBtYXRyaWNlcy4KKysgKgorKyAqIEBwYXJhbSBpbl9sYXlvdXQgICAgICAgICAgIGlucHV0IGNo YW5uZWwgbGF5b3V0CisrICogQHBhcmFtIG91dF9sYXlvdXQgICAgICAgICAgb3V0cHV0IGNoYW5u ZWwgbGF5b3V0CisrICogQHBhcmFtIGNlbnRlcl9taXhfbGV2ZWwgICAgbWl4IGxldmVsIGZvciB0 aGUgY2VudGVyIGNoYW5uZWwKKysgKiBAcGFyYW0gc3Vycm91bmRfbWl4X2xldmVsICBtaXggbGV2 ZWwgZm9yIHRoZSBzdXJyb3VuZCBjaGFubmVsKHMpCisrICogQHBhcmFtIGxmZV9taXhfbGV2ZWwg ICAgICAgbWl4IGxldmVsIGZvciB0aGUgbG93LWZyZXF1ZW5jeSBlZmZlY3RzIGNoYW5uZWwKKysg KiBAcGFyYW0gcmVtYXRyaXhfbWF4dmFsICAgICBpZiAxLjAsIGNvZWZmaWNpZW50cyB3aWxsIGJl IG5vcm1hbGl6ZWQgdG8gcHJldmVudAorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92 ZXJmbG93LiBpZiBJTlRfTUFYLCBjb2VmZmljaWVudHMgd2lsbCBub3QgYmUKKysgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkLgorKyAqIEBwYXJhbVtvdXRdIG1hdHJpeCAg ICAgICAgIG1peGluZyBjb2VmZmljaWVudHM7IG1hdHJpeFtpICsgc3RyaWRlICogb10gaXMKKysg KiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgd2VpZ2h0IG9mIGlucHV0IGNoYW5uZWwg aSBpbiBvdXRwdXQgY2hhbm5lbCBvLgorKyAqIEBwYXJhbSBzdHJpZGUgICAgICAgICAgICAgIGRp c3RhbmNlIGJldHdlZW4gYWRqYWNlbnQgaW5wdXQgY2hhbm5lbHMgaW4gdGhlCisrICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWF0cml4IGFycmF5CisrICogQHBhcmFtIG1hdHJpeF9lbmNv ZGluZyAgICAgbWF0cml4ZWQgc3RlcmVvIGRvd25taXggbW9kZSAoZS5nLiBkcGxpaSkKKysgKiBA cGFyYW0gbG9nX2N0eCAgICAgICAgICAgICBwYXJlbnQgbG9nZ2luZyBjb250ZXh0LCBjYW4gYmUg TlVMTAorKyAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgIDAgb24gc3VjY2VzcywgbmVnYXRp dmUgQVZFUlJPUiBjb2RlIG9uIGZhaWx1cmUKKysgKi8KKytpbnQgc3dyX2J1aWxkX21hdHJpeDIo Y29uc3QgQVZDaGFubmVsTGF5b3V0ICppbl9sYXlvdXQsIGNvbnN0IEFWQ2hhbm5lbExheW91dCAq b3V0X2xheW91dCwKKysgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGNlbnRlcl9taXhfbGV2 ZWwsIGRvdWJsZSBzdXJyb3VuZF9taXhfbGV2ZWwsCisrICAgICAgICAgICAgICAgICAgICAgIGRv dWJsZSBsZmVfbWl4X2xldmVsLCBkb3VibGUgbWF4dmFsLAorKyAgICAgICAgICAgICAgICAgICAg ICBkb3VibGUgcmVtYXRyaXhfdm9sdW1lLCBkb3VibGUgKm1hdHJpeCwKKysgICAgICAgICAgICAg ICAgICAgICAgcHRyZGlmZl90IHN0cmlkZSwgZW51bSBBVk1hdHJpeEVuY29kaW5nIG1hdHJpeF9l bmNvZGluZywKKysgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbG9nX2NvbnRleHQpOworKwor Ky8qKgorKyAqIFNldCBhIGN1c3RvbWl6ZWQgcmVtaXggbWF0cml4LgorKyAqCisrICogQHBhcmFt IHMgICAgICAgYWxsb2NhdGVkIFN3ciBjb250ZXh0LCBub3QgeWV0IGluaXRpYWxpemVkCisrICog QHBhcmFtIG1hdHJpeCAgcmVtaXggY29lZmZpY2llbnRzOyBtYXRyaXhbaSArIHN0cmlkZSAqIG9d IGlzCisrICogICAgICAgICAgICAgICAgdGhlIHdlaWdodCBvZiBpbnB1dCBjaGFubmVsIGkgaW4g b3V0cHV0IGNoYW5uZWwgbworKyAqIEBwYXJhbSBzdHJpZGUgIG9mZnNldCBiZXR3ZWVuIGxpbmVz IG9mIHRoZSBtYXRyaXgKKysgKiBAcmV0dXJuICA+PSAwIG9uIHN1Y2Nlc3MsIG9yIEFWRVJST1Ig ZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUuCisrICovCisraW50IHN3cl9zZXRfbWF0cml4 KHN0cnVjdCBTd3JDb250ZXh0ICpzLCBjb25zdCBkb3VibGUgKm1hdHJpeCwgaW50IHN0cmlkZSk7 CisrCisrLyoqCisrICogQH0KKysgKgorKyAqIEBuYW1lIFNhbXBsZSBoYW5kbGluZyBmdW5jdGlv bnMKKysgKiBAeworKyAqLworKworKy8qKgorKyAqIERyb3BzIHRoZSBzcGVjaWZpZWQgbnVtYmVy IG9mIG91dHB1dCBzYW1wbGVzLgorKyAqCisrICogVGhpcyBmdW5jdGlvbiwgYWxvbmcgd2l0aCBz d3JfaW5qZWN0X3NpbGVuY2UoKSwgaXMgY2FsbGVkIGJ5IHN3cl9uZXh0X3B0cygpCisrICogaWYg bmVlZGVkIGZvciAiaGFyZCIgY29tcGVuc2F0aW9uLgorKyAqCisrICogQHBhcmFtIHMgICAgIGFs bG9jYXRlZCBTd3IgY29udGV4dAorKyAqIEBwYXJhbSBjb3VudCBudW1iZXIgb2Ygc2FtcGxlcyB0 byBiZSBkcm9wcGVkCisrICoKKysgKiBAcmV0dXJuID49IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdh dGl2ZSBBVkVSUk9SIGNvZGUgb24gZmFpbHVyZQorKyAqLworK2ludCBzd3JfZHJvcF9vdXRwdXQo c3RydWN0IFN3ckNvbnRleHQgKnMsIGludCBjb3VudCk7CisrCisrLyoqCisrICogSW5qZWN0cyB0 aGUgc3BlY2lmaWVkIG51bWJlciBvZiBzaWxlbmNlIHNhbXBsZXMuCisrICoKKysgKiBUaGlzIGZ1 bmN0aW9uLCBhbG9uZyB3aXRoIHN3cl9kcm9wX291dHB1dCgpLCBpcyBjYWxsZWQgYnkgc3dyX25l eHRfcHRzKCkKKysgKiBpZiBuZWVkZWQgZm9yICJoYXJkIiBjb21wZW5zYXRpb24uCisrICoKKysg KiBAcGFyYW0gcyAgICAgYWxsb2NhdGVkIFN3ciBjb250ZXh0CisrICogQHBhcmFtIGNvdW50IG51 bWJlciBvZiBzYW1wbGVzIHRvIGJlIGRyb3BwZWQKKysgKgorKyAqIEByZXR1cm4gPj0gMCBvbiBz dWNjZXNzLCBvciBhIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBvbiBmYWlsdXJlCisrICovCisraW50 IHN3cl9pbmplY3Rfc2lsZW5jZShzdHJ1Y3QgU3dyQ29udGV4dCAqcywgaW50IGNvdW50KTsKKysK KysvKioKKysgKiBHZXRzIHRoZSBkZWxheSB0aGUgbmV4dCBpbnB1dCBzYW1wbGUgd2lsbCBleHBl cmllbmNlIHJlbGF0aXZlIHRvIHRoZSBuZXh0IG91dHB1dCBzYW1wbGUuCisrICoKKysgKiBTd3Jl c2FtcGxlIGNhbiBidWZmZXIgZGF0YSBpZiBtb3JlIGlucHV0IGhhcyBiZWVuIHByb3ZpZGVkIHRo YW4gYXZhaWxhYmxlCisrICogb3V0cHV0IHNwYWNlLCBhbHNvIGNvbnZlcnRpbmcgYmV0d2VlbiBz YW1wbGUgcmF0ZXMgbmVlZHMgYSBkZWxheS4KKysgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhl IHN1bSBvZiBhbGwgc3VjaCBkZWxheXMuCisrICogVGhlIGV4YWN0IGRlbGF5IGlzIG5vdCBuZWNl c3NhcmlseSBhbiBpbnRlZ2VyIHZhbHVlIGluIGVpdGhlciBpbnB1dCBvcgorKyAqIG91dHB1dCBz YW1wbGUgcmF0ZS4gRXNwZWNpYWxseSB3aGVuIGRvd25zYW1wbGluZyBieSBhIGxhcmdlIHZhbHVl LCB0aGUKKysgKiBvdXRwdXQgc2FtcGxlIHJhdGUgbWF5IGJlIGEgcG9vciBjaG9pY2UgdG8gcmVw cmVzZW50IHRoZSBkZWxheSwgc2ltaWxhcmx5CisrICogZm9yIHVwc2FtcGxpbmcgYW5kIHRoZSBp bnB1dCBzYW1wbGUgcmF0ZS4KKysgKgorKyAqIEBwYXJhbSBzICAgICBzd3IgY29udGV4dAorKyAq IEBwYXJhbSBiYXNlICB0aW1lYmFzZSBpbiB3aGljaCB0aGUgcmV0dXJuZWQgZGVsYXkgd2lsbCBi ZToKKysgKiAgICAgICAgICAgICAgQGxpIGlmIGl0J3Mgc2V0IHRvIDEgdGhlIHJldHVybmVkIGRl bGF5IGlzIGluIHNlY29uZHMKKysgKiAgICAgICAgICAgICAgQGxpIGlmIGl0J3Mgc2V0IHRvIDEw MDAgdGhlIHJldHVybmVkIGRlbGF5IGlzIGluIG1pbGxpc2Vjb25kcworKyAqICAgICAgICAgICAg ICBAbGkgaWYgaXQncyBzZXQgdG8gdGhlIGlucHV0IHNhbXBsZSByYXRlIHRoZW4gdGhlIHJldHVy bmVkCisrICogICAgICAgICAgICAgICAgICBkZWxheSBpcyBpbiBpbnB1dCBzYW1wbGVzCisrICog ICAgICAgICAgICAgIEBsaSBpZiBpdCdzIHNldCB0byB0aGUgb3V0cHV0IHNhbXBsZSByYXRlIHRo ZW4gdGhlIHJldHVybmVkCisrICogICAgICAgICAgICAgICAgICBkZWxheSBpcyBpbiBvdXRwdXQg c2FtcGxlcworKyAqICAgICAgICAgICAgICBAbGkgaWYgaXQncyB0aGUgbGVhc3QgY29tbW9uIG11 bHRpcGxlIG9mIGluX3NhbXBsZV9yYXRlIGFuZAorKyAqICAgICAgICAgICAgICAgICAgb3V0X3Nh bXBsZV9yYXRlIHRoZW4gYW4gZXhhY3Qgcm91bmRpbmctZnJlZSBkZWxheSB3aWxsIGJlCisrICog ICAgICAgICAgICAgICAgICByZXR1cm5lZAorKyAqIEByZXR1cm5zICAgICB0aGUgZGVsYXkgaW4g MSAvIEBjIGJhc2UgdW5pdHMuCisrICovCisraW50NjRfdCBzd3JfZ2V0X2RlbGF5KHN0cnVjdCBT d3JDb250ZXh0ICpzLCBpbnQ2NF90IGJhc2UpOworKworKy8qKgorKyAqIEZpbmQgYW4gdXBwZXIg Ym91bmQgb24gdGhlIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgdGhlIG5leHQgc3dyX2NvbnZlcnQK KysgKiBjYWxsIHdpbGwgb3V0cHV0LCBpZiBjYWxsZWQgd2l0aCBpbl9zYW1wbGVzIG9mIGlucHV0 IHNhbXBsZXMuIFRoaXMKKysgKiBkZXBlbmRzIG9uIHRoZSBpbnRlcm5hbCBzdGF0ZSwgYW5kIGFu eXRoaW5nIGNoYW5naW5nIHRoZSBpbnRlcm5hbCBzdGF0ZQorKyAqIChsaWtlIGZ1cnRoZXIgc3dy X2NvbnZlcnQoKSBjYWxscykgd2lsbCBtYXkgY2hhbmdlIHRoZSBudW1iZXIgb2Ygc2FtcGxlcwor KyAqIHN3cl9nZXRfb3V0X3NhbXBsZXMoKSByZXR1cm5zIGZvciB0aGUgc2FtZSBudW1iZXIgb2Yg aW5wdXQgc2FtcGxlcy4KKysgKgorKyAqIEBwYXJhbSBpbl9zYW1wbGVzICAgIG51bWJlciBvZiBp bnB1dCBzYW1wbGVzLgorKyAqIEBub3RlIGFueSBjYWxsIHRvIHN3cl9pbmplY3Rfc2lsZW5jZSgp LCBzd3JfY29udmVydCgpLCBzd3JfbmV4dF9wdHMoKQorKyAqICAgICAgIG9yIHN3cl9zZXRfY29t cGVuc2F0aW9uKCkgaW52YWxpZGF0ZXMgdGhpcyBsaW1pdAorKyAqIEBub3RlIGl0IGlzIHJlY29t bWVuZGVkIHRvIHBhc3MgdGhlIGNvcnJlY3QgYXZhaWxhYmxlIGJ1ZmZlciBzaXplCisrICogICAg ICAgdG8gYWxsIGZ1bmN0aW9ucyBsaWtlIHN3cl9jb252ZXJ0KCkgZXZlbiBpZiBzd3JfZ2V0X291 dF9zYW1wbGVzKCkKKysgKiAgICAgICBpbmRpY2F0ZXMgdGhhdCBsZXNzIHdvdWxkIGJlIHVzZWQu CisrICogQHJldHVybnMgYW4gdXBwZXIgYm91bmQgb24gdGhlIG51bWJlciBvZiBzYW1wbGVzIHRo YXQgdGhlIG5leHQgc3dyX2NvbnZlcnQKKysgKiAgICAgICAgICB3aWxsIG91dHB1dCBvciBhIG5l Z2F0aXZlIHZhbHVlIHRvIGluZGljYXRlIGFuIGVycm9yCisrICovCisraW50IHN3cl9nZXRfb3V0 X3NhbXBsZXMoc3RydWN0IFN3ckNvbnRleHQgKnMsIGludCBpbl9zYW1wbGVzKTsKKysKKysvKioK KysgKiBAfQorKyAqCisrICogQG5hbWUgQ29uZmlndXJhdGlvbiBhY2Nlc3NvcnMKKysgKiBAewor KyAqLworKworKy8qKgorKyAqIFJldHVybiB0aGUgQHJlZiBMSUJTV1JFU0FNUExFX1ZFUlNJT05f SU5UIGNvbnN0YW50LgorKyAqCisrICogVGhpcyBpcyB1c2VmdWwgdG8gY2hlY2sgaWYgdGhlIGJ1 aWxkLXRpbWUgbGlic3dyZXNhbXBsZSBoYXMgdGhlIHNhbWUgdmVyc2lvbgorKyAqIGFzIHRoZSBy dW4tdGltZSBvbmUuCisrICoKKysgKiBAcmV0dXJucyAgICAgdGhlIHVuc2lnbmVkIGludC10eXBl ZCB2ZXJzaW9uCisrICovCisrdW5zaWduZWQgc3dyZXNhbXBsZV92ZXJzaW9uKHZvaWQpOworKwor Ky8qKgorKyAqIFJldHVybiB0aGUgc3dyIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbi4KKysgKgor KyAqIEByZXR1cm5zICAgICB0aGUgYnVpbGQtdGltZSBAYyAuL2NvbmZpZ3VyZSBmbGFncworKyAq LworK2NvbnN0IGNoYXIgKnN3cmVzYW1wbGVfY29uZmlndXJhdGlvbih2b2lkKTsKKysKKysvKioK KysgKiBSZXR1cm4gdGhlIHN3ciBsaWNlbnNlLgorKyAqCisrICogQHJldHVybnMgICAgIHRoZSBs aWNlbnNlIG9mIGxpYnN3cmVzYW1wbGUsIGRldGVybWluZWQgYXQgYnVpbGQtdGltZQorKyAqLwor K2NvbnN0IGNoYXIgKnN3cmVzYW1wbGVfbGljZW5zZSh2b2lkKTsKKysKKysvKioKKysgKiBAfQor KyAqCisrICogQG5hbWUgQVZGcmFtZSBiYXNlZCBBUEkKKysgKiBAeworKyAqLworKworKy8qKgor KyAqIENvbnZlcnQgdGhlIHNhbXBsZXMgaW4gdGhlIGlucHV0IEFWRnJhbWUgYW5kIHdyaXRlIHRo ZW0gdG8gdGhlIG91dHB1dCBBVkZyYW1lLgorKyAqCisrICogSW5wdXQgYW5kIG91dHB1dCBBVkZy YW1lcyBtdXN0IGhhdmUgY2hhbm5lbF9sYXlvdXQsIHNhbXBsZV9yYXRlIGFuZCBmb3JtYXQgc2V0 LgorKyAqCisrICogSWYgdGhlIG91dHB1dCBBVkZyYW1lIGRvZXMgbm90IGhhdmUgdGhlIGRhdGEg cG9pbnRlcnMgYWxsb2NhdGVkIHRoZSBuYl9zYW1wbGVzCisrICogZmllbGQgd2lsbCBiZSBzZXQg dXNpbmcgYXZfZnJhbWVfZ2V0X2J1ZmZlcigpCisrICogaXMgY2FsbGVkIHRvIGFsbG9jYXRlIHRo ZSBmcmFtZS4KKysgKgorKyAqIFRoZSBvdXRwdXQgQVZGcmFtZSBjYW4gYmUgTlVMTCBvciBoYXZl IGZld2VyIGFsbG9jYXRlZCBzYW1wbGVzIHRoYW4gcmVxdWlyZWQuCisrICogSW4gdGhpcyBjYXNl LCBhbnkgcmVtYWluaW5nIHNhbXBsZXMgbm90IHdyaXR0ZW4gdG8gdGhlIG91dHB1dCB3aWxsIGJl IGFkZGVkCisrICogdG8gYW4gaW50ZXJuYWwgRklGTyBidWZmZXIsIHRvIGJlIHJldHVybmVkIGF0 IHRoZSBuZXh0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbgorKyAqIG9yIHRvIHN3cl9jb252ZXJ0KCku CisrICoKKysgKiBJZiBjb252ZXJ0aW5nIHNhbXBsZSByYXRlLCB0aGVyZSBtYXkgYmUgZGF0YSBy ZW1haW5pbmcgaW4gdGhlIGludGVybmFsCisrICogcmVzYW1wbGluZyBkZWxheSBidWZmZXIuIHN3 cl9nZXRfZGVsYXkoKSB0ZWxscyB0aGUgbnVtYmVyIG9mCisrICogcmVtYWluaW5nIHNhbXBsZXMu IFRvIGdldCB0aGlzIGRhdGEgYXMgb3V0cHV0LCBjYWxsIHRoaXMgZnVuY3Rpb24gb3IKKysgKiBz d3JfY29udmVydCgpIHdpdGggTlVMTCBpbnB1dC4KKysgKgorKyAqIElmIHRoZSBTd3JDb250ZXh0 IGNvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggdGhlIG91dHB1dCBhbmQKKysgKiBpbnB1dCBB VkZyYW1lIHNldHRpbmdzIHRoZSBjb252ZXJzaW9uIGRvZXMgbm90IHRha2UgcGxhY2UgYW5kIGRl cGVuZGluZyBvbgorKyAqIHdoaWNoIEFWRnJhbWUgaXMgbm90IG1hdGNoaW5nIEFWRVJST1JfT1VU UFVUX0NIQU5HRUQsIEFWRVJST1JfSU5QVVRfQ0hBTkdFRAorKyAqIG9yIHRoZSByZXN1bHQgb2Yg YSBiaXR3aXNlLU9SIG9mIHRoZW0gaXMgcmV0dXJuZWQuCisrICoKKysgKiBAc2VlIHN3cl9kZWxh eSgpCisrICogQHNlZSBzd3JfY29udmVydCgpCisrICogQHNlZSBzd3JfZ2V0X2RlbGF5KCkKKysg KgorKyAqIEBwYXJhbSBzd3IgICAgICAgICAgICAgYXVkaW8gcmVzYW1wbGUgY29udGV4dAorKyAq IEBwYXJhbSBvdXRwdXQgICAgICAgICAgb3V0cHV0IEFWRnJhbWUKKysgKiBAcGFyYW0gaW5wdXQg ICAgICAgICAgIGlucHV0IEFWRnJhbWUKKysgKiBAcmV0dXJuICAgICAgICAgICAgICAgIDAgb24g c3VjY2VzcywgQVZFUlJPUiBvbiBmYWlsdXJlIG9yIG5vbm1hdGNoaW5nCisrICogICAgICAgICAg ICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorKyAqLworK2ludCBzd3JfY29udmVydF9mcmFt ZShTd3JDb250ZXh0ICpzd3IsCisrICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKm91dHB1 dCwgY29uc3QgQVZGcmFtZSAqaW5wdXQpOworKworKy8qKgorKyAqIENvbmZpZ3VyZSBvciByZWNv bmZpZ3VyZSB0aGUgU3dyQ29udGV4dCB1c2luZyB0aGUgaW5mb3JtYXRpb24KKysgKiBwcm92aWRl ZCBieSB0aGUgQVZGcmFtZXMuCisrICoKKysgKiBUaGUgb3JpZ2luYWwgcmVzYW1wbGluZyBjb250 ZXh0IGlzIHJlc2V0IGV2ZW4gb24gZmFpbHVyZS4KKysgKiBUaGUgZnVuY3Rpb24gY2FsbHMgc3dy X2Nsb3NlKCkgaW50ZXJuYWxseSBpZiB0aGUgY29udGV4dCBpcyBvcGVuLgorKyAqCisrICogQHNl ZSBzd3JfY2xvc2UoKTsKKysgKgorKyAqIEBwYXJhbSBzd3IgICAgICAgICAgICAgYXVkaW8gcmVz YW1wbGUgY29udGV4dAorKyAqIEBwYXJhbSBvdXQgICAgICAgICAgICAgb3V0cHV0IEFWRnJhbWUK KysgKiBAcGFyYW0gaW4gICAgICAgICAgICAgIGlucHV0IEFWRnJhbWUKKysgKiBAcmV0dXJuICAg ICAgICAgICAgICAgIDAgb24gc3VjY2VzcywgQVZFUlJPUiBvbiBmYWlsdXJlLgorKyAqLworK2lu dCBzd3JfY29uZmlnX2ZyYW1lKFN3ckNvbnRleHQgKnN3ciwgY29uc3QgQVZGcmFtZSAqb3V0LCBj b25zdCBBVkZyYW1lICppbik7CisrCisrLyoqCisrICogQH0KKysgKiBAfQorKyAqLworKworKyNl bmRpZiAvKiBTV1JFU0FNUExFX1NXUkVTQU1QTEVfSCAqLworZGlmZiAtdXAgTXVzZVNjb3JlLTQu Ny40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGlic3dyZXNhbXBs ZS92ZXJzaW9uLmguZmZtcGVnOSBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90 aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJzd3Jlc2FtcGxlL3ZlcnNpb24uaAorLS0tIE11c2VTY29y ZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYnN3cmVz YW1wbGUvdmVyc2lvbi5oLmZmbXBlZzkJMjAyNi0wOS0wNyAxMjoyMzo0Ny42Nzk0Nzk0MTAgKzAy MDAKKysrKyBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2Zm bXBlZy92OS9saWJzd3Jlc2FtcGxlL3ZlcnNpb24uaAkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3OTQ1 Njc0OSArMDIwMAorQEAgLTAsMCArMSw0NiBAQAorKy8qCisrICogVmVyc2lvbiBtYWNyb3MuCisr ICoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJzd3Jlc2FtcGxlCisrICoKKysgKiBsaWJz d3Jlc2FtcGxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIGxpYnN3cmVzYW1wbGUg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCisrICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGgg bGlic3dyZXNhbXBsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVmIFNXUkVTQU1QTEVfVkVSU0lPTl9I CisrI2RlZmluZSBTV1JFU0FNUExFX1ZFUlNJT05fSAorKworKy8qKgorKyAqIEBmaWxlCisrICog TGlic3dyZXNhbXBsZSB2ZXJzaW9uIG1hY3JvcworKyAqLworKworKyNpbmNsdWRlICJsaWJhdnV0 aWwvdmVyc2lvbi5oIgorKworKyNpbmNsdWRlICJ2ZXJzaW9uX21ham9yLmgiCisrCisrI2RlZmlu ZSBMSUJTV1JFU0FNUExFX1ZFUlNJT05fTUlOT1IgICAxCisrI2RlZmluZSBMSUJTV1JFU0FNUExF X1ZFUlNJT05fTUlDUk8gMTAwCisrCisrI2RlZmluZSBMSUJTV1JFU0FNUExFX1ZFUlNJT05fSU5U ICBBVl9WRVJTSU9OX0lOVChMSUJTV1JFU0FNUExFX1ZFUlNJT05fTUFKT1IsIFwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNXUkVTQU1QTEVf VkVSU0lPTl9NSU5PUiwgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTElCU1dSRVNBTVBMRV9WRVJTSU9OX01JQ1JPKQorKyNkZWZpbmUgTElCU1dS RVNBTVBMRV9WRVJTSU9OICAgICAgQVZfVkVSU0lPTihMSUJTV1JFU0FNUExFX1ZFUlNJT05fTUFK T1IsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElC U1dSRVNBTVBMRV9WRVJTSU9OX01JTk9SLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExJQlNXUkVTQU1QTEVfVkVSU0lPTl9NSUNSTykKKysjZGVmaW5l IExJQlNXUkVTQU1QTEVfQlVJTEQgICAgICAgIExJQlNXUkVTQU1QTEVfVkVSU0lPTl9JTlQKKysK KysjZGVmaW5lIExJQlNXUkVTQU1QTEVfSURFTlQgICAgICAgICJTd1IiIEFWX1NUUklOR0lGWShM SUJTV1JFU0FNUExFX1ZFUlNJT04pCisrCisrI2VuZGlmIC8qIFNXUkVTQU1QTEVfVkVSU0lPTl9I ICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9tZWRpYS90aGlyZHBh cnR5L2ZmbXBlZy92OS9saWJzd3Jlc2FtcGxlL3ZlcnNpb25fbWFqb3IuaC5mZm1wZWc5IE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYnN3 cmVzYW1wbGUvdmVyc2lvbl9tYWpvci5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdv cmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGlic3dyZXNhbXBsZS92ZXJzaW9uX21ham9y LmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3OTU0OTgxMCArMDIwMAorKysrIE11c2VT Y29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYnN3 cmVzYW1wbGUvdmVyc2lvbl9tYWpvci5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjc5NTI5NjUyICsw MjAwCitAQCAtMCwwICsxLDMxIEBACisrLyoKKysgKiBWZXJzaW9uIG1hY3Jvcy4KKysgKgorKyAq IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnN3cmVzYW1wbGUKKysgKgorKyAqIGxpYnN3cmVzYW1w bGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogbGlic3dyZXNhbXBsZSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisr ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBsaWJzd3Jl c2FtcGxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQorKyAqLworKworKyNpZm5kZWYgU1dSRVNBTVBMRV9WRVJTSU9OX01BSk9SX0gK KysjZGVmaW5lIFNXUkVTQU1QTEVfVkVSU0lPTl9NQUpPUl9ICisrCisrLyoqCisrICogQGZpbGUK KysgKiBMaWJzd3Jlc2FtcGxlIHZlcnNpb24gbWFjcm9zCisrICovCisrCisrI2RlZmluZSBMSUJT V1JFU0FNUExFX1ZFUlNJT05fTUFKT1IgICA3CisrCisrI2VuZGlmIC8qIFNXUkVTQU1QTEVfVkVS U0lPTl9NQUpPUl9IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29yay9t ZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJzd3NjYWxlL3N3c2NhbGUuaC5mZm1wZWc5IE11 c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xp YnN3c2NhbGUvc3dzY2FsZS5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsvbWVk aWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGlic3dzY2FsZS9zd3NjYWxlLmguZmZtcGVnOQkyMDI2 LTA5LTA3IDEyOjIzOjQ3LjY3OTgzNjA4MyArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9zcmMv ZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYnN3c2NhbGUvc3dzY2FsZS5o CTIwMjYtMDktMDcgMTI6MjM6NDcuNjc5Nzg5OTAxICswMjAwCitAQCAtMCwwICsxLDc3MSBAQAor Ky8qCisrICogQ29weXJpZ2h0IChDKSAyMDI0IE5pa2xhcyBIYWFzCisrICogQ29weXJpZ2h0IChD KSAyMDAxLTIwMTEgTWljaGFlbCBOaWVkZXJtYXllciA8bWljaGFlbG5pQGdteC5hdD4KKysgKgor KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKysgKgorKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy CisrICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCisrICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyAqLworKworKyNp Zm5kZWYgU1dTQ0FMRV9TV1NDQUxFX0gKKysjZGVmaW5lIFNXU0NBTEVfU1dTQ0FMRV9ICisrCisr LyoqCisrICogQGZpbGUKKysgKiBAaW5ncm91cCBsaWJzd3MKKysgKiBleHRlcm5hbCBBUEkgaGVh ZGVyCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGludC5oPgorKworKyNpbmNsdWRlICJsaWJhdnV0 aWwvYXZ1dGlsLmgiCisrI2luY2x1ZGUgImxpYmF2dXRpbC9mcmFtZS5oIgorKyNpbmNsdWRlICJs aWJhdnV0aWwvbG9nLmgiCisrI2luY2x1ZGUgImxpYmF2dXRpbC9waXhmbXQuaCIKKysjaW5jbHVk ZSAidmVyc2lvbl9tYWpvci5oIgorKyNpZm5kZWYgSEFWRV9BVl9DT05GSUdfSAorKy8qIFdoZW4g aW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgZmZtcGVnIGJ1aWxkLCBvbmx5IGluY2x1ZGUgdGhlIG1h am9yIHZlcnNpb24KKysgKiB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWJ1aWxkcy4gV2hlbiBpbmNs dWRlZCBleHRlcm5hbGx5LCBrZWVwIGluY2x1ZGluZworKyAqIHRoZSBmdWxsIHZlcnNpb24gaW5m b3JtYXRpb24uICovCisrI2luY2x1ZGUgInZlcnNpb24uaCIKKysjZW5kaWYKKysKKysvKioKKysg KiBAZGVmZ3JvdXAgbGlic3dzIGxpYnN3c2NhbGUKKysgKiBDb2xvciBjb252ZXJzaW9uIGFuZCBz Y2FsaW5nIGxpYnJhcnkuCisrICoKKysgKiBAeworKyAqCisrICogUmV0dXJuIHRoZSBMSUJTV1ND QUxFX1ZFUlNJT05fSU5UIGNvbnN0YW50LgorKyAqLworK3Vuc2lnbmVkIHN3c2NhbGVfdmVyc2lv bih2b2lkKTsKKysKKysvKioKKysgKiBSZXR1cm4gdGhlIGxpYnN3c2NhbGUgYnVpbGQtdGltZSBj b25maWd1cmF0aW9uLgorKyAqLworK2NvbnN0IGNoYXIgKnN3c2NhbGVfY29uZmlndXJhdGlvbih2 b2lkKTsKKysKKysvKioKKysgKiBSZXR1cm4gdGhlIGxpYnN3c2NhbGUgbGljZW5zZS4KKysgKi8K Kytjb25zdCBjaGFyICpzd3NjYWxlX2xpY2Vuc2Uodm9pZCk7CisrCisrLyoqCisrICogR2V0IHRo ZSBBVkNsYXNzIGZvciBTd3NDb250ZXh0LiBJdCBjYW4gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3 aXRoCisrICogQVZfT1BUX1NFQVJDSF9GQUtFX09CSiBmb3IgZXhhbWluaW5nIG9wdGlvbnMuCisr ICoKKysgKiBAc2VlIGF2X29wdF9maW5kKCkuCisrICovCisrY29uc3QgQVZDbGFzcyAqc3dzX2dl dF9jbGFzcyh2b2lkKTsKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrICog RmxhZ3MgYW5kIHF1YWxpdHkgc2V0dGluZ3MgKgorKyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisrCisrdHlwZWRlZiBlbnVtIFN3c0RpdGhlciB7CisrICAgIFNXU19ESVRIRVJfTk9O RSA9IDAsIC8qIGRpc2FibGUgZGl0aGVyaW5nICovCisrICAgIFNXU19ESVRIRVJfQVVUTywgICAg IC8qIGF1dG8tc2VsZWN0IGZyb20gcHJlc2V0ICovCisrICAgIFNXU19ESVRIRVJfQkFZRVIsICAg IC8qIG9yZGVyZWQgZGl0aGVyIG1hdHJpeCAqLworKyAgICBTV1NfRElUSEVSX0VELCAgICAgICAv KiBlcnJvciBkaWZmdXNpb24gKi8KKysgICAgU1dTX0RJVEhFUl9BX0RJVEhFUiwgLyogYXJpdGht ZXRpYyBhZGRpdGlvbiAqLworKyAgICBTV1NfRElUSEVSX1hfRElUSEVSLCAvKiBhcml0aG1ldGlj IHhvciAqLworKyAgICBTV1NfRElUSEVSX05CLCAgICAgICAvKiBub3QgcGFydCBvZiB0aGUgQUJJ ICovCisrICAgIFNXU19ESVRIRVJfTUFYX0VOVU0gPSAweDdGRkZGRkZGLCAvKiBmb3JjZSBzaXpl IHRvIDMyIGJpdHMsIG5vdCBhIHZhbGlkIGRpdGhlciB0eXBlICovCisrfSBTd3NEaXRoZXI7Cisr CisrdHlwZWRlZiBlbnVtIFN3c0FscGhhQmxlbmQgeworKyAgICBTV1NfQUxQSEFfQkxFTkRfTk9O RSA9IDAsCisrICAgIFNXU19BTFBIQV9CTEVORF9VTklGT1JNLAorKyAgICBTV1NfQUxQSEFfQkxF TkRfQ0hFQ0tFUkJPQVJELAorKyAgICBTV1NfQUxQSEFfQkxFTkRfTkIsICAvKiBub3QgcGFydCBv ZiB0aGUgQUJJICovCisrICAgIFNXU19BTFBIQV9CTEVORF9NQVhfRU5VTSA9IDB4N0ZGRkZGRkYs IC8qIGZvcmNlIHNpemUgdG8gMzIgYml0cywgbm90IGEgdmFsaWQgYmxlbmQgbW9kZSAqLworK30g U3dzQWxwaGFCbGVuZDsKKysKKyt0eXBlZGVmIGVudW0gU3dzU2NhbGVyIHsKKysgICAgU1dTX1ND QUxFX0FVVE8gPSAwLAorKyAgICBTV1NfU0NBTEVfQklMSU5FQVIsIC8vLzwgYmlsaW5lYXIgZmls dGVyaW5nCisrICAgIFNXU19TQ0FMRV9CSUNVQklDLCAgLy8vPCAyLXRhcCBjdWJpYyBCQy1zcGxp bmUKKysgICAgU1dTX1NDQUxFX1BPSU5ULCAgICAvLy88IG5lYXJlc3QgbmVpZ2hib3IgKHBvaW50 IHNhbXBsaW5nKQorKyAgICBTV1NfU0NBTEVfQVJFQSwgICAgIC8vLzwgYXJlYSBhdmVyYWdpbmcK KysgICAgU1dTX1NDQUxFX0dBVVNTSUFOLCAvLy88IDItdGFwIGdhdXNzaWFuIGFwcHJveGltYXRp b24KKysgICAgU1dTX1NDQUxFX1NJTkMsICAgICAvLy88IHVud2luZG93ZWQgc2luYworKyAgICBT V1NfU0NBTEVfTEFOQ1pPUywgIC8vLzwgMy10YXAgc2luYy9zaW5jCisrICAgIFNXU19TQ0FMRV9T UExJTkUsICAgLy8vPCB1bndpbmRvd25lZCBuYXR1cmFsIGN1YmljIHNwbGluZQorKyAgICBTV1Nf U0NBTEVfTkIsICAgICAgIC8vLzwgbm90IHBhcnQgb2YgdGhlIEFCSQorKyAgICBTV1NfU0NBTEVf TUFYX0VOVU0gPSAweDdGRkZGRkZGLCAvLy88IGZvcmNlIHNpemUgdG8gMzIgYml0cywgbm90IGEg dmFsaWQgZmlsdGVyIHR5cGUKKyt9IFN3c1NjYWxlcjsKKysKKyt0eXBlZGVmIGVudW0gU3dzQmFj a2VuZCB7CisrICAgIC8qIFN0YWJsZSBiYWNrZW5kcyAqLworKyAgICBTV1NfQkFDS0VORF9MRUdB Q1kgICAgICA9ICgxIDw8IDApLCAvLy88IExlZ2FjeSBiZXNwb2tlIGZvcm1hdC1zcGVjaWZpYyBj b2RlCisrICAgIFNXU19CQUNLRU5EX1NUQUJMRSAgICAgID0gU1dTX0JBQ0tFTkRfTEVHQUNZLAor KworKyAgICAvKiBVbnN0YWJsZSBiYWNrZW5kcyAoYXV0by1zZWxlY3RlZCBvbmx5IGlmIFNXU19V TlNUQUJMRSBpcyBlbmFibGVkKSAqLworKyAgICBTV1NfQkFDS0VORF9DICAgICAgICAgICA9ICgx IDw8IDEpLCAvLy88IFRlbXBsYXRlLWJhc2VkIEMgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uCisr ICAgIFNXU19CQUNLRU5EX01FTUNQWSAgICAgID0gKDEgPDwgMiksIC8vLzwgRmFzdCBwYXRoIHVz aW5nIGxpYmMgbWVtY3B5KCkgLyBtZW1zZXQoKQorKyAgICBTV1NfQkFDS0VORF9YODYgICAgICAg ICA9ICgxIDw8IDMpLCAvLy88IENoYWluZWQgeDg2IFNJTUQga2VybmVscworKyAgICBTV1NfQkFD S0VORF9BQVJDSDY0ICAgICA9ICgxIDw8IDQpLCAvLy88IENoYWluZWQgQUFyY2g2NCBORU9OIGtl cm5lbHMKKysgICAgU1dTX0JBQ0tFTkRfU1BJUlYgICAgICAgPSAoMSA8PCA1KSwgLy8vPCBWdWxr YW4gU1BJUi1WIGJhY2tlbmQKKysgICAgU1dTX0JBQ0tFTkRfVU5TVEFCTEUgICAgPSBTV1NfQkFD S0VORF9DIHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1NfQkFDS0VORF9NRU1D UFkgfAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNXU19CQUNLRU5EX1g4NiB8Cisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dTX0JBQ0tFTkRfQUFSQ0g2NCB8CisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dTX0JBQ0tFTkRfU1BJUlYsCisrCisrICAgIFNX U19CQUNLRU5EX0FMTCA9IFNXU19CQUNLRU5EX1NUQUJMRSB8IFNXU19CQUNLRU5EX1VOU1RBQkxF LAorKyAgICBTV1NfQkFDS0VORF9NQVhfRU5VTSA9IDB4N0ZGRkZGRkYsIC8vLzwgZm9yY2Ugc2l6 ZSB0byAzMiBiaXRzLCBub3QgYSB2YWxpZCBiYWNrZW5kCisrfSBTd3NCYWNrZW5kOworKworK3R5 cGVkZWYgZW51bSBTd3NGbGFncyB7CisrICAgIC8qKgorKyAgICAgKiBSZXR1cm4gYW4gZXJyb3Ig b24gdW5kZXJzcGVjaWZpZWQgY29udmVyc2lvbnMuIFdpdGhvdXQgdGhpcyBmbGFnLAorKyAgICAg KiB1bnNwZWNpZmllZCBmaWVsZHMgYXJlIGRlZmF1bHRlZCB0byBzZW5zaWJsZSB2YWx1ZXMuCisr ICAgICAqLworKyAgICBTV1NfU1RSSUNUICAgICAgICA9IDEgPDwgMTEsCisrCisrICAgIC8qKgor KyAgICAgKiBFbWl0IHZlcmJvc2UgbG9nIG9mIHNjYWxpbmcgcGFyYW1ldGVycy4KKysgICAgICov CisrICAgIFNXU19QUklOVF9JTkZPICAgID0gMSA8PCAxMiwKKysKKysgICAgLyoqCisrICAgICAq IFBlcmZvcm0gZnVsbCBjaHJvbWEgdXBzYW1wbGluZyB3aGVuIHVwc2NhbGluZyB0byBSR0IuCisr ICAgICAqCisrICAgICAqIEZvciBleGFtcGxlLCB3aGVuIGNvbnZlcnRpbmcgNTB4NTAgeXV2NDIw cCB0byAxMDB4MTAwIHJnYmEsIHNldHRpbmcgdGhpcyBmbGFnCisrICAgICAqIHdpbGwgc2NhbGUg dGhlIGNocm9tYSBwbGFuZSBmcm9tIDI1eDI1IHRvIDEwMHgxMDAgKDQ6NDo0KSwgYW5kIHRoZW4g Y29udmVydAorKyAgICAgKiB0aGUgMTAweDEwMCB5dXY0NDRwIGltYWdlIHRvIHJnYmEgaW4gdGhl IGZpbmFsIG91dHB1dCBzdGVwLgorKyAgICAgKgorKyAgICAgKiBXaXRob3V0IHRoaXMgZmxhZywg dGhlIGNocm9tYSBwbGFuZSBpcyBpbnN0ZWFkIHNjYWxlZCB0byA1MHgxMDAgKDQ6MjoyKSwKKysg ICAgICogd2l0aCBhIHNpbmdsZSBjaHJvbWEgc2FtcGxlIGJlaW5nIHJldXNlZCBmb3IgYm90aCBv ZiB0aGUgaG9yaXpvbnRhbGx5CisrICAgICAqIGFkamFjZW50IFJHQkEgb3V0cHV0IHBpeGVscy4K KysgICAgICovCisrICAgIFNXU19GVUxMX0NIUl9IX0lOVCA9IDEgPDwgMTMsCisrCisrICAgIC8q KgorKyAgICAgKiBQZXJmb3JtIGZ1bGwgY2hyb21hIGludGVycG9sYXRpb24gd2hlbiBkb3duc2Nh bGluZyBSR0Igc291cmNlcy4KKysgICAgICoKKysgICAgICogRm9yIGV4YW1wbGUsIHdoZW4gY29u dmVydGluZyBhIDEwMHgxMDAgcmdiYSBzb3VyY2UgdG8gNTB4NTAgeXV2NDQ0cCwgc2V0dGluZwor KyAgICAgKiB0aGlzIGZsYWcgd2lsbCBnZW5lcmF0ZSBhIDEwMHgxMDAgKDQ6NDo0KSBjaHJvbWEg cGxhbmUsIHdoaWNoIGlzIHRoZW4KKysgICAgICogZG93bnNjYWxlZCB0byB0aGUgcmVxdWlyZWQg NTB4NTAuCisrICAgICAqCisrICAgICAqIFdpdGhvdXQgdGhpcyBmbGFnLCB0aGUgY2hyb21hIHBs YW5lIGlzIGluc3RlYWQgZ2VuZXJhdGVkIGF0IDUweDEwMCAoZHJvcHBpbmcKKysgICAgICogZXZl cnkgb3RoZXIgcGl4ZWwpLCBiZWZvcmUgdGhlbiBiZWluZyBkb3duc2NhbGVkIHRvIHRoZSByZXF1 aXJlZCA1MHg1MAorKyAgICAgKiByZXNvbHV0aW9uLgorKyAgICAgKi8KKysgICAgU1dTX0ZVTExf Q0hSX0hfSU5QID0gMSA8PCAxNCwKKysKKysgICAgLyoqCisrICAgICAqIEZvcmNlIGJpdC1leGFj dCBvdXRwdXQuIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSB1c2Ugb2YgcGxhdGZvcm0tc3BlY2lmaWMK KysgICAgICogb3B0aW1pemF0aW9ucyB0aGF0IG1heSBsZWFkIHRvIHNsaWdodCBkaWZmZXJlbmNl IGluIHJvdW5kaW5nLCBpbiBmYXZvcgorKyAgICAgKiBvZiBhbHdheXMgbWFpbnRhaW5pbmcgZXhh Y3QgYml0IG91dHB1dCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHJlZmVyZW5jZQorKyAgICAgKiBD IGNvZGUuCisrICAgICAqCisrICAgICAqIE5vdGU6IEl0IGlzIHJlY29tbWVuZGVkIHRvIHNldCBi b3RoIG9mIHRoZXNlIGZsYWdzIHNpbXVsdGFuZW91c2x5LgorKyAgICAgKi8KKysgICAgU1dTX0FD Q1VSQVRFX1JORCAgID0gMSA8PCAxOCwKKysgICAgU1dTX0JJVEVYQUNUICAgICAgID0gMSA8PCAx OSwKKysKKysgICAgLyoqCisrICAgICAqIEFsbG93L3ByZWZlciB1c2luZyBleHBlcmltZW50YWwg bmV3IGNvZGUgcGF0aHMuIFRoaXMgbWF5IGJlIGZhc3RlciwKKysgICAgICogc2xvd2VyLCBvciBw cm9kdWNlIGRpZmZlcmVudCBvdXRwdXQsIHdpdGggc2VtYW50aWNzIHN1YmplY3QgdG8gY2hhbmdl CisrICAgICAqIGF0IGFueSBwb2ludCBpbiB0aW1lLiBGb3IgdGVzdGluZyBhbmQgZGVidWdnaW5n IHB1cnBvc2VzIG9ubHkuCisrICAgICAqLworKyAgICBTV1NfVU5TVEFCTEUgPSAxIDw8IDIwLAor KworKyAgICAvKioKKysgICAgICogRGVwcmVjYXRlZCBmbGFncy4KKysgICAgICovCisrICAgIFNX U19ESVJFQ1RfQkdSICAgICAgPSAxIDw8IDE1LCAvLy88IFRoaXMgZmxhZyBoYXMgbm8gZWZmZWN0 CisrICAgIFNXU19FUlJPUl9ESUZGVVNJT04gPSAxIDw8IDIzLCAvLy88IFNldCBgU3dzQ29udGV4 dC5kaXRoZXJgIGluc3RlYWQKKysKKysgICAgLyoqCisrICAgICAqIFNjYWxlciBzZWxlY3Rpb24g b3B0aW9ucy4gT25seSBvbmUgbWF5IGJlIGFjdGl2ZSBhdCBhIHRpbWUuCisrICAgICAqIERlcHJl Y2F0ZWQgaW4gZmF2b3Igb2YgYFN3c0NvbnRleHQuc2NhbGVyYC4KKysgICAgICovCisrICAgIFNX U19GQVNUX0JJTElORUFSID0gMSA8PCAgMCwgLy8vPCBmYXN0IGJpbGluZWFyIGZpbHRlcmluZwor KyAgICBTV1NfQklMSU5FQVIgICAgICA9IDEgPDwgIDEsIC8vLzwgYmlsaW5lYXIgZmlsdGVyaW5n CisrICAgIFNXU19CSUNVQklDICAgICAgID0gMSA8PCAgMiwgLy8vPCAyLXRhcCBjdWJpYyBCLXNw bGluZQorKyAgICBTV1NfWCAgICAgICAgICAgICA9IDEgPDwgIDMsIC8vLzwgZXhwZXJpbWVudGFs CisrICAgIFNXU19QT0lOVCAgICAgICAgID0gMSA8PCAgNCwgLy8vPCBuZWFyZXN0IG5laWdoYm9y CisrICAgIFNXU19BUkVBICAgICAgICAgID0gMSA8PCAgNSwgLy8vPCBhcmVhIGF2ZXJhZ2luZwor KyAgICBTV1NfQklDVUJMSU4gICAgICA9IDEgPDwgIDYsIC8vLzwgYmljdWJpYyBsdW1hLCBiaWxp bmVhciBjaHJvbWEKKysgICAgU1dTX0dBVVNTICAgICAgICAgPSAxIDw8ICA3LCAvLy88IGdhdXNz aWFuIGFwcHJveGltYXRpb24KKysgICAgU1dTX1NJTkMgICAgICAgICAgPSAxIDw8ICA4LCAvLy88 IHVud2luZG93ZWQgc2luYworKyAgICBTV1NfTEFOQ1pPUyAgICAgICA9IDEgPDwgIDksIC8vLzwg My10YXAgc2luYy9zaW5jCisrICAgIFNXU19TUExJTkUgICAgICAgID0gMSA8PCAxMCwgLy8vPCB1 bndpbmRvd2VkIG5hdHVyYWwgY3ViaWMgc3BsaW5lCisrfSBTd3NGbGFnczsKKysKKyt0eXBlZGVm IGVudW0gU3dzSW50ZW50IHsKKysgICAgU1dTX0lOVEVOVF9QRVJDRVBUVUFMID0gMCwgICAgICAg ICAgICAvLy88IFBlcmNlcHR1YWwgdG9uZSBtYXBwaW5nCisrICAgIFNXU19JTlRFTlRfUkVMQVRJ VkVfQ09MT1JJTUVUUklDID0gMSwgLy8vPCBSZWxhdGl2ZSBjb2xvcmltZXRyaWMgY2xpcHBpbmcK KysgICAgU1dTX0lOVEVOVF9TQVRVUkFUSU9OID0gMiwgICAgICAgICAgICAvLy88IFNhdHVyYXRp b24gbWFwcGluZworKyAgICBTV1NfSU5URU5UX0FCU09MVVRFX0NPTE9SSU1FVFJJQyA9IDMsIC8v LzwgQWJzb2x1dGUgY29sb3JpbWV0cmljIGNsaXBwaW5nCisrICAgIFNXU19JTlRFTlRfTkIsIC8v Lzwgbm90IHBhcnQgb2YgdGhlIEFCSQorK30gU3dzSW50ZW50OworKworKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgorKyAqIENvbnRleHQgY3JlYXRpb24gYW5kIG1hbmFnZW1l bnQgKgorKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysvKioKKysg KiBNYWluIGV4dGVybmFsIEFQSSBzdHJ1Y3R1cmUuIE5ldyBmaWVsZHMgY2FuIGJlIGFkZGVkIHRv IHRoZSBlbmQgd2l0aAorKyAqIG1pbm9yIHZlcnNpb24gYnVtcHMuIFJlbW92YWwsIHJlb3JkZXJp bmcgYW5kIGNoYW5nZXMgdG8gZXhpc3RpbmcgZmllbGRzCisrICogcmVxdWlyZSBhIG1ham9yIHZl cnNpb24gYnVtcC4gc2l6ZW9mKFN3c0NvbnRleHQpIGlzIG5vdCBwYXJ0IG9mIHRoZSBBQkkuCisr ICovCisrdHlwZWRlZiBzdHJ1Y3QgU3dzQ29udGV4dCB7CisrICAgIGNvbnN0IEFWQ2xhc3MgKmF2 X2NsYXNzOworKworKyAgICAvKioKKysgICAgICogUHJpdmF0ZSBkYXRhIG9mIHRoZSB1c2VyLCBj YW4gYmUgdXNlZCB0byBjYXJyeSBhcHAgc3BlY2lmaWMgc3R1ZmYuCisrICAgICAqLworKyAgICB2 b2lkICpvcGFxdWU7CisrCisrICAgIC8qKgorKyAgICAgKiBCaXRtYXNrIG9mIFNXU18qLiBTZWUg YFN3c0ZsYWdzYCBmb3IgZGV0YWlscy4KKysgICAgICovCisrICAgIHVuc2lnbmVkIGZsYWdzOwor KworKyAgICAvKioKKysgICAgICogRXh0cmEgcGFyYW1ldGVycyBmb3IgZmluZS10dW5pbmcgY2Vy dGFpbiBzY2FsZXJzLgorKyAgICAgKi8KKysjZGVmaW5lIFNXU19OVU1fU0NBTEVSX1BBUkFNUyAy CisrICAgIGRvdWJsZSBzY2FsZXJfcGFyYW1zW1NXU19OVU1fU0NBTEVSX1BBUkFNU107CisrCisr ICAgIC8qKgorKyAgICAgKiBIb3cgbWFueSB0aHJlYWRzIHRvIHVzZSBmb3IgcHJvY2Vzc2luZywg b3IgMCBmb3IgYXV0b21hdGljIHNlbGVjdGlvbi4KKysgICAgICovCisrICAgIGludCB0aHJlYWRz OworKworKyAgICAvKioKKysgICAgICogRGl0aGVyIG1vZGUuCisrICAgICAqLworKyAgICBTd3NE aXRoZXIgZGl0aGVyOworKworKyAgICAvKioKKysgICAgICogQWxwaGEgYmxlbmRpbmcgbW9kZS4g U2VlIGBTd3NBbHBoYUJsZW5kYCBmb3IgZGV0YWlscy4KKysgICAgICovCisrICAgIFN3c0FscGhh QmxlbmQgYWxwaGFfYmxlbmQ7CisrCisrICAgIC8qKgorKyAgICAgKiBVc2UgZ2FtbWEgY29ycmVj dCBzY2FsaW5nLgorKyAgICAgKi8KKysgICAgaW50IGdhbW1hX2ZsYWc7CisrCisrICAgIC8qKgor KyAgICAgKiBEZXByZWNhdGVkIGZyYW1lIHByb3BlcnR5IG92ZXJyaWRlcywgZm9yIHRoZSBsZWdh Y3kgQVBJIG9ubHkuCisrICAgICAqCisrICAgICAqIElnbm9yZWQgYnkgc3dzX3NjYWxlX2ZyYW1l KCkgd2hlbiB1c2VkIGluIGR5bmFtaWMgbW9kZSwgaW4gd2hpY2gKKysgICAgICogY2FzZSBhbGwg cHJvcGVydGllcyBhcmUgaW5zdGVhZCB0YWtlbiBmcm9tIHRoZSBmcmFtZSBkaXJlY3RseS4KKysg ICAgICovCisrICAgIGludCBzcmNfdywgc3JjX2g7ICAvLy88IFdpZHRoIGFuZCBoZWlnaHQgb2Yg dGhlIHNvdXJjZSBmcmFtZQorKyAgICBpbnQgZHN0X3csIGRzdF9oOyAgLy8vPCBXaWR0aCBhbmQg aGVpZ2h0IG9mIHRoZSBkZXN0aW5hdGlvbiBmcmFtZQorKyAgICBpbnQgc3JjX2Zvcm1hdDsgICAg Ly8vPCBTb3VyY2UgcGl4ZWwgZm9ybWF0CisrICAgIGludCBkc3RfZm9ybWF0OyAgICAvLy88IERl c3RpbmF0aW9uIHBpeGVsIGZvcm1hdAorKyAgICBpbnQgc3JjX3JhbmdlOyAgICAgLy8vPCBTb3Vy Y2UgaXMgZnVsbCByYW5nZQorKyAgICBpbnQgZHN0X3JhbmdlOyAgICAgLy8vPCBEZXN0aW5hdGlv biBpcyBmdWxsIHJhbmdlCisrICAgIGludCBzcmNfdl9jaHJfcG9zOyAvLy88IFNvdXJjZSB2ZXJ0 aWNhbCBjaHJvbWEgcG9zaXRpb24gaW4gbHVtYSBncmlkIC8gMjU2CisrICAgIGludCBzcmNfaF9j aHJfcG9zOyAvLy88IFNvdXJjZSBob3Jpem9udGFsIGNocm9tYSBwb3NpdGlvbgorKyAgICBpbnQg ZHN0X3ZfY2hyX3BvczsgLy8vPCBEZXN0aW5hdGlvbiB2ZXJ0aWNhbCBjaHJvbWEgcG9zaXRpb24K KysgICAgaW50IGRzdF9oX2Nocl9wb3M7IC8vLzwgRGVzdGluYXRpb24gaG9yaXpvbnRhbCBjaHJv bWEgcG9zaXRpb24KKysKKysgICAgLyoqCisrICAgICAqIERlc2lyZWQgSUNDIGludGVudCBmb3Ig Y29sb3Igc3BhY2UgY29udmVyc2lvbnMuCisrICAgICAqLworKyAgICBpbnQgaW50ZW50OworKwor KyAgICAvKioKKysgICAgICogU2NhbGluZyBmaWx0ZXIuIElmIHNldCB0byBzb21ldGhpbmcgb3Ro ZXIgdGhhbiBTV1NfU0NBTEVfQVVUTywgdGhpcyB3aWxsCisrICAgICAqIG92ZXJyaWRlIHRoZSBm aWx0ZXIgaW1wbGllZCBieSBgU3dzQ29udGV4dC5mbGFnc2AuCisrICAgICAqCisrICAgICAqIE5v dGU6IERvZXMgbm90IGFmZmVjdCB0aGUgbGVnYWN5IChzdGF0ZWZ1bCkgQVBJLgorKyAgICAgKi8K KysgICAgU3dzU2NhbGVyIHNjYWxlcjsKKysKKysgICAgLyoqCisrICAgICAqIFNjYWxlciB1c2Vk IHNwZWNpZmljYWxseSBmb3IgdXAvZG93bnNhbXBsaW5nIHN1YnNhbXBsZWQgKGNocm9tYSkgcGxh bmVzLgorKyAgICAgKiBJZiBzZXQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gU1dTX1NDQUxFX0FV VE8sIHRoaXMgd2lsbCBvdmVycmlkZSB0aGUKKysgICAgICogZmlsdGVyIGltcGxpZWQgYnkgYFN3 c0NvbnRleHQuc2NhbGVyYC4gT3RoZXJ3aXNlLCB0aGUgc2FtZSBmaWx0ZXIKKysgICAgICogd2ls bCBiZSB1c2VkIGZvciBib3RoIG1haW4gc2NhbGluZyBhbmQgY2hyb21hIHN1YnNhbXBsaW5nLgor KyAgICAgKi8KKysgICAgU3dzU2NhbGVyIHNjYWxlcl9zdWI7CisrCisrICAgIC8qKgorKyAgICAg KiBCaXRtYXNrIG9mIFNXU19CQUNLRU5EXyouIElmIG5vbi16ZXJvLCB0aGlzIHdpbGwgcmVzdHJp Y3QgdGhlIGF2YWlsYWJsZQorKyAgICAgKiBiYWNrZW5kcyB0byB0aGUgc3BlY2lmaWVkIHNldC4g SWYgbGVmdCBhcyB6ZXJvLCBhIGRlZmF1bHQgc2V0IG9mCisrICAgICAqIGJhY2tlbmRzIHdpbGwg YmUgc2VsZWN0ZWQgYXV0b21hdGljYWxseSAoYmFzZWQgb24gU1dTX1VOU1RBQkxFKS4KKysgICAg ICoKKysgICAgICogTm90ZTogVGhpcyBpcyBvbmx5IHJlbGV2YW50IGZvciB0aGUgbmV3IEFQSSAo c3dzX3NjYWxlX2ZyYW1lKCkpLiBUaGUKKysgICAgICogc3RhdGVmdWwgbGVnYWN5IEFQSSBhbHdh eXMgaW1wbGllcyBTV1NfQkFDS0VORF9MRUdBQ1kuCisrICAgICAqLworKyAgICBTd3NCYWNrZW5k IGJhY2tlbmRzOworKworKyAgICAvKiBSZW1lbWJlciB0byBhZGQgbmV3IGZpZWxkcyB0byBncmFw aC5jOm9wdHNfZXF1YWwoKSAqLworK30gU3dzQ29udGV4dDsKKysKKysvKioKKysgKiBBbGxvY2F0 ZSBhbiBlbXB0eSBTd3NDb250ZXh0IGFuZCBzZXQgaXRzIGZpZWxkcyB0byBkZWZhdWx0IHZhbHVl cy4KKysgKi8KKytTd3NDb250ZXh0ICpzd3NfYWxsb2NfY29udGV4dCh2b2lkKTsKKysKKysvKioK KysgKiBGcmVlIHRoZSBjb250ZXh0IGFuZCBldmVyeXRoaW5nIGFzc29jaWF0ZWQgd2l0aCBpdCwg YW5kIHdyaXRlIE5VTEwKKysgKiB0byB0aGUgcHJvdmlkZWQgcG9pbnRlci4KKysgKi8KKyt2b2lk IHN3c19mcmVlX2NvbnRleHQoU3dzQ29udGV4dCAqKmN0eCk7CisrCisrLyoqKioqKioqKioqKioq KioqKioqKioqKioqKgorKyAqIFN1cHBvcnRlZCBmcmFtZSBmb3JtYXRzICoKKysgKioqKioqKioq KioqKioqKioqKioqKioqKioqLworKworKy8qKgorKyAqIFRlc3QgaWYgYSBnaXZlbiAoc29mdHdh cmUpIHBpeGVsIGZvcm1hdCBpcyBzdXBwb3J0ZWQgYnkgYW55IGJhY2tlbmQsCisrICogZXhjbHVk aW5nIHVuc3RhYmxlIGJhY2tlbmRzLgorKyAqCisrICogQHBhcmFtIG91dHB1dCAgSWYgMCwgdGVz dCBpZiBjb21wYXRpYmxlIHdpdGggdGhlIHNvdXJjZS9pbnB1dCBmcmFtZTsKKysgKiAgICAgICAg ICAgICAgICBvdGhlcndpc2UsIHdpdGggdGhlIGRlc3RpbmF0aW9uL291dHB1dCBmcmFtZS4KKysg KiBAcGFyYW0gZm9ybWF0ICBUaGUgZm9ybWF0IHRvIGNoZWNrLgorKyAqCisrICogQHJldHVybiBB IHBvc2l0aXZlIGludGVnZXIgaWYgc3VwcG9ydGVkLCAwIG90aGVyd2lzZS4KKysgKi8KKytpbnQg c3dzX3Rlc3RfZm9ybWF0KGVudW0gQVZQaXhlbEZvcm1hdCBmb3JtYXQsIGludCBvdXRwdXQpOwor KworKy8qKgorKyAqIFRlc3QgaWYgYSBnaXZlbiBoYXJkd2FyZSBwaXhlbCBmb3JtYXQgaXMgc3Vw cG9ydGVkIGJ5IGFueSBiYWNrZW5kLAorKyAqIGV4Y2x1ZGluZyB1bnN0YWJsZSBiYWNrZW5kcy4K KysgKgorKyAqIEBwYXJhbSBmb3JtYXQgIFRoZSBoYXJkd2FyZSBmb3JtYXQgdG8gY2hlY2ssIG9y IEFWX1BJWF9GTVRfTk9ORS4KKysgKgorKyAqIEByZXR1cm4gQSBwb3NpdGl2ZSBpbnRlZ2VyIGlm IHN1cHBvcnRlZCBvciBBVl9QSVhfRk1UX05PTkUsIDAgb3RoZXJ3aXNlLgorKyAqLworK2ludCBz d3NfdGVzdF9od19mb3JtYXQoZW51bSBBVlBpeGVsRm9ybWF0IGZvcm1hdCk7CisrCisrLyoqCisr ICogVGVzdCBpZiBhIGdpdmVuIGNvbG9yIHNwYWNlIGlzIHN1cHBvcnRlZC4KKysgKgorKyAqIEBw YXJhbSBvdXRwdXQgIElmIDAsIHRlc3QgaWYgY29tcGF0aWJsZSB3aXRoIHRoZSBzb3VyY2UvaW5w dXQgZnJhbWU7CisrICogICAgICAgICAgICAgICAgb3RoZXJ3aXNlLCB3aXRoIHRoZSBkZXN0aW5h dGlvbi9vdXRwdXQgZnJhbWUuCisrICogQHBhcmFtIGNvbG9yc3BhY2UgVGhlIGNvbG9yc3BhY2Ug dG8gY2hlY2suCisrICoKKysgKiBAcmV0dXJuIEEgcG9zaXRpdmUgaW50ZWdlciBpZiBzdXBwb3J0 ZWQsIDAgb3RoZXJ3aXNlLgorKyAqLworK2ludCBzd3NfdGVzdF9jb2xvcnNwYWNlKGVudW0gQVZD b2xvclNwYWNlIGNvbG9yc3BhY2UsIGludCBvdXRwdXQpOworKworKy8qKgorKyAqIFRlc3QgaWYg YSBnaXZlbiBzZXQgb2YgY29sb3IgcHJpbWFyaWVzIGlzIHN1cHBvcnRlZC4KKysgKgorKyAqIEBw YXJhbSBvdXRwdXQgIElmIDAsIHRlc3QgaWYgY29tcGF0aWJsZSB3aXRoIHRoZSBzb3VyY2UvaW5w dXQgZnJhbWU7CisrICogICAgICAgICAgICAgICAgb3RoZXJ3aXNlLCB3aXRoIHRoZSBkZXN0aW5h dGlvbi9vdXRwdXQgZnJhbWUuCisrICogQHBhcmFtIHByaW1hcmllcyBUaGUgY29sb3IgcHJpbWFy aWVzIHRvIGNoZWNrLgorKyAqCisrICogQHJldHVybiBBIHBvc2l0aXZlIGludGVnZXIgaWYgc3Vw cG9ydGVkLCAwIG90aGVyd2lzZS4KKysgKi8KKytpbnQgc3dzX3Rlc3RfcHJpbWFyaWVzKGVudW0g QVZDb2xvclByaW1hcmllcyBwcmltYXJpZXMsIGludCBvdXRwdXQpOworKworKy8qKgorKyAqIFRl c3QgaWYgYSBnaXZlbiBjb2xvciB0cmFuc2ZlciBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQuCisrICoK KysgKiBAcGFyYW0gb3V0cHV0ICBJZiAwLCB0ZXN0IGlmIGNvbXBhdGlibGUgd2l0aCB0aGUgc291 cmNlL2lucHV0IGZyYW1lOworKyAqICAgICAgICAgICAgICAgIG90aGVyd2lzZSwgd2l0aCB0aGUg ZGVzdGluYXRpb24vb3V0cHV0IGZyYW1lLgorKyAqIEBwYXJhbSB0cmMgICAgIFRoZSBjb2xvciB0 cmFuc2ZlciBmdW5jdGlvbiB0byBjaGVjay4KKysgKgorKyAqIEByZXR1cm4gQSBwb3NpdGl2ZSBp bnRlZ2VyIGlmIHN1cHBvcnRlZCwgMCBvdGhlcndpc2UuCisrICovCisraW50IHN3c190ZXN0X3Ry YW5zZmVyKGVudW0gQVZDb2xvclRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMgdHJjLCBpbnQgb3V0cHV0 KTsKKysKKysvKioKKysgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcnVuIGFsbCBzd3NfdGVzdF8qIGFn YWluc3QgYSBmcmFtZSwgYXMgd2VsbCBhcyB0ZXN0aW5nCisrICogdGhlIGJhc2ljIGZyYW1lIHBy b3BlcnRpZXMgZm9yIHNhbml0eS4gSWdub3JlcyBpcnJlbGV2YW50IHByb3BlcnRpZXMgLSBmb3IK KysgKiBleGFtcGxlLCBBVkNvbG9yU3BhY2UgaXMgbm90IGNoZWNrZWQgZm9yIFJHQiBmcmFtZXMu CisrICovCisraW50IHN3c190ZXN0X2ZyYW1lKGNvbnN0IEFWRnJhbWUgKmZyYW1lLCBpbnQgb3V0 cHV0KTsKKysKKysvKioKKysgKiBMaWtlIGBzd3Nfc2NhbGVfZnJhbWVgLCBidXQgd2l0aG91dCBh Y3R1YWxseSBzY2FsaW5nLiBJdCB3aWxsIGluc3RlYWQKKysgKiBtZXJlbHkgaW5pdGlhbGl6ZSBp bnRlcm5hbCBzdGF0ZSB0aGF0ICp3b3VsZCogYmUgcmVxdWlyZWQgdG8gcGVyZm9ybSB0aGUKKysg KiBvcGVyYXRpb24sIGFzIHdlbGwgYXMgcmV0dXJuaW5nIHRoZSBjb3JyZWN0IGVycm9yIGNvZGUg Zm9yIHVuc3VwcG9ydGVkCisrICogZnJhbWUgY29tYmluYXRpb25zLgorKyAqCisrICogQHBhcmFt IGN0eCAgIFRoZSBzY2FsaW5nIGNvbnRleHQuCisrICogQHBhcmFtIGRzdCAgIFRoZSBkZXN0aW5h dGlvbiBmcmFtZSB0byBjb25zaWRlci4KKysgKiBAcGFyYW0gc3JjICAgVGhlIHNvdXJjZSBmcmFt ZSB0byBjb25zaWRlci4KKysgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBBVkVS Uk9SIGNvZGUgb24gZmFpbHVyZS4KKysgKi8KKytpbnQgc3dzX2ZyYW1lX3NldHVwKFN3c0NvbnRl eHQgKmN0eCwgY29uc3QgQVZGcmFtZSAqZHN0LCBjb25zdCBBVkZyYW1lICpzcmMpOworKworKy8q KioqKioqKioqKioqKioqKioqKgorKyAqIE1haW4gc2NhbGluZyBBUEkgKgorKyAqKioqKioqKioq KioqKioqKioqKi8KKysKKysvKioKKysgKiBDaGVjayBpZiBhIGdpdmVuIGNvbnZlcnNpb24gaXMg YSBub29wLiBSZXR1cm5zIGEgcG9zaXRpdmUgaW50ZWdlciBpZgorKyAqIG5vIG9wZXJhdGlvbiBu ZWVkcyB0byBiZSBwZXJmb3JtZWQsIDAgb3RoZXJ3aXNlLgorKyAqLworK2ludCBzd3NfaXNfbm9v cChjb25zdCBBVkZyYW1lICpkc3QsIGNvbnN0IEFWRnJhbWUgKnNyYyk7CisrCisrLyoqCisrICog U2NhbGUgc291cmNlIGRhdGEgZnJvbSBgc3JjYCBhbmQgd3JpdGUgdGhlIG91dHB1dCB0byBgZHN0 YC4KKysgKgorKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZGlyZWN0bHkgb24gYW4gYWxs b2NhdGVkIGNvbnRleHQsIHdpdGhvdXQgc2V0dGluZworKyAqIHVwIGFueSBmcmFtZSBwcm9wZXJ0 aWVzIG9yIGNhbGxpbmcgYHN3c19pbml0X2NvbnRleHQoKWAuIFN1Y2ggdXNhZ2UgaXMgZnVsbHkK KysgKiBkeW5hbWljIGFuZCBkb2VzIG5vdCByZXF1aXJlIHJlYWxsb2NhdGlvbiBpZiB0aGUgZnJh bWUgcHJvcGVydGllcyBjaGFuZ2UuCisrICoKKysgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZ1bmN0 aW9uIGNhbiBiZSBjYWxsZWQgb24gYSBjb250ZXh0IHRoYXQgaGFzIGJlZW4KKysgKiBleHBsaWNp dGx5IGluaXRpYWxpemVkLiBIb3dldmVyLCB0aGlzIGlzIHByb3ZpZGVkIG9ubHkgZm9yIGJhY2t3 YXJkcworKyAqIGNvbXBhdGliaWxpdHkuIEluIHRoaXMgdXNhZ2UgbW9kZSwgYWxsIGZyYW1lIHBy b3BlcnRpZXMgbXVzdCBiZSBjb3JyZWN0bHkKKysgKiBzZXQgYXQgaW5pdCB0aW1lLCBhbmQgbWF5 IG5vIGxvbmdlciBjaGFuZ2UgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uCisrICoKKysgKiBAcGFyYW0g Y3R4ICAgVGhlIHNjYWxpbmcgY29udGV4dC4KKysgKiBAcGFyYW0gZHN0ICAgVGhlIGRlc3RpbmF0 aW9uIGZyYW1lLiBUaGUgZGF0YSBidWZmZXJzIG1heSBlaXRoZXIgYmUgYWxyZWFkeQorKyAqICAg ICAgICAgICAgICBhbGxvY2F0ZWQgYnkgdGhlIGNhbGxlciBvciBsZWZ0IGNsZWFyLCBpbiB3aGlj aCBjYXNlIHRoZXkgd2lsbAorKyAqICAgICAgICAgICAgICBiZSBhbGxvY2F0ZWQgYnkgdGhlIHNj YWxlci4gVGhlIGxhdHRlciBtYXkgaGF2ZSBwZXJmb3JtYW5jZQorKyAqICAgICAgICAgICAgICBh ZHZhbnRhZ2VzIC0gZS5nLiBpbiBjZXJ0YWluIGNhc2VzIHNvbWUgKG9yIGFsbCkgb3V0cHV0IHBs YW5lcworKyAqICAgICAgICAgICAgICBtYXkgYmUgcmVmZXJlbmNlcyB0byBpbnB1dCBwbGFuZXMs IHJhdGhlciB0aGFuIGNvcGllcy4KKysgKiBAcGFyYW0gc3JjICAgVGhlIHNvdXJjZSBmcmFtZS4g SWYgdGhlIGRhdGEgYnVmZmVycyBhcmUgc2V0IHRvIE5VTEwsIHRoZW4KKysgKiAgICAgICAgICAg ICAgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGlkZW50aWNhbGx5IHRvIGBzd3NfZnJhbWVfc2V0dXBg LgorKyAqIEByZXR1cm4gPj0gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIEFWRVJST1IgY29kZSBv biBmYWlsdXJlLgorKyAqLworK2ludCBzd3Nfc2NhbGVfZnJhbWUoU3dzQ29udGV4dCAqYywgQVZG cmFtZSAqZHN0LCBjb25zdCBBVkZyYW1lICpzcmMpOworKworKy8qKgorKyAqIEZpbHRlciBrZXJu ZWwgY3V0LW9mZiB2YWx1ZS4gVmFsdWVzIGJlbG93IHRoaXMgKGFic29sdXRlKSBtYWduaXR1ZGUK KysgKiBhcmUgY3V0IG9mZiBmcm9tIHRoZSBtYWluIGZpbHRlciBrZXJuZWwuIE5vdGUgdGhhdCB0 aGUgd2luZG93IGlzCisrICogYWx3YXlzIGFkanVzdGVkIHRvIHRoZSBuZXcgZmlsdGVyIHJhZGl1 cywgc28gdGhlcmUgd2lsbCBuZXZlciBiZQorKyAqIGFueSBzcGVjdHJhbCBsZWFrYWdlIChmb3Ig c3VpdGFibHkgd2luZG93ZWQgZmlsdGVycykuCisrICovCisrI2RlZmluZSBTV1NfTUFYX1JFRFVD RV9DVVRPRkYgMC4wMDIKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKgorKyAqIExlZ2Fj eSAoc3RhdGVmdWwpIEFQSSAqCisrICoqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrI2Rl ZmluZSBTV1NfU1JDX1ZfQ0hSX0RST1BfTUFTSyAgICAgMHgzMDAwMAorKyNkZWZpbmUgU1dTX1NS Q19WX0NIUl9EUk9QX1NISUZUICAgIDE2CisrCisrI2RlZmluZSBTV1NfUEFSQU1fREVGQVVMVCAg ICAgICAgICAgMTIzNDU2CisrCisrI2RlZmluZSBTV1NfQ1NfSVRVNzA5ICAgICAgICAgMQorKyNk ZWZpbmUgU1dTX0NTX0ZDQyAgICAgICAgICAgIDQKKysjZGVmaW5lIFNXU19DU19JVFU2MDEgICAg ICAgICA1CisrI2RlZmluZSBTV1NfQ1NfSVRVNjI0ICAgICAgICAgNQorKyNkZWZpbmUgU1dTX0NT X1NNUFRFMTcwTSAgICAgIDUKKysjZGVmaW5lIFNXU19DU19TTVBURTI0ME0gICAgICA3CisrI2Rl ZmluZSBTV1NfQ1NfREVGQVVMVCAgICAgICAgNQorKyNkZWZpbmUgU1dTX0NTX0JUMjAyMCAgICAg ICAgIDkKKysKKysvKioKKysgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHl1djwtPnJnYiBjb2VmZmlj aWVudHMgZm9yIHRoZSBnaXZlbiBjb2xvcnNwYWNlCisrICogc3VpdGFibGUgZm9yIHN3c19zZXRD b2xvcnNwYWNlRGV0YWlscygpLgorKyAqCisrICogQHBhcmFtIGNvbG9yc3BhY2UgT25lIG9mIHRo ZSBTV1NfQ1NfKiBtYWNyb3MuIElmIGludmFsaWQsCisrICogU1dTX0NTX0RFRkFVTFQgaXMgdXNl ZC4KKysgKi8KKytjb25zdCBpbnQgKnN3c19nZXRDb2VmZmljaWVudHMoaW50IGNvbG9yc3BhY2Up OworKworKy8vIHdoZW4gdXNlZCBmb3IgZmlsdGVycyB0aGV5IG11c3QgaGF2ZSBhbiBvZGQgbnVt YmVyIG9mIGVsZW1lbnRzCisrLy8gY29lZmZzIGNhbm5vdCBiZSBzaGFyZWQgYmV0d2VlbiB2ZWN0 b3JzCisrdHlwZWRlZiBzdHJ1Y3QgU3dzVmVjdG9yIHsKKysgICAgZG91YmxlICpjb2VmZjsgICAg ICAgICAgICAgIC8vLzwgcG9pbnRlciB0byB0aGUgbGlzdCBvZiBjb2VmZmljaWVudHMKKysgICAg aW50IGxlbmd0aDsgICAgICAgICAgICAgICAgIC8vLzwgbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBp biB0aGUgdmVjdG9yCisrfSBTd3NWZWN0b3I7CisrCisrLy8gdmVjdG9ycyBjYW4gYmUgc2hhcmVk CisrdHlwZWRlZiBzdHJ1Y3QgU3dzRmlsdGVyIHsKKysgICAgU3dzVmVjdG9yICpsdW1IOworKyAg ICBTd3NWZWN0b3IgKmx1bVY7CisrICAgIFN3c1ZlY3RvciAqY2hySDsKKysgICAgU3dzVmVjdG9y ICpjaHJWOworK30gU3dzRmlsdGVyOworKworKy8qKgorKyAqIFJldHVybiBhIHBvc2l0aXZlIHZh bHVlIGlmIHBpeF9mbXQgaXMgYSBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0LCAwCisrICogb3RoZXJ3 aXNlLgorKyAqLworK2ludCBzd3NfaXNTdXBwb3J0ZWRJbnB1dChlbnVtIEFWUGl4ZWxGb3JtYXQg cGl4X2ZtdCk7CisrCisrLyoqCisrICogUmV0dXJuIGEgcG9zaXRpdmUgdmFsdWUgaWYgcGl4X2Zt dCBpcyBhIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0LCAwCisrICogb3RoZXJ3aXNlLgorKyAqLwor K2ludCBzd3NfaXNTdXBwb3J0ZWRPdXRwdXQoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQpOwor KworKy8qKgorKyAqIEBwYXJhbVtpbl0gIHBpeF9mbXQgdGhlIHBpeGVsIGZvcm1hdAorKyAqIEBy ZXR1cm4gYSBwb3NpdGl2ZSB2YWx1ZSBpZiBhbiBlbmRpYW5uZXNzIGNvbnZlcnNpb24gZm9yIHBp eF9mbXQgaXMKKysgKiBzdXBwb3J0ZWQsIDAgb3RoZXJ3aXNlLgorKyAqLworK2ludCBzd3NfaXNT dXBwb3J0ZWRFbmRpYW5uZXNzQ29udmVyc2lvbihlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCk7 CisrCisrLyoqCisrICogSW5pdGlhbGl6ZSB0aGUgc3dzY2FsZXIgY29udGV4dCBzd3NfY29udGV4 dC4KKysgKgorKyAqIFRoaXMgZnVuY3Rpb24gaXMgY29uc2lkZXJlZCBkZXByZWNhdGVkLCBhbmQg cHJvdmlkZWQgb25seSBmb3IgYmFja3dhcmRzCisrICogY29tcGF0aWJpbGl0eSB3aXRoIHN3c19z Y2FsZSgpIGFuZCBzd3NfZnJhbWVfc3RhcnQoKS4gVGhlIHByZWZlcnJlZCB3YXkgdG8KKysgKiB1 c2UgbGlic3dzY2FsZSBpcyB0byBzZXQgYWxsIGZyYW1lIHByb3BlcnRpZXMgY29ycmVjdGx5IGFu ZCBjYWxsCisrICogc3dzX3NjYWxlX2ZyYW1lKCkgZGlyZWN0bHksIHdpdGhvdXQgZXhwbGljaXRs eSBpbml0aWFsaXppbmcgdGhlIGNvbnRleHQuCisrICoKKysgKiBAcmV0dXJuIHplcm8gb3IgcG9z aXRpdmUgdmFsdWUgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBvbgorKyAqIGVycm9yCisr ICovCisrYXZfd2Fybl91bnVzZWRfcmVzdWx0CisraW50IHN3c19pbml0X2NvbnRleHQoU3dzQ29u dGV4dCAqc3dzX2NvbnRleHQsIFN3c0ZpbHRlciAqc3JjRmlsdGVyLCBTd3NGaWx0ZXIgKmRzdEZp bHRlcik7CisrCisrLyoqCisrICogRnJlZSB0aGUgc3dzY2FsZXIgY29udGV4dCBzd3NDb250ZXh0 LgorKyAqIElmIHN3c0NvbnRleHQgaXMgTlVMTCwgdGhlbiBkb2VzIG5vdGhpbmcuCisrICovCisr dm9pZCBzd3NfZnJlZUNvbnRleHQoU3dzQ29udGV4dCAqc3dzQ29udGV4dCk7CisrCisrLyoqCisr ICogQWxsb2NhdGUgYW5kIHJldHVybiBhbiBTd3NDb250ZXh0LiBZb3UgbmVlZCBpdCB0byBwZXJm b3JtCisrICogc2NhbGluZy9jb252ZXJzaW9uIG9wZXJhdGlvbnMgdXNpbmcgc3dzX3NjYWxlKCku CisrICoKKysgKiBAcGFyYW0gc3JjVyB0aGUgd2lkdGggb2YgdGhlIHNvdXJjZSBpbWFnZQorKyAq IEBwYXJhbSBzcmNIIHRoZSBoZWlnaHQgb2YgdGhlIHNvdXJjZSBpbWFnZQorKyAqIEBwYXJhbSBz cmNGb3JtYXQgdGhlIHNvdXJjZSBpbWFnZSBmb3JtYXQKKysgKiBAcGFyYW0gZHN0VyB0aGUgd2lk dGggb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlCisrICogQHBhcmFtIGRzdEggdGhlIGhlaWdodCBv ZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UKKysgKiBAcGFyYW0gZHN0Rm9ybWF0IHRoZSBkZXN0aW5h dGlvbiBpbWFnZSBmb3JtYXQKKysgKiBAcGFyYW0gZmxhZ3Mgc3BlY2lmeSB3aGljaCBhbGdvcml0 aG0gYW5kIG9wdGlvbnMgdG8gdXNlIGZvciByZXNjYWxpbmcKKysgKiBAcGFyYW0gcGFyYW0gZXh0 cmEgcGFyYW1ldGVycyB0byB0dW5lIHRoZSB1c2VkIHNjYWxlcgorKyAqICAgICAgICAgICAgICBG b3IgU1dTX0JJQ1VCSUMgcGFyYW1bMF0gYW5kIFsxXSB0dW5lIHRoZSBzaGFwZSBvZiB0aGUgYmFz aXMKKysgKiAgICAgICAgICAgICAgZnVuY3Rpb24sIHBhcmFtWzBdIHR1bmVzIGYoMSkgYW5kIHBh cmFtWzFdIGbCtCgxKQorKyAqICAgICAgICAgICAgICBGb3IgU1dTX0dBVVNTIHBhcmFtWzBdIHR1 bmVzIHRoZSBleHBvbmVudCBhbmQgdGh1cyBjdXRvZmYKKysgKiAgICAgICAgICAgICAgZnJlcXVl bmN5CisrICogICAgICAgICAgICAgIEZvciBTV1NfTEFOQ1pPUyBwYXJhbVswXSB0dW5lcyB0aGUg d2lkdGggb2YgdGhlIHdpbmRvdyBmdW5jdGlvbgorKyAqIEByZXR1cm4gYSBwb2ludGVyIHRvIGFu IGFsbG9jYXRlZCBjb250ZXh0LCBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IKKysgKiBAbm90ZSB0 aGlzIGZ1bmN0aW9uIGlzIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgYSBzYW5lciBhbHRlcm5hdGl2ZSBp cworKyAqICAgICAgIHdyaXR0ZW4KKysgKi8KKytTd3NDb250ZXh0ICpzd3NfZ2V0Q29udGV4dChp bnQgc3JjVywgaW50IHNyY0gsIGVudW0gQVZQaXhlbEZvcm1hdCBzcmNGb3JtYXQsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGRzdFcsIGludCBkc3RILCBlbnVtIEFWUGl4ZWxGb3Jt YXQgZHN0Rm9ybWF0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywgU3dz RmlsdGVyICpzcmNGaWx0ZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgU3dzRmlsdGVy ICpkc3RGaWx0ZXIsIGNvbnN0IGRvdWJsZSAqcGFyYW0pOworKworKy8qKgorKyAqIFNjYWxlIHRo ZSBpbWFnZSBzbGljZSBpbiBzcmNTbGljZSBhbmQgcHV0IHRoZSByZXN1bHRpbmcgc2NhbGVkCisr ICogc2xpY2UgaW4gdGhlIGltYWdlIGluIGRzdC4gQSBzbGljZSBpcyBhIHNlcXVlbmNlIG9mIGNv bnNlY3V0aXZlCisrICogcm93cyBpbiBhbiBpbWFnZS4gUmVxdWlyZXMgYSBjb250ZXh0IHRoYXQg aGFzIHByZXZpb3VzbHkgYmVlbgorKyAqIGluaXRpYWxpemVkIHdpdGggc3dzX2luaXRfY29udGV4 dCgpLgorKyAqCisrICogU2xpY2VzIGhhdmUgdG8gYmUgcHJvdmlkZWQgaW4gc2VxdWVudGlhbCBv cmRlciwgZWl0aGVyIGluCisrICogdG9wLWJvdHRvbSBvciBib3R0b20tdG9wIG9yZGVyLiBJZiBz bGljZXMgYXJlIHByb3ZpZGVkIGluCisrICogbm9uLXNlcXVlbnRpYWwgb3JkZXIgdGhlIGJlaGF2 aW9yIG9mIHRoZSBmdW5jdGlvbiBpcyB1bmRlZmluZWQuCisrICoKKysgKiBAcGFyYW0gYyAgICAg ICAgIHRoZSBzY2FsaW5nIGNvbnRleHQgcHJldmlvdXNseSBjcmVhdGVkIHdpdGgKKysgKiAgICAg ICAgICAgICAgICAgIHN3c19nZXRDb250ZXh0KCkKKysgKiBAcGFyYW0gc3JjU2xpY2UgIHRoZSBh cnJheSBjb250YWluaW5nIHRoZSBwb2ludGVycyB0byB0aGUgcGxhbmVzIG9mCisrICogICAgICAg ICAgICAgICAgICB0aGUgc291cmNlIHNsaWNlCisrICogQHBhcmFtIHNyY1N0cmlkZSB0aGUgYXJy YXkgY29udGFpbmluZyB0aGUgc3RyaWRlcyBmb3IgZWFjaCBwbGFuZSBvZgorKyAqICAgICAgICAg ICAgICAgICAgdGhlIHNvdXJjZSBpbWFnZQorKyAqIEBwYXJhbSBzcmNTbGljZVkgdGhlIHBvc2l0 aW9uIGluIHRoZSBzb3VyY2UgaW1hZ2Ugb2YgdGhlIHNsaWNlIHRvCisrICogICAgICAgICAgICAg ICAgICBwcm9jZXNzLCB0aGF0IGlzIHRoZSBudW1iZXIgKGNvdW50ZWQgc3RhcnRpbmcgZnJvbQor KyAqICAgICAgICAgICAgICAgICAgemVybykgaW4gdGhlIGltYWdlIG9mIHRoZSBmaXJzdCByb3cg b2YgdGhlIHNsaWNlCisrICogQHBhcmFtIHNyY1NsaWNlSCB0aGUgaGVpZ2h0IG9mIHRoZSBzb3Vy Y2Ugc2xpY2UsIHRoYXQgaXMgdGhlIG51bWJlcgorKyAqICAgICAgICAgICAgICAgICAgb2Ygcm93 cyBpbiB0aGUgc2xpY2UKKysgKiBAcGFyYW0gZHN0ICAgICAgIHRoZSBhcnJheSBjb250YWluaW5n IHRoZSBwb2ludGVycyB0byB0aGUgcGxhbmVzIG9mCisrICogICAgICAgICAgICAgICAgICB0aGUg ZGVzdGluYXRpb24gaW1hZ2UKKysgKiBAcGFyYW0gZHN0U3RyaWRlIHRoZSBhcnJheSBjb250YWlu aW5nIHRoZSBzdHJpZGVzIGZvciBlYWNoIHBsYW5lIG9mCisrICogICAgICAgICAgICAgICAgICB0 aGUgZGVzdGluYXRpb24gaW1hZ2UKKysgKiBAcmV0dXJuICAgICAgICAgIHRoZSBoZWlnaHQgb2Yg dGhlIG91dHB1dCBzbGljZQorKyAqLworK2ludCBzd3Nfc2NhbGUoU3dzQ29udGV4dCAqYywgY29u c3QgdWludDhfdCAqY29uc3Qgc3JjU2xpY2VbXSwKKysgICAgICAgICAgICAgIGNvbnN0IGludCBz cmNTdHJpZGVbXSwgaW50IHNyY1NsaWNlWSwgaW50IHNyY1NsaWNlSCwKKysgICAgICAgICAgICAg IHVpbnQ4X3QgKmNvbnN0IGRzdFtdLCBjb25zdCBpbnQgZHN0U3RyaWRlW10pOworKworKy8qKgor KyAqIEluaXRpYWxpemUgdGhlIHNjYWxpbmcgcHJvY2VzcyBmb3IgYSBnaXZlbiBwYWlyIG9mIHNv dXJjZS9kZXN0aW5hdGlvbiBmcmFtZXMuCisrICogTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBj YWxscyB0byBzd3Nfc2VuZF9zbGljZSgpIGFuZCBzd3NfcmVjZWl2ZV9zbGljZSgpLgorKyAqIFJl cXVpcmVzIGEgY29udGV4dCB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4gaW5pdGlhbGl6ZWQgd2l0 aCBzd3NfaW5pdF9jb250ZXh0KCkuCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0YWlu IHJlZmVyZW5jZXMgdG8gc3JjIGFuZCBkc3QsIHNvIHRoZXkgbXVzdCBib3RoIHVzZQorKyAqIHJl ZmNvdW50ZWQgYnVmZmVycyAoaWYgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIsIGluIGNhc2Ugb2Yg ZHN0KS4KKysgKgorKyAqIEBwYXJhbSBjICAgVGhlIHNjYWxpbmcgY29udGV4dAorKyAqIEBwYXJh bSBkc3QgVGhlIGRlc3RpbmF0aW9uIGZyYW1lLgorKyAqCisrICogICAgICAgICAgICBUaGUgZGF0 YSBidWZmZXJzIG1heSBlaXRoZXIgYmUgYWxyZWFkeSBhbGxvY2F0ZWQgYnkgdGhlIGNhbGxlciBv cgorKyAqICAgICAgICAgICAgbGVmdCBjbGVhciwgaW4gd2hpY2ggY2FzZSB0aGV5IHdpbGwgYmUg YWxsb2NhdGVkIGJ5IHRoZSBzY2FsZXIuCisrICogICAgICAgICAgICBUaGUgbGF0dGVyIG1heSBo YXZlIHBlcmZvcm1hbmNlIGFkdmFudGFnZXMgLSBlLmcuIGluIGNlcnRhaW4gY2FzZXMKKysgKiAg ICAgICAgICAgIHNvbWUgb3V0cHV0IHBsYW5lcyBtYXkgYmUgcmVmZXJlbmNlcyB0byBpbnB1dCBw bGFuZXMsIHJhdGhlciB0aGFuCisrICogICAgICAgICAgICBjb3BpZXMuCisrICoKKysgKiAgICAg ICAgICAgIE91dHB1dCBkYXRhIHdpbGwgYmUgd3JpdHRlbiBpbnRvIHRoaXMgZnJhbWUgaW4gc3Vj Y2Vzc2Z1bAorKyAqICAgICAgICAgICAgc3dzX3JlY2VpdmVfc2xpY2UoKSBjYWxscy4KKysgKiBA cGFyYW0gc3JjIFRoZSBzb3VyY2UgZnJhbWUuIFRoZSBkYXRhIGJ1ZmZlcnMgbXVzdCBiZSBhbGxv Y2F0ZWQsIGJ1dCB0aGUKKysgKiAgICAgICAgICAgIGZyYW1lIGRhdGEgZG9lcyBub3QgaGF2ZSB0 byBiZSByZWFkeSBhdCB0aGlzIHBvaW50LiBEYXRhCisrICogICAgICAgICAgICBhdmFpbGFiaWxp dHkgaXMgdGhlbiBzaWduYWxsZWQgYnkgc3dzX3NlbmRfc2xpY2UoKS4KKysgKiBAcmV0dXJuIDAg b24gc3VjY2VzcywgYSBuZWdhdGl2ZSBBVkVSUk9SIGNvZGUgb24gZmFpbHVyZQorKyAqCisrICog QHNlZSBzd3NfZnJhbWVfZW5kKCkKKysgKi8KKytpbnQgc3dzX2ZyYW1lX3N0YXJ0KFN3c0NvbnRl eHQgKmMsIEFWRnJhbWUgKmRzdCwgY29uc3QgQVZGcmFtZSAqc3JjKTsKKysKKysvKioKKysgKiBG aW5pc2ggdGhlIHNjYWxpbmcgcHJvY2VzcyBmb3IgYSBwYWlyIG9mIHNvdXJjZS9kZXN0aW5hdGlv biBmcmFtZXMgcHJldmlvdXNseQorKyAqIHN1Ym1pdHRlZCB3aXRoIHN3c19mcmFtZV9zdGFydCgp LiBNdXN0IGJlIGNhbGxlZCBhZnRlciBhbGwgc3dzX3NlbmRfc2xpY2UoKQorKyAqIGFuZCBzd3Nf cmVjZWl2ZV9zbGljZSgpIGNhbGxzIGFyZSBkb25lLCBiZWZvcmUgYW55IG5ldyBzd3NfZnJhbWVf c3RhcnQoKQorKyAqIGNhbGxzLgorKyAqCisrICogQHBhcmFtIGMgICBUaGUgc2NhbGluZyBjb250 ZXh0CisrICovCisrdm9pZCBzd3NfZnJhbWVfZW5kKFN3c0NvbnRleHQgKmMpOworKworKy8qKgor KyAqIEluZGljYXRlIHRoYXQgYSBob3Jpem9udGFsIHNsaWNlIG9mIGlucHV0IGRhdGEgaXMgYXZh aWxhYmxlIGluIHRoZSBzb3VyY2UKKysgKiBmcmFtZSBwcmV2aW91c2x5IHByb3ZpZGVkIHRvIHN3 c19mcmFtZV9zdGFydCgpLiBUaGUgc2xpY2VzIG1heSBiZSBwcm92aWRlZCBpbgorKyAqIGFueSBv cmRlciwgYnV0IG1heSBub3Qgb3ZlcmxhcC4gRm9yIHZlcnRpY2FsbHkgc3Vic2FtcGxlZCBwaXhl bCBmb3JtYXRzLCB0aGUKKysgKiBzbGljZXMgbXVzdCBiZSBhbGlnbmVkIGFjY29yZGluZyB0byBz dWJzYW1wbGluZy4KKysgKgorKyAqIEBwYXJhbSBjICAgVGhlIHNjYWxpbmcgY29udGV4dAorKyAq IEBwYXJhbSBzbGljZV9zdGFydCBmaXJzdCByb3cgb2YgdGhlIHNsaWNlCisrICogQHBhcmFtIHNs aWNlX2hlaWdodCBudW1iZXIgb2Ygcm93cyBpbiB0aGUgc2xpY2UKKysgKgorKyAqIEByZXR1cm4g YSBub24tbmVnYXRpdmUgbnVtYmVyIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgQVZFUlJPUiBjb2Rl IG9uIGZhaWx1cmUuCisrICovCisraW50IHN3c19zZW5kX3NsaWNlKFN3c0NvbnRleHQgKmMsIHVu c2lnbmVkIGludCBzbGljZV9zdGFydCwKKysgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IHNsaWNlX2hlaWdodCk7CisrCisrLyoqCisrICogUmVxdWVzdCBhIGhvcml6b250YWwgc2xpY2Ug b2YgdGhlIG91dHB1dCBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgZnJhbWUKKysgKiBwcmV2 aW91c2x5IHByb3ZpZGVkIHRvIHN3c19mcmFtZV9zdGFydCgpLgorKyAqCisrICogQHBhcmFtIGMg ICBUaGUgc2NhbGluZyBjb250ZXh0CisrICogQHBhcmFtIHNsaWNlX3N0YXJ0IGZpcnN0IHJvdyBv ZiB0aGUgc2xpY2U7IG11c3QgYmUgYSBtdWx0aXBsZSBvZgorKyAqICAgICAgICAgICAgICAgICAg ICBzd3NfcmVjZWl2ZV9zbGljZV9hbGlnbm1lbnQoKQorKyAqIEBwYXJhbSBzbGljZV9oZWlnaHQg bnVtYmVyIG9mIHJvd3MgaW4gdGhlIHNsaWNlOyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YKKysgKiAg ICAgICAgICAgICAgICAgICAgIHN3c19yZWNlaXZlX3NsaWNlX2FsaWdubWVudCgpLCBleGNlcHQg Zm9yIHRoZSBsYXN0IHNsaWNlCisrICogICAgICAgICAgICAgICAgICAgICAoaS5lLiB3aGVuIHNs aWNlX3N0YXJ0K3NsaWNlX2hlaWdodCBpcyBlcXVhbCB0byBvdXRwdXQKKysgKiAgICAgICAgICAg ICAgICAgICAgIGZyYW1lIGhlaWdodCkKKysgKgorKyAqIEByZXR1cm4gYSBub24tbmVnYXRpdmUg bnVtYmVyIGlmIHRoZSBkYXRhIHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbiBpbnRvIHRoZSBvdXRw dXQKKysgKiAgICAgICAgIEFWRVJST1IoRUFHQUlOKSBpZiBtb3JlIGlucHV0IGRhdGEgbmVlZHMg dG8gYmUgcHJvdmlkZWQgYmVmb3JlIHRoZQorKyAqICAgICAgICAgICAgICAgICAgICAgICAgIG91 dHB1dCBjYW4gYmUgcHJvZHVjZWQKKysgKiAgICAgICAgIGFub3RoZXIgbmVnYXRpdmUgQVZFUlJP UiBjb2RlIG9uIG90aGVyIGtpbmRzIG9mIHNjYWxpbmcgZmFpbHVyZQorKyAqLworK2ludCBzd3Nf cmVjZWl2ZV9zbGljZShTd3NDb250ZXh0ICpjLCB1bnNpZ25lZCBpbnQgc2xpY2Vfc3RhcnQsCisr ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzbGljZV9oZWlnaHQpOworKworKy8q KgorKyAqIEdldCB0aGUgYWxpZ25tZW50IHJlcXVpcmVkIGZvciBzbGljZXMuIFJlcXVpcmVzIGEg Y29udGV4dCB0aGF0IGhhcworKyAqIHByZXZpb3VzbHkgYmVlbiBpbml0aWFsaXplZCB3aXRoIHN3 c19pbml0X2NvbnRleHQoKS4KKysgKgorKyAqIEBwYXJhbSBjICAgVGhlIHNjYWxpbmcgY29udGV4 dAorKyAqIEByZXR1cm4gYWxpZ25tZW50IHJlcXVpcmVkIGZvciBvdXRwdXQgc2xpY2VzIHJlcXVl c3RlZCB3aXRoIHN3c19yZWNlaXZlX3NsaWNlKCkuCisrICogICAgICAgICBTbGljZSBvZmZzZXRz IGFuZCBzaXplcyBwYXNzZWQgdG8gc3dzX3JlY2VpdmVfc2xpY2UoKSBtdXN0IGJlCisrICogICAg ICAgICBtdWx0aXBsZXMgb2YgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbi4K KysgKi8KKyt1bnNpZ25lZCBpbnQgc3dzX3JlY2VpdmVfc2xpY2VfYWxpZ25tZW50KGNvbnN0IFN3 c0NvbnRleHQgKmMpOworKworKy8qKgorKyAqIEBwYXJhbSBjIHRoZSBzY2FsaW5nIGNvbnRleHQK KysgKiBAcGFyYW0gZHN0UmFuZ2UgZmxhZyBpbmRpY2F0aW5nIHRoZSB3aGl0ZS1ibGFjayByYW5n ZSBvZiB0aGUgb3V0cHV0ICgxPWpwZWcgLyAwPW1wZWcpCisrICogQHBhcmFtIHNyY1JhbmdlIGZs YWcgaW5kaWNhdGluZyB0aGUgd2hpdGUtYmxhY2sgcmFuZ2Ugb2YgdGhlIGlucHV0ICgxPWpwZWcg LyAwPW1wZWcpCisrICogQHBhcmFtIHRhYmxlIHRoZSB5dXYycmdiIGNvZWZmaWNpZW50cyBkZXNj cmliaW5nIHRoZSBvdXRwdXQgeXV2IHNwYWNlLCBub3JtYWxseSBmZl95dXYycmdiX2NvZWZmc1t4 XQorKyAqIEBwYXJhbSBpbnZfdGFibGUgdGhlIHl1djJyZ2IgY29lZmZpY2llbnRzIGRlc2NyaWJp bmcgdGhlIGlucHV0IHl1diBzcGFjZSwgbm9ybWFsbHkgZmZfeXV2MnJnYl9jb2VmZnNbeF0KKysg KiBAcGFyYW0gYnJpZ2h0bmVzcyAxNi4xNiBmaXhlZCBwb2ludCBicmlnaHRuZXNzIGNvcnJlY3Rp b24KKysgKiBAcGFyYW0gY29udHJhc3QgMTYuMTYgZml4ZWQgcG9pbnQgY29udHJhc3QgY29ycmVj dGlvbgorKyAqIEBwYXJhbSBzYXR1cmF0aW9uIDE2LjE2IGZpeGVkIHBvaW50IHNhdHVyYXRpb24g Y29ycmVjdGlvbgorKyAqCisrICogQHJldHVybiBBIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZXJy b3IsIG5vbiBuZWdhdGl2ZSBvdGhlcndpc2UuCisrICogICAgICAgICBJZiBgTElCU1dTQ0FMRV9W RVJTSU9OX01BSk9SIDwgN2AsIHJldHVybnMgLTEgaWYgbm90IHN1cHBvcnRlZC4KKysgKi8KKytp bnQgc3dzX3NldENvbG9yc3BhY2VEZXRhaWxzKFN3c0NvbnRleHQgKmMsIGNvbnN0IGludCBpbnZf dGFibGVbNF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjUmFuZ2UsIGNv bnN0IGludCB0YWJsZVs0XSwgaW50IGRzdFJhbmdlLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGJyaWdodG5lc3MsIGludCBjb250cmFzdCwgaW50IHNhdHVyYXRpb24pOworKwor Ky8qKgorKyAqIEByZXR1cm4gQSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGVycm9yLCBub24gbmVn YXRpdmUgb3RoZXJ3aXNlLgorKyAqICAgICAgICAgSWYgYExJQlNXU0NBTEVfVkVSU0lPTl9NQUpP UiA8IDdgLCByZXR1cm5zIC0xIGlmIG5vdCBzdXBwb3J0ZWQuCisrICovCisraW50IHN3c19nZXRD b2xvcnNwYWNlRGV0YWlscyhTd3NDb250ZXh0ICpjLCBpbnQgKippbnZfdGFibGUsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnNyY1JhbmdlLCBpbnQgKip0YWJsZSwgaW50ICpk c3RSYW5nZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYnJpZ2h0bmVzcywg aW50ICpjb250cmFzdCwgaW50ICpzYXR1cmF0aW9uKTsKKysKKysvKioKKysgKiBBbGxvY2F0ZSBh bmQgcmV0dXJuIGFuIHVuaW5pdGlhbGl6ZWQgdmVjdG9yIHdpdGggbGVuZ3RoIGNvZWZmaWNpZW50 cy4KKysgKi8KKytTd3NWZWN0b3IgKnN3c19hbGxvY1ZlYyhpbnQgbGVuZ3RoKTsKKysKKysvKioK KysgKiBSZXR1cm4gYSBub3JtYWxpemVkIEdhdXNzaWFuIGN1cnZlIHVzZWQgdG8gZmlsdGVyIHN0 dWZmCisrICogcXVhbGl0eSA9IDMgaXMgaGlnaCBxdWFsaXR5LCBsb3dlciBpcyBsb3dlciBxdWFs aXR5LgorKyAqLworK1N3c1ZlY3RvciAqc3dzX2dldEdhdXNzaWFuVmVjKGRvdWJsZSB2YXJpYW5j ZSwgZG91YmxlIHF1YWxpdHkpOworKworKy8qKgorKyAqIFNjYWxlIGFsbCB0aGUgY29lZmZpY2ll bnRzIG9mIGEgYnkgdGhlIHNjYWxhciB2YWx1ZS4KKysgKi8KKyt2b2lkIHN3c19zY2FsZVZlYyhT d3NWZWN0b3IgKmEsIGRvdWJsZSBzY2FsYXIpOworKworKy8qKgorKyAqIFNjYWxlIGFsbCB0aGUg Y29lZmZpY2llbnRzIG9mIGEgc28gdGhhdCB0aGVpciBzdW0gZXF1YWxzIGhlaWdodC4KKysgKi8K Kyt2b2lkIHN3c19ub3JtYWxpemVWZWMoU3dzVmVjdG9yICphLCBkb3VibGUgaGVpZ2h0KTsKKysK Kyt2b2lkIHN3c19mcmVlVmVjKFN3c1ZlY3RvciAqYSk7CisrCisrU3dzRmlsdGVyICpzd3NfZ2V0 RGVmYXVsdEZpbHRlcihmbG9hdCBsdW1hR0JsdXIsIGZsb2F0IGNocm9tYUdCbHVyLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbHVtYVNoYXJwZW4sIGZsb2F0IGNocm9t YVNoYXJwZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBjaHJvbWFI U2hpZnQsIGZsb2F0IGNocm9tYVZTaGlmdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCB2ZXJib3NlKTsKKyt2b2lkIHN3c19mcmVlRmlsdGVyKFN3c0ZpbHRlciAqZmlsdGVy KTsKKysKKysvKioKKysgKiBDaGVjayBpZiBjb250ZXh0IGNhbiBiZSByZXVzZWQsIG90aGVyd2lz ZSByZWFsbG9jYXRlIGEgbmV3IG9uZS4KKysgKgorKyAqIElmIGNvbnRleHQgaXMgTlVMTCwganVz dCBjYWxscyBzd3NfZ2V0Q29udGV4dCgpIHRvIGdldCBhIG5ldworKyAqIGNvbnRleHQuIE90aGVy d2lzZSwgY2hlY2tzIGlmIHRoZSBwYXJhbWV0ZXJzIGFyZSB0aGUgb25lcyBhbHJlYWR5CisrICog c2F2ZWQgaW4gY29udGV4dC4gSWYgdGhhdCBpcyB0aGUgY2FzZSwgcmV0dXJucyB0aGUgY3VycmVu dAorKyAqIGNvbnRleHQuIE90aGVyd2lzZSwgZnJlZXMgY29udGV4dCBhbmQgZ2V0cyBhIG5ldyBj b250ZXh0IHdpdGgKKysgKiB0aGUgbmV3IHBhcmFtZXRlcnMuCisrICoKKysgKiBCZSB3YXJuZWQg dGhhdCBzcmNGaWx0ZXIgYW5kIGRzdEZpbHRlciBhcmUgbm90IGNoZWNrZWQsIHRoZXkKKysgKiBh cmUgYXNzdW1lZCB0byByZW1haW4gdGhlIHNhbWUuCisrICovCisrU3dzQ29udGV4dCAqc3dzX2dl dENhY2hlZENvbnRleHQoU3dzQ29udGV4dCAqY29udGV4dCwgaW50IHNyY1csIGludCBzcmNILAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZQaXhlbEZvcm1hdCBzcmNG b3JtYXQsIGludCBkc3RXLCBpbnQgZHN0SCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgZHN0Rm9ybWF0LCBpbnQgZmxhZ3MsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU3dzRmlsdGVyICpzcmNGaWx0ZXIsIFN3c0ZpbHRlciAq ZHN0RmlsdGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJs ZSAqcGFyYW0pOworKworKy8qKgorKyAqIENvbnZlcnQgYW4gOC1iaXQgcGFsZXR0ZWQgZnJhbWUg aW50byBhIGZyYW1lIHdpdGggYSBjb2xvciBkZXB0aCBvZiAzMiBiaXRzLgorKyAqCisrICogVGhl IG91dHB1dCBmcmFtZSB3aWxsIGhhdmUgdGhlIHNhbWUgcGFja2VkIGZvcm1hdCBhcyB0aGUgcGFs ZXR0ZS4KKysgKgorKyAqIEBwYXJhbSBzcmMgICAgICAgIHNvdXJjZSBmcmFtZSBidWZmZXIKKysg KiBAcGFyYW0gZHN0ICAgICAgICBkZXN0aW5hdGlvbiBmcmFtZSBidWZmZXIKKysgKiBAcGFyYW0g bnVtX3BpeGVscyBudW1iZXIgb2YgcGl4ZWxzIHRvIGNvbnZlcnQKKysgKiBAcGFyYW0gcGFsZXR0 ZSAgICBhcnJheSB3aXRoIFsyNTZdIGVudHJpZXMsIHdoaWNoIG11c3QgbWF0Y2ggY29sb3IgYXJy YW5nZW1lbnQgKFJHQiBvciBCR1IpIG9mIHNyYworKyAqLworK3ZvaWQgc3dzX2NvbnZlcnRQYWxl dHRlOFRvUGFja2VkMzIoY29uc3QgdWludDhfdCAqc3JjLCB1aW50OF90ICpkc3QsIGludCBudW1f cGl4ZWxzLCBjb25zdCB1aW50OF90ICpwYWxldHRlKTsKKysKKysvKioKKysgKiBDb252ZXJ0IGFu IDgtYml0IHBhbGV0dGVkIGZyYW1lIGludG8gYSBmcmFtZSB3aXRoIGEgY29sb3IgZGVwdGggb2Yg MjQgYml0cy4KKysgKgorKyAqIFdpdGggdGhlIHBhbGV0dGUgZm9ybWF0ICJBQkNEIiwgdGhlIGRl c3RpbmF0aW9uIGZyYW1lIGVuZHMgdXAgd2l0aCB0aGUgZm9ybWF0ICJBQkMiLgorKyAqCisrICog QHBhcmFtIHNyYyAgICAgICAgc291cmNlIGZyYW1lIGJ1ZmZlcgorKyAqIEBwYXJhbSBkc3QgICAg ICAgIGRlc3RpbmF0aW9uIGZyYW1lIGJ1ZmZlcgorKyAqIEBwYXJhbSBudW1fcGl4ZWxzIG51bWJl ciBvZiBwaXhlbHMgdG8gY29udmVydAorKyAqIEBwYXJhbSBwYWxldHRlICAgIGFycmF5IHdpdGgg WzI1Nl0gZW50cmllcywgd2hpY2ggbXVzdCBtYXRjaCBjb2xvciBhcnJhbmdlbWVudCAoUkdCIG9y IEJHUikgb2Ygc3JjCisrICovCisrdm9pZCBzd3NfY29udmVydFBhbGV0dGU4VG9QYWNrZWQyNChj b25zdCB1aW50OF90ICpzcmMsIHVpbnQ4X3QgKmRzdCwgaW50IG51bV9waXhlbHMsIGNvbnN0IHVp bnQ4X3QgKnBhbGV0dGUpOworKworKy8qKgorKyAqIEB9CisrICovCisrCisrI2VuZGlmIC8qIFNX U0NBTEVfU1dTQ0FMRV9IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2ZyYW1ld29y ay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJzd3NjYWxlL3ZlcnNpb24uaC5mZm1wZWc5 IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5 L2xpYnN3c2NhbGUvdmVyc2lvbi5oCistLS0gTXVzZVNjb3JlLTQuNy40L3NyYy9mcmFtZXdvcmsv bWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGlic3dzY2FsZS92ZXJzaW9uLmguZmZtcGVnOQky MDI2LTA5LTA3IDEyOjIzOjQ3LjY3OTkyNDgzMyArMDIwMAorKysrIE11c2VTY29yZS00LjcuNC9z cmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZtcGVnL3Y5L2xpYnN3c2NhbGUvdmVyc2lv bi5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjc5OTA0NDM2ICswMjAwCitAQCAtMCwwICsxLDQ0IEBA CisrLyoKKysgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisr ICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8K KysKKysjaWZuZGVmIFNXU0NBTEVfVkVSU0lPTl9ICisrI2RlZmluZSBTV1NDQUxFX1ZFUlNJT05f SAorKworKy8qKgorKyAqIEBmaWxlCisrICogc3dzY2FsZSB2ZXJzaW9uIG1hY3JvcworKyAqLwor KworKyNpbmNsdWRlICJsaWJhdnV0aWwvdmVyc2lvbi5oIgorKworKyNpbmNsdWRlICJ2ZXJzaW9u X21ham9yLmgiCisrCisrI2RlZmluZSBMSUJTV1NDQUxFX1ZFUlNJT05fTUlOT1IgICAxCisrI2Rl ZmluZSBMSUJTV1NDQUxFX1ZFUlNJT05fTUlDUk8gMTAwCisrCisrI2RlZmluZSBMSUJTV1NDQUxF X1ZFUlNJT05fSU5UICBBVl9WRVJTSU9OX0lOVChMSUJTV1NDQUxFX1ZFUlNJT05fTUFKT1IsIFwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlNXU0NB TEVfVkVSU0lPTl9NSU5PUiwgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTElCU1dTQ0FMRV9WRVJTSU9OX01JQ1JPKQorKyNkZWZpbmUgTElCU1dTQ0FM RV9WRVJTSU9OICAgICAgQVZfVkVSU0lPTihMSUJTV1NDQUxFX1ZFUlNJT05fTUFKT1IsIFwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCU1dTQ0FMRV9WRVJT SU9OX01JTk9SLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExJQlNXU0NBTEVfVkVSU0lPTl9NSUNSTykKKysjZGVmaW5lIExJQlNXU0NBTEVfQlVJTEQgICAg ICAgIExJQlNXU0NBTEVfVkVSU0lPTl9JTlQKKysKKysjZGVmaW5lIExJQlNXU0NBTEVfSURFTlQg ICAgICAgICJTd1MiIEFWX1NUUklOR0lGWShMSUJTV1NDQUxFX1ZFUlNJT04pCisrCisrI2VuZGlm IC8qIFNXU0NBTEVfVkVSU0lPTl9IICovCitkaWZmIC11cCBNdXNlU2NvcmUtNC43LjQvc3JjL2Zy YW1ld29yay9tZWRpYS90aGlyZHBhcnR5L2ZmbXBlZy92OS9saWJzd3NjYWxlL3ZlcnNpb25fbWFq b3IuaC5mZm1wZWc5IE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFy dHkvZmZtcGVnL3Y5L2xpYnN3c2NhbGUvdmVyc2lvbl9tYWpvci5oCistLS0gTXVzZVNjb3JlLTQu Ny40L3NyYy9mcmFtZXdvcmsvbWVkaWEvdGhpcmRwYXJ0eS9mZm1wZWcvdjkvbGlic3dzY2FsZS92 ZXJzaW9uX21ham9yLmguZmZtcGVnOQkyMDI2LTA5LTA3IDEyOjIzOjQ3LjY3OTk5MTMwNyArMDIw MAorKysrIE11c2VTY29yZS00LjcuNC9zcmMvZnJhbWV3b3JrL21lZGlhL3RoaXJkcGFydHkvZmZt cGVnL3Y5L2xpYnN3c2NhbGUvdmVyc2lvbl9tYWpvci5oCTIwMjYtMDktMDcgMTI6MjM6NDcuNjc5 OTc2NDMyICswMjAwCitAQCAtMCwwICsxLDM1IEBACisrLyoKKysgKiBUaGlzIGZpbGUgaXMgcGFy dCBvZiBGRm1wZWcuCisrICoKKysgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9m IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAq CisrICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5z ZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor KyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgKi8KKysKKysjaWZuZGVmIFNXU0NBTEVfVkVSU0lP Tl9NQUpPUl9ICisrI2RlZmluZSBTV1NDQUxFX1ZFUlNJT05fTUFKT1JfSAorKworKy8qKgorKyAq IEBmaWxlCisrICogc3dzY2FsZSB2ZXJzaW9uIG1hY3JvcworKyAqLworKworKyNkZWZpbmUgTElC U1dTQ0FMRV9WRVJTSU9OX01BSk9SICAgMTAKKysKKysvKioKKysgKiBGRl9BUElfKiBkZWZpbmVz IG1heSBiZSBwbGFjZWQgYmVsb3cgdG8gaW5kaWNhdGUgcHVibGljIEFQSSB0aGF0IHdpbGwgYmUK KysgKiBkcm9wcGVkIGF0IGEgZnV0dXJlIHZlcnNpb24gYnVtcC4gVGhlIGRlZmluZXMgdGhlbXNl bHZlcyBhcmUgbm90IHBhcnQgb2YKKysgKiB0aGUgcHVibGljIEFQSSBhbmQgbWF5IGNoYW5nZSwg YnJlYWsgb3IgZGlzYXBwZWFyIGF0IGFueSB0aW1lLgorKyAqLworKworKyNlbmRpZiAvKiBTV1ND QUxFX1ZFUlNJT05fTUFKT1JfSCAqLwoKZGlmZiAtLWdpdCBhL211c2VzY29yZS5zcGVjIGIvbXVz ZXNjb3JlLnNwZWMKaW5kZXggNDgyZGJiYy4uMzIwMmU1MyAxMDA2NDQKLS0tIGEvbXVzZXNjb3Jl LnNwZWMKKysrIGIvbXVzZXNjb3JlLnNwZWMKQEAgLTExLDI5ICsxMSwyOSBAQAogIyAtIFJlc2V0 IHRvIDEgaWYgdGhlIHZlcnNpb24gY2hhbmdlZAogIyAtIEluY3JlYXNlIGJ5IDEgb3RoZXJ3aXNl CiAlZ2xvYmFsIG1zY29yZV9mb250X3ZlciAgICAgICAgICAgMi4wMDMKLSVnbG9iYWwgbXNjb3Jl X2ZvbnRfcmVsICAgICAgICAgICA0MyV7P2Rpc3R9CislZ2xvYmFsIG1zY29yZV9mb250X3JlbCAg ICAgICAgICAgNDQlez9kaXN0fQogJWdsb2JhbCBtc2NvcmV0ZXh0X2ZvbnRfdmVyICAgICAgIDEu MAotJWdsb2JhbCBtc2NvcmV0ZXh0X2ZvbnRfcmVsICAgICAgIDQzJXs/ZGlzdH0KKyVnbG9iYWwg bXNjb3JldGV4dF9mb250X3JlbCAgICAgICA0NCV7P2Rpc3R9CiAlZ2xvYmFsIG11c2VzY29yZWlj b25fZm9udF92ZXIgICAgMS4wCi0lZ2xvYmFsIG11c2VzY29yZWljb25fZm9udF9yZWwgICAgNDMl ez9kaXN0fQorJWdsb2JhbCBtdXNlc2NvcmVpY29uX2ZvbnRfcmVsICAgIDQ0JXs/ZGlzdH0KICVn bG9iYWwgbXNjb3JlYmNfZm9udF92ZXIgICAgICAgICAxLjAKLSVnbG9iYWwgbXNjb3JlYmNfZm9u dF9yZWwgICAgICAgICA0MyV7P2Rpc3R9CislZ2xvYmFsIG1zY29yZWJjX2ZvbnRfcmVsICAgICAg ICAgNDQlez9kaXN0fQogJWdsb2JhbCBtc2NvcmV0YWJ1bGF0dXJlX2ZvbnRfdmVyIDAwMS4wMDAK LSVnbG9iYWwgbXNjb3JldGFidWxhdHVyZV9mb250X3JlbCA0MyV7P2Rpc3R9CislZ2xvYmFsIG1z Y29yZXRhYnVsYXR1cmVfZm9udF9yZWwgNDQlez9kaXN0fQogJWdsb2JhbCBtdXNlamF6el9mb250 X3ZlciAgICAgICAgIDEuMAotJWdsb2JhbCBtdXNlamF6el9mb250X3JlbCAgICAgICAgIDQzJXs/ ZGlzdH0KKyVnbG9iYWwgbXVzZWphenpfZm9udF9yZWwgICAgICAgICA0NCV7P2Rpc3R9CiAlZ2xv YmFsIGdvb3R2aWxsZV9mb250X3ZlciAgICAgICAgMS4zCi0lZ2xvYmFsIGdvb3R2aWxsZV9mb250 X3JlbCAgICAgICAgNDMlez9kaXN0fQorJWdsb2JhbCBnb290dmlsbGVfZm9udF9yZWwgICAgICAg IDQ0JXs/ZGlzdH0KICVnbG9iYWwgZ29vdHZpbGxlX3RleHRfZm9udF92ZXIgICAxLjIKLSVnbG9i YWwgZ29vdHZpbGxlX3RleHRfZm9udF9yZWwgICA0MyV7P2Rpc3R9CislZ2xvYmFsIGdvb3R2aWxs ZV90ZXh0X2ZvbnRfcmVsICAgNDQlez9kaXN0fQogJWdsb2JhbCBzb3VuZGZvbnRfdmVyICAgICAg ICAgICAgIDAuMi4wCi0lZ2xvYmFsIHNvdW5kZm9udF9yZWwgICAgICAgICAgICAgNDMlez9kaXN0 fQorJWdsb2JhbCBzb3VuZGZvbnRfcmVsICAgICAgICAgICAgIDQ0JXs/ZGlzdH0KIAogTmFtZTog ICAgICAgICAgIG11c2VzY29yZQogU3VtbWFyeTogICAgICAgIE11c2ljIENvbXBvc2l0aW9uICYg Tm90YXRpb24gU29mdHdhcmUKIFZlcnNpb246ICAgICAgICAle211c2VzY29yZV92ZXJ9CiAjIElN UE9SVEFOVDogQ2hhbmdlIGFsbCB0aGUgcmVsZWFzZSBudW1iZXJzIGFib3ZlLCB0b28hCi1SZWxl YXNlOiAgICAgICAgMiV7P2Rpc3R9CitSZWxlYXNlOiAgICAgICAgMyV7P2Rpc3R9CiAKICMgVGhl IE11c2VTY29yZSBwcm9qZWN0IGl0c2VsZiBpcyBHUEwtMy4wLW9ubHkgV0lUSCBGb250LWV4Y2Vw dGlvbi0yLjAuICBPdGhlcgogIyBsaWNlbnNlcyBpbiBwbGF5OgpAQCAtMjQ1LDYgKzI0NSwxMCBA QCBQYXRjaDogICAgICAgICAgJXtuYW1lfS12c3QucGF0Y2gKICMgaHR0cHM6Ly9naXRodWIuY29t L211c2VzY29yZS9NdXNlU2NvcmUvcHVsbC8zNDIwNAogUGF0Y2g6ICAgICAgICAgICV7bmFtZX0t c3R5bGVkZHJvcGRvd25uYXZpZ2F0aW9uLnBhdGNoCiAKKyMgQWRkIEZGbXBlZyA5IHN1cHBvcnQK KyMgaHR0cHM6Ly9naXRodWIuY29tL211c2VzY29yZS9tdXNlX2ZyYW1ld29yay9wdWxsLzIwMQor UGF0Y2g6ICAgICAgICAgICV7bmFtZX0tZmZtcGVnOS5wYXRjaAorCiAjIFNlZSBodHRwczovL2Zl ZG9yYXByb2plY3Qub3JnL3dpa2kvQ2hhbmdlcy9FbmNvdXJhZ2VJNjg2TGVhZlJlbW92YWwKIEV4 Y2x1ZGVBcmNoOiAgICAle2l4ODZ9CiBCdWlsZFN5c3RlbTogICAgY21ha2UKQEAgLTI4OSw3ICsy OTMsNiBAQCBCdWlsZFJlcXVpcmVzOiAgY21ha2UoUXQ2V2ViU29ja2V0cykKIEJ1aWxkUmVxdWly ZXM6ICBjbWFrZShRdDZXaWRnZXRzKQogQnVpbGRSZXF1aXJlczogIGNtYWtlKFF0NlhtbCkKIEJ1 aWxkUmVxdWlyZXM6ICBkZXNrdG9wLWZpbGUtdXRpbHMKLUJ1aWxkUmVxdWlyZXM6ICBmZm1wZWct ZnJlZS1kZXZlbAogQnVpbGRSZXF1aXJlczogIGZvbnQoYnJhdnVyYSkKIEJ1aWxkUmVxdWlyZXM6 ICBmb250KGJyYXZ1cmF0ZXh0KQogQnVpbGRSZXF1aXJlczogIGZvbnQoY2FtcGFuaWEpCkBAIC0z MTUsNyArMzE4LDYgQEAgQnVpbGRSZXF1aXJlczogIHBrZ2NvbmZpZyhmcmVldHlwZTIpCiBCdWls ZFJlcXVpcmVzOiAgcGtnY29uZmlnKGhhcmZidXp6KQogQnVpbGRSZXF1aXJlczogIHBrZ2NvbmZp ZyhsaWJsb3VpcykKIEJ1aWxkUmVxdWlyZXM6ICBwa2djb25maWcobGlib3B1c2VuYykKLUJ1aWxk UmVxdWlyZXM6ICAocGtnY29uZmlnKGxpYnBvc3Rwcm9jKSBpZiBsaWJhdmNvZGVjLWZyZWUgPCA4 LjApCiBCdWlsZFJlcXVpcmVzOiAgcGtnY29uZmlnKGxpYnBpcGV3aXJlLTAuMykKIEJ1aWxkUmVx dWlyZXM6ICBwa2djb25maWcobGlicHVsc2UpCiBCdWlsZFJlcXVpcmVzOiAgcGtnY29uZmlnKG1u eGRvbSkKQEAgLTc2OSw2ICs3NzEsMTAgQEAgRU9GCiAlZm9udGZpbGVzIC16IDkKIAogJWNoYW5n ZWxvZworKiBNb24gU2VwIDA3IDIwMjYgRG9taW5payBNaWVyemVqZXdza2kgPGRvbWluaWtAZ3Jl eXNlY3Rvci5uZXQ+IC0gNC43LjQtMworLSBCYWNrcG9ydCB1cHN0cmVhbSBQUiB0byBzdXBwb3J0 IEZGbXBlZyA5CistIERyb3AgdW5uZWNlc3NhcnkgQnVpbGRSZXF1aXJlcyBvbiBGRm1wZWcgKHVz ZXMgYnVuZGxlZCBoZWFkZXJzKQorCiAqIE1vbiBKdWwgMjAgMjAyNiBKZXJyeSBKYW1lcyA8bG9n YW5qZXJyeUBnbWFpbC5jb20+IC0gNC43LjQtMgogLSBBZGQgcGF0Y2ggdG8gZml4IFN0eWxlZERy b3Bkb3duIG51bGwgcmVmZXJlbmNlcwogCg==